Mux · Arazzo Workflow

Mux Direct Upload to Ready Asset

Version 1.0.0

Create a direct upload URL, poll the upload until Mux creates an asset, then poll the asset until it is ready to play.

1 workflow 2 source APIs 1 provider
View Spec View on GitHub Video InfrastructureVideo StreamingLive StreamingVideo AnalyticsVideo AIEncodingArazzoWorkflows

Provider

mux-com

Workflows

direct-upload-to-asset
Create a direct upload, wait for the asset to be created, and wait for it to become ready.
Creates a direct upload URL with new asset settings, polls the upload for an asset_id, then polls the resulting asset until it reaches the ready state.
3 steps inputs: corsOrigin, playbackPolicy outputs: assetId, playbackIds, status, uploadId, uploadUrl
1
createUpload
Create a new direct upload, returning a signed URL the client uses to PUT the source file plus the upload id used to track ingest progress.
2
waitForAsset
Poll the upload until Mux has finished ingesting the PUT file and created an asset, exposing the new asset id.
3
waitForAssetReady
Poll the asset created by the upload until its status reaches ready, meaning playback IDs can be streamed.

Source API Descriptions

Arazzo Workflow Specification

Raw ↑
arazzo: 1.0.1
info:
  title: Mux Direct Upload to Ready Asset
  summary: Create a direct upload URL, poll the upload until Mux creates an asset, then poll the asset until it is ready to play.
  description: >-
    The canonical Mux Video ingest pattern for browser or server uploads. The
    workflow creates a direct upload (returning a signed Google Cloud Storage
    URL the client PUTs the file to), polls the upload record until Mux reports
    that an asset has been created from the uploaded file, and then polls that
    asset until its status flips to ready so a playback ID can be used. Every
    step spells out its request inline so the flow can be read and executed
    without opening the underlying OpenAPI description.
  version: 1.0.0
  x-realizes-capability-ids:
  - BC-3710
  - BC-3710.10
  x-capability-derivation:
    method: 'deterministic join: sourceDescriptions -> per-tag OpenAPI -> tag/capability edge. No classification at this step.'
    min_confidence: 0.7
    sources:
    - capability_id: BC-3710
      capability_name: Media Asset Management
      spec: mux-com-assets-api-openapi.yml
      confidence: 0.9
    - capability_id: BC-3710.10
      capability_name: Asset Ingest & Quality Control
      spec: mux-com-direct-uploads-api-openapi.yml
      confidence: 0.78
    model: Turbo EA Capabilities by Vincent Verdet — Turbo EA, https://github.com/vincentmakes/turbo-ea-capabilities, CC BY 4.0
sourceDescriptions:
- name: assetsApi
  url: ../openapi/mux-com-assets-api-openapi.yml
  type: openapi
- name: directUploadsApi
  url: ../openapi/mux-com-direct-uploads-api-openapi.yml
  type: openapi
workflows:
- workflowId: direct-upload-to-asset
  summary: Create a direct upload, wait for the asset to be created, and wait for it to become ready.
  description: >-
    Creates a direct upload URL with new asset settings, polls the upload for an
    asset_id, then polls the resulting asset until it reaches the ready state.
  inputs:
    type: object
    required:
    - corsOrigin
    properties:
      corsOrigin:
        type: string
        description: The web origin allowed to PUT to the returned upload URL (e.g. https://example.com).
      playbackPolicy:
        type: string
        description: Playback policy applied to the asset created from this upload (public or signed).
        default: public
  steps:
  - stepId: createUpload
    description: >-
      Create a new direct upload, returning a signed URL the client uses to PUT
      the source file plus the upload id used to track ingest progress.
    operationId: createUpload
    requestBody:
      contentType: application/json
      payload:
        cors_origin: $inputs.corsOrigin
        new_asset_settings:
          playback_policies:
          - $inputs.playbackPolicy
    successCriteria:
    - condition: $statusCode == 201
    outputs:
      uploadId: $response.body#/data/id
      uploadUrl: $response.body#/data/url
      uploadStatus: $response.body#/data/status
  - stepId: waitForAsset
    description: >-
      Poll the upload until Mux has finished ingesting the PUT file and created
      an asset, exposing the new asset id.
    operationId: getUpload
    parameters:
    - name: UPLOAD_ID
      in: path
      value: $steps.createUpload.outputs.uploadId
    successCriteria:
    - condition: $statusCode == 200
    - context: $response.body
      condition: $.data.status == "asset_created"
      type: jsonpath
    retryAfter: 5
    retryLimit: 60
    outputs:
      assetId: $response.body#/data/asset_id
      status: $response.body#/data/status
  - stepId: waitForAssetReady
    description: >-
      Poll the asset created by the upload until its status reaches ready,
      meaning playback IDs can be streamed.
    operationId: getAsset
    parameters:
    - name: ASSET_ID
      in: path
      value: $steps.waitForAsset.outputs.assetId
    successCriteria:
    - condition: $statusCode == 200
    - context: $response.body
      condition: $.data.status == "ready"
      type: jsonpath
    retryAfter: 5
    retryLimit: 60
    outputs:
      assetId: $response.body#/data/id
      status: $response.body#/data/status
      duration: $response.body#/data/duration
      playbackIds: $response.body#/data/playback_ids
  outputs:
    uploadId: $steps.createUpload.outputs.uploadId
    uploadUrl: $steps.createUpload.outputs.uploadUrl
    assetId: $steps.waitForAssetReady.outputs.assetId
    status: $steps.waitForAssetReady.outputs.status
    playbackIds: $steps.waitForAssetReady.outputs.playbackIds

Work with this as data

Every workflow 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 arazzo workflows

4 MCP tools reach this
  • find_arazzoBrowse and filter every workflow in the catalog.
  • 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 workflow
curl "https://apis.io/api/v1/arazzo/mux-com-direct-upload-to-asset-workflow"
All arazzo workflows
curl "https://apis.io/api/v1/arazzo?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.