Create a live channel
const url = 'https://api.iomza.com/v1/live/channels';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"name":"Sunday service","recording":true,"dvr_minutes":1,"max_duration_minutes":1,"ingest_allowed_ips":["example"],"ingest_allowed_countries":["example"]}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.iomza.com/v1/live/channels \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "name": "Sunday service", "recording": true, "dvr_minutes": 1, "max_duration_minutes": 1, "ingest_allowed_ips": [ "example" ], "ingest_allowed_countries": [ "example" ] }'A channel to stream to from OBS or any RTMP encoder: point it at ingest.url with ingest.stream_key, and viewers play playback.hls or playback.dash (or the DVR URLs, to rewind). The stream key is shown only here and when rotated. The channel keeps its key, settings and URLs from one event to the next. Use a keyframe every second in the encoder.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”object
What the channel is for, to recognize it.
Keep the whole session when it ends: its playback URLs then play it from the start, as video on demand, for 24 hours. true by default; a change applies to a stream on air too.
How far back viewers may rewind on the DVR URLs, in minutes (1–120). 30 by default. A change reaches a stream on air within seconds: a longer window grows from then on, a shorter one drops its oldest part at once.
The longest session, in minutes: the stream is stopped there. Up to your plan’s longest event (by default, the plan’s). A change applies to a stream on air too, counted from its start.
Only encoders at these IPv4 addresses or ranges (CIDR) may stream to this channel: at most 50. Empty, the default: any. Applies from the next connection; a stream on air goes on.
Only encoders in these countries (ISO 3166-1 alpha-2) may stream to this channel: at most 50. Empty, the default: any. An address whose country isn’t known is refused, and countries come from a database that can be wrong or be avoided with a VPN. With addresses too, an encoder must meet both. Applies from the next connection; a stream on air goes on.
Responses
Section titled “Responses”The channel, with its stream key.
A channel with its stream key: shown only when the channel is created or its key rotated.
object
preparing: the channel is being set up, which can take a few minutes; its encoder is refused until then. idle: waiting for an encoder. live: streaming now. reconnecting: its encoder dropped during a stream and the stream waits up to 5 minutes for it to come back (viewers keep the DVR). stopped: refusing its encoder (see stopped_until).
Until when it refuses its encoder after a stop; null with status stopped: until reactivated.
object
The stream key: OBS’s “Stream Key”. Keep it secret: whoever has it can stream to the channel.
Where the encoder streams to, encrypted (RTMPS): OBS’s “Server”.
The same without encryption (RTMP), for encoders that don’t support RTMPS. The stream key travels in the clear.
Where the encoder streams to over SRT, which holds up better on unstable networks: replace {stream_key} with the stream key, it goes in this address. The stream key travels in the clear.
The stream key’s last characters, to recognize it.
Whether GET …/stream-key can show the key; false for an old key: rotate it once to get one that can.
Where a channel is played from: HLS and DASH, live at the edge or with the DVR window.
object
HLS at the live edge (the last seconds): for players that only follow the live stream.
DASH at the live edge.
HLS with the DVR window, to rewind (dvr_minutes).
DASH with the DVR window.
Whether sessions are kept whole when they end (the playback URLs then play them from the start).
How far back viewers may rewind on the DVR URLs, in minutes (1–120).
The longest session, in minutes.
When its session on air started; null when it isn’t on air.
Only encoders at these IPv4 addresses or ranges may stream to it; empty: any.
Only encoders in these countries may stream to it; empty: any.
Example
{ "object": "live_channel", "status": "preparing"}Invalid fields: details lists each problem with its path.
object
object
Stable: branch on it.
English, for people; may change.
Each problem, as path: message (validation errors).
Example
{ "error": { "code": "validation_error" }}The API key is missing, invalid or revoked.
object
object
Stable: branch on it.
English, for people; may change.
Each problem, as path: message (validation errors).
Example
{ "error": { "code": "validation_error" }}The plan doesn’t allow it (minutes this month, file size: quota_exceeded), or the balance is used up and has to be topped up (insufficient_balance).
object
object
Stable: branch on it.
English, for people; may change.
Each problem, as path: message (validation errors).
Example
{ "error": { "code": "validation_error" }}Valid credentials that may not do this (forbidden), your plan doesn’t include the module the route belongs to (module_not_in_plan), or your organization is suspended (organization_suspended).
object
object
Stable: branch on it.
English, for people; may change.
Each problem, as path: message (validation errors).
Example
{ "error": { "code": "validation_error" }}Too many requests: wait and retry. Answered by the gateway, so the body may differ.
object
object
Stable: branch on it.
English, for people; may change.
Each problem, as path: message (validation errors).
Example
{ "error": { "code": "validation_error" }}Ours: retry, and tell us if it persists.
object
object
Stable: branch on it.
English, for people; may change.
Each problem, as path: message (validation errors).
Example
{ "error": { "code": "validation_error" }}Momentarily unavailable: retry in a few seconds.
object
object
Stable: branch on it.
English, for people; may change.
Each problem, as path: message (validation errors).
Example
{ "error": { "code": "validation_error" }}