Transcription
Speech-to-text with speaker detection and timed segments.
Transcription converts video audio to text. It auto-detects language and returns timed segments, with speaker labels when distinct speakers are detected.
Transcription-only jobs get a higher duration ceiling than jobs that analyze frames — 10 minutes on Free, 30 on
Starter, 90 on Pro, 120 on Scale. The higher ceiling applies when the job requests only transcription and/or
metadata with no custom queries. Adding summary, brands, or queries drops the job to the standard video
ceiling (1 / 3 / 10 / 20 minutes).
curl -X POST https://api.netraflow.com/v1/jobs \
-H "Content-Type: application/json" \
-H "X-Api-Key: sk_live_your_key_here" \
-d '{
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"capabilities": ["transcription"]
}'{
"data": {
"job_id": "job_abc123",
"status": "completed",
"results": {
"transcription": {
"text": "We're no strangers to love. You know the rules and so do I...",
"segments": [
{
"start": 0.0,
"end": 4.8,
"text": "We're no strangers to love",
"speaker": 0
},
{
"start": 4.8,
"end": 8.2,
"text": "You know the rules and so do I",
"speaker": 0
}
],
"language": "en",
"duration_seconds": 212.0,
"word_count": 423,
"speakers_detected": 1
}
}
}
}Response fields
| Prop | Type | Description |
|---|---|---|
| text | string | Full transcription text. |
| segments | Segment[] | Timed text segments with optional speaker labels. |
| word_count | integer | Total number of words transcribed. |
| words | Word[] (optional) | Word-level timings and confidence. See below. |
| language | string (optional) | Detected language code (e.g. "en", "es"). |
| duration_seconds | number (optional) | Audio duration in seconds. |
| speakers_detected | integer (optional) | Number of distinct speakers identified. |
| no_speech | boolean (optional) | True when the audio contains no detectable speech. |
Only text, segments, and word_count are guaranteed. Everything else is optional — see the caveats below.
Videos with no speech
A silent or music-only video is a successful job, not a failure. It returns no_speech: true with text: "" and an empty segments array. On a job that also requests brands, this means no brands can be found in speech; visual detection is unaffected.
Word fields
| Prop | Type | Description |
|---|---|---|
| word | string | The word as recognized. |
| start | number | Word start time in seconds. |
| end | number | Word end time in seconds. |
| confidence | number (0-1, optional) | Recognition confidence for this word. |
| punctuated_word | string (optional) | The word with punctuation and casing applied. Fall back to word when absent. |
Segment fields
| Prop | Type | Description |
|---|---|---|
| start | number | Segment start time in seconds. |
| end | number | Segment end time in seconds. |
| text | string | Transcribed text for this segment. |
| speaker | integer | Speaker index (0-based). Present when multiple speakers are detected. |
Creator-provided captions
When a YouTube video already ships accurate captions, we use them instead of running speech-to-text — it is faster and costs you less. Caption-derived transcripts are more limited: they return text, segments, language, duration_seconds, and word_count, but no words array, no speakers_detected, and no per-segment speaker.
If you need word-level timings or speaker labels on every job, don't rely on their presence — check for the field. Jobs that also request brands always run full speech-to-text, so they always include words.