LinkDigest ·

Douyin video transcript API: the spoken script (文案) of any Douyin video, with timestamps

Short answer: Douyin (抖音) publishes no captions and refuses web requests its app did not sign, so a server cannot just fetch a video's words. LinkDigest reads a Douyin link through Douyin's own embed player — the page it publishes for other sites — transcribes the speech and returns it as timed segments. Ask for depth: "script" and you get the spoken script only, for 1 credit per started 2 minutes: a 5-minute video is 3 credits. No Douyin account, no cookies.

Disclosure: LinkDigest is the author's own service.

Script only, or the whole video

Depth What is read A 5-minute video
script The speech only — the 文案 / 口播 3 credits
transcript The whole transcript plus about a frame a minute 4 credits
full (default) Transcript plus frames sampled densely: on-screen text (花字, captions), with times 6 credits

Without a depth, a request whose ask is about the words only — "文案", "口播", "逐字稿", "script" — is read at script.

One call

curl -X POST https://linkdigest.dev/api/v1/digest \
  -H "Authorization: Bearer ld_live_..." \
  -H "Content-Type: application/json" \
  -d '{"url": "https://v.douyin.com/xxxxxxx/", "depth": "script", "format": "json"}'

Videos longer than about a minute usually answer 202 with a job id first:

import requests

KEY = "ld_live_..."
H = {"Authorization": f"Bearer {KEY}"}
r = requests.post("https://linkdigest.dev/api/v1/digest", headers=H,
                  json={"url": "https://v.douyin.com/xxxxxxx/", "depth": "script", "format": "json"}).json()
while r.get("pending"):
    r = requests.get("https://linkdigest.dev" + r["poll"] + "&wait=20", headers=H).json()

print("\n".join(f'{s["t"]:>5.0f}s  {s["text"]}' for s in r["transcript"]))

The pasted share text (7.32 复制打开抖音,看看【…】 https://v.douyin.com/… …) works as it is. A real run on production, 2026-10-28: a 45-second 口播 video asked "帮我提取文案" with no depth was read at script and came back as 3 timed segments; coverage.not_captured said frames were not read.

In an agent

Add the MCP server once — claude mcp add --transport http linkdigest https://linkdigest.dev/mcp --header "Authorization: Bearer ld_live_..." — and paste Douyin links into Claude Code or Cursor; digest_url takes the same depth.

Limits, said plainly

  • Accuracy is speech recognition's: clear speech is good; dialects, people talking over each other and loud music cause errors.
  • Some videos are not served by Douyin's embed player to other sites. Those are refused and not charged; save the video in the app and upload it, or read it with the browser extension on your own tab.
  • Length caps: 60 minutes on the free plan, 2 hours on paid plans, at script and transcript.
  • No watermark-free video download — the output is text.

Price

10 free credits on sign-up, no card — about 20 minutes of Douyin video at script. Links anyone has read before are free; reads that fail are free. Packs are one-time: 50 credits for $1.50 or ¥9.9 by Alipay. More: Douyin coverage · why ChatGPT can't open these links · what a Douyin share text contains. Details: pricing · docs · Chinese social media API.


This is the write-up behind LinkDigest, which does the above as a hosted service — with an MCP server for Claude Code and Cursor, a REST API, and 10 free credits to try it.