Skip to main content
Every analysis starts from an uploaded source. After upload completion, transcript, vision, and retake-removal commands are asynchronous: a start request returns quickly, and the result endpoint returns the current status plus any completed outputs. You can upload video or audio. Audio sources are transcript-only — 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:
The response includes: Upload the source bytes with the content_type you declared (the create response echoes it in upload_headers), then complete the upload:
Analysis commands return 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:
All four are 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.
Then start a transcript exactly as below (vision / retake-removal are not available for audio).

2. Transcript

Start transcript analysis after the project has a completed source upload.
Poll the transcript result endpoint:
Completed transcript responses include agent context for timestamp units, speaker IDs, and word index ranges.

Transcript language

language is required. Use one of the supported base tags. Supported base tags: Unsupported language tags return 422 Unprocessable Entity.

Speaker diarization

Pass diarize: true in the transcript request to run speaker diarization. It is optional and defaults to false.
Speaker data is only returned when 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.
Poll the vision result endpoint:
Completed vision responses include agent context, face observations over time, track summaries, scene timestamps, and an 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, and reason says why.
  • asd absent (null) — the job predates this record. Absent is not the same answer as ran: 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 a language, 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.
Poll the retake-removal result endpoint:
Completed responses include the original words, removal spans, and the keep intervals.

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 until status is completed or failed.
If an analysis is already queued, processing, or completed, starting the same analysis again returns the existing analysis response.