Prefer to chat? Query the API with natural language using our AI Skill →
Give your AI tool live Cito endpoint context before you write integration code.
Public docs assistant
Tell Cito API what you are building.
Get endpoint recommendations, exact requests, code snippets, and a free-key CTA without digging through every page.
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 |