Scheduling & Ingestion · Ingest
Attach a live source
Register the source for a fixture and the time it comes up. We dial at ingestStartTime and begin recording. No action needed from you at kickoff.
/matches/{externalId}/ingestSupported protocols
All three are pull: we dial you. That means no inbound ports on our side and no endpoint for us to issue back to you.
| Value | Direction | Status |
|---|---|---|
SRT_CALLER | We dial your SRT listener | Supported |
RTMP_PULL | We dial your RTMP server | Supported |
HLS_PULL | We poll your .m3u8 manifest | Supported |
SRT_LISTENER | You push SRT to an endpoint we issue | Not supported |
RTMP_PUSH | You push RTMP to an endpoint we issue | Not supported |
SRT, preferred
{
"protocol": "SRT_CALLER",
"url": "srt://feed.provider.example:9001",
"ingestStartTime": 1757008800000,
"latencyMs": 200,
"audioTracks": [
{ "index": 0, "type": "PROGRAM", "language": "en", "channels": 2 },
{ "index": 1, "type": "AMBIENT", "channels": 2 }
]
}{
"id": "68b9c2110d5f8e4a72bb11",
"externalId": "g-88213",
"matchId": "68b9c1f04a2e7d3c91aa02",
"protocol": "SRT_CALLER",
"ingestStartTime": 1757008800000,
"state": "SCHEDULED"
}Attaching the identical source twice returns the existing session rather than an error, so a retried call is safe. A different source on a fixture that already has a live one returns 409 ingest_already_attached, so stop the first.
HLS
If your platform already publishes a live HLS manifest, point us at it instead. We poll the manifest and pull segments as they appear. Simpler for you to provide than SRT, at the cost of higher latency, typically two or three segment durations behind the action.
{
"protocol": "HLS_PULL",
"url": "https://live.example.com/cov-osp/master.m3u8",
"ingestStartTime": 1757008800000
}The response is identical to the SRT form. Point us at the rendition you want recorded: variant selection is not applied yet, so a master playlist is resolved by the encoder's own default rather than by your preference. Signed URLs work as long as they stay valid from ingestStartTime through the whole match; a URL that expires mid-match ends the recording.
Fields
| Field | Required | Notes |
|---|---|---|
protocol | yes | SRT_CALLER, RTMP_PULL or HLS_PULL. See the table above. |
url | yes | srt://host:port, rtmp://host/app/key, or an https:// manifest URL for HLS. SRT is checked at attach, so a malformed one fails now rather than at ingestStartTime. |
ingestStartTime | yes | Epoch ms UTC. When your feed comes up and we start dialling. Not derived from kickoff. |
audioTracks | recommended | Declares what is on each track, up to 8. Types: PROGRAM, AMBIENT, COMMENTARY, CLEAN. |
passphrase | rejected | Encrypted SRT is not supported. Sending one fails with 422 rather than being ignored. Use an unencrypted listener. |
latencyMs | SRT only | Default 200. Match your encoder's setting; 120 to 1000 accepted. |
streamId | SRT only | SRT streamid for gateways that route on it. Stored, not applied. |
headers | HLS only | Intended for tokens or basic auth on manifest and segment requests. Stored, not applied, so use a signed URL instead for now. |
variant | HLS only | highest, lowest, or an exact bandwidth value. Stored, not applied. |
Why declare audio tracks
We keep every audio track through to the clips, but we cannot tell from the transport stream which one is arena sound and which carries commentary. Declaring them means clips can be delivered with the bed you want, ambient only, so you can lay your own voiceover over crowd and pitch sound, rather than being stuck with the full mix.
Track numbering differs by transport, and we handle it: over SRT or RTMP the stream carries MPEG-TS track numbers, over HLS the renditions are tagged by language. Declare index from zero in both cases and give every non-ambient track a language.
Firewall
All three protocols have us connecting outward to you, so we need no inbound ports. For SRT and RTMP, your provider must allow inbound connections on that port from our egress range. Ask your integration contact for the current addresses before you write a firewall rule. For HLS nothing is needed beyond a publicly reachable manifest URL.