How much audio transcription costs with an API
US$ 0.03 per hour of audio, billed by the second. What that means on a thousand-hour queue, and the three pricing traps that show up on the invoice of whoever skipped the fine print.
The math is plain: US$ 0.03 per hour of audio processed, or US$ 0.05 with speaker separation. No subscription, no minimum, no plan.
What usually differs between vendors is not the number on the table: it is everything around it. This post is about that.
The math, on real numbers
| What you have | Duration | Cost |
|---|---|---|
| A voice note | 40 s | US$ 0.00033 |
| A meeting | 1 h | US$ 0.03 |
| A weekly podcast, one year | 52 h | US$ 1.56 |
| A support archive | 1,000 h | US$ 30.00 |
| A large archive | 20,000 h | US$ 500.00 |
The last row already includes the volume discount: past 10,000 hours transcribed by the account, the rate drops to US$ 0.02 (or US$ 0.03 with speakers). The discount is automatic, with no contract and no negotiation: cross the threshold and the next transcripts come out cheaper.
Trap 1: the per-request floor
Plenty of APIs bill per block, rounding every file up. On a queue of 40-second voice notes, a one-cent floor per transcript makes the real price 30 times the advertised one.
Here billing is proportional to the second, over the real duration measured during processing. Two minutes at US$ 0.03/h cost US$ 0.001. Values come back with fractions of a cent for exactly that reason:
{
"data": {
"currency": "USD",
"total": 187.4062,
"reserved": 40.5,
"available": 146.9062
}
}If you store those values in an integer column, or run them through parseInt,
switch to decimal before reconciling. The truncation is silent.
Trap 2: billing for what failed
The charge lands when the transcript turns done. While it processes, cost is
0, and a failed transcript is not billed. Worth checking with any vendor you
evaluate: "billed per audio submitted" and "billed per audio transcribed" are
different things on the day 200 files in a batch come in with the wrong codec.
Trap 3: the balance that stalls the queue
With no credit, new transcripts are refused with 402 insufficient_balance.
Nothing is deleted, but the queue stops. Two things prevent it:
GET /v1/balancereturnstotal,reservedandavailable. The one to monitor isavailable: it already subtracts what in-flight transcripts have held, so it is what the next one can actually spend.- Auto top-up, switched on in the dashboard, handles the case without somebody on call.
What is not on the bill
- Storage: we do not charge to keep the submitted audio or the transcript.
- Requests: checking status or balance costs nothing. Even so, prefer
webhookUrlover a polling loop, for latency rather than price. - Language: transcribing Portuguese costs the same as any of the 30+ supported languages.
- Diarization you did not ask for:
speakersis opt-in. Without the field, the rate is plain transcription.
How to test before deciding
Every new account gets US$ 2 in credits, no card. That is roughly 65 hours of audio, enough to run your real material and compare the text rather than the price table. It is the only honest way to evaluate: a WER published by one vendor does not compare to another's, because each normalizes text its own way, and the gap between normalizers is several points.
The full table, with size and rate limits, is in pricing and limits.