POST/api/transcribe

Transcribes 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.

Request

Content-Type: application/json · Authorization: Bearer <api-key>

FieldTypeDescription
fileUrlstringrequiredPublicly accessible URL of the audio or video file to process.
transcriptTextstringoptionalAny 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.
isWordLevelbooleanoptionalEmbed per-word timestamps in the output (karaoke-style). Supported by all formats except SRT. Defaults to false.
formatstringoptionalOutput 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" }'

Response

200Success — subtitle file content as plain text
FormatContent-Type
lrctext/plain; charset=utf-8
webvtttext/vtt; charset=utf-8
srttext/plain; charset=utf-8
asstext/plain; charset=utf-8
ttmlapplication/ttml+xml; charset=utf-8
txttext/plain; charset=utf-8

Errors

All error responses return application/json with an error string field.

StatusConditionBody
401Missing or invalid API key{ "error": "Authentication required" }
403Usage limit exceeded{ "error": "Usage limit exceeded", "usage": {...} }
402File duration exceeds remaining credits{ "error": "...", "usage": { tier, usedMinutes, limitMinutes, remainingMinutes, mediaDurationMinutes } }
400Missing fileUrl, invalid format, or can't determine duration{ "error": "..." }
500Processing error or unexpected failure{ "error": "..." }

Credits

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).

TierMonthly limitReset
free10 min1st of each calendar month (UTC)
subscribed (monthly)500 minBilling cycle start date
subscribed (annual)6,000 minBilling cycle start date

Test