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

| Service | Consumes | Returns |
|---|---|---|
| Dynamic Graphics Render | After Effects MOGRT templates and encoding presets | rendered video variations, up to 500 per call |
| Reframe | video you already have, plus overlay assets | the same footage in new aspect ratios |
| TLS | audio or video, or a transcript you supply | transcript, captions, dubbed media, lip sync |
| Text to Speech | plain text or .txt, up to 20,000 characters | spoken audio in a chosen voice |
| Text to Avatar | text or audio, plus avatar and voice IDs | a 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.
| Endpoint | Published limit |
|---|---|
/transcribe | 5 requests per minute |
/dub | 5 per minute and 150 per day |
/reframe | 2 requests per minute |
/generate-speech | 10 requests per minute |
/voices and Get Actors | 50 requests per minute |
| Text to Avatar | 5 requests per minute |
/status/{jobId} | 100 requests per minute |
| Cancel and List Render Jobs | 2 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.