---
title: "Video File Transcript API"
method: POST
path: "/v1/video/transcript"
tags: ["Utilities"]
---

# Video File Transcript API

`POST /v1/video/transcript`

## Request

- Base URL: `https://api.captapi.com`
- URL: `https://api.captapi.com/v1/video/transcript`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

AI transcription of an uploaded file — 1 credit/min; noSpeech=true and 0 credits when there is no speech.

POST multipart form field `file` (not a query string). Returns transcript, transcriptSegments[{text,start,duration,timestamp}], wordCount, segments, language, durationSeconds, and noSpeech. Optional form fields: language (ISO-639-1 hint), translate=true (English), timestampGranularity=segment|word. Limits: 200MB / 60 minutes. No speech → empty transcript + noSpeech=true and 0 credits (same detection as File Summarizer). Billed 1 credit per minute of audio (rounded up, min 1) — verify with durationSeconds. durationSeconds is the only duration key; creditsCharged is not duplicated inside data.

Docs: https://captapi.com/apis/video-transcript

## Response `200`

Success. The data object for this endpoint.

- object
  - `success` unknown, required
  - `data` object, required
    - `filename` string: Filename. Example: "sample.mp4".
    - `transcript` string: Complete text transcript (file-upload endpoints). Timed caption/ASR endpoints use text instead.
    - `transcriptSegments` object[]
      - `text` string: Text content.
      - `start` number: Start time in seconds.
      - `duration` number: Duration when present — prefer durationSeconds (number) and durationText on endpoints that expose both.
      - `end` number: End time in seconds.
      - `timestamp` string: Human-readable timestamp (MM:SS format).
    - `wordCount` integer: Word count of the returned transcript (matches the text — not a truncated preview).
    - `segments` integer: Number of timed segments in transcriptSegments.
    - `language` string: Detected (or hinted) speech language from transcription.
    - `durationSeconds` number: Audio duration in seconds from transcription — basis for per-minute billing. The only duration key on this payload (segment duration stays on transcriptSegments[]).
    - `noSpeech` boolean: true when no trustworthy speech was found. transcript is empty and creditsUsed is 0 — same detection as File Summarizer's 422.

## Other responses

- `400`: Bad request: wrong platform URL, unknown endpoint, or an invalid parameter value. Not billed.
- `401`: Missing, invalid or revoked API key. Not billed.
- `402`: Not enough credits for this request. Not billed.
- `404`: The resource does not exist or is not public. Not billed.
- `422`: A required parameter is missing or has the wrong type. Not billed.
- `429`: Rate limit reached. Wait for Retry-After seconds. Not billed.
- `502`: The platform could not be reached or returned nothing usable. Retryable, not billed. 503 and 504 use the same envelope.

---

[API](https://skmtc.dev/captapi/apis/captapi-api.md) · [All operations](https://skmtc.dev/captapi/apis/captapi-api/llms.txt) · [OpenAPI document](https://skmtc.dev/captapi/apis/captapi-api/revisions/c9b9ac5ff1bd?raw)
