/api/transcribeTranscribes audio/video to a subtitle file, or aligns any provided text to it. If transcriptText is provided, uses forced alignment; otherwise runs auto Speech-to-Text. Requires an API key — create one from your dashboard.
Content-Type: application/json · Authorization: Bearer <api-key>
| Field | Type | Description | |
|---|---|---|---|
fileUrl | string | required | Publicly accessible URL of the audio or video file to process. |
transcriptText | string | optional | Any plain text to align with the audio (speech, lyrics, narration, etc.). When provided, uses forced alignment instead of auto STT. Line breaks signal new subtitle lines. |
isWordLevel | boolean | optional | Embed per-word timestamps in the output (karaoke-style). Supported by all formats except SRT. Defaults to false. |
format | string | optional | Output format — lrc webvtt srt ass ttml txt. Defaults to lrc. Use txt for plain text with no timestamps. |
Auto-transcribe to LRC (default)
curl -X POST https://karadeo.com/api/transcribe \
-H "Authorization: Bearer kd_..." \
-H "Content-Type: application/json" \
-d '{ "fileUrl": "https://example.com/audio.mp3" }'Force-align provided text → LRC with word timestamps
curl -X POST https://karadeo.com/api/transcribe \
-H "Authorization: Bearer kd_..." \
-H "Content-Type: application/json" \
-d '{
"fileUrl": "https://example.com/speech.mp4",
"transcriptText": "Hello world\nThis is line two",
"isWordLevel": true,
"format": "lrc"
}'Auto-transcribe → SRT
curl -X POST https://karadeo.com/api/transcribe \
-H "Authorization: Bearer kd_..." \
-H "Content-Type: application/json" \
-d '{ "fileUrl": "https://example.com/podcast.mp3", "format": "srt" }'Auto-transcribe → plain text (no timestamps)
curl -X POST https://karadeo.com/api/transcribe \
-H "Authorization: Bearer kd_..." \
-H "Content-Type: application/json" \
-d '{ "fileUrl": "https://example.com/audio.mp3", "format": "txt" }'| Format | Content-Type |
|---|---|
| lrc | text/plain; charset=utf-8 |
| webvtt | text/vtt; charset=utf-8 |
| srt | text/plain; charset=utf-8 |
| ass | text/plain; charset=utf-8 |
| ttml | application/ttml+xml; charset=utf-8 |
| txt | text/plain; charset=utf-8 |
All error responses return application/json with an error string field.
| Status | Condition | Body |
|---|---|---|
| 401 | Missing or invalid API key | { "error": "Authentication required" } |
| 403 | Usage limit exceeded | { "error": "Usage limit exceeded", "usage": {...} } |
| 402 | File duration exceeds remaining credits | { "error": "...", "usage": { tier, usedMinutes, limitMinutes, remainingMinutes, mediaDurationMinutes } } |
| 400 | Missing fileUrl, invalid format, or can't determine duration | { "error": "..." } |
| 500 | Processing error or unexpected failure | { "error": "..." } |
Each request consumes credits from your monthly quota. Cost is calculated by rounding the file duration up to the nearest minute (e.g. 61 s = 2 min).
| Tier | Monthly limit | Reset |
|---|---|---|
| free | 10 min | 1st of each calendar month (UTC) |
| subscribed (monthly) | 500 min | Billing cycle start date |
| subscribed (annual) | 6,000 min | Billing cycle start date |