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.

Open AI Skill

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.

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