The Caption Cat API allows you to upload videos, generate transcripts, edit subtitles, and render captioned videos programmatically.
Base URL: https://api.captioncat.net/v1
This API uses Bearer Token authentication via the `Authorization` header.
Include your token with every request:
Authorization: Bearer YOUR_ACCESS_TOKEN
Tokens can be generated and rotated in the settings menu
Retrieves current balance
{
"status": "success",
"balance": 6012
}
curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
https://api.captioncat.net/v1/balance
Uploads a video and creates a new project.
Projects are limited to 10 videos. Once the limit is reached, the oldest
videos are deleted as new ones are added.
| Name | Type | Required | Description |
|---|---|---|---|
video |
file | Yes | Video file to upload (mp4, mkv, avi, mov, wmv, flv, webm, mpeg, qt) |
Returns a video id
{
"status": "success",
"id": "cb6dc793fa1ceadb55744ba0a7b0af56",
}
{
"status": "error",
"message": "uploaded file is not a video"
}
curl -X POST https://api.captioncat.net/v1/upload \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-F "video=@video.mp4"
Retrieves cost of transcription in credits
{
"status": "success",
"transcription_cost": 87,
}
curl https://api.captioncat.net/v1/transcribe/cb6dc793fa1ceadb55744ba0a7b0af56cost \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Starts transcription of video
| Name | Type | Description |
|---|---|---|
id |
string | Video identifier returned by the upload endpoint |
{
"status": "success",
}
curl -X POST https://api.captioncat.net/v1/transcribe/cb6dc793fa1ceadb55744ba0a7b0af56 \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Retrieves status of transcription
Possible values:
{
"status": "success",
"transcription": "finished",
}
curl https://api.captioncat.net/v1/transcribe/cb6dc793fa1ceadb55744ba0a7b0af56/poll \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Updates the srt transcript
| Name | Type | Required | Description |
|---|---|---|---|
srt |
string | Yes | Srt Transcript |
Returns the status of changed fields
{
"status": "success",
}
curl -X PATCH https://api.captioncat.net/v1/transcript/cb6dc793fa1ceadb55744ba0a7b0af56/srt \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-d "srt=your+corrected+srt+content"
Retrieves cost of rendering in credits
{
"status": "success",
"rendering_cost": 1252,
"resolution": "3840x2160",
"message": "4K"
}
curl https://api.captioncat.net/v1/render/cb6dc793fa1ceadb55744ba0a7b0af56/cost \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Starts rendering of video
If no body is sent, then the style options shown below are used as default.
| Name | Type | Required | Description |
|---|---|---|---|
fontFamily |
string | Yes | One of: "DejaVu Sans", "Roboto", "Orbitron", "Pacifico", "UnifrakturMaguntia", "Noto Sans Japanese", "Noto Sans Korean" |
fontSize |
integer | Yes | Value between 10 and 50 |
fontColor |
string | Yes | RGB Color in Hex |
outlineColor |
string | Yes | RGB Color in Hex or none for transparent color |
bgColor |
string | Yes | RGB Color in Hex or none for transparent color |
bgOpacity |
integer | Yes | Background color opacity in percent. 100 = fully visible. 0 = fully transparent |
{
"style": {
"fontFamily": "DejaVu Sans",
"fontSize": 12,
"fontColor": "#ffffff",
"outlineColor": "none",
"bgColor": "#000000",
"bgOpacity": 75
}
}
{
"status": "success",
}
curl -X POST https://api.captioncat.net/v1/render/cb6dc793fa1ceadb55744ba0a7b0af56 \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Retrieves rendering progress of video in percent
{
"status": "success",
"progress": 75
}
curl https://api.captioncat.net/v1/render/cb6dc793fa1ceadb55744ba0a7b0af56/poll \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Retrieves balance history
{
"status": "success",
"balance_history": [
{
"Id": 1,
"Transaction": 2400,
"Balance": 2400,
"Description": "Deposit 2400 credits",
"DateTime": "2026-03-07 10:04:58 CET"
},
{
"Id": 2,
"Transaction": -59,
"Balance": 2341,
"Description": "Transcribe Video",
"DateTime": "2026-03-07 10:22:15 CET"
},
{
"Id": 3,
"Transaction": -59,
"Balance": 2282,
"Description": "Render Video",
"DateTime": "2026-03-07 10:34:23 CET"
}
]
}
curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
https://api.captioncat.net/v1/balance/history
Retrieves the list of projects
{
"status": "success",
"projects": [
{
"id": "09023cf9ac65815563707b006c3046a8",
"created": "2026-06-14 14:44:14 UTC"
},
{
"id": "0ec5e711547756c12d1129c7f63a24a3",
"created": "2026-06-14 19:13:32 UTC"
},
{
"id": "47c71b4e19aeb9a5fc78bc91939c43f3",
"created": "2026-06-14 20:03:28 UTC"
}
]
}
curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
https://api.captioncat.net/v1/balance/history
Retrieves the transcription in srt format
{
"status": "success",
"srt": "1\n00:00:01,000 --> 00:00:12,720\nWelcome to Caption Cat!\n\n"
}
curl https://api.captioncat.net/v1/project/cb6dc793fa1ceadb55744ba0a7b0af56/srt \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Retrieves the transcription as plain text
{
"status": "success",
"text": "Welcome to Caption Cat!"
}
curl https://api.captioncat.net/v1/project/cb6dc793fa1ceadb55744ba0a7b0af56/text \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Retrieves the download link of the rendered video
{
"status": "success",
"video": "https://captioncat.net/download/cb6dc793fa1ceadb55744ba0a7b0af56.mp4"
}
curl https://api.captioncat.net/v1/project/cb6dc793fa1ceadb55744ba0a7b0af56/video \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Deletes the project and all associated files
{
"status": "success",
"message": "project cb6dc793fa1ceadb55744ba0a7b0af56 has been deleted"
}
curl -X DELETE https://api.captioncat.net/v1/project/cb6dc793fa1ceadb55744ba0a7b0af56/video \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
The API uses standard HTTP status codes for errors.
| Status Code | Description | Error Body Example |
|---|---|---|
401 Unauthorized |
The request lacks valid authentication credentials. | {"error": "Invalid or missing token"} |
404 Not Found |
The requested resource could not be found. | {"error": "Id Not Found"} |
400 Bad Request |
The request was improperly formed (e.g., missing required fields). | {"error": "Missing required field: name"} |