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.
POST /api/v1/transcribe
Transcribe an audio or video file. This is a synchronous endpoint -- the response is returned once transcription completes.
Request
Send a multipart/form-data request with the following fields:
| Field | Type | Required | Description |
|---|---|---|---|
| file | File | Yes | Audio/video file (mp3, wav, mp4, etc.) |
| language | string | No | Language code (e.g. "fr", "en"). Default: "auto" |
| speakerDetection | string | No | Set to "true" to enable speaker detection |
Example
curl -X POST https://captaintranscribe.com/api/v1/transcribe \
-H "Authorization: Bearer ct_your_api_key_here" \
-F "[email protected]" \
-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 only present when speaker detection is enabled. The X-RateLimit-Remaining header indicates remaining quota minutes.
GET /api/v1/transcriptions
List your transcriptions with pagination.
Query Parameters
| Param | Default | Description |
|---|---|---|
| limit | 20 | Number of results (max 100) |
| offset | 0 | Number of results to skip |
Example
curl https://captaintranscribe.com/api/v1/transcriptions?limit=10&offset=0 \
-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,
"offset": 0,
"count": 1
}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
| Limit | Value |
|---|---|
| Concurrent requests | 3 |
| Requests per hour | 10 |
| Monthly quota (Pro plan) | 2400 minutes (40 hours) |
| Max file size | 100 MB (larger soon) |
The X-RateLimit-Remaining response header shows your remaining quota minutes after each transcription.
Error Handling
All errors return a JSON object with an error field.
| Status | Meaning |
|---|---|
| 400 | Bad request (missing file, invalid format) |
| 401 | Invalid or missing API key |
| 403 | Quota exceeded or plan not eligible |
| 404 | Transcription not found |
| 429 | Rate limit exceeded |
| 500 | Server error |
Example error response
{
"error": "Monthly quota exceeded"
}