vision and retake-removal return 422 Unprocessable Entity. Set content_type to the audio type you are uploading (e.g. audio/mpeg); see Allowed upload content types. For audio, the upload-complete response reports width and height as null and a source.media_kind of audio.
1. Upload source video or audio
Create an upload project:
Upload the source bytes with the
content_type you declared (the create response echoes it in upload_headers), then complete the upload:
409 Conflict until upload completion succeeds. The completed upload response includes source metadata so you can confirm which source the project points to. For audio, width and height are null and source.media_kind is "audio".
GET /v1/projects/{project_id} returns the same billing-basis fields — duration, source_size_bytes, width, height — so you can re-check them at any point in a project’s life without repeating the upload/complete call:
null until upload/complete has probed the source; width and height stay null for audio.
Audio example (transcript-only)
Upload an mp3 and transcribe it. Audio sources accept transcript only —vision and retake-removal return 422.
vision / retake-removal are not available for audio).
2. Transcript
Start transcript analysis after the project has a completed source upload.Transcript language
language is required. Use one of the supported base tags.
Supported base tags:
Unsupported language tags return
422 Unprocessable Entity.
Speaker diarization
Passdiarize: true in the transcript request to run speaker diarization. It is optional and defaults to false.
diarize: true. With diarization off (the default), the
speakers array is empty and the speaker field is omitted from words and utterances — you
still get text, word timings, and utterance segmentation. Request diarize: true to receive
per-word speaker labels and speaker summaries.
Diarization is billed separately as an add-on to the transcript charge. See Credit billing for the current rate.
3. Vision
Start vision analysis with the outputs your app needs.asd record describing whether active-speaker detection ran.
Active-speaker detection (asd)
When active-speaker detection scores a face, that detection carries a speak_conf
between 0 and 1. Detections that were never scored omit the field entirely — so
without asd, “active-speaker detection never ran”, “it ran and scored nothing” and
“it failed” all look identical in the response.
The asd object tells them apart:
How to read it:
ran: true,carried > 0— active-speaker confidences are present; use them.ran: true,carried: 0— it ran and scored nothing on this footage.ran: false— it never ran, andreasonsays why.asdabsent (null) — the job predates this record. Absent is not the same answer asran: false; do not treat them as equivalent.
Active-speaker detection needs at least two simultaneously tracked faces to compare.
Footage with a single speaker on screen therefore produces no
speak_conf, and that
is expected rather than a failure — asd is how you tell the difference.4. Retake removal
Retake removal requires alanguage, one of the same languages as transcript. It analyzes transcript-like word timing and returns the word spans to remove plus keep intervals for a clean read.
Requested outputs
The transcript and vision outputs above are the values accepted in each command’s
requested_outputs. Retake removal has no requested_outputs selector and always returns words, remove_spans, and keep_intervals. agent_context and the vision response’s asd record are not selectable — they are always included in completed responses.
Polling pattern
Poll untilstatus is completed or failed.
queued, processing, or completed, starting the same analysis again returns the existing analysis response.
