Transcription
A timed transcript of an audio or video recording, with captions files.
- Price1 credit (10p) per started 10 minutes
- Typical time30 s to 15 min
- Scope
media:write - Runs asA background job
Run transcription in the sandbox
No key and nothing to pay. The sandbox returns a realistic example in a couple of seconds; no AI runs and no data is kept.
- Queued202 and a job id, straight away
- ProcessingPoll, stream or wait for a webhook
- SucceededResult and files on the job
Upload the recording with POST /v1/files (up to 500 MiB) and send its file_id. The transcript keeps the speaker's own language and hesitations; each segment and word has start and end times in milliseconds (word_timing says whether word times come from the provider or are estimated within measured speech). Saves transcript.vtt, transcript.srt and transcript.txt. Recordings can be up to 3 hours. Charged per started 10 minutes of the measured recording; declare duration_seconds to reserve only what you need.
Requires media:write. Costs 1 credit per started 10 minutes. Send a unique Idempotency-Key; reuse it with the identical body when retrying. Returns 202 with a job: poll GET /jobs/{job_id}, stream GET /jobs/{job_id}/events, or use a signed webhook.
Transcription
POST/v1/transcriptions
Scope media:write
Headers
| Field | Details |
|---|---|
Idempotency-Key | stringRequiredA unique key per new operation; reuse it with the identical body when retrying. |
EduMark-Version | enumAPI version. Defaults to the latest.One of 2026-10-21 |
Request body
| Field | Details |
|---|---|
file | FileReferenceRequiredAn audio or video recording uploaded with POST /v1/files (MP4, MOV, WEBM, M4A, MP3, WAV or OGG, up to 500 MiB). |
file_idfile.file_id | stringRequiredThe id returned by POST /v1/files, after POST /v1/files/{id}/complete reported ready.Pattern ^file_[a-f0-9]{32}$ |
duration_seconds | integer, optionalThe recording's length, if you know it. EduMark reserves credits for this length and charges for the measured length; without it the 3-hour maximum is reserved.1 to 10,800 |
Responses
| Status | Meaning |
|---|---|
| 202 | Successful Response |
| 400 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 401 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 402 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 403 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 404 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 409 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 410 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 413 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 415 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 422 | Validation Error |
| 429 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 503 | Request rejected. Inspect error.code and request_id; failed work is not billed. |