Video transcription API

Video transcription API: the technical specifics

What the API accepts, what it returns, where the limits are and how it bills. No superlatives — just the facts you need to decide in ten minutes.

request
# 1. Reserve an upload for an MP4
curl -X POST https://api.techtuel.com/v1/uploads \
  -H "Authorization: Bearer $TECHTUEL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "content_type": "video/mp4", "filename": "demo.mp4", "size_bytes": 84200000 }'
# => { "upload_id": "up_abc123", "put_url": "https://s3.fr-par.scw.cloud/…",
#      "put_headers": { … }, "expires_at": "2026-07-21T10:15:00Z" }

# 2. PUT the file to put_url with put_headers, then create the job
curl -X POST https://api.techtuel.com/v1/transcriptions \
  -H "Authorization: Bearer $TECHTUEL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "upload_id": "up_abc123" }'
response
{
  "id": "job_c204",
  "status": "completed",
  "title": "demo.mp4",
  "language": "en",
  "detected_language": "en",
  "translated": false,
  "minutes": 18,
  "source_kind": "upload",
  "source_url": "",
  "transcript": "In this demo, we're going to…",
  "segments": [
    { "start_seconds": 0, "text": "In this demo, we're going to" },
    { "start_seconds": 7.9, "text": "configure the connector" }
  ]
}

Evaluating a video transcription API comes down to a handful of concrete questions: what do I send, which limits will I hit, what shape is the response, where do my files live and what does it cost. This page answers them directly, without the marketing detour.

Inputs. Two paths. A URL — a remote video, a web page with a player, a direct video file — through source_url or audio_url. Or a file you upload: POST /v1/uploads with content_type, filename and size_bytes returns put_url, put_headers and an upload_id, which you then pass to the job. Accepted video formats: MP4, MPEG, WebM, QuickTime, MKV up to 1 GiB, about 30 min of 1080p; audio formats: MP3, M4A, AAC, OGG, Opus, WAV, WebM, FLAC up to 200 MiB, the full 2 h. Remote URLs escape those size limits — only the 2 h maximum length applies, which is the path to prefer for long video.

Processing and output. POST /v1/transcribe returns the transcript in the response; past the wait window (30s by default, ?wait= up to 120) it returns a 202 with a job id you then retrieve from GET /v1/transcriptions/{id} — which will be the common case for a long video. The response carries title, language, detected_language, translated, minutes (the billable length), source_kind, transcript and segments — each segment being a start_seconds / text pair. Timestamps are at segment level, not word level. There is no speaker identification. The ?format=txt|json|srt|vtt parameter selects the rendered form.

Languages, data and cost. The spoken language is detected automatically; preferred_language (ISO 639-1) requests the transcript in another language, and the response reports through translated whether the translation actually happened. Uploaded files are deleted after processing, and processing and hosting stay in Europe. Billing is in credits: two credits per transcribed audio minute, rounded up, and a single credit for a video whose captions already exist.

Why this API

Limits stated up front

Video uploads up to 1 GiB, audio up to 200 MiB, 120 req/min per key on Pro. No surprises during integration.

A contractual response

A stable JSON envelope — status, title, language, minutes, transcript, segments — plus txt, srt and vtt through ?format=.

Files deleted, EU hosting

Uploaded media is deleted after processing. Processing and storage stay in Europe, which keeps the GDPR review short.

Pricing you can read

Free100 credits/month, i.e. ~50 min of transcribed video
Pro2000 credits/month (~1000 min), 120 req/min per key

Frequently asked questions

Which video formats are accepted, and up to what size?+

MP4, MPEG, WebM, QuickTime and MKV, up to 1 GiB per upload — about 30 min of 1080p. Audio files (MP3, M4A, AAC, OGG, Opus, WAV, WebM, FLAC) go up to 200 MiB, the full 2 h. Longer video does not need to be uploaded at all: passed by URL, only the maximum length applies.

Are timestamps word-level or segment-level?+

Segment-level. Each segment exposes start_seconds and its text. That is the granularity used to generate SRT/VTT subtitles and to navigate inside a player.

Does the API identify individual speakers?+

No. There is no diarization or speaker labelling. The output is a continuous transcript split into timestamped segments.

Which languages are supported?+

The spoken language is detected automatically and exposed in detected_language. preferred_language, in ISO 639-1, requests the transcript in another language; translated reports whether the translation was produced.

What does a video transcription cost?+

Two credits per transcribed audio minute, rounded up to the minute. A video whose captions already exist costs a single credit whatever its length.

Other ways to use the API

Free trial, no credit card

Generate an API key and transcribe your first source in under a minute. A free monthly quota lets you test under real conditions.

Start with the API