Adobe’s audio and video APIs are a processing suite, not a generation suite. Five services sit under it, all reached through audio-video-api.adobe.io, and every one consumes media you already have: a recording, a template, a transcript or a line of text. Anyone looking for text-to-video wants the Firefly API’s post /v3/videos/generate instead, which the video API notes describe.

This page maps the surface: which service eats what, what each endpoint allows per minute, and the two places where a plausible payload is rejected.

What the Audio/Video APIs are

Two hosts, two kinds of job

The overview describes the collection in one line: “Audio/Video APIs offer automated audio/video content production at scale with AI.” Every service shares a host and one credential pair, Authorization: Bearer <token> and x-api-key.

The exception is generation. None of these services turns a prompt into a clip. The Firefly API’s Generate video operation lives on firefly-api.adobe.io under /v3; this collection lives on audio-video-api.adobe.io under /v1, with Reframe v2 on /v2. Mixing the hosts is the first mistake an integrator makes.

Mapping the Audio/Video API surface

What each one consumes and returns

A capability map of the audio and video API surface, grouping each service by what it consumes and what it returns
ServiceConsumesReturns
Dynamic Graphics RenderAfter Effects MOGRT templates and encoding presetsrendered video variations, up to 500 per call
Reframevideo you already have, plus overlay assetsthe same footage in new aspect ratios
TLSaudio or video, or a transcript you supplytranscript, captions, dubbed media, lip sync
Text to Speechplain text or .txt, up to 20,000 charactersspoken audio in a chosen voice
Text to Avatartext or audio, plus avatar and voice IDsa presenter video with an optional background

The table is the whole boundary: Transcribe returns text, Dub and Reframe return media, Text to Speech returns audio, Text to Avatar returns video. Dynamic Graphics Render takes a template rather than footage.

Transcribe and dub with the TLS API

Translate in the same transcription

The TLS guide frames the work in three steps: “transcription, translation, and dubbing”. Transcribe performs the first and, when you pass targetLocaleCodes, the second in the same call. It returns a text transcript and, if captions are requested, an SRT file.

curl --location 'https://audio-video-api.adobe.io/v1/transcribe' \
  --header "Authorization: Bearer $ADOBE_ACCESS_TOKEN" \
  --header "x-api-key: $ADOBE_CLIENT_ID" \
  --header 'Content-Type: application/json' \
  --data '{
    "video": {
      "source": { "url": "<pre-signed URL of the source mp4>" },
      "mediaType": "video/mp4"
    },
    "targetLocaleCodes": ["de-DE"],
    "captions": { "targetFormats": ["<your_target_caption_format>"] }
  }'

Two documented constraints belong in the design. Transcribe “can’t re-translate a source transcript”, so fixing a translation means transcribing again. And the transcripts array in a dub request “should contain only one URL”.

Dub is the wider service: it runs all three steps at once, or accepts an edited transcript, and lipSync travels as a request parameter.

curl --location 'https://audio-video-api.adobe.io/v1/dub' \
  --header "Authorization: Bearer $ADOBE_ACCESS_TOKEN" \
  --header "x-api-key: $ADOBE_CLIENT_ID" \
  --header 'Content-Type: application/json' \
  --data '{
    "audio": {
      "source": { "url": "<pre-signed URL of the source mp3>" },
      "mediaType": "audio/mp3"
    },
    "transcripts": [
      { "source": { "url": "<pre-signed URL of the edited transcript>" } }
    ],
    "targetLocaleCodes": ["fr-FR"],
    "lipSync": "false"
  }' | tee dub.json

curl --location "$(jq -r .statusUrl dub.json)" \
  --header "Authorization: Bearer $ADOBE_ACCESS_TOKEN" \
  --header "x-api-key: $ADOBE_CLIENT_ID"

Reframe v2: recropping footage

Ratios, pixels and sidecars

Two Reframe endpoints exist, and the guide is blunt: “The v1 API has more limited capabilities and may be deprecated soon.” It recommends v2.

curl --location 'https://audio-video-api.adobe.io/v2/reframe' \
  --header "Authorization: Bearer $ADOBE_ACCESS_TOKEN" \
  --header "x-api-key: $ADOBE_CLIENT_ID" \
  --header 'Content-Type: application/json' \
  --data '{
    "video": {
      "source": { "url": "<pre-signed URL of the 16:9 source>" }
    },
    "analysis": { "sceneEditDetection": true },
    "output": {
      "renditions": [
        { "aspectRatio": { "x": 1, "y": 1 } },
        { "resolution": { "width": 1080, "height": 1920 },
          "mediaDestination": { "url": "<pre-signed PUT URL>" } }
      ],
      "layout": { "applyLetterboxing": true }
    }
  }'

curl --location "https://audio-video-api.adobe.io/v2/status/<jobId>" \
  --header "Authorization: Bearer $ADOBE_ACCESS_TOKEN" \
  --header "x-api-key: $ADOBE_CLIENT_ID" \
  --header 'Content-Type: application/json'

Reframe reuses what it is given: Adobe states that “all content in the generated reframed output is derived solely from the original source video”, which is why the documented ratios read “including but not limited to 4:3, 9:16, and 1:1” rather than as a closed list. Version 2 adds exact pixel sizes, a subject lock driven by “a keyword or prompt”, and an otio sidecar for Premiere Pro. The input ceiling is published: 30 minutes, 10 GB, .mp4 or .mov, up to 4K. One combination is rejected outright: video.removeLetterboxing and output.layout.applyLetterboxing cannot both be true.

Speech and avatar endpoints

Voices, scripts and backgrounds

Both services share the same script object, so one wrapper covers them.

import os

import requests

BASE = "https://audio-video-api.adobe.io/v1"
HEADERS = {
    "Authorization": f"Bearer {os.environ['ADOBE_ACCESS_TOKEN']}",
    "x-api-key": os.environ["ADOBE_CLIENT_ID"],
    "Content-Type": "application/json",
}


def start(kind, payload):
    response = requests.post(f"{BASE}/{kind}", headers=HEADERS, json=payload, timeout=60)
    response.raise_for_status()
    body = response.json()
    print(f"{kind}: job {body['jobId']} -> {body['statusUrl']}")
    return body


start(
    "generate-speech",
    {
        "script": {
            "text": "Firefly renders this line as speech.",
            "mediaType": "text/plain",
            "localeCode": "en-US",
        },
        "voiceId": "<voice ID from the Voices List API>",
        "output": {"mediaType": "audio/wav"},
    },
)

Text to Speech takes up to “20000 characters” of transcript as plain text or a .txt file behind a pre-signed URL, a voiceId from the Voices List API, and an output media type; Adobe documents the render time as “2X the output audio length”. The Avatar endpoint takes the same script object plus an avatarId, and its output.background.type accepts video, image, color or transparent. Adobe also publishes one candid limitation: “Output videos may occasionally feature gesture mismatches.” Both services join the Content Authenticity Initiative, the same provenance thread the commercial use page follows on the model side.

Endpoint limits and the job model

The published per-minute numbers

Every endpoint carries its own published request limit, all counted per organization.

EndpointPublished limit
/transcribe5 requests per minute
/dub5 per minute and 150 per day
/reframe2 requests per minute
/generate-speech10 requests per minute
/voices and Get Actors50 requests per minute
Text to Avatar5 requests per minute
/status/{jobId}100 requests per minute
Cancel and List Render Jobs2 requests per minute

Three details matter more than the numbers. These limits are per endpoint, unlike the organisation-wide pair on the Firefly API, so dubbing and reframing draw on separate budgets; the Firefly API rate limit notes cover the other half. Cancel and List Render Jobs “apply only to render jobs submitted via POST /v1/templates/render”, so they are not general job control. And every job answers 202 with jobId and statusUrl; Reframe adds percentCompleted while it runs.

Frequently asked questions

Do any of these APIs turn a prompt into video? No. They transcribe, dub, reframe, synthesise speech and animate avatars. Text-to-video lives in the Firefly API on a different host.

What is the difference between Transcribe and Dub? Transcribe converts speech to text and can translate in the same pass. Dub does all three steps in one request, optionally with lip sync.

Can I re-translate a finished transcript? Transcribe cannot. Translation only happens together with transcription from the source media.

Is there a published price? No per-call price is published.

Treat this collection as the post-production half of Firefly Services: text in, media out, all asynchronous. The endpoint reference covers the generation side of the same platform.