openapi: 3.0.3 info: title: Dolby OptiView Real-time Streaming ABR Ladders Distributions API description: 'REST API for managing OptiView Real-time Streaming (formerly Millicast / Dolby.io Real-time Streaming) — publish/subscribe tokens, recordings, transcoders, encoder profiles, clusters, analytics, and webhooks. All requests are authenticated with a Bearer API Secret created in the streaming dashboard (Settings -> Security -> API Secrets). ' version: '2026.05' contact: name: Dolby OptiView Support url: https://optiview.dolby.com/docs/millicast/ servers: - url: https://api.millicast.com/api description: Production REST API security: - BearerAuth: [] tags: - name: Distributions paths: /channels/{id}/distributions: get: tags: - Distributions operationId: get-channel-distributions summary: Get distributions of a channel parameters: - schema: type: string description: Channel ID required: true description: Channel ID name: id in: path - schema: type: string description: Pagination cursor required: false description: Pagination cursor name: cursor in: query - schema: type: number nullable: true maximum: 100 description: Maximum number of items to return (max 100) required: false description: Maximum number of items to return (max 100) name: limit in: query responses: '200': description: List of distributions content: application/json: schema: $ref: '#/components/schemas/PaginatedDistributionResult' post: tags: - Distributions operationId: create-channel-distribution summary: Create a distribution for a channel parameters: - schema: type: string description: Channel ID required: true description: Channel ID name: id in: path requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateDistributionBody' responses: '200': description: Distribution created content: application/json: schema: $ref: '#/components/schemas/DistributionObjectResult' /distributions/{id}: get: tags: - Distributions operationId: get-distribution summary: Get a distribution by ID parameters: - schema: type: string description: Distribution ID required: true description: Distribution ID name: id in: path responses: '200': description: The requested distribution content: application/json: schema: $ref: '#/components/schemas/DistributionObjectResult' patch: tags: - Distributions operationId: update-distribution summary: Update a distribution by ID parameters: - schema: type: string description: Distribution ID required: true description: Distribution ID name: id in: path requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateDistributionBody' responses: '200': description: Updated distribution content: application/json: schema: $ref: '#/components/schemas/DistributionObjectResult' delete: tags: - Distributions operationId: delete-distribution summary: Delete a distribution by ID parameters: - schema: type: string description: Distribution ID required: true description: Distribution ID name: id in: path responses: '204': description: Empty response /distributions/{id}/security/keys: get: tags: - Distributions operationId: get-distribution-security-keys summary: Get security keys of a distribution parameters: - schema: type: string description: Distribution ID required: true description: Distribution ID name: id in: path responses: '200': description: List of security keys content: application/json: schema: $ref: '#/components/schemas/DistributionSecurityKeyListResult' post: tags: - Distributions operationId: create-distribution-security-key summary: Add a security key to a distribution parameters: - schema: type: string description: Distribution ID required: true description: Distribution ID name: id in: path requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateDistributionSecurityKeyBody' responses: '200': description: Security key created content: application/json: schema: $ref: '#/components/schemas/DistributionSecurityKeyObjectResult' delete: tags: - Distributions operationId: delete-all-distribution-security-keys summary: Delete all security keys of a distribution parameters: - schema: type: string description: Distribution ID required: true description: Distribution ID name: id in: path responses: '204': description: Empty response /distributions/{id}/security/keys/{keyId}: get: tags: - Distributions operationId: get-distribution-security-key summary: Get a specific security key parameters: - schema: type: string description: Distribution ID required: true description: Distribution ID name: id in: path - schema: type: string description: Security key ID required: true description: Security key ID name: keyId in: path responses: '200': description: The requested security key content: application/json: schema: $ref: '#/components/schemas/DistributionSecurityKeyObjectResult' delete: tags: - Distributions operationId: delete-distribution-security-key summary: Delete a specific security key parameters: - schema: type: string description: Distribution ID required: true description: Distribution ID name: id in: path - schema: type: string description: Security key ID required: true description: Security key ID name: keyId in: path responses: '204': description: Empty response /distributions/{id}/analytics/viewing-minutes: get: tags: - Distributions operationId: get-distribution-viewing-minutes summary: Get viewing minutes analytics for a distribution parameters: - schema: type: string description: Distribution ID required: true description: Distribution ID name: id in: path - schema: type: string description: Start date for the analytics period required: true description: Start date for the analytics period name: start in: query - schema: type: string description: End date for the analytics period required: true description: End date for the analytics period name: end in: query - schema: type: string enum: - channel - distribution - streaming-format description: Group results by channel, distribution, or streaming format required: false description: Group results by channel, distribution, or streaming format name: groupBy in: query - schema: type: string enum: - 15min - hour - day - month description: Time resolution for the analytics data required: true description: Time resolution for the analytics data name: resolution in: query - schema: type: string description: Comma-separated list of streaming formats to filter by required: false description: Comma-separated list of streaming formats to filter by name: streamingFormats in: query - schema: type: string description: Comma-separated list of distribution IDs to filter by required: false description: Comma-separated list of distribution IDs to filter by name: distributionIds in: query - schema: type: string description: UTC offset in minutes required: false description: UTC offset in minutes name: utcOffset in: query responses: '200': description: Viewing minutes analytics data content: application/json: schema: $ref: '#/components/schemas/AnalyticsListResult' /distributions/{id}/analytics/bytes-transferred: get: tags: - Distributions operationId: get-distribution-bytes-transferred summary: Get bytes transferred analytics for a distribution parameters: - schema: type: string description: Distribution ID required: true description: Distribution ID name: id in: path - schema: type: string description: Start date for the analytics period required: true description: Start date for the analytics period name: start in: query - schema: type: string description: End date for the analytics period required: true description: End date for the analytics period name: end in: query - schema: type: string enum: - channel - distribution - streaming-format description: Group results by channel, distribution, or streaming format required: false description: Group results by channel, distribution, or streaming format name: groupBy in: query - schema: type: string enum: - 15min - hour - day - month description: Time resolution for the analytics data required: true description: Time resolution for the analytics data name: resolution in: query - schema: type: string description: Comma-separated list of streaming formats to filter by required: false description: Comma-separated list of streaming formats to filter by name: streamingFormats in: query - schema: type: string description: UTC offset in minutes required: false description: UTC offset in minutes name: utcOffset in: query responses: '200': description: Bytes transferred analytics data content: application/json: schema: $ref: '#/components/schemas/AnalyticsListResult' /distributions/{id}/analytics/viewing-minutes/browsers: get: tags: - Distributions operationId: get-distribution-viewing-minutes-browsers summary: Get viewing minutes grouped by browser for a distribution parameters: - schema: type: string description: Distribution ID required: true description: Distribution ID name: id in: path - schema: type: string description: Start date for the analytics period required: true description: Start date for the analytics period name: start in: query - schema: type: string description: End date for the analytics period required: true description: End date for the analytics period name: end in: query - schema: type: string description: Comma-separated list of streaming formats to filter by required: false description: Comma-separated list of streaming formats to filter by name: streamingFormats in: query - schema: type: string description: Comma-separated list of distribution IDs to filter by required: false description: Comma-separated list of distribution IDs to filter by name: distributionIds in: query - schema: type: string description: UTC offset in minutes required: false description: UTC offset in minutes name: utcOffset in: query responses: '200': description: Viewing minutes by browser content: application/json: schema: $ref: '#/components/schemas/ViewingBrowserListResult' /distributions/{id}/analytics/viewing-minutes/countries: get: tags: - Distributions operationId: get-distribution-viewing-minutes-countries summary: Get viewing minutes grouped by country for a distribution parameters: - schema: type: string description: Distribution ID required: true description: Distribution ID name: id in: path - schema: type: string description: Start date for the analytics period required: true description: Start date for the analytics period name: start in: query - schema: type: string description: End date for the analytics period required: true description: End date for the analytics period name: end in: query - schema: type: string description: Comma-separated list of streaming formats to filter by required: false description: Comma-separated list of streaming formats to filter by name: streamingFormats in: query - schema: type: string description: Comma-separated list of distribution IDs to filter by required: false description: Comma-separated list of distribution IDs to filter by name: distributionIds in: query - schema: type: string description: UTC offset in minutes required: false description: UTC offset in minutes name: utcOffset in: query responses: '200': description: Viewing minutes by country content: application/json: schema: $ref: '#/components/schemas/ViewingCountryListResult' /distributions/{id}/analytics/bytes-transferred/browsers: get: tags: - Distributions operationId: get-distribution-bytes-transferred-browsers summary: Get bytes transferred grouped by browser for a distribution parameters: - schema: type: string description: Distribution ID required: true description: Distribution ID name: id in: path - schema: type: string description: Start date for the analytics period required: true description: Start date for the analytics period name: start in: query - schema: type: string description: End date for the analytics period required: true description: End date for the analytics period name: end in: query - schema: type: string description: Comma-separated list of streaming formats to filter by required: false description: Comma-separated list of streaming formats to filter by name: streamingFormats in: query - schema: type: string description: Comma-separated list of distribution IDs to filter by required: false description: Comma-separated list of distribution IDs to filter by name: distributionIds in: query - schema: type: string description: UTC offset in minutes required: false description: UTC offset in minutes name: utcOffset in: query responses: '200': description: Bytes transferred by browser content: application/json: schema: $ref: '#/components/schemas/ViewingBrowserListResult' /distributions/{id}/analytics/bytes-transferred/countries: get: tags: - Distributions operationId: get-distribution-bytes-transferred-countries summary: Get bytes transferred grouped by country for a distribution parameters: - schema: type: string description: Distribution ID required: true description: Distribution ID name: id in: path - schema: type: string description: Start date for the analytics period required: true description: Start date for the analytics period name: start in: query - schema: type: string description: End date for the analytics period required: true description: End date for the analytics period name: end in: query - schema: type: string description: Comma-separated list of streaming formats to filter by required: false description: Comma-separated list of streaming formats to filter by name: streamingFormats in: query - schema: type: string description: Comma-separated list of distribution IDs to filter by required: false description: Comma-separated list of distribution IDs to filter by name: distributionIds in: query - schema: type: string description: UTC offset in minutes required: false description: UTC offset in minutes name: utcOffset in: query responses: '200': description: Bytes transferred by country content: application/json: schema: $ref: '#/components/schemas/ViewingCountryListResult' /distributions/{id}/analytics/insights/countries: get: tags: - Distributions operationId: get-distribution-insights-countries summary: Get country insights for a distribution description: Data is only available for the last 30 days. parameters: - schema: type: string description: Distribution ID required: true description: Distribution ID name: id in: path - schema: type: string enum: - hour - day - week - month description: Time period for the insights required: true description: Time period for the insights name: period in: query - schema: type: string description: Comma-separated list of channel IDs to filter by required: false description: Comma-separated list of channel IDs to filter by name: channelIds in: query - schema: type: string description: Comma-separated list of distribution IDs to filter by required: false description: Comma-separated list of distribution IDs to filter by name: distributionIds in: query - schema: type: string description: Comma-separated list of streaming formats to filter by required: false description: Comma-separated list of streaming formats to filter by name: streamingFormats in: query responses: '200': description: Country insights data content: application/json: schema: $ref: '#/components/schemas/CountryInsightsListResult' /distributions/{id}/analytics/insights/browsers-os: get: tags: - Distributions operationId: get-distribution-insights-browsers-os summary: Get browser and OS insights for a distribution description: Data is only available for the last 30 days. parameters: - schema: type: string description: Distribution ID required: true description: Distribution ID name: id in: path - schema: type: string enum: - hour - day - week - month description: Time period for the insights required: true description: Time period for the insights name: period in: query - schema: type: string description: Comma-separated list of channel IDs to filter by required: false description: Comma-separated list of channel IDs to filter by name: channelIds in: query - schema: type: string description: Comma-separated list of distribution IDs to filter by required: false description: Comma-separated list of distribution IDs to filter by name: distributionIds in: query - schema: type: string description: Comma-separated list of streaming formats to filter by required: false description: Comma-separated list of streaming formats to filter by name: streamingFormats in: query responses: '200': description: Browser/OS insights data content: application/json: schema: $ref: '#/components/schemas/BrowserOsInsightsListResult' /distributions/{id}/analytics/insights/viewers: get: tags: - Distributions operationId: get-distribution-insights-viewers summary: Get viewer count insights for a distribution description: Data is only available for the last 30 days. parameters: - schema: type: string description: Distribution ID required: true description: Distribution ID name: id in: path - schema: type: string enum: - hour - day - week - month description: Time period for the insights required: true description: Time period for the insights name: period in: query - schema: type: string description: Comma-separated list of channel IDs to filter by required: false description: Comma-separated list of channel IDs to filter by name: channelIds in: query - schema: type: string description: Comma-separated list of distribution IDs to filter by required: false description: Comma-separated list of distribution IDs to filter by name: distributionIds in: query - schema: type: string description: Comma-separated list of streaming formats to filter by required: false description: Comma-separated list of streaming formats to filter by name: streamingFormats in: query responses: '200': description: Viewer count insights data content: application/json: schema: $ref: '#/components/schemas/ViewersInsightsListResult' components: schemas: UpdateDistributionBody: type: object properties: name: type: string description: Name of the distribution externalId: type: string nullable: true description: External identifier for the distribution. Set to null to clear. enabled: type: boolean description: Whether the distribution is enabled targetLatency: type: number description: Target latency in seconds security: type: object properties: geoBlocking: type: object properties: enabled: type: boolean description: Whether geo-blocking is enabled mode: type: string enum: - allow - deny description: Geo-blocking mode countries: type: array items: type: string description: List of country codes description: Geo-blocking configuration ipBlocking: type: object properties: enabled: type: boolean description: Whether IP blocking is enabled mode: type: string enum: - allow - deny description: IP blocking mode cidrs: type: array items: type: string description: List of CIDR ranges description: IP blocking configuration refererBlocking: type: object properties: enabled: type: boolean description: Whether referer blocking is enabled allowedDomains: type: array items: type: string description: List of allowed domains allowNativeApps: type: boolean description: Whether native apps are allowed description: Referer blocking configuration keys: type: array items: type: object properties: name: type: string description: Name of the security key key: type: string description: Security key value required: - key maxItems: 2 description: Security keys (max 2, create only) description: Security configuration endpoints: type: object properties: engineIds: type: array items: type: string description: Engine IDs to connect description: Endpoint configuration webRtc: type: object nullable: true properties: priority: type: number description: WebRTC priority src: type: object properties: name: type: string description: WebRTC source name accountId: type: string description: WebRTC account ID apiUrl: type: string description: WebRTC API URL required: - name - accountId - apiUrl description: WebRTC source configuration required: - priority - src description: WebRTC configuration outputs: type: object properties: hesp: type: boolean default: true description: Enable HESP output. Enabled by default. hls: type: boolean default: true description: Enable HLS output. Enabled by default. hlsMpegTs: type: boolean default: false description: Enable HLS MPEG-TS output. Disabled by default. description: Output format configuration maxBitrate: type: number nullable: true description: Maximum bitrate limit in bps dvr: type: object properties: enabled: type: boolean description: Whether DVR is enabled on the distribution description: DVR configuration overrides: type: array nullable: true items: type: object properties: deviceType: type: string nullable: true enum: - tv - mobile - desktop - other - null description: Target device type sdkType: type: string nullable: true enum: - native - web - null description: Target SDK type osName: type: string nullable: true enum: - apple - android - windows - roku - other - null description: Target OS name profileId: type: string nullable: true description: Target profile ID targets: type: array items: type: object properties: distributionId: type: string description: Target distribution ID weight: type: number minimum: 0 maximum: 100 description: Weight (0-100) required: - distributionId - weight description: Override target distributions with weights required: - targets description: Distribution overrides for device targeting customEndpoints: type: array nullable: true items: type: object properties: customEndpointId: type: string description: ID of the custom endpoint to connect weight: type: integer minimum: 0 maximum: 100 default: 100 description: Weight (0-100, default 100) required: - customEndpointId description: Custom endpoints to connect to this distribution. Replaces all existing connections. additionalProperties: false DistributionObjectResult: type: object properties: data: allOf: - $ref: '#/components/schemas/Distribution' - description: Distribution object required: - data ViewersInsightsListResult: type: object properties: data: type: array items: type: object properties: timestamp: type: string description: Timestamp of the data point amount: type: number description: Number of unique viewers required: - timestamp - amount description: List of viewer count data points required: - data CountryInsightsListResult: type: object properties: data: type: array items: type: object properties: city: type: string description: City name countryCode: type: string description: ISO country code geoLocation: type: string description: Rounded latitude,longitude amount: type: number description: Number of unique viewers required: - city - countryCode - geoLocation - amount description: List of country insights required: - data CreateDistributionBody: type: object properties: name: type: string description: Name of the distribution externalId: type: string description: External identifier for the distribution enabled: type: boolean description: Whether the distribution is enabled targetLatency: type: number description: Target latency in seconds security: type: object properties: geoBlocking: type: object properties: enabled: type: boolean description: Whether geo-blocking is enabled mode: type: string enum: - allow - deny description: Geo-blocking mode countries: type: array items: type: string description: List of country codes description: Geo-blocking configuration ipBlocking: type: object properties: enabled: type: boolean description: Whether IP blocking is enabled mode: type: string enum: - allow - deny description: IP blocking mode cidrs: type: array items: type: string description: List of CIDR ranges description: IP blocking configuration refererBlocking: type: object properties: enabled: type: boolean description: Whether referer blocking is enabled allowedDomains: type: array items: type: string description: List of allowed domains allowNativeApps: type: boolean description: Whether native apps are allowed description: Referer blocking configuration keys: type: array items: type: object properties: name: type: string description: Name of the security key key: type: string description: Security key value required: - key maxItems: 2 description: Security keys (max 2, create only) description: Security configuration endpoints: type: object properties: engineIds: type: array items: type: string description: Engine IDs to connect description: Endpoint configuration webRtc: type: object nullable: true properties: priority: type: number description: WebRTC priority src: type: object properties: name: type: string description: WebRTC source name accountId: type: string description: WebRTC account ID apiUrl: type: string description: WebRTC API URL required: - name - accountId - apiUrl description: WebRTC source configuration required: - priority - src description: WebRTC configuration outputs: type: object properties: hesp: type: boolean default: true description: Enable HESP output. Enabled by default. hls: type: boolean default: true description: Enable HLS output. Enabled by default. hlsMpegTs: type: boolean default: false description: Enable HLS MPEG-TS output. Disabled by default. description: Output format configuration maxBitrate: type: number nullable: true description: Maximum bitrate limit in bps dvr: type: object properties: enabled: type: boolean description: Whether DVR is enabled on the distribution description: DVR configuration overrides: type: array items: type: object properties: deviceType: type: string nullable: true enum: - tv - mobile - desktop - other - null description: Target device type sdkType: type: string nullable: true enum: - native - web - null description: Target SDK type osName: type: string nullable: true enum: - apple - android - windows - roku - other - null description: Target OS name profileId: type: string nullable: true description: Target profile ID targets: type: array items: type: object properties: distributionId: type: string description: Target distribution ID weight: type: number minimum: 0 maximum: 100 description: Weight (0-100) required: - distributionId - weight description: Override target distributions with weights required: - targets description: Distribution overrides for device targeting customEndpoints: type: array items: type: object properties: customEndpointId: type: string description: ID of the custom endpoint to connect weight: type: integer minimum: 0 maximum: 100 default: 100 description: Weight (0-100, default 100) required: - customEndpointId description: Custom endpoints to connect to this distribution required: - name additionalProperties: false ViewingCountryListResult: type: object properties: data: type: array items: type: object properties: countryCode: type: string description: ISO country code amount: type: number description: Metric value required: - countryCode - amount description: List of country viewing data required: - data Distribution: type: object properties: id: type: string description: Unique identifier of the distribution createdAt: type: string description: Creation timestamp updatedAt: type: string description: Last update timestamp name: type: string description: Name of the distribution externalId: type: string description: External identifier for the distribution enabled: type: boolean description: Whether the distribution is enabled targetLatency: type: number description: Target latency in seconds security: type: object properties: geoBlocking: type: object properties: enabled: type: boolean description: Whether geo-blocking is enabled mode: type: string enum: - allow - deny description: Geo-blocking mode countries: type: array items: type: string description: List of country codes required: - enabled - mode - countries description: Geo-blocking configuration ipBlocking: type: object properties: enabled: type: boolean description: Whether IP blocking is enabled mode: type: string enum: - allow - deny description: IP blocking mode cidrs: type: array items: type: string description: List of CIDR ranges required: - enabled - mode - cidrs description: IP blocking configuration refererBlocking: type: object properties: enabled: type: boolean description: Whether referer blocking is enabled allowedDomains: type: array items: type: string description: List of allowed domains allowNativeApps: type: boolean description: Whether native apps are allowed required: - enabled - allowedDomains - allowNativeApps description: Referer blocking configuration keys: type: array items: type: object properties: id: type: string description: Security key ID name: type: string description: Security key name required: - id description: Security keys required: - geoBlocking - ipBlocking - keys description: Security configuration endpoints: type: object properties: engineIds: type: array items: type: string description: Connected engine IDs required: - engineIds description: Endpoint configuration webRtc: type: object properties: priority: type: number description: WebRTC priority src: type: object properties: name: type: string description: WebRTC source name accountId: type: string description: WebRTC account ID apiUrl: type: string description: WebRTC API URL required: - name - accountId - apiUrl description: WebRTC source configuration required: - priority - src description: WebRTC configuration maxBitrate: type: number description: Maximum bitrate limit in bps outputs: type: object properties: hesp: type: boolean default: true description: Enable HESP output. Enabled by default. hls: type: boolean default: true description: Enable HLS output. Enabled by default. hlsMpegTs: type: boolean default: false description: Enable HLS MPEG-TS output. Disabled by default. description: Output format configuration dvr: type: object properties: enabled: type: boolean description: Whether DVR is enabled on the distribution description: DVR configuration overrides: type: array items: type: object properties: deviceType: type: string nullable: true enum: - tv - mobile - desktop - other - null description: Target device type sdkType: type: string nullable: true enum: - native - web - null description: Target SDK type osName: type: string nullable: true enum: - apple - android - windows - roku - other - null description: Target OS name profileId: type: string nullable: true description: Target profile ID targets: type: array items: type: object properties: distributionId: type: string description: Target distribution ID weight: type: number minimum: 0 maximum: 100 description: Weight (0-100) required: - distributionId - weight description: Override target distributions with weights required: - targets description: Distribution overrides customEndpoints: type: array items: type: object properties: customEndpointId: type: string description: ID of the connected custom endpoint weight: type: number description: Weight (0-100) required: - customEndpointId - weight description: Connected custom endpoints with weights required: - id - createdAt - updatedAt - name - enabled - security - endpoints - dvr DistributionSecurityKeyListResult: type: object properties: data: type: array items: type: object properties: id: type: string description: Security key ID name: type: string description: Security key name required: - id description: List of security keys required: - data CreateDistributionSecurityKeyBody: type: object properties: name: type: string description: Name of the security key key: type: string description: Security key value required: - key additionalProperties: false PaginatedDistributionResult: type: object properties: data: type: array items: $ref: '#/components/schemas/Distribution' description: List of distributions pagination: type: object properties: hasMore: type: boolean description: Whether more results are available cursor: type: string description: Cursor for the next page of results required: - hasMore - cursor description: Pagination info required: - data - pagination AnalyticsListResult: type: object properties: data: type: array items: type: object properties: timestamp: type: string description: Timestamp of the data point records: type: array items: type: object properties: id: type: string description: Identifier of the grouped entity amount: type: number description: Metric value required: - id - amount description: Records for this time bucket required: - timestamp - records description: List of analytics data points required: - data DistributionSecurityKeyObjectResult: type: object properties: data: type: object properties: id: type: string description: Security key ID name: type: string description: Security key name required: - id description: Security key object required: - data BrowserOsInsightsListResult: type: object properties: data: type: array items: type: object properties: browserName: type: string description: Browser name browserVersion: type: string description: Browser version osName: type: string description: OS name osVersion: type: string description: OS version amount: type: number description: Number of unique viewers required: - browserName - browserVersion - osName - osVersion - amount description: List of browser/OS insights required: - data ViewingBrowserListResult: type: object properties: data: type: array items: type: object properties: browserName: type: string description: Browser name hardwareType: type: string description: Hardware type amount: type: number description: Metric value required: - browserName - hardwareType - amount description: List of browser viewing data required: - data securitySchemes: BearerAuth: type: http scheme: bearer bearerFormat: API Secret