Dolby OptiView Real-time Streaming (Millicast)

Millicast API - sub-second WebRTC streaming at scale: publish/subscribe tokens, streams, transcoders, media assets and distributions, recordings, clipping, geo rules, webhooks and analytics. 98 paths / 129 operations, 30 of them marked deprecated in the live specification.

Operations 129

PUT /api/v3/account/media/expiration Update Account Media Assets Expiration Rules #
GET /api/v3/account/media/expiration Get Account Media Assets Expiration Rule #
GET /api/v3/account/media/storage List Storage Profiles #
POST /api/v3/account/media/storage Create Storage Profile #
DELETE /api/v3/account/media/storage/{id} Delete Storage Profile #
GET /api/v3/account/media/storage/{id} Get Storage Profile #
PUT /api/v3/account/media/storage/{id} Update Storage Profile #
POST /api/v3/account/media/storage/validate Validate Third Party Storage Setup #
GET /api/v3/account/distribution Read Account Distribution Settings #
PUT /api/v3/account/distribution Update Account Distribution Settings #
GET /api/v3/account/security Read Account Security Settings #
PUT /api/v3/account/security Update Account Security Settings #
GET /api/v3/account/info Read Account Info #
POST /api/v3/media/assets Create Media Asset #
GET /api/v3/media/assets List Media Assets #
DELETE /api/v3/media/assets Delete Media Assets #
POST /api/v3/media/assets/upload Generate Upload Credentials #
POST /api/v3/media/assets/register Register Media Asset #
GET /api/v3/media/assets/{mediaAssetId} Read Media Asset #
PATCH /api/v3/media/assets/{mediaAssetId} Update Media Asset #
DELETE /api/v3/media/assets/all/{type} Delete All Media Assets #
GET /api/v2/record_files/list List Media Assets #
GET /api/v2/record_files/{mediaAssetId} Read Media Asset #
POST /api/v2/record_files/delete Delete Media Assets #
PUT /api/v2/publish_token/{tokenId} Update Token #
PUT /api/v2/subscribe_token/{tokenId} Update Token #
GET /api/analytics/account/total Account Total #
GET /api/analytics/account/series Account Series #
GET /api/analytics/account/geo_total Account Geo Total #
GET /api/analytics/account/geo_series Account Geo Series #
GET /api/analytics/streams/total Streams Total #
GET /api/analytics/streams/series Streams Series #
GET /api/analytics/streams/geo_total Streams Geo Total #
GET /api/analytics/streams/geo_series Streams Geo Series #
GET /api/analytics/account/geo Account Geo #
GET /api/analytics/streams/geo Streams Geo #
GET /api/analytics/tracking/streams/total Total bandwidth per TrackingID per stream #
GET /api/analytics/tracking/streams/series Series bandwidth per TrackingID per stream #
GET /api/analytics/tracking/total Total bandwidth for streams specified by TrackingID #
GET /api/analytics/tracking/series Series bandwidth for streams specified by TrackingID #
GET /api/analytics/transcoder/total Get Total Transcoder Minutes #
GET /api/analytics/transcoder/series Get Transcoder Minutes Series #
GET /api/analytics/clip/series Get Clip Minutes Series #
GET /api/analytics/storage/series Get Storage GB-hours Series #
GET /api/analytics/media/storage/usage Usage #
GET /api/analytics/media/storage/usage/billing Usage Billable #
GET /api/analytics/drm/series DRM Daily Usage #
GET /api/analytics/drm/total DRM Total Usage #
GET /api/encoders/profiles Get Account Encoder Profiles #
POST /api/v3/media/distributions Create Media Distribution #
GET /api/v3/media/distributions List Media Distributions #
GET /api/v3/media/distributions/{id} Read Media Distribution #
PATCH /api/v3/media/distributions/{id} Update Media Distribution #
DELETE /api/v3/media/distributions/{id} Delete Media Distribution #
GET /api/v3/media/distributions/{id}/security/keys Get all security keys of a media distribution by ID #
POST /api/v3/media/distributions/{id}/security/keys Create a new security key for a media distribution #
DELETE /api/v3/media/distributions/{id}/security/keys/{keyId} Delete a media distribution security key #
GET /api/monitoring/streams List Streams #
GET /api/monitoring/streams/{streamName} Stream Details #
GET /api/monitoring/summary List Stream Summary #
GET /api/monitoring/summary/{streamName} Stream Summary #
GET /api/transcoders/{transcoderId} Get Transcoder #
PUT /api/transcoders/{transcoderId} Update Transcoder #
DELETE /api/transcoders/{transcoderId} Delete Transcoder #
POST /api/transcoders Create Transcoder #
GET /api/transcoders List Transcoders #
PUT /api/transcoders/start/{transcoderId} Start Transcoder #
PUT /api/transcoders/stop/{transcoderId} Stop Transcoder #
GET /api/transcoders/instances/{instanceId} Get Transcoder Instance #
GET /api/transcoders/instances List Transcoder Instances #
GET /api/transcoders/profiles List Transcoder Profiles #
POST /api/transcoders/schedule Create Transcoder Schedule #
DELETE /api/transcoders/schedule/{scheduleId} Delete Transcoder Schedule #
PUT /api/transcoders/schedule/{scheduleId} Update Transcoder Schedule #
GET /api/transcoders/schedule/{scheduleId} Get Transcoder Schedule #
GET /api/transcoders/schedule/list List Transcoder Schedules #
GET /api/transcoders/{transcoderId}/schedule/list Get Schedules By Transcoder #
GET /api/account/geo_cascade Read Account Geo Cascade Settings #
PUT /api/account/geo_cascade Update Account Geo Cascade Settings #
GET /api/cluster Read Clusters #
PUT /api/cluster Update Cluster #
GET /api/geo/account Read Account Geo Restrictions #
POST /api/geo/account Update Account Geo Restrictions #
GET /api/publish_token/{tokenId} Read Token #
DELETE /api/publish_token/{tokenId} Delete Token #
PUT /api/publish_token/{tokenId} Update Token #
GET /api/publish_token/list List Tokens #
GET /api/publish_token/list_by_name List Tokens By Name #
GET /api/publish_token/list_by_cluster List Tokens By Cluster #
POST /api/publish_token Create Token #
GET /api/publish_token/active Get active Publish Token ID #
GET /api/publish_token/active/all Get all active Publish Token IDs #
PATCH /api/publish_token/disable Disable Publish Token(s) #
POST /api/publish_token/{tokenId}/restream/sync Sync restreams #
GET /api/record_files/{recordFileId} Read File #
DELETE /api/record_files/{recordFileId} Delete File #
POST /api/record_files/delete Delete Files #
POST /api/record_files/delete/all Delete All Files #
GET /api/record_files/list List Files #
GET /api/record_files/list_by_token List Files By Token #
GET /api/record_files/list_by_stream List Files By Stream #
GET /api/record_files/usage Usage #
GET /api/record_files/usage_billing Usage Billable #
POST /api/record_files/clip Create Clip #
GET /api/record_files/clip/{clipRequestId} Get Clip Request #
DELETE /api/record_files/clip/{clipRequestId} Delete Clip Request #
GET /api/record_files/clip/list List Clip Requests #
GET /api/record_files/clip/sources List Available Clip Sources #
POST /api/record_files/storage_profiles/validate Validate Third Party Storage Setup #
POST /api/record_files/clip/sources/expiry Update Clip Source Expiry Rule #
GET /api/record_files/clip/sources/expiry Get Clip Source Expiry Rule #
DELETE /api/record_files/clip/sources/expiry Delete Clip Source Expiry Rule #
POST /api/record_files/clip/sources/delete Delete Clip Sources #
POST /api/stream/stop Stop an active stream #
POST /api/stream/stop/all Stop all active streams #
POST /api/stream/reprioritize Reprioritize an active stream #
GET /api/subscribe_token/{tokenId} Read Token #
DELETE /api/subscribe_token/{tokenId} Delete Token #
PUT /api/subscribe_token/{tokenId} Update Token #
GET /api/subscribe_token/list List Tokens #
GET /api/subscribe_token/list_by_name List Tokens By Name #
POST /api/subscribe_token Create Token #
POST /api/thumbnails Trigger Thumbnail #
GET /api/webhooks/{webhookId} Read Webhook #
PUT /api/webhooks/{webhookId} Update Webhook #
DELETE /api/webhooks/{webhookId} Remove Webhook #
GET /api/webhooks/list List Webhooks #
POST /api/webhooks Add Webhook #
POST /api/webhooks/test/{webhookType} Test Webhook #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/real-time-millicast"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

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.

OpenAPI Specification

dolby-millicast-api-openapi.yml Raw ↑
x-generator: NSwag v14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))
openapi: 3.0.0
info:
  title: Millicast API
  description: '# Introduction

    Controlling publishing for your Millicast account.'
  version: 1.0.0
servers:
- url: https://api.millicast.com
paths:
  /api/v3/account/media/expiration:
    put:
      tags:
      - Account
      summary: Update Account Media Assets Expiration Rules
      description: Update account level expiration rule for various media asset types.
      operationId: Account_UpdateExpirationRules
      requestBody:
        x-name: model
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateMediaAssetExpirationModel'
        required: true
        x-position: 1
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponseOfMediaAssetExpirationResponseModel'
        default:
          description: Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                general:
                  summary: general
                  value:
                    status: error
                    message: simple error reason
                    code: 500
                    data:
                      additional: other data here (not actual key)
      security:
      - API_Secret: []
    get:
      tags:
      - Account
      summary: Get Account Media Assets Expiration Rule
      description: Get account level expiration rule for various media asset types.
      operationId: Account_GetExpirationRules
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponseOfMediaAssetExpirationResponseModel'
        default:
          description: Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                general:
                  summary: general
                  value:
                    status: error
                    message: simple error reason
                    code: 500
                    data:
                      additional: other data here (not actual key)
      security:
      - API_Secret: []
  /api/v3/account/media/storage:
    get:
      tags:
      - Account
      summary: List Storage Profiles
      description: List all storage profiles created on your account.
      operationId: Account_ListStorageProfiles
      parameters:
      - name: sort
        in: query
        schema:
          default: name
          nullable: true
          oneOf:
          - $ref: '#/components/schemas/ListStorageProfilesSortBy'
        x-position: 1
      - name: default
        in: query
        description: Set to true to get the default storage profile on your account
        schema:
          type: boolean
          nullable: true
        x-position: 2
      - name: page
        in: query
        schema:
          type: integer
          default: 1
          maximum: 2147483647.0
          minimum: 1.0
        x-position: 3
      - name: limit
        in: query
        schema:
          type: integer
          default: 25
          maximum: 100.0
          minimum: 1.0
        x-position: 4
      - name: desc
        in: query
        schema:
          type: boolean
          default: false
        x-position: 5
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponseOfListOfStorageProfileResponseModel'
        default:
          description: Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                general:
                  summary: general
                  value:
                    status: error
                    message: simple error reason
                    code: 500
                    data:
                      additional: other data here (not actual key)
      security:
      - API_Secret: []
    post:
      tags:
      - Account
      summary: Create Storage Profile
      description: Create a storage profile identifying the configuration for a cloud storage provider that can receive media
        assets when they are finished processing. Only one storage profile will be set as a default for the entire account,
        otherwise you may specify a storage location using the `storageProfileId` on any individual media clip request.
      operationId: Account_CreateStorageProfile
      requestBody:
        x-name: model
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateStorageProfileModel'
        required: true
        x-position: 1
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponseOfStorageProfileResponseModel'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FailResponse'
        default:
          description: Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                general:
                  summary: general
                  value:
                    status: error
                    message: simple error reason
                    code: 500
                    data:
                      additional: other data here (not actual key)
      security:
      - API_Secret: []
  /api/v3/account/media/storage/{id}:
    delete:
      tags:
      - Account
      summary: Delete Storage Profile
      description: Specify the id of a storage profile you wish to delete.
      operationId: Account_DeleteStorageProfile
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
        x-position: 1
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponseOfBoolean'
        default:
          description: Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                general:
                  summary: general
                  value:
                    status: error
                    message: simple error reason
                    code: 500
                    data:
                      additional: other data here (not actual key)
      security:
      - API_Secret: []
    get:
      tags:
      - Account
      summary: Get Storage Profile
      description: Get details of a saved storage profile
      operationId: Account_GetStorageProfile
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
        x-position: 1
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponseOfStorageProfileResponseModel'
        default:
          description: Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                general:
                  summary: general
                  value:
                    status: error
                    message: simple error reason
                    code: 500
                    data:
                      additional: other data here (not actual key)
      security:
      - API_Secret: []
    put:
      tags:
      - Account
      summary: Update Storage Profile
      description: Change the details of a storage profile.
      operationId: Account_UpdateStorageProfile
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
        x-position: 1
      requestBody:
        x-name: updateModel
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateStorageProfileModel'
        required: true
        x-position: 2
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponseOfStorageProfileResponseModel'
        default:
          description: Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                general:
                  summary: general
                  value:
                    status: error
                    message: simple error reason
                    code: 500
                    data:
                      additional: other data here (not actual key)
      security:
      - API_Secret: []
  /api/v3/account/media/storage/validate:
    post:
      tags:
      - Account
      summary: Validate Third Party Storage Setup
      description: "Validates third party storage is configured with permissions for Dolby.io to upload media assets.\n\n\
        \ To track the validation result, keep note of the the `id` returned in the response body. If correctly configured,\
        \ when calling [Read Media Asset](#tag/MediaAssets/operation/MediaAssets_ReadMediaAsset), the response should return\
        \ a successful entry with `id` matching the `id`.\n\n Run once to validate write permissions. If successful, optionally\
        \ run a second time to confirm that overwriting is allowed.\n\n Note that validation results are only available for\
        \ 1 hour."
      operationId: Account_ValidateThirdPartyStorage
      requestBody:
        x-name: storageModel
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MediaAssetStorageModel'
        required: true
        x-position: 1
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponseOfSuccessValidateRecordStorageResponse'
        default:
          description: Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                general:
                  summary: general
                  value:
                    status: error
                    message: simple error reason
                    code: 500
                    data:
                      additional: other data here (not actual key)
      security:
      - API_Secret: []
  /api/v3/account/distribution:
    get:
      tags:
      - Account
      summary: Read Account Distribution Settings
      description: "Gets account wide distribution settings. Whenever publish tokens are created, these will be the default\
        \ settings used for features that impact how streams are distributed.\n * geoCascade: controls if and which geographic\
        \ clusters are included for regional content delivery"
      operationId: Account_GetAccountDistribution
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponseOfAccountDistributionModel'
              examples:
                success:
                  summary: success
                  value:
                    status: success
                    data:
                      geoCascade:
                        isEnabled: true
                        clusters:
                        - phx-1
                        - ams-1
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FailResponse'
        default:
          description: Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                general:
                  summary: general
                  value:
                    status: error
                    message: simple error reason
                    code: 500
                    data:
                      additional: other data here (not actual key)
      security:
      - API_Secret: []
    put:
      tags:
      - Account
      summary: Update Account Distribution Settings
      description: 'Update account wide distribution settings to enable/disable the feature or update the account default
        cluster list. Whenever publish tokens are created, these will be the default settings used for features that impact
        how streams are distributed.

        ''["all"]'' could be used in place of cluster list to cascade stream to all existing and any future clusters available
        to the account.

        Empty cluster list is not allowed when enabling account wide distribution settings. Cluster list is translated to
        ''["all"]'' clusters if not specified or set to null.

        Cluster list is ignored when geo cascade is disabled.'
      operationId: Account_UpdateAccountDistribution
      requestBody:
        x-name: model
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AccountDistributionModel'
            examples:
              update:
                summary: update
                value:
                  geoCascade:
                    isenabled: true
                    clusters:
                    - phx-1
                    - ams-1
                    - lon-1
        required: true
        x-position: 1
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponseOfAccountDistributionModel'
              examples:
                success:
                  summary: success
                  value:
                    status: success
                    data:
                      geoCascade:
                        isEnabled: true
                        clusters:
                        - phx-1
                        - ams-1
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FailResponse'
              examples:
                failure:
                  summary: failure
                  value:
                    status: fail
                    data:
                      message: Geo cascade Clusters list cannot be empty
        default:
          description: Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                general:
                  summary: general
                  value:
                    status: error
                    message: simple error reason
                    code: 500
                    data:
                      additional: other data here (not actual key)
      security:
      - API_Secret: []
  /api/v3/account/security:
    get:
      tags:
      - Account
      summary: Read Account Security Settings
      description: Gets account wide security settings. If a Token (either Publish or Subscribe) does not define any security
        settings, the account wide rules are used.
      operationId: Account_GetAccountSecurity
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessAccountGeoRestrictions'
              examples:
                allowed:
                  summary: allowed
                  value:
                    status: success
                    data:
                      allowedCountries:
                      - US
                      deniedCountries: []
                denied:
                  summary: denied
                  value:
                    status: success
                    data:
                      allowedCountries: []
                      deniedCountries:
                      - UK
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FailResponse'
        default:
          description: Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                general:
                  summary: general
                  value:
                    status: error
                    message: simple error reason
                    code: 500
                    data:
                      additional: other data here (not actual key)
      security:
      - API_Secret: []
    put:
      tags:
      - Account
      summary: Update Account Security Settings
      description: Update account wide security settings. Updated to an empty array `[]` removes all rules of that type.
      operationId: Account_UpdateAccountSecurity
      requestBody:
        x-name: model
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateAccountGeoModel'
            examples:
              allowed:
                summary: allowed
                value:
                  allowedCountries:
                  - US
                  deniedCountries: []
              denied:
                summary: denied
                value:
                  allowedCountries: []
                  deniedCountries:
                  - UK
        required: true
        x-position: 1
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessAccountGeoRestrictions'
              examples:
                allowed:
                  summary: allowed
                  value:
                    status: success
                    data:
                      allowedCountries:
                      - US
                      deniedCountries: []
                denied:
                  summary: denied
                  value:
                    status: success
                    data:
                      allowedCountries: []
                      deniedCountries:
                      - UK
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FailResponse'
        default:
          description: Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                general:
                  summary: general
                  value:
                    status: error
                    message: simple error reason
                    code: 500
                    data:
                      additional: other data here (not actual key)
      security:
      - API_Secret: []
  /api/v3/account/info:
    get:
      tags:
      - Account
      summary: Read Account Info
      description: Returns basic information about the authenticated account, including its `accountId` (the public account
        identifier used in stream IDs, e.g. `<accountId>/<streamName>`).
      operationId: Account_GetAccountInfo
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponseOfAccountInfoResponseModel'
              examples:
                success:
                  summary: success
                  value:
                    status: success
                    data:
                      accountId: abc123
        default:
          description: Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                general:
                  summary: general
                  value:
                    status: error
                    message: simple error reason
                    code: 500
                    data:
                      additional: other data here (not actual key)
      security:
      - API_Secret: []
  /api/v3/media/assets:
    post:
      tags:
      - MediaAssets
      summary: Create Media Asset
      description: "Create a live clip from an ongoing live stream. You must provide the stream name and start time, and once\
        \ processing is complete the media asset of the type clip will be available for retrieval.\n\nIf a stop time is not\
        \ specified, the time the request was received will be used. The clip duration must be a minimum of ten (10) seconds\
        \ and cannot exceed eight (8) hours.\n\n There are a few cases where more than one clip will be generated from a single\
        \ request.\n\n 1. A stream went offline during the time range will generate separate clips for the period before and\
        \ after the restart.\n2. A stream that is configured for multi-source when a simulcastId is not given in the request\
        \ to select a single layer.\n 3. A stream that is configured for multi-bitrate contribution or redundant fallback\
        \ ingest and a sourceId is not given in the request to specify which to use. In that scenario, sources will be ranked\
        \ based on the following criteria and the highest ranked source is selected for clipping:\n * priority\n* quality\n\
        * start time\n\n\n By using an `Idempotency-Key` header in your requests, you can avoid generating more than one identical\
        \ clip should the same request be received more than once. To avoid unnecessary charges, it is recommended you use\
        \ a common identifier for live clip requests based on a common source stream and time range. For background on the\
        \ usage of this header, please refer to the [IETF Draft](https://datatracker.ietf.org/doc/draft-ietf-httpapi-idempotency-key-header/)"
      operationId: MediaAssets_CreateMediaAsset
      requestBody:
        x-name: model
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateMediaAssetModel'
        required: true
        x-position: 1
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponseOfListOfMediaAssetResponseModel'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FailResponse'
        default:
          description: Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                general:
                  summary: general
                  value:
                    status: error
                    message: simple error reason
                    code: 500
                    data:
                      additional: other data here (not actual key)
      security:
      - API_Secret: []
    get:
      tags:
      - MediaAssets
      summary: List Media Assets
      description: "List media assets, excluding those that have been deleted.\nA media asset can be:\n* A `\"recording\"\
        ` that is from the full duration of the stream\n* A `\"clip\"` which is generated from [Create Media Asset](#tag/MediaAssets/operation/MediaAssets_CreateMediaAsset)\n\
        * A `\"timeline\"` which is a series of segments that is buffered in a cache and available for clipping.  A `\"timeline\"\
        ` is capped at a 12 hour duration or whenever the stream is re-started.\n * Of type `storageValidation`, which is\
        \ a record reflecting the outcome of triggering [Validate Third Party Storage Setup](#tag/Account/operation/Account_ValidateThirdPartyStorage)"
      operationId: MediaAssets_ListMediaAssets
      parameters:
      - name: sort
        in: query
        schema:
          default: startTime
          nullable: true
          oneOf:
          - $ref: '#/components/schemas/ListMediaAssetSortBy'
        x-position: 1
      - name: status
        in: query
        style: form
        explode: true
        description: 'Defaults to "Processing" and "Complete" unless specified. '
        schema:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/MediaAssetStatus'
        x-position: 2
      - name: type
        in: query
        style: form
        explode: true
        description: Optional. Defaults to "Clip" and "Recording" unless specified.
        schema:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/MediaAssetType'
        x-position: 3
      - name: name
        in: query
        description: 'Optional. Filter by media asset name. '
        schema:
          type: string
          nullable: true
        x-position: 4
      - name: streamName
        in: query
        description: Optional.
        schema:
          type: string
          nullable: true
        x-position: 5
      - name: tokenId
        in: query
        description: Optional.
        schema:
          type: integer
          nullable: true
        x-position: 6
      - name: sourceId
        in: query
        description: Optional.
        schema:
          type: string
          nullable: true
        x-position: 7
      - name: simulcastId
        in: query
        description: 'Optional. If the query parameter is provided without specifying a value, i.e. `?simulcastId&...`, response
          will return entries where the simulcastId is an empty string. There is no filter for unset or `null` simulcastIds. '
        schema:
          type: string
          nullable: true
        x-position: 8
      - name: priority
        in: query
        description: Optional.
        schema:
          type: integer
          format: int32
          nullable: true
        x-position: 9
      - name: page
        in: query
        schema:
          type: integer
          default: 1
          maximum: 2147483647.0
          minimum: 1.0
        x-position: 10
      - name: limit
        in: query
        schema:
          type: integer
          default: 25
          maximum: 100.0
          minimum: 1.0
        x-position: 11
      - name: desc
        in: query
        schema:
          type: boolean
          default: false
        x-position: 12
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponseOfListOfDownloadMediaAssetModel'
        '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:
      - API_Secret: []
    delete:
      tags:
      - MediaAssets
      summary: Delete Media Assets
      description: Deletes multiple media assets from storage. Only media assets with status Complete or Error can be deleted.
      operationId: MediaAssets_DeleteMediaAssets
      parameters:
      - name: id
        in: query
        style: form
        explode: true
        required: true
        description: A list of media asset identifiers to delete.
        schema:
          type: array
          maxItems: 100
          minItems: 1
          nullable: true
          items:
            type: string
        x-position: 1
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponseOfDeleteMediaAssetsResponse'
        default:
          description: Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                general:
                  summary: general
                  value:
                    status: error
                    message: simple error reason
                    code: 500
                    data:
                      additional: other data here (not actual key)
      security:
      - API_Secret: []
  /api/v3/media/assets/upload:
    post:
      tags:
      - MediaAssets
      summary: Generate Upload Credentials
      description: Generate AWS access credentials for uploading media to a specified S3 location within the Dolby system.
      operationId: MediaAssets_GetUploadCredentials
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponseOfUploadCredentialsResponseModel'
              examples:
                simple:
                  summary: simple
                  value:
                    status: success
                    data:
                    - path: s3://optiview-bucket/account-id/session-name/
                      buckeName: optiview-bucket
                      objectPrefix: account-id/session-name
                      accessKeyId: '[redacted]'
                      secretAccessKey: '[redacted]'
                      sessionToken: '[redacted]'
                      expiration: '2025-09-16T13:24:23Z'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FailResponse'
        default:
          description: Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                general:
                  summary: general
                  value:
                    status: error
                    message: simple error reason
                    code: 500
                    data:
                      additional: other data here (not actual key)
      security:
      - API_Secret: []
  /api/v3/media/assets/register:
    post:
      tags:
      - MediaAssets
      summary: Register Media Asset
      description: Register media asset upon completion of content upload. Call this after generating credentials to upload
        and then uploading your media. This will cause our service to scan the upload location for completed uploads.
      operationId: MediaAssets_RegisterMediaAsset
      requestBody:
        x-name: model
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RegisterMediaAssetModel'
            examples:
              mp4:
                summary: mp4
                value:
                  objectPrefix: optiview-bucket/account-id/session-name/custom-prefix/my-asset.mp4
              hls:
                summary: hls
                value:
                  objectPrefix: optiview-bucket/account-id/session-name/custom-prefix
                  entrypoint: main.m3u8
        required: true
        x-position: 1
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponseOfMedia

# --- truncated at 32 KB (609 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/dolby/refs/heads/main/openapi/dolby-millicast-api-openapi.yml