Back to Docs
TikTok Transcript API
Extract transcripts from any public TikTok video
Endpoint
POST
https://api.citoapi.com/api/v1/transcript/tiktokAuthentication
Pass your API key in the x-api-key header on every request. Learn more →
Request Body
{
"url": "https://www.tiktok.com/@username/video/123456789",
"format": "text",
"language": "en"
}| Field | Type | Required | Options / Default |
|---|---|---|---|
url | string | required | Any public TikTok URL |
format | string | optional | text · verbose · srt · vtt — default: text |
language | string | optional | ISO 639-1 code (en, es, ko…) — default: auto-detect |
Format Options
| format | Returns |
|---|---|
text | Plain transcript string |
verbose | Transcript + timestamps per segment |
srt | Ready-to-use .srt subtitle file string |
vtt | Ready-to-use .vtt subtitle file string |
Example Request
curl -X POST https://api.citoapi.com/api/v1/transcript/tiktok \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"url": "https://www.tiktok.com/@username/video/123456789",
"format": "text",
"language": "en"
}'Responses
format: "text" (default)
{
"success": true,
"data": {
"transcript": "America was built on immigration...",
"language": "en",
"duration": 53.05,
"url": "https://www.tiktok.com/@thejohndoyleshow/video/7615677174019788062",
"format": "text"
}
}format: "verbose" — includes per-segment timestamps
{
"success": true,
"data": {
"transcript": "America was built on immigration...",
"language": "en",
"duration": 53.05,
"segments": [
{ "start": 0.0, "end": 3.2, "text": "America was built on immigration" },
{ "start": 3.2, "end": 6.1, "text": "and if I'm correct Trump wife is an immigrant" }
],
"url": "https://www.tiktok.com/@thejohndoyleshow/video/7615677174019788062",
"format": "verbose"
}
}srt and vtt formats return the same shape with the transcript field containing the ready-to-use subtitle file string.
Code Examples
JavaScript
const response = await fetch('https://api.citoapi.com/api/v1/transcript/tiktok', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': 'YOUR_API_KEY'
},
body: JSON.stringify({
url: 'https://www.tiktok.com/@username/video/123456789',
format: 'text'
})
});
const { data } = await response.json();
console.log(data.transcript);Python
import requests
response = requests.post(
'https://api.citoapi.com/api/v1/transcript/tiktok',
headers={'x-api-key': 'YOUR_API_KEY'},
json={
'url': 'https://www.tiktok.com/@username/video/123456789',
'format': 'text'
}
)
print(response.json()['data']['transcript'])cURL
curl -X POST https://api.citoapi.com/api/v1/transcript/tiktok \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{"url": "https://www.tiktok.com/@username/video/123456789", "format": "text"}'Error Responses
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": ""url" is required and must be a valid TikTok URL"
}
}| Status | Code | Meaning |
|---|---|---|
400 | VALIDATION_ERROR | Missing or invalid url or format |
400 | — | Video is private or deleted |
401 | INVALID_API_KEY | Bad or missing API key |
429 | RATE_LIMIT_EXCEEDED | Too many requests |