An API key with the transcriptions:write scope, from your dashboard. The API and the MCP server are on Creator, Pro, Studio and Podmaxxing; starting a transcription also needs minutes on the balance. See Authentication for what each scope grants.
Post a link. A podcast episode, a YouTube video, a TikTok, or a direct .mp3: the same field takes all of them, and you do not have to tell us which is which.
{
"id": "9f3c8e21-4b7a-4c19-9f2e-1d8a6c3b5e07",
"status": "processing",
"source_type": "spotify",
"message": "Transcription started. It usually takes a fraction of the episode length.",
"next_actions": [
"GET /api/v1/transcriptions/9f3c8e21-… to check status: poll every 5-10s until status is \"completed\"",
"GET /api/v1/transcriptions/9f3c8e21-…?include=text once completed"
]
}
An accepted request is 202, even when it is already done. A YouTube video with captions comes back "status": "completed", still with a 202. Branch on status, never on the HTTP code. A request that is refused (bad key, missing scope, plan limit) answers 4xx as usual; the 202 is not universal, it is what acceptance looks like.
Without ?include=text you get metadata and a 500-character preview. The full body sits behind transcript_url, so fetching it stays your decision, made knowing how large it is.