Docs/Utility APIs/TikTok Transcript
Back to Docs

TikTok Transcript API

Extract transcripts from any public TikTok video

Endpoint

POSThttps://api.citoapi.com/api/v1/transcript/tiktok

Authentication

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"
}
FieldTypeRequiredOptions / Default
urlstringrequiredAny public TikTok URL
formatstringoptionaltext · verbose · srt · vtt — default: text
languagestringoptionalISO 639-1 code (en, es, ko…) — default: auto-detect

Format Options

formatReturns
textPlain transcript string
verboseTranscript + timestamps per segment
srtReady-to-use .srt subtitle file string
vttReady-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"
  }
}
StatusCodeMeaning
400VALIDATION_ERRORMissing or invalid url or format
400Video is private or deleted
401INVALID_API_KEYBad or missing API key
429RATE_LIMIT_EXCEEDEDToo many requests