Skip to content

API Documentation

Captain Transcribe API v1 — transcribe audio and video files programmatically.

API access is available on the Pro plan. Generate your API key in Settings.

Authentication

All API requests must include your API key in the Authorization header as a Bearer token.

curl https://captaintranscribe.com/api/v1/transcriptions \
  -H "Authorization: Bearer ct_your_api_key_here"

Your API key starts with ct_. Keep it secret — do not expose it in client-side code.

Keys expire after one year and can be revoked or regenerated immediately from Settings.

POST /api/v1/transcribe

Transcribe an audio or video file. This endpoint waits until processing is complete before returning the response.

Idempotency-Key is required. Reuse the same value when retrying the exact same upload; use a new value for a different request.

Request

Send a multipart/form-data request with the following fields:

FieldTypeRequiredDescription
fileFileYesAudio or video file (MP3, WAV, MP4, etc.)
languagestringNoLanguage code (for example "fr" or "en"). Default: "auto"
speakerDetectionstringNoSet to "true" to enable speaker detection

Example

curl -X POST https://captaintranscribe.com/api/v1/transcribe \
  -H "Authorization: Bearer ct_your_api_key_here" \
  -H "Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000" \
  -F "file=@interview.mp3" \
  -F "language=fr" \
  -F "speakerDetection=true"

Response

{
  "id": "abc123",
  "text": "Full transcription text...",
  "segments": [
    { "start": 0.0, "end": 3.5, "text": "Hello world" }
  ],
  "words": [
    { "start": 0.0, "end": 0.5, "word": "Hello" },
    { "start": 0.6, "end": 1.0, "word": "world" }
  ],
  "language": "en",
  "duration": 125.4,
  "speakers": [
    {
      "label": "A",
      "segments": [{ "start": 0.0, "end": 3.5, "text": "Hello world" }]
    }
  ]
}

The speakers field is present only when speaker detection is enabled. The X-Quota-Minutes-Remaining header shows the remaining quota in minutes.

GET /api/v1/transcriptions

List your transcriptions with pagination.

Query parameters

ParameterDefaultDescription
limit20Number of results (maximum 100)
cursorOpaque cursor returned as nextCursor by the previous page

Example

curl https://captaintranscribe.com/api/v1/transcriptions?limit=10 \
  -H "Authorization: Bearer ct_your_api_key_here"

Response

{
  "transcriptions": [
    {
      "id": "abc123",
      "fileName": "interview.mp3",
      "language": "fr",
      "duration": 125.4,
      "createdAt": "2026-04-01T10:30:00.000Z"
    }
  ],
  "limit": 10,
  "count": 1,
  "nextCursor": null
}

GET /api/v1/transcription/:id

Get the full transcription result by ID.

Example

curl https://captaintranscribe.com/api/v1/transcription/abc123 \
  -H "Authorization: Bearer ct_your_api_key_here"

Response

{
  "id": "abc123",
  "text": "Full transcription text...",
  "segments": [...],
  "words": [...],
  "language": "fr",
  "duration": 125.4
}

Rate limits

LimitValue
Concurrent transcriptions3
Transcription requests per hour60
Concurrent read requests10
Read requests per hour300
Monthly quota (Pro plan)2400 minutes (40 hours)
Maximum file size95 MB

The X-Quota-Minutes-Remaining response header shows your remaining quota in minutes after each transcription.

Error handling

Every error returns a JSON object with an error field.

StatusMeaning
400Bad request (missing file or invalid format)
401Invalid or missing API key
403Quota exceeded or plan not eligible
404Transcription not found
429Rate limit exceeded
500Server error

Example error response

{
  "error": "Monthly quota exceeded"
}