Skip to main content
POST
Create Stream

Overview

This endpoint is the entry point of the streaming lifecycle. It takes a source feed, one or more processing pipelines, and one or more output destinations, and returns a stream_id you use for every other lifecycle operation.
Supported source protocols: SRT is supported today. RTMP and HLS ingest are coming soon.

How a stream fits together

The request body is built from four blocks that reference each other by id:
1

Source

source_stream - the live feed to ingest, e.g. srt://ingest.example.com:9000. You can also use the play URL of a stream flow here.
2

Audio selections

audio_selections - name the audio track(s) of the source you want to process and declare their spoken language. Use Probe a Source Stream to discover tracks, or start with $first_audio.
3

Profiles and pipelines

processing_profiles define how audio is processed (demixing, transcription, translation, revoicing, each none, best_model, or fast_model). pipelines connect an audio selection to a profile and declare the output assets to produce, each with a language.
4

Targets

target_streams - where the processed output goes. At least one is required. Push to your own endpoint (SRT/RTMP), or let Camb.ai host the output for you (SRT listener or HLS recording).

Before you start

Collect the IDs the payload references:
The system handles multilingual inputs. If the source audio mixes several languages, set source_language to the main one spoken; the others are handled automatically.
  • Voice IDs (optional) - GET /list-voices. If you pass voice IDs, dubbed speech uses those fixed voices. If you leave them out, voices are cloned from the speakers in the source audio.
  • Dictionary IDs (optional) - GET /dictionaries for custom terminology, up to 5.
When passing fixed voice IDs, include voices of different genders and tones. The system matches each speaker in the source audio to the most suitable voice from your list, so a varied list produces better matches.
A pipeline that produces an audio output must also declare a subtitle output in the same pipeline; the transcript drives the dubbing. You do not have to route the subtitle asset to a target.

Example: dub a football match into Spanish

The example ingests the SRT feed of a football match, dubs the English commentary (1) into Spanish (54), and pushes the dubbed program (original video plus Spanish commentary) to an SRT destination of your own.
Fastest way to test: copy this payload, adjust it to your setup, and paste it into the Try it body - the form fields fill in automatically from the pasted JSON. Then press Send.
A successful request returns the stream ID and the output URLs:

Scheduling

Every stream needs an end_time (with its timezone); the stream stops automatically at that moment. start_time is optional: omit it to start right away, or set it to schedule the stream for later.
Scheduling rules:
  • Times are ISO 8601 with a UTC offset, and the timezone (IANA name) must match their offset.
  • start_time cannot be in the past and at most 7 days in the future.
  • end_time must be at least 15 minutes after the start.
To end a stream before its end_time, delete it. To extend or shorten a running stream, update its end_time.

Choosing targets

Each target lists inputs: pipeline outputs by asset_id, and untouched source tracks by passthrough_selector (e.g. v:0 for the video). Source tracks that are not replaced by a pipeline output are forwarded automatically unless you set passthrough_policy to none.

Errors

  • 402 - Insufficient credits for the requested configuration.
  • 422 - Validation error: missing required blocks, an id reference that doesn’t resolve (e.g. a pipeline referencing an unknown profile), invalid language IDs, or malformed URLs.

Authorizations

x-api-key
string
header
required

The x-api-key is a custom header required for authenticating requests to our API. Include this header in your request with the appropriate API key value to securely access our endpoints. You can find your API key(s) in the 'API' section of our studio website.

Body

application/json

Configuration for a live stream.

end_time
string<date-time>
required

When the stream stops, in ISO 8601 with a UTC offset. Required; must be at least 15 minutes after the start. To end a stream earlier, delete it; to change the end, patch it.

timezone
string
required

IANA time zone name (e.g. UTC, Europe/London) that start_time/end_time are expressed in. Its offset must match the timestamps.

audio_selections
AudioSelection · object[]
required

Named audio tracks of the source that pipelines process.

Minimum array length: 1
processing_profiles
ProcessingProfile · object[]
required

Reusable AI processing configurations referenced by pipelines.

Minimum array length: 1
pipelines
ProcessingPipeline · object[]
required

Processing pipelines connecting audio selections to profiles and outputs.

Minimum array length: 1
source_stream
SourceStream · object
required

The live source to ingest.

target_streams
TargetStream · object[]
required

Destinations for the processed output. At least one is required.

Minimum array length: 1
name
string | null

Display name for the stream. Auto-generated if omitted.

description
string | null

Free-form description of the stream.

initial_delay
integer
default:120

Seconds of setup lead time before processing starts. Larger values give the pipeline more headroom to warm up; smaller values start output sooner.

voices
integer[]

Optional voice IDs from GET /list-voices to use for dubbed speech. If provided, these fixed voices are used; if omitted or empty, voices are cloned from the speakers in the source audio. When providing voices, include different genders and tones so each speaker can be matched to the most suitable voice.

dictionaries
integer[]

Optional dictionary IDs for custom terminology (up to 5), from GET /dictionaries.

Maximum array length: 5
start_time
string<date-time> | null

Optional scheduled start in ISO 8601 with a UTC offset, e.g. 2026-08-01T19:30:00Z. If omitted, the stream starts as soon as it is created. Cannot be in the past; at most 7 days in the future.

encoding_profiles
EncodingProfile · object[] | null

Optional reusable encoding configurations referenced by target inputs.

Response

Successful Response

stream_id
integer

Identifier of the created stream, used for all lifecycle operations.

stream_url_for_languages
StreamURLForLanguages · object[]

Playback URLs for the outputs, grouped by language.

task_id
string

Identifier of the setup task; useful when contacting support.

Last modified on July 24, 2026