---
title: "Create a new channel"
method: POST
path: "/channels"
tags: ["Channels"]
---

# Create a new channel

`POST /channels`

## Request body

- CreateChannelBody
  - `name` string, required — Name of the channel
  - `externalId` string — Deprecated, use 'externalIds' instead. Shorthand for a single-entry 'externalIds'. For now, responses will keep returning 'externalId' with the first entry of 'externalIds'.
  - `externalIds` string[] — External identifiers for the channel. Each must be unique across all channels of the organization. Mutually exclusive with externalId.
  - `timeout` number — Timeout in seconds. To never stop, specify 0
  - `ads` object — OptiView Ads configuration
    - `enabled` boolean, required — Whether OptiView ads are enabled on the channel
    - `customAssetKey` string — DAI asset key, only possible when Google is linked to your ads account
    - `timebase` 'wallclock' | 'pts' — Timebase for ad insertion. Defaults to "wallclock"
    - `settings` object — Deprecated. V1 ads settings.
      - `assetKey` string — Deprecated. Use customAssetKey instead.
      - `layout` 'SINGLE' | 'DOUBLE' | 'LSHAPE_AD' | 'LSHAPE_CONTENT'
      - `enableBumperAds` boolean
      - `podDuration` number
      - `customAdTagParameters` object
  - `dvr` object — DVR configuration
    - `enabled` boolean, required — Whether DVR is enabled
    - `windowInSeconds` number — DVR window in seconds (60-86400)
  - `nielsen` object — Nielsen configuration
    - `enabled` boolean, required — Whether Nielsen is enabled
  - `instreamMetadata` object — Instream metadata configuration
    - `enabled` boolean, required — Whether instream metadata is enabled. Supported metadata is h264 registered or unregistered SEI metadata
    - `uuids` string[] — Array of instream metadata SEI UUIDs
  - `ingests` object[] — Ingests to create for the channel
    - `name` string, required — Name of the ingest
    - `type` 'rtmp-push' | 'rtmp-pull' | 'srt-pull' | 'srt-push' | 'sdi-pull', required — Ingest type. Note: srt-push requires SRT push to be enabled at organization level
    - `url` string — Source URL (required for pull types)
    - `region` string — Region ID (required for rtmp-push, srt-pull and rtmp-pull). Must be a single ingest enabled region for pull types
    - `captions` object[] — Caption configuration
      - `channel` number, required — Caption channel number
      - `language` string, required — Caption language code
      - `label` string — Caption label
    - `enhancements` SpeechEnhancement[] — Enhancement configuration. At most 1 'speech' entry is allowed
      - `kind` 'speech', required — Live speech translation of the stream audio (requires translations to be enabled for the organization)
      - `sourceLanguage` string, required — Source language spoken in the stream
      - `targetTextTracks` string[], required — Languages to generate translated text tracks for (max 5)
      - `sourceAudioTrack` integer — PID of the audio track to use as translation source
      - `dictionary` string, nullable — Speech dictionary ID (see `/enhancements/speech/dictionaries`). The dictionary helps the speech recognition caption the source audio and must have the same `language` as `sourceLanguage`. Can always be set to null to disconnect the dictionary
      - `position` object — Position of the rendered translated captions
        - `bottom` integer — Pixels from bottom
    - `tracks` object — Audio track configuration
      - `audio` object[] — Audio track configuration
        - `pid` number — Audio track PID (mandatory for multi-audio)
        - `language` string, required — Audio track language code
        - `label` string, required — Audio track label
    - `engines` object[] — Engines to create for this ingest
      - `name` string, required — Name of the engine
      - `region` string, required — Region ID to deploy the engine in
      - `priority` number — Engine priority (-100 to 100). Lower numbers mean higher priority
      - `drm` boolean — Enable DRM. Only possible when enabled for your organization.
      - `quality` object, required — Quality configuration
        - `abrLadderId` string, required — ABR ladder ID
      - `daiAssetKey` string, nullable — DAI asset key
      - `overlays` object[] — Image overlay configuration
        - `url` string, required — URL of the overlay image
        - `position` object — Overlay position
          - `top` integer — Pixels from top
          - `bottom` integer — Pixels from bottom (ignored if top is present)
          - `left` integer — Pixels from left
          - `right` integer — Pixels from right (ignored if left is present)
        - `size` object — Overlay size
          - `width` integer — Width in pixels
          - `height` integer — Height in pixels
        - `opacity` number — Overlay opacity (`0`=fully transparent, `1`=fully opaque)
      - `outputs` object — Output format configuration
        - `hesp` boolean — Enable HESP output. Enabled by default.
        - `hls` boolean — Enable HLS output. Enabled by default.
        - `hlsMpegTs` boolean — Enable HLS MPEG-TS output. Only available when enabled for your organization.
      - `vision` object, nullable — Vision configuration. Only available when enabled for your organization. Pass `null` to disable.
        - `saturationBoost` 'high' | 'low', required — Saturation boost level
        - `strength` 'low' | 'medium' | 'high', required — Vision processing strength
      - `atmos` object, nullable — Dolby Atmos configuration. Only available when the connected ABR ladder has Dolby Atmos audio configured. Pass `null` to disable.
        - `dialnorm` integer, nullable, required — Dolby Atmos dialnorm value. Must be an integer between -1 and -31. Pass `null` to unset it.
  - `distributions` object[] — Distributions to create for the channel (endpoints will be auto-configured)
    - `name` string, required — Name of the distribution
    - `externalId` string — External identifier for the distribution
    - `enabled` boolean — Whether the distribution is enabled
    - `targetLatency` number — Deprecated: use latencies.hesp instead. If set, will be applied as latencies.hesp.
    - `latencies` object — Latency configuration per output protocol
      - `hesp` number, nullable — HESP latency in seconds (1-30, default: 2)
      - `hls` number, nullable — HLS latency in seconds (8-30, default: 10)
    - `security` object — Security configuration
      - `geoBlocking` object — Geo-blocking configuration
        - `enabled` boolean — Whether geo-blocking is enabled
        - `mode` 'allow' | 'deny' — Geo-blocking mode
        - `countries` string[] — List of country codes
      - `ipBlocking` object — IP blocking configuration
        - `enabled` boolean — Whether IP blocking is enabled
        - `mode` 'allow' | 'deny' — IP blocking mode
        - `cidrs` string[] — List of CIDR ranges
      - `refererBlocking` object — Referer blocking configuration
        - `enabled` boolean — Whether referer blocking is enabled
        - `allowedDomains` string[] — List of allowed domains
        - `allowNativeApps` boolean — Whether native apps are allowed
      - `rewriteSegmentUrls` boolean — When enabled, a short-lived token is added to the segment URLs, derived from the token that was passed. This only works when JWT security is enabled on the same distribution.
      - `keys` object[] — Security keys (max 2, create only)
        - `name` string — Name of the security key
        - `key` string, required — Security key value
    - `webRtc` object, nullable — WebRTC configuration
      - `priority` number, required — WebRTC priority
      - `src` object, required — WebRTC source configuration
        - `name` string, required — WebRTC source name
        - `accountId` string, required — WebRTC account ID
        - `apiUrl` string, required — WebRTC API URL
    - `outputs` object — Output format configuration
      - `hesp` boolean — Enable HESP output. Enabled by default.
      - `hls` boolean — Enable HLS output. Enabled by default.
      - `hlsMpegTs` boolean — Enable HLS MPEG-TS output. Disabled by default.
    - `maxBitrate` number, nullable — Maximum bitrate limit in bps
    - `dvr` object — DVR configuration
      - `enabled` boolean — Whether DVR is enabled on the distribution
    - `overrides` object[] — Distribution overrides for device targeting
      - `deviceType` 'tv' | 'mobile' | 'desktop' | 'other' | 'null', nullable — Target device type
      - `sdkType` 'native' | 'web' | 'null', nullable — Target SDK type
      - `osName` 'apple' | 'android' | 'windows' | 'roku' | 'other' | 'null', nullable — Target OS name
      - `profileId` string, nullable — Target profile ID
      - `targets` object[], required — Override target distributions with weights
        - `distributionId` string, required — Target distribution ID
        - `weight` number, required — Weight (0-100)
    - `customEndpoints` object[] — Custom endpoints to connect to this distribution
      - `customEndpointId` string, required — ID of the custom endpoint to connect
      - `weight` integer — Weight (0-100, default 100)

## Response `200`

Channel created

- ChannelCreatedObjectResult
  - `data` ChannelCreated, required — Created channel with connected resources
    - `id` string, required — Unique identifier of the channel
    - `createdAt` string, required — Creation timestamp
    - `name` string, required — Name of the channel
    - `status` 'ready' | 'stopped' | 'deploying' | 'starting' | 'waiting' | 'ingesting' | 'playing' | 'stopping' | 'error' | 'deleting' | 'deleted', required — Current status of the channel
    - `externalId` string — Deprecated, use 'externalIds' instead. For now, this returns the first entry of the 'externalIds' list.
    - `externalIds` string[] — External identifiers of the channel
    - `timeout` number, required — Timeout in seconds
    - `ads` object — OptiView Ads configuration
      - `enabled` boolean, required — Whether OptiView ads are enabled on the channel
      - `settings` object — Deprecated. Only returned for channels still using the old (V1) ads API underneath.
        - `assetKey` string — Deprecated. Use customAssetKey instead.
        - `layout` 'SINGLE' | 'DOUBLE' | 'LSHAPE_AD' | 'LSHAPE_CONTENT'
        - `enableBumperAds` boolean
        - `podDuration` number
        - `customAdTagParameters` object
    - `dvr` object — DVR configuration
      - `enabled` boolean, required — Whether DVR is enabled
      - `windowInSeconds` number — DVR window in seconds (60-86400)
    - `nielsen` object — Nielsen configuration
      - `enabled` boolean, required — Whether Nielsen is enabled
    - `instreamMetadata` object — Instream metadata configuration
      - `enabled` boolean, required — Whether instream metadata is enabled. Supported metadata is h264 registered or unregistered SEI metadata
      - `uuids` string[] — Array of instream metadata SEI UUIDs
    - `perpetual` boolean, required — Whether this channel is 24/7 (never times out, excluded from transcoding analytics)
    - `organizationId` string, required — Organization ID
    - `ingests` Ingest[], required — Connected ingests
      - `id` string, required — Unique identifier of the ingest
      - `name` string, required — Name of the ingest
      - `createdAt` string, required — Creation timestamp
      - `type` 'rtmp-push' | 'rtmp-pull' | 'srt-pull' | 'srt-push' | 'sdi-pull', required — Ingest type
      - `url` string, required — Ingest URL
      - `streamKey` string — Stream key for RTMP push ingests
      - `tracks` object, required — Audio track configuration
        - `audio` object[] — Audio track configuration
          - `pid` number — Audio track PID (mandatory for multi-audio)
          - `language` string, required — Audio track language code
          - `label` string, required — Audio track label
      - `captions` object[], required — Caption configuration
        - `channel` number, required — Caption channel number
        - `language` string, required — Caption language code
        - `label` string — Caption label
      - `enhancements` SpeechEnhancement[] — Enhancement configuration
        - `kind` 'speech', required — Live speech translation of the stream audio (requires translations to be enabled for the organization)
        - `sourceLanguage` string, required — Source language spoken in the stream
        - `targetTextTracks` string[], required — Languages to generate translated text tracks for (max 5)
        - `sourceAudioTrack` integer — PID of the audio track to use as translation source
        - `dictionary` string, nullable — Speech dictionary ID (see `/enhancements/speech/dictionaries`). The dictionary helps the speech recognition caption the source audio and must have the same `language` as `sourceLanguage`. Can always be set to null to disconnect the dictionary
        - `position` object — Position of the rendered translated captions
          - `bottom` integer — Pixels from bottom
    - `engines` object[], required — Connected engines
      - `id` string, required — Unique identifier of the engine
      - `name` string, required — Name of the engine
      - `createdAt` string, required — Creation timestamp
      - `updatedAt` string, required — Last update timestamp
      - `quality` object, required — Quality configuration
        - `abrLadderId` string, required — ABR ladder ID
      - `overlays` object[], required — Image overlay configuration
        - `url` string, required — URL of the overlay image
        - `position` object — Overlay position
          - `top` integer — Pixels from top
          - `bottom` integer — Pixels from bottom (ignored if top is present)
          - `left` integer — Pixels from left
          - `right` integer — Pixels from right (ignored if left is present)
        - `size` object — Overlay size
          - `width` integer — Width in pixels
          - `height` integer — Height in pixels
        - `opacity` number — Overlay opacity (`0`=fully transparent, `1`=fully opaque)
      - `drm` boolean, required — Whether DRM is enabled
      - `priority` number, required — Engine priority
      - `status` 'stopped' | 'deploying' | 'starting' | 'waiting' | 'ingesting' | 'playing' | 'stopping' | 'error' | 'deleting' | 'deleted', required — Current status of the engine
      - `daiAssetKey` string, nullable — DAI asset key
      - `outputs` object, required — Output format configuration
        - `hesp` boolean — Enable HESP output. Enabled by default.
        - `hls` boolean — Enable HLS output. Enabled by default.
        - `hlsMpegTs` boolean — Enable HLS MPEG-TS output. Only available when enabled for your organization.
      - `vision` object, nullable — Vision configuration
        - `saturationBoost` 'high' | 'low', required — Saturation boost level
        - `strength` 'low' | 'medium' | 'high', required — Vision processing strength
      - `atmos` object, nullable — Dolby Atmos configuration
        - `dialnorm` integer, required — Dolby Atmos dialnorm value. Must be an integer between -1 and -31.
    - `distributions` Distribution[], required — Connected distributions
      - `id` string, required — Unique identifier of the distribution
      - `createdAt` string, required — Creation timestamp
      - `name` string, required — Name of the distribution
      - `externalId` string — External identifier for the distribution
      - `enabled` boolean, required — Whether the distribution is enabled
      - `targetLatency` number — Deprecated: use latencies instead.
      - `latencies` object, required — Latency configuration per output protocol
        - `hesp` number, nullable — HESP latency in seconds (1-30, default: 2)
        - `hls` number, nullable — HLS latency in seconds (8-30, default: 10)
      - `security` object, required — Security configuration
        - `geoBlocking` object, required — Geo-blocking configuration
          - `enabled` boolean, required — Whether geo-blocking is enabled
          - `mode` 'allow' | 'deny', required — Geo-blocking mode
          - `countries` string[], required — List of country codes
        - `ipBlocking` object, required — IP blocking configuration
          - `enabled` boolean, required — Whether IP blocking is enabled
          - `mode` 'allow' | 'deny', required — IP blocking mode
          - `cidrs` string[], required — List of CIDR ranges
        - `refererBlocking` object — Referer blocking configuration
          - `enabled` boolean, required — Whether referer blocking is enabled
          - `allowedDomains` string[], required — List of allowed domains
          - `allowNativeApps` boolean, required — Whether native apps are allowed
        - `rewriteSegmentUrls` boolean — When enabled, a short-lived token is added to the segment URLs, derived from the token that was passed. This only works when JWT security is enabled on the same distribution.
        - `keys` object[], required — Security keys
          - `id` string, required — Security key ID
          - `name` string — Security key name
      - `endpoints` object, required — Endpoint configuration
        - `engineIds` string[], required — Connected engine IDs
      - `webRtc` object — WebRTC configuration
        - `priority` number, required — WebRTC priority
        - `src` object, required — WebRTC source configuration
          - `name` string, required — WebRTC source name
          - `accountId` string, required — WebRTC account ID
          - `apiUrl` string, required — WebRTC API URL
      - `maxBitrate` number — Maximum bitrate limit in bps
      - `outputs` object — Output format configuration
        - `hesp` boolean — Enable HESP output. Enabled by default.
        - `hls` boolean — Enable HLS output. Enabled by default.
        - `hlsMpegTs` boolean — Enable HLS MPEG-TS output. Disabled by default.
      - `dvr` object, required — DVR configuration
        - `enabled` boolean — Whether DVR is enabled on the distribution
      - `overrides` object[] — Distribution overrides
        - `deviceType` 'tv' | 'mobile' | 'desktop' | 'other' | 'null', nullable — Target device type
        - `sdkType` 'native' | 'web' | 'null', nullable — Target SDK type
        - `osName` 'apple' | 'android' | 'windows' | 'roku' | 'other' | 'null', nullable — Target OS name
        - `profileId` string, nullable — Target profile ID
        - `targets` object[], required — Override target distributions with weights
          - `distributionId` string, required — Target distribution ID
          - `weight` number, required — Weight (0-100)
      - `customEndpoints` object[] — Connected custom endpoints with weights
        - `customEndpointId` string, required — ID of the connected custom endpoint
        - `weight` number, required — Weight (0-100)

## Changes

- **2026-07-26** `7bfe58df4d98` — 1 breaking, 2 warning, 7 info
  - removed the required property `data/allOf[subschema #2]/distributions/items/isDefault` from the response with the `200` status
  - removed the request property `distributions/items/isDefault`
  - removed the request property `ingests/items/translations`
  - added the new optional request property `externalIds`
  - …6 more

[Change history](https://skmtc.dev/dolby/apis/theolive-api/changes/channels/post.md)

---

[API](https://skmtc.dev/dolby/apis/theolive-api.md) · [All operations](https://skmtc.dev/dolby/apis/theolive-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/dolby/theolive-api/revisions/7bfe58df4d98/schema)
