> ## Documentation Index
> Fetch the complete documentation index at: https://docs.camb.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Live Streaming Overview

> Dub, translate, and transcribe live streams in real time with the Camb.ai Streaming API.

The Streaming API takes a live feed, processes it with Camb.ai's AI pipeline
in real time, and publishes the results to the destinations you choose: dub a
football match's commentary into Spanish as it happens, push the dubbed feed
to YouTube, and
keep an HLS recording, all from one API call.

<Info>
  **Supported source protocols:** SRT is supported today. RTMP and HLS ingest
  are coming soon.
</Info>

## The streaming lifecycle

<Steps>
  <Step title="Probe (optional)">
    [`POST /stream/probe/`](probe-stream) - inspect the source and discover
    its video, audio, and data tracks.
  </Step>

  <Step title="Create">
    [`POST /stream`](create-new-stream) - configure source, pipelines, and
    targets. You get back a `stream_id` and output URLs.
  </Step>

  <Step title="Monitor">
    [`GET /stream/{stream_id}`](get-stream-status) - poll the stream status
    and read the state and playback URLs of each output.
  </Step>

  <Step title="Adjust">
    [`PATCH /stream/{stream_id}`](update-stream) - reschedule, reconfigure,
    or apply live adjustments such as turning dubbing on and off.
  </Step>

  <Step title="End">
    [`DELETE /stream/{stream_id}`](delete-stream) - stop the stream, or let
    it end automatically at its `end_time`.
  </Step>
</Steps>

## Core concepts

A stream's configuration is a small graph of blocks that reference each other
by `id`:

| Block                 | What it does                                                                                                        |
| --------------------- | ------------------------------------------------------------------------------------------------------------------- |
| `source_stream`       | The live feed to ingest (an SRT URL, or a [flow](create-flow)'s play URL).                                          |
| `audio_selections`    | Names the source audio track(s) to process and their spoken language.                                               |
| `processing_profiles` | How audio is processed: demixing, transcribing, translating, revoicing, each `none`, `best_model`, or `fast_model`. |
| `pipelines`           | Connect one audio selection to one profile and declare output assets (dubbed audio, subtitles) per language.        |
| `target_streams`      | Where outputs go: your SRT/RTMP endpoints, YouTube, or Camb.ai-hosted SRT/HLS outputs.                              |

Language and voice choices are numeric IDs from the platform's catalog
endpoints: [`/source-languages`](/api-reference/endpoint/get-source-languages),
[`/target-languages`](/api-reference/endpoint/get-target-languages), and
[`/list-voices`](/api-reference/endpoint/list-voices).

## Stream flows

[Flows](create-flow) are standing SRT endpoints hosted by Camb.ai,
independent of any single stream. Use a flow when you want a stable ingest
point for your encoder (**listener** mode) or want Camb.ai to pull from your
infrastructure and re-serve it (**caller** mode), then plug the flow's URL
into any stream as its source or target.

## Authentication

Every request needs your API key in the `x-api-key` header. You can find your
API key(s) in the API section of the Camb.ai studio.

```bash theme={null}
curl -H "x-api-key: YOUR_API_KEY" "https://client.camb.ai/apis/stream/1234"
```

## Endpoints

| Endpoint                                       | Purpose                                 |
| ---------------------------------------------- | --------------------------------------- |
| [`POST /stream`](create-new-stream)            | Create a stream                         |
| [`GET /stream/{stream_id}`](get-stream-status) | Get stream status                       |
| [`PATCH /stream/{stream_id}`](update-stream)   | Update a stream / toggle dubbing        |
| [`DELETE /stream/{stream_id}`](delete-stream)  | Terminate a running or scheduled stream |
| [`POST /stream/probe/`](probe-stream)          | Inspect a source                        |
| [`POST /flows`](create-flow)                   | Create an SRT flow                      |
| [`GET /flows`](list-flows)                     | List SRT flows                          |
| [`GET /flows/{flow_id}`](get-flow)             | Get an SRT flow                         |
| [`PATCH /flows/{flow_id}`](update-flow)        | Update an SRT flow                      |
| [`DELETE /flows/{flow_id}`](delete-flow)       | Delete an SRT flow                      |
