Skip to main content
This guide walks through creating a transcription from a file on your machine. You get an upload URL and a short-lived token, send the file, then start a transcription job and follow it until the transcript is ready. If your file is already reachable over https, transcribe from a URL instead.

Before you start

Mint an API key (see Authentication) and export it:
The Python examples use the requests package (pip install requests).

The flow at a glance

Then poll the job, or receive a webhook, and read its transcript.

1. Get an upload URL and token

Request where to send the file and a short-lived upload_token. You send this token with the file in the next step and again when you create the job.

2. Upload the file

Send the file to upload_url as multipart/form-data in a single request. Authenticate this request with the upload_token from step 1, not your API key.
Large files take a while to send, and the request returns only once the whole file is stored. Give it a generous timeout, so a large upload is not cut off before it completes. To show progress while it runs, track the bytes sent on your side, as the curl example does with --progress-bar. The fields are: A successful upload returns 201:
A 2xx status means the file is stored. Wait for this response before you create the job in step 3. If the upload does not succeed, the response uses the same error body as the rest of the API:

3. Create the transcription job

Start the transcription. Pass the upload_token and the file details. The response gives you a job id and its status.
If the response does not reach you, send the same request again. The same upload_token returns the same job id, so a retry never creates a second job. The request body fields are: If your account has no credit left for this request, it returns 402 with the error code insufficient_api_credits. Top up, then send the request again. If no file is stored for the upload_token, for example because step 2 did not complete, the request returns 409 with the error code upload_not_found. No job is created and the token stays valid. Finish the upload, wait for its 201, then send this request again with the same token.

4. Poll the job

Poll the job by id until its status is completed or failed. To be notified instead, pass a callback_url and see Webhooks.
The status field reflects where the job is in its lifecycle:

5. Read the result

Once the job is completed, read its transcript straight from the job:
The job also has an export endpoint, GET /api/v1/transcription-jobs/{id}/export, which takes the same query parameters as the transcription export. Both job endpoints return 409 with job_not_completed while the job is still running, or job_failed if it ended without a transcript. The job’s transcription_id is also a regular transcription. Use it with the endpoints from Retrieve and export to read its metadata or list it alongside your other transcriptions.

Delete the result

To delete the transcription a job produced, call DELETE /api/v1/transcription-jobs/{id}. It returns 204 when the transcription is deleted, or when the job has none to delete. A job that is still running returns 409; wait for it to finish, then retry.

Next steps

Webhooks

Get notified when a job finishes instead of polling.

Retrieve and export

Read a transcript and download an export.