Generate Audio
Generate speech, music, or a sound effect from text (metered).
Pick mode first: text_to_speech (a voice saying your exact words —
prompt IS the script), text_to_music, or text_to_sfx. The model card on
GET /v1/media/models says which modes each model serves.
Synchronous: the render runs inside this call and there is no wait: false
task lane. Speech returns in seconds. Music and sound effects can be asked
for at up to 600 seconds of output and may take correspondingly longer; a
render that outruns this call’s wait is asked to cancel and reported as a
retryable 503. Repeat that call with the same idempotency_key: it adopts
the existing provider job, so it returns the audio if the render finished
anyway and reports it cancelled if it did not — and it can never pay for a
second render. Only once it reports cancelled is a new request worth making
— and that one needs a NEW idempotency_key as well as a shorter duration or
fewer samples, since a changed payload under the old key is a 409
idempotency_conflict.
results carries one entry per delivered take (num_samples), applied
reports the knobs that actually ran, and adjustments names every field
that differed from the ask, with a reason — read them before describing the
output to a user.
Authorizations
API key from Settings > Developer > REST API
Headers
Calendar-dated API version pin. New integrations should pin 2026-05-01 to opt into the newest response shapes. For back-compat the server also accepts requests with no header and resolves them to the current default (today: 2026-04-12); that default advances on each sunset date. Any unsupported value returns 400 unsupported_version.
2026-04-12, 2026-05-01 "2026-05-01"
Body
Sent to the selected model VERBATIM. For text_to_speech this IS the script — the words that get spoken, with no stage directions. For the other modes it describes the result: genre, instrumentation, mood, tempo, texture.
1Concrete audio model id; see GET /v1/media/models.
text_to_speech, text_to_music, or text_to_sfx. Stated rather than derived — every mode takes exactly text, so there is no input role to derive it from. The model card on GET /v1/media/models says which modes each model serves.
Speech only. Normally a preset name from the mode's voices on GET /v1/media/models; on a mode whose card sets voice_is_free_form, voices is empty and this takes any provider voice name or cloned-voice id instead, checked for shape here and resolved by the provider. Omit for the mode's default.
Music and sound effects only, and it SNAPS into the mode's envelope with the adjustment reported. Speech has no duration control — a value passed there is dropped and reported rather than rejected.
Distinct takes to render, where the mode has a sample axis (max_samples on GET /v1/media/models). EVERY sample is billed, and a mode with a billing floor bills each short take at the floor.
Keys the provider-job checkpoint: a retried call with the same key resumes the existing render instead of paying for a duplicate.
200Response
Successful Response
The response is of type Response Mediagenerateaudio · object.