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 use https://developer.dacast.com as the API host. Authenticate with X-Api-Key and send X-Format: default. JSON request bodies must include Content-Type: application/json. A successful create returns 201.

You typically need:

  • title - channel name (required)
  • description - short description
  • region - where the encoder publishes from, so ingest is close to the broadcaster
  • channel_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_typeMeaning
transmuxPassthrough (default). The encoder’s stream is published as-is.
sd-transcode / hd-transcode / fhd-transcodeDacast transcodes and builds ABR renditions.
hlsDirect 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_america
  • europe
  • asia_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 stream
  • live_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
}
🚧

online on 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_date on 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:

FieldUse as
config.publishing_point_primaryServer URL (RTMP)
config.stream_nameStream 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 account
  • start - start time (must be at least 10 minutes from the API call)
  • timezone - tzdata name, for example Europe/Paris

Those channels may have no RTMP publishing_point_primary. Update later with Update Stream.


After the channel exists