Full VODs, hours long
https://www.twitch.tv/videos/<id>
Paste the VOD link as source_url. A 2-hour stream is one request and one transcript.
Send a VOD link. Get the full transcript, what happens in the video and the stream's metadata.
$5 in free credits to start. No Twitch or Kick API key needed.
Post the VOD link to one endpoint. You get a request ID right away. The transcript arrives on the job, or on your webhook, with a start and an end time on every line and speaker labels when you ask for them.
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.twitch.tv/videos/VOD_ID",
"model": "WhisperLargeV3Ct2",
"include_ts": true,
"diarize": true,
"include_metadata": true
}'
# → {"data": {"request_id": "c08a339c-…"}}
# Poll GET /api/v2/jobs/{request_id} or pass webhook_url.
import requests
response = requests.post(
"https://api.deapi.ai/api/v2/audio/transcriptions",
headers={"Authorization": "Bearer YOUR_API_TOKEN"},
json={
"source_url": "https://www.twitch.tv/videos/VOD_ID",
"model": "WhisperLargeV3Ct2",
"include_ts": True,
"diarize": True,
"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.twitch.tv/videos/VOD_ID",
model: "WhisperLargeV3Ct2",
include_ts: true,
diarize: true,
include_metadata: true,
}),
},
);
console.log(await response.json());
{
"language": "en",
"segments": [
{ "start": 2712.4, "end": 2716.9,
"speaker": "SPEAKER_00",
"text": "Quick shout-out to tonight's sponsor." },
{ "start": 2717.0, "end": 2721.3,
"speaker": "SPEAKER_01",
"text": "Code STREAM gets you twenty percent off." }
]
}
// GET /api/v2/jobs/{request_id} → data.metadata
"metadata": {
"title": "Ranked grind, sponsor at 45:00",
"uploader": "streamer_name",
"upload_date": "20260930",
"view_count": 48210,
"duration_seconds": 7214,
"chapters": [
{ "title": "Just Chatting", "start_time": 0, "end_time": 1800 }
]
}
Illustrative values. The field names are what a Twitch job returns.
Kick VODs take the same request as Twitch, at the same price. Only the link changes.
https://www.twitch.tv/videos/<id>
Paste the VOD link as source_url. A 2-hour stream is one request and one transcript.
https://kick.com/<channel>/videos/<id>
Kick VODs use the request above. Only the link changes, so both platforms run on one key and one bill.
For stream analytics and adtech teams
Brands pay streamers to talk about them. The teams tracking those campaigns need to know what was said about the sponsor, when, and what was on screen at that moment, across hundreds of thousands of VOD minutes a month.
One call returns the transcript with speaker labels and the stream's metadata.
Look for the sponsor's name or promo code. Every hit has a start and an end time.
Read the same seconds on the timeline to see what was on screen while the sponsor was mentioned.
Hand over the quote with its timestamp and a link to that moment in the VOD.
A second call on the same link returns a timeline of what happens in the video: events with a start, an end and a description, plus scene boundaries. Up to 2 hours of video per call.
Fields: events[].start, events[].end, events[].description, scenes[]. Reference in the docs.
Illustrative output. The highlighted event lines up with the sponsor mention in the transcript above.
POST /api/v2/audio/transcriptions. Turn on what you need and leave the rest off.
Parameter
Value
What it does
source_url
string · required
The Twitch or Kick VOD link.
model
string · required
The transcription model. WhisperLargeV3Ct2 adds word timestamps and speaker labels.
include_ts
boolean
A start and an end time on every line. Free.
ts_level
segment · word
A time for every line, or for every word. Word level adds 50%.
diarize
boolean
Labels who is speaking. Adds 50%. With word timestamps it is still one 50%.
lang
string · en, de, es…
Language hint. Leave it out to auto-detect across 99 languages.
include_metadata
boolean
The VOD's title, streamer, date, view count, length and category. $0.005 per request.
Set webhook_url with webhook_secret and the finished job comes to you. Full reference in the transcription docs.
One rate for Twitch and Kick, billed per second of video. The $0.005 fee per request is already in every price here.
$0.26 / h
Transcript, Twitch and Kick
+50%
Speaker labels or word timestamps
+$0.005
Stream metadata
$0.28 / h
Video understanding
List prices on the standard tier. Video understanding is a separate call, up to 2 hours of video each. All rates on the pricing page.
Build it yourself and you run a downloader, storage and a GPU for multi-hour files. Here it is one request. Read the API docs.
Hours long, one request
A 2-hour stream is one request and one transcript. You don't cut the file into chunks or stitch the text back together.
Same endpoint, same price
Only the link changes. YouTube, X and TikTok links run on the same call, under the same key.
A public link is enough
You don't register a Twitch app or keep a login alive. You send the VOD link with your deAPI key.
$5 in free credits
Run a VOD in the playground first. New accounts start with $5 in credits and no card.
Enterprise
Processing more than 1,000 hours of video or 100,000 clips a month? We set a volume price, run your jobs on a dedicated worker on our own hardware and sign an SLA. Need a platform we don't list? If the video is public, we add it.
Whole VODs, hours long, in one job. A 2-hour stream is one request.
Tell us the platforms and the hours of video you process a month.
Try one VOD in the playground. Send the rest through the API, one request per VOD.
Short clips? See TikTok transcription. Uploading files? See video to text.
Twitch and Kick VOD transcription
twitch.tv/videos/<id>) as source_url to POST /api/v2/audio/transcriptions. The call returns a request ID. Read the transcript from GET /api/v2/jobs/{request_id} or receive it on your webhook.
kick.com/<channel>/videos/<id> format. It is the same request and the same price as Twitch.
ts_level to word for a time on every word, and diarize to true to label who is speaking. Either one adds 50%, and both together still add 50%.
lang parameter, for example en.
Quick check before we generate