Billing
Billing is prepaid and pay-as-you-go. An organization tops up a wallet, and each transcription draws down the balance. There is no monthly minimum, no subscription, and no invoice to approve.
Topping up
Top up from Settings → Wallet in the dashboard. Payment goes through Stripe Checkout; sales tax or VAT is calculated at checkout and charged on top of the credit amount, so a 25.00 of credit to the wallet whatever the tax came to.
The card used for a top-up is saved, which is what makes auto-recharge possible. Cards, receipts and invoices are managed in the Stripe billing portal, reachable from the same page.
Auto-recharge
Auto-recharge tops the wallet up automatically when it runs low, so a long overnight batch does not stop halfway.
The minimum threshold exists so there is always enough balance left to keep serving requests while a failed payment is sorted out. Auto-recharge needs a saved payment method: make one manual top-up first, then enable it.
An off-session charge cannot answer a bank’s 3-D Secure challenge, because nobody is at a browser. If the charge fails for that or any other reason, auto-recharge switches itself off and the organization’s owners, admins and billing members get an email. Turn it back on after updating the card.
Prices
Prices are per model, not global, and they are served from the API rather than
published as a static table. GET /v1/models returns each model’s unit and
price_per_unit_usd:
The unit is audio_second. CrisperWhisper 2 (crisperwhisper-v2) costs
**0.00025 per second. The cost of a request
is the whole seconds of decoded audio, rounded up, multiplied by that
price: a 2.84 s clip is 3 billable seconds and costs 0.90. The response’s usage.seconds and the
x-nyra-cost-usd header tell you what a request came to.
How a request is charged
Money is tracked in an append-only ledger in Postgres. Stripe only ever moves money in; the ledger is the source of truth for what a balance is.
- Reserve. Before the audio is sent to the model, the API reads the audio’s duration from the file itself and places a hold for that duration plus one second of grace, at the model’s price. The hold comes off the available balance immediately, so two large requests in flight at once cannot both spend the same last dollar. Audio whose duration cannot be read, or that is longer than one hour, is refused here — before anything is reserved or sent to a model.
- Run. The request is transcribed.
- Settle. The hold is released in full and the actual cost — the duration of the audio the model decoded, rounded up to the second — is charged. The grace second comes back to the wallet the moment the request finishes.
A request that fails is voided: the hold is released and nothing is
charged. That includes a 503 capacity_exceeded from a saturated backend. A
request that never reports back — a dropped connection, a crashed client —
has its hold expire and released automatically, so reserved money is never
stranded.
Balances and holds are visible in the dashboard, and every entry —
top_up, hold, settle, release, void, refund, adjustment — is
listed in the wallet ledger with its reference.
Running out
When the available balance cannot cover a request’s hold, the API answers
HTTP 429 with the insufficient_quota error type:
insufficient_quota is not a rate limit, and retrying will not clear it — the
same request will fail identically until the wallet is topped up. Treat it as a
terminal error for that request and alert an operator. If your HTTP client
retries 429s automatically, exclude this code.
Two emails warn you before it happens: low balance when the balance drops below the alert threshold (default $5.00, configurable), and balance exhausted when it reaches zero. Both are throttled to at most one per day.
Refunds
Refunds issued in Stripe are posted back to the ledger automatically as
refund entries, including partial refunds.
Idempotency
POST /v1/audio/transcriptions accepts an Idempotency-Key header, so a
retried request is charged once: a retry with the same key within 24 hours
replays the first response without running again. See
Retries and idempotency for the exact
rules. Top-ups are deduplicated on the Stripe event id and on the ledger
entry, so a payment credits the wallet exactly once no matter how many times
Stripe delivers the confirmation.