Limits, credits and plans
Rate limits and the headers that report them, what a credit is, and what a plan changes.
Three independent limits, for three different problems: how fast you call, how much you call in a day, and how many transcriptions you have running at once.
| Free | Creator | Pro | Studio | Podmaxxing | |
|---|---|---|---|---|---|
| Requests per minute | — | 30 | 120 | 300 | 600 |
| Requests per day | — | 500 | 10,000 | 50,000 | 100,000 |
| Concurrent transcriptions | — | 3 | 5 | 10 | 20 |
| Write access | No | Yes | Yes | Yes | Yes |
The API and the MCP server are on Creator, Pro, Studio and Podmaxxing. A plan buys access, throughput, monthly minutes and the AI tools; the free tier is the studio only.
Operations that spend credits on every call (starting a transcription, uploading a file, running an AI generator) carry their own budget, counted separately per key.
| Free | Creator | Pro | Studio | Podmaxxing | |
|---|---|---|---|---|---|
| Credit-spending calls / minute | 10 | 10 | 10 | 10 | 20 |
| Credit-spending calls / day | 100 | 100 | 100 | 100 | 300 |
Read your budget from the headers
Every response carries them (on success, not only on a 429) so you can pace before you are refused.
RateLimit-Limit and -Remaining are the current window; -Reset is seconds until it rolls over; -Policy lists every policy at once (120;w=60 is 120 per 60s). Retry-After appears on a 429 only, and honouring it beats your own backoff. Windows are fixed rather than sliding, so a burst spanning a boundary can briefly exceed the per-minute figure, the daily quota is what bounds total spend.
Two different 429s. rate_limited means slow down. too_many_in_flight means you are at the concurrency cap, backing off will not help unless one of *your own* jobs finishes. Always branch on error.code.
- Use webhooks instead of polling. On a busy account, polling is most of the daily budget.
- Pace on
RateLimit-Remaining, not on catching 429s. - Keep a window of concurrent jobs, not a burst: poll
?status=processingand start one as each finishes. - One key per workload, so a runaway script exhausts its own budget and not your production key’s.
Credits
Transcription is paid for in credits: one credit is one minute of audio, rounded up, so a 52-minute episode costs 52. Exporting that transcript as SRT, then VTT, then JSON costs nothing further: you pay for the transcription, not per download. A YouTube caption track is free through this API: no speech engine runs. In the web app it is billed like any other source. Reading, listing, exporting and deleting are all free, and deleting does not refund.
/api/v1/usagescope: transcriptions:readRead-only and cheap, so an automated client can check before starting work rather than discovering mid-task that the account is empty. Working through a back catalogue, call it once and sum your episode durations, one check beats fifty 402s.
The balance is checked against the episode’s estimated duration before any work starts, so a long episode is refused up front with 402 insufficient_credits rather than half-transcribed. Nothing is charged for a refused request.
Plan allowance and purchased minutes
| Free | Creator | Pro | Studio | Podmaxxing | |
|---|---|---|---|---|---|
| Read endpoints | No | Yes | Yes | Yes | Yes |
| Create, delete, upload | No | Yes | Yes | Yes | Yes |
| Webhook management | No | Yes | Yes | Yes | Yes |
| Speaker labels | Yes | Yes | Yes | Yes | Yes |
| Time-coded exports (SRT/VTT/JSON) | Yes | Yes | Yes | Yes | Yes |
| AI tools (show notes, chapters, translation) | No | Yes | Yes | Yes | Yes |
| Monthly minutes | 30 | 300 | 2,400 | 5,400 | 18,000 |
| Requests / minute | — | 30 | 120 | 300 | 600 |
| Concurrent transcriptions | — | 3 | 5 | 10 | 20 |
Your plan allowance resets monthly and is spendable anywhere. Purchased minutes, bought in packs, are spendable through the API and MCP only. An API call spends the allowance first and dips into purchased minutes for the remainder, so the perishable balance goes before the permanent one; GET /api/v1/usage reports both.
Purchased minutes do not expire on a date, but they are spendable only while your plan includes API access. Cancelling drops the account to the free tier, which cannot call the API, so a remaining purchased balance is paused rather than spendable. Nothing deletes it — the balance stays on the account and becomes spendable again as soon as you are back on a plan with API access.
When the plan is the problem
A 403 plan_required says the plan is wrong; a 402 insufficient_credits says the balance is empty. Retrying fixes neither, but only one needs a plan change. Plan is resolved per request, so an upgrade applies to the next call and rate limits move tier on the next window, scopes belong to the key, and a refused key starts succeeding the moment the plan grants it, with no change on your side. When a paid plan ends, write calls begin returning 403 plan_required; existing transcripts stay readable and exportable.