List transcriptions
Returns a paginated list of the workspace's transcription jobs, newest first.
Authorization
apiKey In: header
Query Parameters
Page number (default: 1)
1 <= valueItems per page (default: 20, max: 100)
1 <= value <= 100Response Body
application/json
curl -X GET "https://example.com/transcriptions"{ "transcriptions": [ { "transcription_id": "string", "media_id": "string", "title": "string", "duration_seconds": 0, "status": "processing", "language": "string", "speaker_labels": true, "speaker_count": 0, "credits_charged": 0, "media_type": "image", "created_at": "string", "completed_at": "string" } ], "pagination": { "current_page": 0, "total_pages": 0, "total_count": 0, "has_next_page": true, "has_previous_page": true, "limit": 0 }}Start an upload POST
Returns the generated `media_id` plus a presigned PUT URL. Upload the raw bytes to `upload_url` with the same `Content-Type` you declared here, then call `POST /transcriptions` with the `media_id` to start the job. Both video and audio files are accepted, so an audio-only podcast never has to be wrapped in a video container. The ceiling is the smaller of your plan's upload limit and the storage quota you still have free; `FILE_TOO_LARGE` reports the effective ceiling in `max_size` and `STORAGE_LIMIT_EXCEEDED` means the quota is full.
Transcribe a media file POST
Starts a transcription for a media file you uploaded via `POST /transcriptions/upload`. Credits are charged per minute of audio, plus a surcharge when `speaker_labels` is requested. Check the balance at `GET /balance` first. Responds `202` with `status: processing` when the ASR worker was dispatched: poll `GET /transcriptions/{transcription_id}` until `status` is `ready` (or `failed` / `no_speech`), then fetch the text. Responds `200` when nothing had to run. That happens when the same audio was already transcribed (the transcript is shared per media, so a re-run is a cache hit and `credits_charged` is `0`), or when the audio is silent, which comes back as `no_speech` and is not billed. Passing a `media_id` that is already in your library re-runs it. That is how a transcript created without diarization is upgraded: ask again with `speaker_labels: true` and the audio is reprocessed, because the speaker column cannot be added after the fact.