Skip to content

Pricing and credits

utter is prepaid. You buy credits up front, and usage debits them per second of audio, in real time, as requests complete. There is no invoice and no monthly bill.

The tier that serves a request sets the rate the debit is calculated at.

Tier $/sec $/hour of audio
ultra 0.000139 0.5004
turbo 0.000100 0.3600
standard 0.000061 0.2196
economy 0.000042 0.1512

The hourly column is the per second rate multiplied by 3600, shown for comparison only. Metering is per second.

Streaming and batch cost the same on the same tier.

Per second of audio, with no rounding up to the minute. A 4 second clip debits 4 seconds, not 60.

Every response tells you what was metered. billed_s appears in the done event on a stream and in the batch response body, so you can reconcile your own usage against the ledger.

Silence is audio. If you hold a stream open with an open microphone in a quiet room, those seconds are sent and debited. Gate on voice activity in your client if that matters to your balance.

Balances are held internally in integer micro-dollars from end to end, so a long run of small sessions does not accumulate floating point drift. A balance is never allowed to go negative.

A streaming session places a hold on your balance when the connection opens, and settles that hold against real usage when the session closes. Whatever the hold reserved but the session did not use goes straight back to the balance.

The practical consequence: a long stream needs enough balance to cover the hold at connect time, not just the seconds it eventually uses. If you plan to keep sessions open for hours, keep the balance comfortably ahead of that.

If the balance is below the minimum hold, the request fails with 402 before any transcription happens. Nothing is transcribed and nothing is debited.

{
"error": {
"code": "payment_required",
"message": "Credit balance is too low to start this request.",
"request_id": "req_01JD4Z2Q8W6M"
}
}

On a WebSocket the same thing arrives as an error event and the socket closes without ever sending ready. See Errors.

The console surfaces two thresholds: a warning level, and the point at which service stops. Wire the warning into whatever you use for alerting so a low balance is something you find out about before a request does.

Top-up is not self-serve yet. To add credits to an account, contact the team at [email protected], or book a call.

The volume bands are stated in seconds per month, and a dollar of credit buys a different number of seconds on each tier, so the discount cannot be resolved when you buy. It is applied afterwards instead, as a rebate.

Usage always debits at list rate. As your monthly total seconds cross a band, the discount you have earned is credited back to your balance. The rebate is recomputed on every debit and topped up incrementally, so the balance reflects the discount you have actually earned so far rather than arriving in a lump at the end of the month.

Monthly seconds, all tiers Discount
up to 1,000,000 list price
1,000,000 to 10,000,000 10%
10,000,000 to 50,000,000 20%
50,000,000 and above contact us

The band is chosen by total seconds across all tiers in a calendar month, and once a threshold is reached it applies to the whole month, not just the seconds above the line.

Above 50 million seconds a month, book a 30 minute call and we will agree a rate. You can also reach us at [email protected]. Until a contract rate is agreed, that volume is rebated at 20%.

gross = sum(seconds_on_tier * tier_rate)
rebate = gross * discount
net = gross - rebate

Seconds are summed per tier at that tier’s rate. The single monthly discount is applied once to that gross figure, and the result is credited back.

A month with 2,500,000 seconds on turbo and 800,000 seconds on economy.

Tier Seconds Rate Debited
turbo 2,500,000 0.000100 $250.00
economy 800,000 0.000042 $33.60
Gross $283.60

Total seconds across all tiers is 3,300,000, which falls in the 1M to 10M band, so the discount is 10% and it applies to the whole gross figure:

rebate = 283.60 * 0.10 = 28.36
net = 283.60 - 28.36 = 255.24

Your balance was debited $283.60 over the month as the usage happened, and $28.36 was credited back as rebate, so the month cost $255.24 of credit.

Note what the rebate is not: the economy seconds are not rebated at their own band and the turbo seconds at another. There is one band per month, chosen by the combined second count, applied once to the gross.

GET /v1/credits returns the current balance.

Terminal window
curl https://api.utter.cc/v1/credits \
-H "Authorization: Bearer $UTTER_API_KEY"
{
"balance_micros": 41234500,
"balance_usd": "41.2345",
"held_micros": 120000,
"available_micros": 41114500
}

held_micros is what open streaming sessions have reserved. available_micros is the balance minus those holds, and it is the figure a new request is checked against.

GET /v1/credits/ledger returns the movements behind that balance, newest first. Every movement is an append-only row.

{
"entries": [
{
"kind": "debit",
"micros": -852,
"balance_after_micros": 41234500,
"ts": "2026-08-25T09:14:02.118Z",
"request_id": "req_01JD4Z2Q8W6M"
},
{
"kind": "rebate",
"micros": 28360000,
"balance_after_micros": 41235352,
"ts": "2026-08-25T00:04:00.000Z",
"request_id": null
}
]
}

kind is one of topup, debit, rebate, adjustment, hold or hold_release. micros is signed. Read balance_after_micros rather than summing the ledger yourself.

GET /v1/usage returns the per tier breakdown for the current month, along with the balance and the rebate state, so one call answers both what you spent and what you have left.

The console shows the same thing, broken down by tier and by API key. Give each environment or service its own key and the breakdown does the attribution for you.

All prices are in US dollars and exclusive of taxes. Any GST, VAT or withholding that applies in your jurisdiction is added on top.