One rate card, one meter, and a small number of ceilings. This page is what you need to forecast a month and to recognize a limit from inside your own app.

The rate card

One credit is one US cent, so at 0.001aminuteacreditbuystenminutesofaudio.Thereisonerateforeverytimedsurfaceonpurpose:tworateknobsishowthisplatformoncedrifted900×apart,withonesurfacebilling0.001 a minute a credit buys **ten minutes of audio**. There is one rate for every timed surface on purpose: two rate knobs is how this platform once drifted 900× apart, with one surface billing 0.09 a minute against another’s $0.001 and nothing to surface the gap. Charges meter on the audio, not on the request: generated TTS seconds (voice-clone previews included), transcribed duration, and realtime wall clock from the moment the upstream pipeline connects until the socket closes. Close your sockets when you are done — a session nobody is talking on still bills. The ledger is integer cents and debits round to the nearest cent, so a short generation rounds to zero and cost accrues across the requests that cross whole-cent boundaries. Rounding to zero is not recording nothing: every unit of usage is written whether or not it moves the balance, with the exact cost carried in micro-cents, which is what the console’s consumption panel sums.

Credits are prepaid

There are no plans. You buy credits, usage draws them down, and nothing expires with a billing cycle. A new organization gets a one-time grant worth 1,440 minutes of audio — a full day, 144 credits at the rate above. It is denominated in minutes rather than credits because what a cent buys moves with the rate card, and a grant fixed in credits would silently become a different product every time the price changed.
The grant does not renew. It is the free tier in full, not a monthly allowance. A daily free day would be 1,440 minutes against one card’s 5,760 minutes of total daily capacity — four free accounts would hold production permanently, for nothing.
There is no automatic top-up. When the balance falls below roughly an hour of audio you get a banner in the console and an email; when it runs out, paid models answer 429 insufficient_quota. A billable request also needs a minimum balance of 10 credits to start — a floor that stops zero and negative balances from opening new work, not a prepayment for the whole call.

Free-tier daily ceilings

Until an organization makes its first purchase, its speech usage is also capped per UTC day, in the units each surface is metered in. Reaching one is 429 with code: "free_tier_daily_limit", and the message names the surface and the reset (00:00 UTC). The ceiling is checked before the work and recorded after it, so one oversized request can overshoot; the next one is refused. Any purchase lifts all three permanently. From then on the balance is the only limit. The same rule gates cloning: an organization that has never bought credits gets exactly one clone — still charged the 100-credit fee, which the signup grant covers — and a second answers 403 plan_required. These are deployment configuration, and a self-hosted install running its own hardware sets them to 0 to switch them off. Read them rather than restating them: GET /v1/organizations/billing/credits returns a free_tier block with every figure and an active flag saying whether they currently apply to you.

Rate and concurrency limits

Requests per minute is one burst budget, keyed speech:{organization}, spent by every route that calls enforce_request_rate — not one budget each:
  • POST /v1/audio/speech
  • POST /v1/audio/transcriptions
  • POST /v1/speech/transcriptions, the saved-transcript route
  • GET /v1/audio/voice-design
  • POST /v1/voices/{voice_id}/preview
  • POST /v1/chat/completions
  • WS /v1/realtime and WS /v1/audio/stream, once at connect
Back off; it clears within the minute. Batching saved transcription runs is the usual way to meet this one by surprise, because /v1/speech/transcriptions looks like a studio route rather than a speech route and spends the same 60. Organizations flagged billing-exempt skip this budget entirely, which is why a comped account cannot reproduce a rate limit a paying one is hitting.
There is no fixed per-organization ceiling on concurrent realtime sessions. The serving pool has a finite number of pipelines, and when it is full a new session is refused at connect rather than sharing degraded capacity with live ones. A duet or a two-way interpretation opens sessions in pairs, so it takes two slots and bills two sessions.

What running out looks like from inside your app

This is the part that decides whether your users see a useful message or a spinner. On an HTTP call, the balance is checked before the work: 429 with code: "insufficient_quota", in the OpenAI error envelope, so a typed SDK error surfaces it. On a live socket, the balance and the free-tier day are re-checked once a minute while the call is up, and the wall clock so far is charged on the same beat. So a long conversation cannot outrun the credit that started it, and a crash no longer loses the whole call’s minutes — but a call can meet a limit it did not have at connect. When that happens the gateway sends one last eesi.session frame naming the reason, then closes with 1008:
Show limit.message. Only insufficient_quota and free_tier_daily_limit end an established session this way — a re-check that could not decide, because the ledger or the ceiling store was unreachable, refuses a new session but never cuts one that is up.

Forecasting a month

Everything you need is one call, and every figure on it is the deployment’s own rather than a number restated here.
The balance is reported in minutes of audio as well as credits, because a balance says what it is worth and not how long it lasts, and minutes is the question anyone actually has. To turn last month into next month’s estimate, read GET /v1/organizations/usage/breakdown — it splits spend by kind, by model and by API key. See Billing.
In a deployment with Stripe unconfigured, billing is off: the billing routes answer 404, the credit gate always allows, and nothing is charged. That is what a self-hosted install and most development environments look like.

Next

Billing

Top-ups, the ledger, and reconciling a bill against your own usage.

Errors

Every 429, and which of them is worth a retry.

Latency

Where a spoken turn’s time goes, and what actually moves it.

Models

Which id serves what, and what each one costs to run.