Create Live Streams Channels
Creating live stream channels using the API
This guide shows how to create a live channel with POST /v2/channel, read encoder settings from the response, and start publishing.
All examples usehttps://developer.dacast.comas the API host. Authenticate withX-Api-Keyand sendX-Format: default. JSON request bodies must includeContent-Type: application/json. A successful create returns 201.
You typically need:
title- channel name (required)description- short descriptionregion- where the encoder publishes from, so ingest is close to the broadcasterchannel_type- passthrough, transcode, or HLS (see below)
Splashscreen, thumbnail, and embed code can be added after the channel exists.
Channel type
Set channel_type on create (Create Stream):
channel_type | Meaning |
|---|---|
transmux | Passthrough (default). The encoderās stream is published as-is. |
sd-transcode / hd-transcode / fhd-transcode | Dacast transcodes and builds ABR renditions. |
hls | Direct HLS ingest (https://⦠publish URL), not RTMP. |
You can later change a transcode/ABR channel to transmux with Change Channel Type. That change is one-way.
Ingest region
region selects the ingest location. Allowed values:
north_americaeuropeasia_pacific
Pick the region closest to the encoder. Do not hardcode the RTMP/SRT/WHIP host: read config from the create (or lookup) response. Hosts differ by region (for north_america, RTMP is currently rtmp://rtmp.us.live.dacast.com/live).
Recording and DVR
Optional on create:
live_recording_enabled- record the live streamlive_dvr_enabled- rewind / DVR
DVR cannot be enabled without recording.
Create the channel
curl -X POST "https://developer.dacast.com/v2/channel" \
-H "X-Api-Key: insertYourApiKeyHere" \
-H "X-Format: default" \
-H "Content-Type: application/json" \
-d "{\"title\":\"My First Channel\",\"description\":\"I am a test\",\"channel_type\":\"transmux\",\"region\":\"north_america\",\"live_recording_enabled\":true,\"live_dvr_enabled\":true}"const headers = new Headers();
headers.append('X-Api-Key', 'insertYourApiKeyHere');
headers.append('X-Format', 'default');
headers.append('Content-Type', 'application/json');
fetch('https://developer.dacast.com/v2/channel', {
method: 'POST',
headers,
body: JSON.stringify({
title: 'My First Channel',
description: 'I am a test',
channel_type: 'transmux',
region: 'north_america',
live_recording_enabled: true,
live_dvr_enabled: true
})
})
.then((response) => response.json())
.then((channel) => {
// store channel.id; encoder settings are in channel.config
});Store id from the response. If this is a multi-tenant product, store it next to your end-user id. You can also find the channel later with Lookup Stream or the channel list.
A successful 201 body looks like:
{
"ads": null,
"asset_id": "8f2facdc-1a29-5903-bffb-8414b3ee5da5-live-86ea4a25-df3b-4038-b1e3-5e032ea27e2c",
"associated_packages": "",
"category_id": 20,
"company_url": "example.com",
"config": {
"live_transcoding": false,
"publishing_point_backup_srt": "srt://srt.us.live.dacast.com:7777/?streamid=STREAM_KEY",
"publishing_point_primary": "rtmp://rtmp.us.live.dacast.com/live",
"publishing_point_primary_srt": "srt://srt.us.live.dacast.com:7777/?streamid=STREAM_KEY",
"publishing_point_primary_whip": "https://webrtc.us.live.dacast.com/whip/STREAM_KEY",
"publishing_point_type": null,
"stream_name": "STREAM_KEY"
},
"countdown_date": null,
"countdown_timezone": null,
"counter_live_limit": -1,
"countries_id": 0,
"creation_date": "2026-08-17T16:22:14Z",
"custom_data": null,
"description": "I am a test",
"dvr_enabled": true,
"enable_coupon": false,
"enable_payperview": false,
"enable_subscription": false,
"external_video_page": "http://",
"hds": "https://playlist.dacast.com/live/8f2facdc-1a29-5903-bffb-8414b3ee5da5-live-86ea4a25-df3b-4038-b1e3-5e032ea27e2c/master.f4m",
"hls": "https://playlist.dacast.com/live/8f2facdc-1a29-5903-bffb-8414b3ee5da5-live-86ea4a25-df3b-4038-b1e3-5e032ea27e2c/master.m3u8",
"id": "86ea4a25-df3b-4038-b1e3-5e032ea27e2c",
"is_secure": 1,
"live_dvr_enabled": true,
"live_recording_enabled": true,
"noframe_security": 0,
"online": true,
"password": null,
"pictures": {
"splashscreen": [],
"thumbnail": []
},
"player_height": 1080,
"player_size_id": 10,
"player_width": 1920,
"publish_on_dacast": false,
"referers_id": 0,
"rtmp": null,
"save_date": "2026-08-17T16:22:14Z",
"schedule": null,
"share_code": {
"facebook": "https://iframe.dacast.com/live/8f2facdc-1a29-5903-bffb-8414b3ee5da5/86ea4a25-df3b-4038-b1e3-5e032ea27e2c",
"twitter": "https://iframe.dacast.com/live/8f2facdc-1a29-5903-bffb-8414b3ee5da5/86ea4a25-df3b-4038-b1e3-5e032ea27e2c"
},
"splashscreen_id": 0,
"stream_tech": "html5",
"thumbnail_id": 0,
"title": "My First Channel",
"vod_rebroadcast": {},
"web_dvr": 0
}
onlineon the channel object means the channel is enabled for playback, not that someone is currently broadcasting. Live-or-not is a different signal (online_since/online_since_dateon lookup when the channel is actually live).
Encoder settings
For an RTMP/transmux channel, config is what you (or your end user) put into OBS, ffmpeg, or another encoder:
| Field | Use as |
|---|---|
config.publishing_point_primary | Server URL (RTMP) |
config.stream_name | Stream key |
The same key is reused for SRT and WHIP:
- SRT:
config.publishing_point_primary_srt(backup:publishing_point_backup_srt) - WHIP:
config.publishing_point_primary_whip
There is no separate encoder username/password. In OBS: Server = publishing_point_primary, Stream Key = stream_name.
The API returns an rtmp:// URL. RTMPS uses the same host, path, and stream key - only the scheme changes (rtmp:// ā rtmps://).
ffmpeg example (RTMP):
ffmpeg -re -i input.mp4 -c:v libx264 -c:a aac -f flv \
"rtmp://rtmp.us.live.dacast.com/live/STREAM_KEY"Replace the URL and key with the values from config for this channel (they depend on region).
For channel_type: "hls", publish to the https:// URL in config, not RTMP.
VOD to Live
To create a channel that rebroadcasts an existing VOD, send vod_rebroadcast on create (Create Stream):
id- VOD id on the accountstart- start time (must be at least 10 minutes from the API call)timezone- tzdata name, for exampleEurope/Paris
Those channels may have no RTMP publishing_point_primary. Update later with Update Stream.
After the channel exists
- Lookup Stream / list channels - encoder settings and metadata
- Update Stream - title, description, recording, DVR
- Embed codes
- Create Thumbnail
- Add Simulcast Destination
- List Online Streams
- Live encoder configuration
Updated about 16 hours ago
