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
scriptandtranscript. - 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.