Base URL: http://localhost:5000
Capite provides a lightweight, asynchronous REST API for video transcription, animated subtitle generation, video re-rendering, subtitle export, and media streaming.
GET /api/health{
"status": "ok",
"version": "1.0.0"
}Uploads a video and queues a transcription & caption burn-in job.
POST /api/process
Content-Type: multipart/form-data| Field | Type | Required | Description |
|---|---|---|---|
file |
File | Yes | Video file (.mp4, .mov, .webm) up to MAX_FILE_SIZE_MB |
captionStyle |
String | No | Style preset ID (e.g. hormozi, mrbeast, crimson-pop, etc. Default: hormozi) |
captionPosition |
Integer | No | Position percentage from bottom (5-50, default: 20) |
customFont |
String | No | Custom font family override |
fontWeight |
String | No | Weight: default, light, regular, medium, semibold, bold, extrabold |
weightTransition |
String | No | Transition style: none, light_to_bold, bold_to_light |
primaryColor |
String | No | Hex color or none |
highlightColor |
String | No | Hex color or none |
outlineColor |
String | No | Hex color or none |
backgroundColor |
String | No | Hex color or none |
fontStyle |
String | No | Font style: default, normal, italic |
textCasing |
String | No | Casing: default, uppercase, lowercase, titlecase, original |
{
"jobId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"status": "pending"
}400 Bad Request— Missing file, invalid file extension, unsupported style, or invalid position.413 Payload Too Large— File exceeds maximum allowed size.429 Too Many Requests— Concurrent job limit reached.
Polls the current status, progress percentage, active phase, and transcription metadata of a job.
GET /api/status/{jobId}{
"jobId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"status": "processing",
"progress": 75,
"currentPhase": "burning",
"language": "en",
"durationSeconds": 42.5,
"captionStyle": "hormozi",
"captionPosition": 20,
"transcript": {
"language": "en",
"segments": [ ... ]
},
"errorMessage": null
}pending: Waiting in queueprocessing: Active in pipelinecompleted: Processing finished and output video is readyfailed: An error occurred (details inerrorMessage)
transcribing: Whisper is transcribing speech & word timestampsgenerating_subtitles: Generating ASS script and animationsburning: FFmpeg is burning captions into the videofinalizing: Verifying output file integrity
Re-renders a video with an edited transcript, changed caption style, altered font settings, custom colors, or position without re-running transcription.
POST /api/rerender/{jobId}
Content-Type: application/json{
"transcript": {
"language": "en",
"segments": [
{
"id": 0,
"start": 0.0,
"end": 2.4,
"text": "Hello and welcome to Capite!",
"words": [
{ "word": "Hello", "start": 0.0, "end": 0.5, "score": 0.98 },
{ "word": "and", "start": 0.5, "end": 0.8, "score": 0.99 },
{ "word": "welcome", "start": 0.8, "end": 1.4, "score": 0.97 },
{ "word": "to", "start": 1.4, "end": 1.7, "score": 0.95 },
{ "word": "Capite!", "start": 1.7, "end": 2.4, "score": 0.99 }
]
}
]
},
"captionStyle": "mrbeast",
"captionPosition": 25,
"customFont": "Montserrat",
"fontWeight": "bold",
"primaryColor": "#FFFFFF",
"highlightColor": "#FFD700"
}sync=true(optional): Synchronous re-render (waits until completion before returning). Default is background async.
{
"jobId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"status": "processing"
}Exports generated or edited subtitles in various industry formats.
GET /api/export/{jobId}?format=srtsrt— SubRip subtitle file (.srt)vtt— WebVTT subtitle file (.vtt)txt— Plain text transcript (.txt)ass— Advanced SubStation Alpha styled animation file (.ass)
Binary attachment stream with proper MIME type and Content-Disposition.
Streams either the captioned result video or original uploaded video with HTTP Range request support for seeking.
GET /api/video/{jobId}?type=captionedtype:captioned(default) ororiginal
Binary video stream (video/mp4).
Downloads the completed captioned video file.
GET /api/download/{jobId}Attachment video stream (video/mp4) with Content-Disposition: attachment; filename="captioned-<filename>.mp4".
404 Not Found— Job not found or output file missing.409 Conflict— Job is still processing or has failed.
Deletes a job and cleans up all associated scratch files, uploads, and rendered videos.
DELETE /api/jobs/{jobId}{
"deleted": true
}