What is said
Every word, with the timecode
The full spoken transcript, timed to the word, with speaker labels when two people talk.
Send us a TikTok URL. We transcribe what is said, read what is shown, and return the post's metrics.
Free daily runs. No account, no card.
What a TikTok URL turns into.
Messages
Summary · you compose this
Nike Pegasus 41 running-shoe review, filmed on a treadmill. Discount code appears in the frame, never spoken.
Brand · where we found it
Nike · spoken 0:04, 0:19 · shoe recognized in frame 0:02–0:31
Speech · 0:04
“I have put 300 km on these Nike Pegasus 41…”
In frame · 0:02
Running shoe, treadmill, gym interior · overlay reads “20% OFF, CODE RUN20”
Post metrics
1,284,300 views
96,700 likes
1,842 comments
4,310 shares
12,600 saves
What is said, what the picture shows and what the post did are three signals.
What is said
The full spoken transcript, timed to the word, with speaker labels when two people talk.
What is shown
The product in shot, the brand on it, the offer in the frame. On TikTok most of that is never spoken — a transcript alone misses it.
You choose which moments to read.
What happens
Ask when the shoes come out of the box and get a time range back. The clip is described scene by scene, so you can search the picture the way you search the words.
Built for short clips — TikTok length.
Six switches decide what the response carries. Turn on what you need, leave the rest off.
Parameter
What it does
Good to know
model
string · required
Picks the transcription model. Use WhisperLargeV3Ct2 for TikTok — it is the one that can put a timestamp on every word.
Set once and forget it.
include_ts
boolean · required
Timestamps every line, so it maps to a moment in the clip.
Granularity is a separate switch — see ts_level.
ts_level
enum · default segment
By default every line gets a timestamp. Switch it to word and every single word gets one — that is what cuts a clip on an exact phrase or highlights the words as they are spoken.
A timestamp on every word runs on WhisperLargeV3Ct2 and costs more than one per line.
diarize
boolean · default false
Splits the transcript by speaker — SPEAKER_00, SPEAKER_01 — for duets and interviews.
Send it explicitly. It implies timestamps, and it does not stack with a timestamp on every word — either one alone costs the same as both.
lang
string · default auto-detect
Detected for you. Set the hint when you know it — short clips with music behind the voice.
Leave it unset and the model decides.
include_metadata
boolean · default false
Adds the post itself: author, publish date and engagement counters, joined to the transcript.
Links only — an upload has no post behind it. Full field list below.
Delivery is yours: return_result_in_response returns on the same call, or set webhook_url with webhook_secret and let the job come to you.
A timestamp on every word or speaker labels add 50% to the transcription price and do not stack; metadata adds a flat $0.005. Current rates and languages are in the docs.
A Bearer token and a URL. Poll the request id, or set webhook_url.
curl -X POST 'https://api.deapi.ai/api/v2/audio/transcriptions' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-d '{
"source_url": "https://www.tiktok.com/@account/video/1234567890123456789",
"model": "WhisperLargeV3Ct2",
"include_ts": true,
"ts_level": "word",
"include_metadata": true
}'
import requests
response = requests.post(
"https://api.deapi.ai/api/v2/audio/transcriptions",
headers={"Authorization": "Bearer YOUR_API_TOKEN"},
json={
"source_url": "https://www.tiktok.com/@account/video/1234567890123456789",
"model": "WhisperLargeV3Ct2",
"include_ts": True,
"ts_level": "word",
"diarize": False,
"include_metadata": True,
},
)
print(response.json())
const response = await fetch(
"https://api.deapi.ai/api/v2/audio/transcriptions",
{
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer YOUR_API_TOKEN",
},
body: JSON.stringify({
source_url: "https://www.tiktok.com/@account/video/1234567890123456789",
model: "WhisperLargeV3Ct2",
include_ts: true,
ts_level: "word",
include_metadata: true,
}),
},
);
console.log(await response.json());
The post's own data arrives joined to the transcript. Rank by reach, filter by date, attribute a claim — no second scrape.
id
Platform-native post identifier
title
Post title
description
Caption text as published
channel
Channel name
channel_id
Stable channel identifier
uploader
Account that published the post
duration_seconds
Source length in seconds
upload_date
Publish date
view_count
Views at fetch time
like_count
Likes at fetch time
comment_count
Comments at fetch time
repost_count
Reposts at fetch time
save_count
Saves at fetch time
webpage_url
Canonical URL of the source post
extractor
Which source handler served the request
thumbnails[]
Thumbnail variants for the post
include_metadata applies when you pass a link.
null, never dropped — your parser never has to guess whether a key will be there.
One clip or a whole category, same call. Pay per clip, fan out concurrently, and let webhooks bring the results back.
$0.020
Per clip, up to a minute
Transcript and post metadata. A timestamp on every word or speaker labels add 50% — $0.0075 at this length. Longer clips add $0.0075 a minute, flat at $0.105 past ten.
300 / min
Per endpoint, no daily cap
Any payment lifts the free tier's limits. Every route keeps its own counter, so reading the words and reading the picture do not compete.
~12 s
Link to text
Measured end to end on a 24-second TikTok: submit, download, transcribe, done.
5 platforms
One integration
TikTok, YouTube, X, Twitch and Kick on the same endpoint, plus direct upload.
A 1,000-clip sweep costs $20, and at 300 requests a minute the submissions clear in under four minutes. There is no bulk endpoint — you submit concurrently and aggregate by request_id.
Build it yourself and you own a downloader, storage and a GPU. Here it is one request. Read the API docs.
TikTok, YouTube, X, Twitch, Kick
One HTTP call in, structured JSON out. No headless browser, no cookies, no file on your disk.
Spoken audio and the picture itself
Transcription gives you the voiceover. Reading the picture gives you the product, the brand and the offer — captions give neither.
No downloader, no storage, no GPU
TikTok changes, the downloader breaks, files pile up, the GPU idles between bursts. None of that is yours here.
Playground first, code later
Run real jobs in the playground first, no account needed. New accounts get $5 in free credits, no card.
A TikTok clip runs seconds to a couple of minutes — short enough to push through a single request. That makes it the natural first place to wire a URL straight into a transcript, what the picture shows and the post's metadata.
Brand teams track thousands of mentions a week. A thumbnail and a caption say nothing about what was claimed on camera, or what was shown while it was said.
Send each mention URL and get the transcript with the post's metadata — author, date, views, likes, comments, reposts, saves. Read the picture when the claim is shown rather than spoken. Rank by reach without a second scraping call.
Social listening across platforms for brands
Consumer intelligence and mention monitoring
Social monitoring and engagement for teams
Agencies review hundreds of clips per campaign by watching them. Hooks, captions and CTAs live inside the video, so nothing is searchable and nothing carries into the next brief.
Build a searchable clip library from URLs alone. Every video returns its transcript, and reading the picture adds what was shown — products, hooks, CTA overlays. Hooks become queryable and scripts get repurposed into new cuts.
AI clipping for short-form creators
Video editing through the transcript
Social content planning for creators and agencies
The product, the price and the discount code that drive a TikTok Shop sale live in the picture, never in the voiceover. Transcript-only tools miss the entire commercial payload.
We read the frames, so products, codes, prices and shop handles come back as text you can regex. Pair them with the transcript and the engagement counters from the same link to attribute conversions and catch unauthorized discount codes.
Creator-driven shopping and affiliate storefronts
Affiliate links and creator commerce tracking
Partnership and affiliate performance management
An answer engine or an agent that reads the caption is blind to the video. What was said and what was shown never reach the index, and neither do the numbers that say which clip mattered.
One call per URL returns text a model can read: the spoken transcript, what the frame shows and the post’s own counters. Chunk it, embed it, cite it — and fan out at 300 requests a minute when you backfill a corpus.
Answer engine citing live sources
Search API built for AI agents
Web pages turned into LLM-ready data
You send the link. Download, transcription and image reading run on our GPU network — timestamps and post metadata come back in the same response.
Free daily runs, no account. Any video or audio URL works the same way — see the video transcription use case.
Send a link. Read the transcript before you write any code.
TikTok transcription, image and metadata
include_metadata and the post’s own data rides along — title, author, publish date, view, like, comment, repost and save counts.
include_ts turns timestamps on and ts_level decides how fine they are: one per line by default, or one on every word when you need to find an exact phrase. diarize adds SPEAKER_00 and SPEAKER_01 labels, so a two-person clip reads as a conversation.
lang hint to steer it on a short clip, loud background music, or a language switch in the first seconds. Current list at docs.deapi.ai.