Dolby OptiView Director API (Millicast)
Millicast Director API - the WebRTC/WHIP/WHEP signalling entry point clients call to obtain publish and subscribe endpoints, plus the DRM proxy and multi-track video configuration. 7 paths / 7 operations.
Millicast Director API - the WebRTC/WHIP/WHEP signalling entry point clients call to obtain publish and subscribe endpoints, plus the DRM proxy and multi-track video configuration. 7 paths / 7 operations.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/millicast-director"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
x-generator: NSwag v14.6.3.0 (NJsonSchema v11.5.2.0 (Newtonsoft.Json v13.0.0.0))
openapi: 3.0.0
info:
title: Director API
version: 1.0.0
servers:
- url: https://director.millicast.com
paths:
/api/director/publish:
post:
tags:
- Director
summary: Publish
description: Request for url and authorization to publish a stream.
operationId: Director_Publish
requestBody:
x-name: model
content:
application/json:
schema:
$ref: '#/components/schemas/PublishStreamModel'
examples:
? ''
: summary: ''
value:
streamName: my_stream
required: true
x-position: 1
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessPublishDirectorResponseModel'
examples:
? ''
: summary: ''
value:
status: success
data:
urls:
- wss://domain.millicast.com/ws/pub/faux
jwt: long_jwt_string
iceServers:
- urls: stun:stun.example.com:3478
- urls: turn:turn.example.com:443?transport=tcp
username: user
credential: secret
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/FailResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/FailResponse'
default:
description: Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- Token: []
x-codeSamples:
- lang: curl
source: "curl -H \"Authorization: Bearer your_api_secret\" \\\n -H \"Content-Type: application/json\" \\\n \
\ https://director.millicast.com/api/director/publish \\\n -d '{\"streamName\": \"my_stream\"}'"
/api/director/subscribe:
post:
tags:
- Director
summary: Subscribe
description: Request for url and authorization to subscribe to a stream.
operationId: Director_Subscribe
requestBody:
x-name: model
content:
application/json:
schema:
$ref: '#/components/schemas/SubscribeStreamModel'
examples:
noauth:
summary: noauth
value:
streamName: my_insecure_stream
streamAccountId: abc123
auth:
summary: auth
value:
streamName: my_secure_stream
required: true
x-position: 1
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessSubscribeDirectorResponseModel'
examples:
noauth:
summary: noauth
value:
status: success
data:
urls:
- wss://domain.millicast.com/ws/sub/faux
jwt: long_jwt_string
iceServers:
- urls: stun:stun.example.com:3478
- urls: turn:turn.example.com:443?transport=tcp
username: user
credential: secret
auth:
summary: auth
value:
status: success
data:
urls:
- wss://domain.millicast.com/ws/sub/faux
jwt: long_jwt_string
iceServers:
- urls: stun:stun.example.com:3478
- urls: turn:turn.example.com:443?transport=tcp
username: user
credential: secret
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/FailResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/FailResponse'
default:
description: Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- Token: []
x-codeSamples:
- lang: curl
source: "curl -H \"Authorization: Bearer your_api_secret\" \\\n -H \"Content-Type: application/json\" \\\n \
\ https://director.millicast.com/api/director/subscribe \\\n -d '{\"streamName\": \"my_insecure_stream\", \"\
streamAccountId\": \"abc123\"}'"
/api/drm_proxy/{licenseType}/{assetId}:
post:
tags:
- DrmLicence
operationId: DrmLicence_GetDrmLicence
parameters:
- name: licenseType
in: path
required: true
schema:
type: string
x-position: 1
- name: assetId
in: path
required: true
schema:
type: string
x-position: 2
- name: specConform
in: query
required: true
schema:
type: boolean
nullable: true
x-position: 3
responses:
'200':
description: ''
content:
application/octet-stream:
schema:
type: string
format: binary
security:
- Token: []
/api/drm_proxy/fair_play/cert:
get:
tags:
- DrmLicence
operationId: DrmLicence_GetFairplayCertificate
responses:
'200':
description: ''
content:
application/octet-stream:
schema:
type: string
format: binary
security:
- Token: []
/api/multitrackvideo/configuration:
post:
tags:
- MultiTrackVideo
summary: Configuration
description: 'Supplies multi track video configuration to OBS. Please refer to OBS for request schema. Supports OBS
schema versions: [2024-06-04, 2025-01-25].'
operationId: MultiTrackVideo_Configuration
requestBody:
x-name: json
content:
application/json:
schema: {}
required: true
x-position: 1
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/MultiTrackVideoConfigurationResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/FailResponse'
default:
description: Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- Token: []
/api/whep/{streamAccountId}/{streamName}:
post:
tags:
- Whep
summary: WHEP
description: 'WHEP endpoint for subscribers. Request body is SDP Offer. Response body will contain SDP Answer. Location
header contains remote WHEP endpoint url.
All errors are returned as plain text. If you send a request with the Accept header you must allow both mime types
`application/sdp, text/plain`.'
operationId: Whep_WhepSubscribe
parameters:
- name: streamAccountId
in: path
required: true
schema:
type: string
x-position: 1
- name: streamName
in: path
required: true
schema:
type: string
x-position: 2
- name: sourceId
in: query
schema:
type: string
nullable: true
x-position: 4
requestBody:
x-name: sdpOffer
content:
application/sdp:
schema:
type: string
examples:
? ''
: summary: ''
value: 'v=0\r\no=- ident1234 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0 1\r\na=extmap-allow-mixed\r\na=msid-semantic:
WMS ident5678\r\n...'
required: true
x-position: 3
responses:
'201':
description: Success
content:
application/sdp:
schema:
type: string
examples:
? ''
: summary: ''
value: 'v=0\r\no=- ident1234 1 IN IP4 127.0.0.1\r\ns=semantic-sdp\r\nc=IN IP4 0.0.0.0\r\nt=0 0\r\na=ice-lite\r\na=msid-semantic:
WMS *\r\na=group:BUNDLE 0 1\r\n...'
'400':
description: Bad Request
content:
text/plain:
schema:
type: string
examples:
? ''
: summary: ''
value: 'Validation errors:
A non-empty request body is required.'
'401':
description: Unauthorized
content:
text/plain:
schema:
type: string
examples:
? ''
: summary: ''
value: 'Unauthorized: authentication_error_reason'
'409':
description: Conflict
content:
text/plain:
schema:
type: string
examples:
? ''
: summary: ''
value: Stream not found
'500':
description: Server Error
content:
text/plain:
schema:
type: string
security:
- Token: []
x-codeSamples:
- lang: curl
source: "curl -H \"Authorization: Bearer your_api_secret\" \\\n -H \"Content-Type: application/sdp\" \\\n \
\ https://director.millicast.com/api/whep/abc123/my_stream \\\n -d 'v=0\\r\\no=- ident1234 2 IN IP4 127.0.0.1\\\
r\\ns=-\\r\\nt=0 0\\r\\na=group:BUNDLE 0 1\\r\\na=extmap-allow-mixed\\r\\na=msid-semantic: WMS ident5678\\r\\n...'"
/api/whip/{streamName}:
post:
tags:
- Whip
summary: WHIP
description: 'WHIP endpoint for publishers. Request body is SDP Offer. Response body will contain SDP Answer. Location
header contains remote WHIP endpoint url.
All errors are returned as plain text. If you send a request with the Accept header you must allow both mime types
`application/sdp, text/plain`.'
operationId: Whip_WhipPublish
parameters:
- name: streamName
in: path
required: true
schema:
type: string
x-position: 1
- name: codec
in: query
schema:
type: string
default: h264
nullable: true
x-position: 3
- name: sourceId
in: query
schema:
type: string
nullable: true
x-position: 4
requestBody:
x-name: sdpOffer
content:
application/sdp:
schema:
type: string
examples:
? ''
: summary: ''
value: 'v=0\r\no=- ident1234 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0 1\r\na=extmap-allow-mixed\r\na=msid-semantic:
WMS ident5678\r\n...'
required: true
x-position: 2
responses:
'201':
description: Success
content:
application/sdp:
schema:
type: string
examples:
? ''
: summary: ''
value: 'v=0\r\no=- ident1234 1 IN IP4 127.0.0.1\r\ns=semantic-sdp\r\nc=IN IP4 0.0.0.0\r\nt=0 0\r\na=ice-lite\r\na=msid-semantic:
WMS *\r\na=group:BUNDLE 0 1\r\n...'
'400':
description: Bad Request
content:
text/plain:
schema:
type: string
examples:
? ''
: summary: ''
value: 'Validation errors:
A non-empty request body is required.'
'401':
description: Unauthorized
content:
text/plain:
schema:
type: string
examples:
? ''
: summary: ''
value: 'Unauthorized: authentication_error_reason'
'500':
description: Server Error
content:
text/plain:
schema:
type: string
security:
- Token: []
x-codeSamples:
- lang: curl
source: "curl -H \"Authorization: Bearer your_api_secret\" \\\n -H \"Content-Type: application/sdp\" \\\n \
\ https://director.millicast.com/api/whip/my_stream \\\n -d 'v=0\\r\\no=- ident1234 2 IN IP4 127.0.0.1\\r\\\
ns=-\\r\\nt=0 0\\r\\na=group:BUNDLE 0 1\\r\\na=extmap-allow-mixed\\r\\na=msid-semantic: WMS ident5678\\r\\n...'"
components:
schemas:
SuccessPublishDirectorResponseModel:
type: object
additionalProperties: false
required:
- status
- data
properties:
status:
type: string
default: success
minLength: 1
data:
$ref: '#/components/schemas/PublishDirectorResponseModel'
PublishDirectorResponseModel:
type: object
additionalProperties: false
properties:
wsUrl:
type: string
deprecated: true
x-deprecatedMessage: Use Urls property
urls:
type: array
items:
type: string
jwt:
type: string
iceServers:
type: array
items:
$ref: '#/components/schemas/IceServerModel'
streamAccountId:
type: string
drmObject:
nullable: true
oneOf:
- $ref: '#/components/schemas/DrmLicenseServers'
subscribeRequiresAuth:
type: boolean
IceServerModel:
type: object
additionalProperties: false
properties:
urls:
type: array
items:
type: string
username:
type: string
nullable: true
credential:
type: string
nullable: true
DrmLicenseServers:
type: object
additionalProperties: false
properties:
widevineUrl:
type: string
nullable: true
fairPlayUrl:
type: string
nullable: true
fairPlayCertUrl:
type: string
nullable: true
FailResponse:
type: object
additionalProperties: false
required:
- status
- data
properties:
status:
type: string
default: fail
minLength: 1
data: {}
ErrorResponse:
type: object
additionalProperties: false
required:
- status
- message
properties:
status:
type: string
default: error
minLength: 1
message:
type: string
minLength: 1
code:
type: integer
format: int32
nullable: true
data:
nullable: true
PublishStreamModel:
type: object
additionalProperties: false
required:
- streamName
properties:
streamName:
type: string
minLength: 1
streamAccountId:
type: string
nullable: true
SuccessSubscribeDirectorResponseModel:
type: object
additionalProperties: false
required:
- status
- data
properties:
status:
type: string
default: success
minLength: 1
data:
$ref: '#/components/schemas/DirectorResponseModel'
DirectorResponseModel:
type: object
additionalProperties: false
properties:
wsUrl:
type: string
deprecated: true
x-deprecatedMessage: Use Urls property
urls:
type: array
items:
type: string
jwt:
type: string
iceServers:
type: array
items:
$ref: '#/components/schemas/IceServerModel'
streamAccountId:
type: string
drmObject:
nullable: true
oneOf:
- $ref: '#/components/schemas/DrmLicenseServers'
SubscribeStreamModel:
type: object
additionalProperties: false
required:
- streamName
properties:
streamName:
type: string
minLength: 1
streamAccountId:
type: string
description: Required **only** for published streams which have `subscribeRequiresAuth=false`.
nullable: true
MultiTrackVideoConfigurationResponse:
type: object
additionalProperties: false
properties:
meta:
nullable: true
oneOf:
- $ref: '#/components/schemas/Meta'
ingest_endpoints:
type: array
nullable: true
items:
$ref: '#/components/schemas/IngestEndpoint'
encoder_configurations:
type: array
nullable: true
items:
$ref: '#/components/schemas/EncoderConfiguration'
audio_configurations:
nullable: true
oneOf:
- $ref: '#/components/schemas/AudioConfigurations'
Meta:
type: object
additionalProperties: false
properties:
schema_version:
type: string
nullable: true
service:
type: string
nullable: true
config_id:
type: string
nullable: true
IngestEndpoint:
type: object
additionalProperties: false
properties:
protocol:
type: string
nullable: true
url_template:
type: string
nullable: true
authentication:
type: string
nullable: true
EncoderConfiguration:
type: object
additionalProperties: false
properties:
type:
type: string
nullable: true
bitrate_interpolation_points:
type: array
nullable: true
items:
type: integer
format: int32
canvas_index:
type: integer
format: int32
framerate:
nullable: true
oneOf:
- $ref: '#/components/schemas/Framerate'
gpu_scale_type:
type: string
nullable: true
width:
type: integer
format: int32
height:
type: integer
format: int32
settings:
nullable: true
oneOf:
- $ref: '#/components/schemas/EncoderConfigurationSettings'
Framerate:
type: object
additionalProperties: false
properties:
numerator:
type: integer
format: int32
denominator:
type: integer
format: int32
EncoderConfigurationSettings:
type: object
additionalProperties: false
properties:
bitrate:
type: integer
format: int32
bf:
type: integer
format: int32
bframes:
type: integer
format: int32
keyint:
type: integer
format: int32
nullable: true
keyint_sec:
type: integer
format: int32
lookahead:
type: boolean
preset2:
type: string
nullable: true
profile:
type: string
nullable: true
psycho_aq:
type: boolean
rate_control:
type: string
nullable: true
tune:
type: string
nullable: true
latency:
type: string
nullable: true
target_usage:
type: string
nullable: true
AudioConfigurations:
type: object
additionalProperties: false
properties:
live:
type: array
nullable: true
items:
$ref: '#/components/schemas/AudioConfiguration'
vod:
type: array
nullable: true
items:
$ref: '#/components/schemas/AudioConfiguration'
AudioConfiguration:
type: object
additionalProperties: false
properties:
codec:
type: string
nullable: true
track_id:
type: integer
format: int32
channels:
type: integer
format: int32
settings:
nullable: true
oneOf:
- $ref: '#/components/schemas/AudioConfigurationSettings'
AudioConfigurationSettings:
type: object
additionalProperties: false
properties:
bitrate:
type: integer
format: int32
SdpOffer:
type: object
additionalProperties: false
properties:
sdp:
type: string
securitySchemes:
Token:
type: http
description: '### Usage
#### Acquire token from dashboard or api.
Token will be specific to publishing or subscribing.'
scheme: bearer
security:
- Token: []
x-code-samples-replace: {}