Skip to main content
Transcription, speech and translation run on GPUs that may need a few minutes to start. So each call returns a job right away, and you collect the result when it’s ready. If your connection drops, the work carries on.

Start a job

You get 202 Accepted, with a Location header pointing at the job:
Bad requests are refused immediately and don’t create a job, for example unreadable audio or 402 insufficient_credits.

Get the result

Check url until status is final. Start at about once a second and slow down to once every 5 seconds. The Retry-After header on the first response is a good starting point.

Wait in one call

For short work, ask to wait with a Prefer header, up to 60 seconds:
If the job finishes in time you get 200 with the finished job. If not, you get the usual 202, and the job carries on. A failed job also comes back as 200, so check status.

Results last 1 hour

We delete a result, including any audio, 1 hour after the job finishes. expires_at gives the exact time. To delete it sooner:

Cancel a job

You aren’t charged for a cancelled job. If it had already finished, nothing changes. A job that hasn’t finished after 30 minutes fails on its own, also with no charge.

Retry safely

If you aren’t sure a request got through, send it again with the same Idempotency-Key header. You’ll get the original job back instead of starting and paying for a second one. A key lasts 24 hours, and using one for a different request returns 409 idempotency_conflict. If a job couldn’t start and you got a 503, the same key works for the retry.

Limits

Jobs that are queued or running count towards your concurrent request limit. Checking a job doesn’t use your request limit. It has its own limit of 600 checks a minute per organization.