Transcribe Endpoint
The transcribe endpoint provides two operations:
POST https://api.importly.io/transcribe- Start a new transcriptionGET https://api.importly.io/transcribe/status?id={id}- Check transcription status
Purpose
Turn a media URL into a transcript: clean text plus timestamped segments. For YouTube URLs with captions (including auto-generated ones), extraction is fully managed and costs $0.01 per video. For caption-less media, use Importly's built-in AI transcription with "provider": "importly" — no speech-to-text account needed — at $0.02 per media-minute (min $0.03). Or bring your own provider (AssemblyAI, Deepgram, or OpenAI) at $0.01 per media-minute (min $0.03) plus your provider's own usage fees. AI transcription (built-in or BYOK) also downloads the media to extract its audio; that download bills at the standard $0.01 per MB downloaded and is itemized as downloadCostInDollars in the job result.
Parameters
| Parameter | Type | Description |
|---|---|---|
url* | string | Publicly accessible media URL to transcribe. |
language | string | Language code (e.g., |
provider | string | AI transcription provider for caption-less media:
|
apiKey | string | Your API key for the chosen provider. Not needed for
|
providerOptions | object | Provider-specific options, passed through unchanged. |
maxCostDollars | number | Optional spending ceiling for built-in transcription. Required when media duration can't be determined up front — the unused portion is refunded after transcription. |
webhookUrl | string | URL to receive a callback notification when the transcript is ready. |
Authentication is required via the Authorization: Bearer <API_KEY> header.
Example Request (YouTube captions)
bash1curl -X POST "https://api.importly.io/transcribe" \2 -H "Authorization: Bearer YOUR_API_KEY" \3 -H "Content-Type: application/json" \4 -d '{5 "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",6 "webhookUrl": "https://your-app.com/api/importly-webhook"7 }'
Example Request (built-in AI transcription)
bash1curl -X POST "https://api.importly.io/transcribe" \2 -H "Authorization: Bearer YOUR_API_KEY" \3 -H "Content-Type: application/json" \4 -d '{5 "url": "https://example.com/conference-talk.mp4",6 "provider": "importly"7 }'
Example Request (AI transcription with your provider key)
bash1curl -X POST "https://api.importly.io/transcribe" \2 -H "Authorization: Bearer YOUR_API_KEY" \3 -H "Content-Type: application/json" \4 -d '{5 "url": "https://example.com/podcast-episode.mp3",6 "provider": "deepgram",7 "apiKey": "YOUR_DEEPGRAM_KEY",8 "language": "en"9 }'
Response
json1{2 "success": true,3 "data": {4 "jobId": "b2f7c9e4-…",5 "status": "queued",6 "message": "Transcription has been queued for processing."7 }8}
Checking Status
bash1curl "https://api.importly.io/transcribe/status?id={jobId}" \2 -H "Authorization: Bearer YOUR_API_KEY"
When the job completes, the response includes the transcript:
json1{2 "success": true,3 "data": {4 "jobId": "b2f7c9e4-…",5 "status": "completed",6 "result": {7 "text": "Full transcript text…",8 "source": "platform_captions",9 "language": "en",10 "duration": 212,11 "data": {12 "segments": [13 { "start": 0.0, "end": 4.2, "text": "First segment…" }14 ]15 },16 "costInDollars": 0.0117 }18 }19}
If no captions are available and no provider is given, the job fails with code TRANSCRIPTION_PROVIDER_REQUIRED and a quote object (estimatedMinutes, estimatedCostDollars) telling you exactly what built-in transcription would cost for that video — retry with "provider": "importly" to accept it. Nothing is charged for failed jobs: charges for failed transcriptions are automatically refunded.
See also: Import Endpoint for downloading the media itself, and Webhooks for callback delivery details.