To get a TikTok transcript with an API, send the video's link to GET /v1/tiktok/videos/transcript. The answer
holds the whole transcript as one text, plus timed segments you can turn into subtitles. It works on any public
video that has captions, with no TikTok login and no developer account.
Why TikTok's developer APIs won't do it
Not one most developers can use. TikTok's Display API returns only the signed-in user's own videos, and its Research API, which can return speech-to-text, is limited to approved non-commercial researchers. Neither gives you the transcript of an arbitrary public video for a product.
Get a transcript in one call
Set your key and base URL:
export API_KEY="your-api-key"
export API_URL="https://api.socialparse.dev"Then pass the video's link (or its id, as video_id):
curl -G -H "x-api-key: $API_KEY" "$API_URL/v1/tiktok/videos/transcript" \
--data-urlencode "url=https://www.tiktok.com/@nike/video/7587811642650545421"Short links (vm.tiktok.com/...) aren't accepted: open one in a browser and use the full link it leads to.
What comes back
{
"data": {
"video_id": "7587811642650545421",
"language": "eng-US",
"text": "Hey Caitlin, can you make it from there? Hey Caitlin, how about from here? ...",
"segments": [
{ "start": 6.14, "end": 7.24, "text": "Hey Caitlin," },
{ "start": 7.82, "end": 9.16, "text": "can you make it from there?" },
{ "start": 13.82, "end": 15.88, "text": "Hey Caitlin, how about from here?" }
]
},
"page": null,
"meta": {
"platform": "tiktok",
"endpoint": "video_transcript",
"params": { "video_id": "7587811642650545421" },
"request_id": "req_61fd34ea3abe4686",
"api_version": "v1",
"fetched_at": "2026-10-19T09:30:28Z",
"cached": false
}
}textis the whole transcript, ready for search, summaries or an LLM prompt.segmentsare the captions in order;startandendare seconds from the start of the video.languageis the caption track's language, as TikTok codes it.
The transcript is shortened here. See Responses for the envelope and meta.
Choose a caption language
Some videos carry more than one caption track: the creator's own, auto-generated ones, and translations. The
video endpoint lists them in captions, each with its language and whether it's auto
generated. Pass one as language:
curl -G -H "x-api-key: $API_KEY" "$API_URL/v1/tiktok/videos/transcript" \
--data-urlencode "video_id=7587811642650545421" \
--data-urlencode "language=eng-US"Leave language out to get the language spoken in the video.
Save it as an SRT subtitle file
The segments map straight onto SRT, the subtitle format most editors and players read:
def srt_time(seconds):
millis = round(seconds * 1000)
hours, millis = divmod(millis, 3_600_000)
minutes, millis = divmod(millis, 60_000)
secs, millis = divmod(millis, 1000)
return f"{hours:02}:{minutes:02}:{secs:02},{millis:03}"
lines = []
number = 1
for segment in transcript["segments"]:
lines.append(str(number))
lines.append(f"{srt_time(segment['start'])} --> {srt_time(segment['end'])}")
lines.append(segment["text"])
lines.append("")
number += 1
with open("video.srt", "w", encoding="utf-8") as file:
file.write("\n".join(lines))Transcripts for a whole profile
Pair the transcript endpoint with profile videos to transcribe a creator's recent uploads, for example to research a niche or index your own brand's videos:
import os
import requests
API_URL = os.environ["API_URL"]
HEADERS = {"x-api-key": os.environ["API_KEY"]}
videos = requests.get(
f"{API_URL}/v1/tiktok/profiles/videos", params={"handle": "nasa"}, headers=HEADERS, timeout=120
).json()["data"]
for video in videos:
response = requests.get(
f"{API_URL}/v1/tiktok/videos/transcript", params={"video_id": video["id"]}, headers=HEADERS, timeout=120
)
if not response.ok:
print("skipped", video["url"], response.json()["error"]["code"]) # NOT_FOUND: no captions
continue
print(video["url"])
print(response.json()["data"]["text"])
print()A profile's page holds up to 15 videos. That's one credit for the page, plus one per transcript.
Errors: no captions, private or deleted
| Answer | Why |
|---|---|
404 NOT_FOUND | The video has no captions, or it was deleted, made private or isn't shown in your region. |
400 INVALID_PARAMS | The link isn't a video link, or neither url nor video_id was sent. |
429 RATE_LIMITED | Too many calls this minute: wait as long as Retry-After says. |
Errors cost no credits. See Errors for retries.
Reddit video transcripts too
Reddit-hosted videos work the same way: the post transcript endpoint answers
with the same text and segments.
FAQ
Does this work on any TikTok video?
On any public video that has captions, including auto-generated ones. Videos without captions answer 404 NOT_FOUND.
Do I need a TikTok account or developer approval?
No. Social Parse reads public pages as a logged-out visitor. You only need an API key.
How much does a transcript cost?
One credit per transcript. New accounts get 100 free credits; see pricing.
Can I translate the transcript?
If TikTok has a translated caption track, pass its code as language. Otherwise, send text to a translation
service or LLM.
What else can I get from a TikTok video?
Views, likes, shares, saves, hashtags and its sound, from the video endpoint. See the TikTok scraper API guide for profiles and hashtags.