/api/v1/transcribeTranscribes audio to a subtitle file, or force-aligns provided lyrics to it. If lyrics is provided, uses forced alignment; otherwise runs automatic 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, or a YouTube video URL (e.g. https://youtube.com/watch?v=...). |
lyrics | string | optional | Plain-text lyrics to align with the audio. 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). Defaults to false. |
smartSections | boolean | optional | Automatically detect and add section labels like [Verse 1], [Chorus] in the output. Defaults to true. |
format | string | optional | Output format — lrc, webvtt, srt, ass, ttml, txt. Defaults to lrc. Use txt for plain text with no timestamps. |
Force-align lyrics → LRC
curl -X POST https://quicklrc.com/api/v1/transcribe \
-H "Authorization: Bearer qlrc_..." \
-H "Content-Type: application/json" \
-d '{
"fileUrl": "https://example.com/song.mp3",
"lyrics": "Hello world\nThis is line two"
}'Auto-transcribe → LRC with word timestamps + smart sections
curl -X POST https://quicklrc.com/api/v1/transcribe \
-H "Authorization: Bearer qlrc_..." \
-H "Content-Type: application/json" \
-d '{
"fileUrl": "https://example.com/song.mp3",
"isWordLevel": true,
"smartSections": true
}'Auto-transcribe → SRT
curl -X POST https://quicklrc.com/api/v1/transcribe \
-H "Authorization: Bearer qlrc_..." \
-H "Content-Type: application/json" \
-d '{ "fileUrl": "https://example.com/podcast.mp3", "format": "srt" }'| 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" } |
| 400 | Missing fileUrl, duration, or invalid format | { "error": "..." } |
| 402 | File duration exceeds remaining credits | { "error": "...", "usage": { usedMinutes, limitMinutes, remainingMinutes, mediaDurationMinutes } } |
| 403 | Usage limit exceeded | { "error": "Usage limit exceeded", "usage": { ... } } |
| 500 | Processing error — you are not charged | { "error": "..." } |
API calls share the same credit pool as web app usage. Cost is calculated by rounding the file duration up to the nearest minute (e.g. 61 s = 2 min). You will not be charged for failed requests.
| Tier | Monthly limit | Reset |
|---|---|---|
| free | 5 min | Every 30 days |
| subscribed | Based on your plan | Billing cycle start date |