POST /v1/text and POST /v1/audio always respond with the same object ({ id, status, error?, result? }) regardless of input size:
- Small inline text (≤ 50 KB, no
webhookUrl) is processed inline: HTTP 200, the job arrives alreadycompletedwithresultpopulated, and it appears in your job history like any other. - Everything else is queued: HTTP 202 Accepted with
{ id, status: "created" }, and the job finishes asynchronously.
status. If it isn’t completed or failed, fetch GET /v1/jobs/:id or wait for a webhook.
Lifecycle
Processing is retried up to 3 times with exponential backoff before a job is marked
failed. Fast-path text jobs skip the queue entirely and are born completed.
Consuming results
Three ways to get a result, in order of preference:Results
GET /v1/jobs/:id returns:
outputUrl: file outputs. A fresh signed URL is generated on every read and is valid for 1 hour; just re-fetch the job to get a new one. Audio outputs are.ogg(Opus) by default, or.mp3if you opted in via theencodeoperation. Text jobs created from afileIdoutput a.txtfile.outputText: inline output, returned for text jobs whose input was inlinetext.- Retention: results are available for 7 days after completion.
Listing jobs
GET /v1/jobs returns newest-first, cursor-paginated:
nextCursor back as cursor to fetch the next page. limit defaults to 20, max 100. See List jobs for all filters.
Idempotency
POST /v1/text, POST /v1/audio, and POST /v1/image accept an optional Idempotency-Key header (1–255 characters, scoped to your account):
Idempotency applies to queued jobs. Fast-path text jobs come back already completed and are not deduplicated.