Skip to API reference

API Integration

From media to words. Right inside your workflow.

On this page

Overview

Turn audio and video files into transcripts, captions and subtitles with a simple REST API.

Send a media URL, follow the transcription job, and retrieve structured JSON or a ready-to-use subtitle file.

HTTPS requestsJSON responsesAsynchronous jobs

Base URL

https://api.taption.com/v1POST/transcriptsGET/transcripts/{id}

Your first transcription

Transcription happens in the background. Creating a job returns immediately; check its status until the result is ready.

  1. Create a job

    Send POST /transcripts with a direct, public media URL. Keep the returned id.

  2. Check its progress

    Poll GET /transcripts/{id} every 15–30 seconds until status is complete or error.

  3. Use your transcript

    Read JSON from data, or download export_url when you request SRT or VTT.

Job status

initializing

Queued and waiting to start. Keep polling.

transcribing

Your media is being transcribed. Keep polling.

complete

Ready. Read the result or download the file.

error

The job failed. Read message and stop polling.

Treat any other status as still in progress. New intermediate states may be added.

Authentication

Send your API key in the Authorization header of every request, exactly as shown when you created it.

Authorization: <your api key>

Do not add a Bearer prefix.

New keys start with tp_live_. The full key is shown only once, when you create it. If you lose it, revoke it and create a new one; a revoked key stops working immediately.

An active subscription and the required API key scope are needed.

Keep your key on your server. It grants access to your account’s transcripts and usage. Never expose it in browser code or a public repository.

Create API key

Create a transcript

POST/transcripts

Start a transcription job for a media file at a public URL. The response returns once the job is queued, with status: "initializing".

Taption downloads the file directly. Share-page links, such as a Google Drive or Dropbox preview page, will not work.

media_urlstringrequired

Direct download link to your media file.

Maximum 2048 characters
extensionstringrequired

The media file's format.

mp3wavm4aaacflacwmaopusmp4
languagestringrequired

Language spoken in the media, as a language tag. See the Languages reference.

View language tags
namestring

Display name for the transcript. Defaults to the file name in `media_url`. Longer names are cut to 200 characters.

Maximum 200 characters
export_typestring

Output format. Defaults to json, which returns parsed transcript content in data. srt and vtt return a file link in export_url.

jsonsrtvtt
Default: json
max_charinteger

Maximum characters per caption segment. Defaults to `16` for Chinese, Japanese, Korean and Cantonese, and `65` for other languages. Values outside 1-200 are ignored and the default is used.

1–200

Responses

200

The job was created and queued. Keep the `id` to check on it.

400

The request body is invalid. Fix the request before retrying. Only the first problem found is reported.

401

The API key is missing, invalid, or not set up for API access.

403

An active subscription and the required API key scope are needed.

429

Account limit reached; no job was created. Defaults: Premium 10 submissions/minute and 2 unfinished jobs; Corp 30/minute and 10 unfinished jobs, shared across all keys. Limits may change. Status polling is excluded.

500

Unexpected server error. Retry with exponential backoff.

503

Submission limits are temporarily unavailable (`api_limits_unavailable`; no transcript was created), or queue submission failed or could not be confirmed. Honor Retry-After when present. If an `id` is returned, check its status before retrying: it may be `error` or already processing. A retry creates a new transcript.

Retrieve a transcript

GET/transcripts/{id}

Get the current status and result of a transcript. Poll every 15–30 seconds while the job is in progress.

For json or an omitted export type, the completed result appears in data. For srt or vtt, download the file from export_url.

idstringrequired
The transcript ID returned by POST /transcripts.Maximum 256 characters

A failed transcription still returns HTTP 200 with status: "error". Check the job’s status as well as the HTTP code.

Responses

200

The transcript's current status. This does not mean the job succeeded; read `status`.

401

The API key is missing, invalid, or not set up for API access.

403

An active subscription and the required API key scope are needed.

404

No transcript with this ID exists in your account. A transcript that belongs to another account gives the same response.

500

Unexpected server error. Retry with exponential backoff.

The transcript object

Creation and status requests return a JSON object. Its fields describe the job and, when ready, its output.

idstring
The transcript ID. Use it with `GET /transcripts/{id}`.
statusstring
Where the job is: `initializing`, `transcribing`, `complete` or `error`. Treat any other value as still in progress.
dataJSON
Parsed JSON export when ready for json or omitted export_type; otherwise an empty string.
export_urlstring
Download link for an srt or vtt export. Empty until ready. Omitted from status responses for json or omitted export_type.
messagestring
Extra detail about the current status. While `transcribing`, this may be a progress stage such as `ANALYZING` or `FINALIZING`. When `status` is `error`, it describes the failure. Written for people; do not parse it.
error_codestring
Optional machine-readable code for a submission limit error.
limitinteger
The applicable account limit, included with HTTP 429.

Errors & retries

Use the HTTP status code to decide what to do next. The message field is written for people; its wording may change.

API responses include an X-Request-Id header. Include it when you contact support about a request.

HTTP error codes9 codes
HTTP errors and retry guidance
HTTPWhat happenedNext step
400Invalid request body.Fix the request first.
401Missing, invalid, or revoked API key.Check your API key.
403An active subscription and the required API key scope are needed.Check your subscription and API key scopes.
404Transcript not found in your account.Check the transcript ID.
405Wrong HTTP method.Use the documented method.
429Submission rate or unfinished-job limit reached.Honor Retry-After; wait for an available job slot.
500Unexpected server error.Exponential backoff.
503Submission limits unavailable, or queue submission failed or could not be confirmed.Check any returned job ID before retrying; honor Retry-After.
504The request timed out.Back off; avoid duplicate jobs.

API limit errors return HTTP 429 with JSON and Retry-After in seconds. The hosting platform may also return non-JSON 429, 504, or 400 responses. Check the HTTP status before reading the body.

Creation requests are not idempotent. Retrying a timed-out POST /transcripts may create another transcript. If a 503 includes a job ID, check that job before submitting again: it may have failed or already be processing.

Languages

Set language to the language spoken in your media. Use the exact tag below, including any region or output-script suffix.

Supported languages74 languages
Supported transcription language tags
LanguageTag
Afrikaans (South Africa)af-ZA
Arabic (Egypt)ar-EG
Armenian (Armenia)hy-AM
Assamese (India)as-IN
Azerbaijani (Azerbaijan)az-AZ
Bengali (India)bn-IN
Bosnian (Bosnia and Herzegovina)bs-BA
Bulgarian (Bulgaria)bg-BG
Burmese (Myanmar)my-MM
Cantonese, Simplified Chinese output (Hong Kong)yue-Hant-HK-zh
Cantonese, Traditional Chinese output (Hong Kong)yue-Hant-HK-TW-zh
Cantonese, Simplified Cantonese output (Hong Kong)yue-Hant-HK
Cantonese, Traditional Cantonese output (Hong Kong)yue-Hant-HK-TW
Catalan (Spain)ca-ES
Chinese (China)zh
Chinese (Taiwan)zh-TW
Chinese & English (Simplified)zh-EN
Chinese & English (Traditional)zh-EN-TW
Croatian (Croatia)hr-HR
Czech (Czech Republic)cs-CZ
Danish (Denmark)da-DK
Dutch (Belgium)nl-BE
English (Australia)en-AU
English (United Kingdom)en-GB
English (United States)en-US
Estonian (Estonia)et-EE
Filipino (Philippines)tl-PH
Finnish (Finland)fi-FI
French (France)fr-FR
Galician (Spain)gl-ES
German (Germany)de-DE
Greek (Greece)el-GR
Gujarati (India)gu-IN
Hebrew (Israel)iw-IL
Hindi (India)hi-IN
Hungarian (Hungary)hu-HU
Icelandic (Iceland)is-IS
Indonesian (Indonesia)id-ID
Italian (Italy)it-IT
Japanese (Japan)ja-JP
Kannada (India)kn-IN
Kazakh (Kazakhstan)kk-KZ
Khmer (Cambodia)km-KH
Korean (South Korea)ko-KR
Latvian (Latvia)lv-LV
Lithuanian (Lithuania)lt-LT
Macedonian (North Macedonia)mk-MK
Malay (Malaysia)ms-MY
Malayalam (India)ml-IN
Marathi (India)mr-IN
Nepali (Nepal)ne-NP
Norwegian (Norway)no-NO
Odia (India)or-IN
Persian (Iran)fa-IR
Polish (Poland)pl-PL
Portuguese (Portugal, Brazil)pt-PT_pt-BR
Punjabi, Gurmukhi (India)pa-IN
Romanian (Romania)ro-RO
Russian (Russia)ru-RU
Serbian (Serbia)sr-SR
Slovak (Slovakia)sk-SK
Slovenian (Slovenia)sl-SI
Spanish (Spain)es-ES
Swahili (Kenya)sw-KE
Swedish (Sweden)sv-SE
Tamil (India)ta-IN
Telugu (India)te-IN
Thai (Thailand)th-TH
Turkish (Turkey)tr-TR
Ukrainian (Ukraine)uk-UA
Urdu (Pakistan)ur-PK
Uzbek (Uzbekistan)uz-UZ
Vietnamese (Vietnam)vi-VN
Zulu (South Africa)zu-ZA

This list follows Taption’s language settings and may change. Taption’s language selector is the source of truth.

Back to overview