Billing.
Prepaid dollars, a published formula, and a receipt in every response.
Credits#
Credit belongs to an organisation, and every key in it spends from the same balance. Owners and admins top up in whole dollars, from $5 to $1,000, by card in the dashboard. There is no subscription and no monthly minimum. Credits do not expire while the organisation exists. Each top-up gets an invoice you can download as a PDF.
Balances and charges are kept as whole micro-dollars (1 µ$ = $0.000001) in an append-only ledger, so there is no rounding drift. Every charge carries the request_id of the call that caused it.
What a call costs#
charge = max($0.0001, ceil(upstream_cost × 1.5))
upstream_cost is what the engine charges for that call at its list price. Where the engine reports the cost of the call in its response (Exa, xAI, Firecrawl, Serper and Tavily do, and Jina reports the tokens it used), we use that figure; otherwise the list price for the mode and result count. The result is rounded up to the next micro-dollar. Every engine and mode, with its typical and highest price, is on /pricing.
The reservation#
Before any engine is called, the request reserves its most expensive possible outcome against your balance: the highest price of the engines it may try, or for a fused request the sum of the engines it queries. If your balance is below that, the request is refused with 402 insufficient_credits and required_usd, even when the final charge would have been lower. This is what stops two simultaneous requests from spending the same dollar.
You never pay more than the reservation. When the call finishes, the charge is taken and the rest goes back to your balance in the same transaction. The response shows both, as billing.reserved_micros and billing.charged_micros.
What is not charged#
- Attempts that fail, time out or return no results.
- Pages we reject in URL modes: a bot challenge, a binary file, a JavaScript shell with no content, or too little text.
- Requests refused before dispatch (any
4xx). - Idempotent replays: the same
Idempotency-Keyand body return the stored response at no charge.
In a fused request, each engine that returned at least one result is charged for its own call, and engines that returned nothing are not. In a chain, only the engine that served you is charged. Each attempt's charge is in routing.attempts[].charged_micros.
Limits#
- Daily cap per key. Optional, set in the dashboard. Today's charges (UTC) plus open reservations plus this request's reservation must fit under it, or the request gets
402 spend_cap_reached.GET /api/v1/meshows the cap and today's spend for the calling key. - 300 requests a minute per organisation, across all its keys. Over that:
429 rate_limitedwith reasonrequestsand aRetry-Afterheader. - Failed-attempt budget. Failed attempts cost you nothing but still cost us. Once the upstream cost of an organisation's failed attempts passes $0.25 in a rolling hour, requests get
429 rate_limitedwith reasonfailed_upstream_costuntil the hour rolls on.
Auto-recharge#
Auto-recharge tops the balance up from a saved card when it runs low, so a running integration does not stop at 402 insufficient_credits. It is off until an owner or admin turns it on under Settings, Plan & billing. Save a card there first, or tick the box to save it when you top up.
- Threshold. Charge when the balance is below this amount: $5 or more.
- Amount. What each charge adds, in whole dollars from $10 to $500.
- Monthly cap. The most auto-recharge may charge in a calendar month (UTC). It starts at 3 times the amount and cannot be less than the amount.
Turning it on shows the terms you agree to: the card, the amount, the threshold, the monthly cap, and that you can turn it off at any time. We keep that text with who accepted it and when.
Balances are checked every 10 minutes, and only one charge is in progress at a time. The credit lands when the payment succeeds, with a receipt by email, and shows as a top-up in your statement. Between checks a balance can fall below the threshold, so set it above what you spend in 10 minutes.
Promo codes#
Owners and admins redeem a code under Redeem code on the Billing page. The credit is added at once, as a ledger row with reason promo, and appears in the statement and among your receipts. Promo credit is spent like any other credit.
A code works once per organisation and once per person, so the same person cannot redeem it again in another organisation. A code can also have an expiry date, a limit on total uses, and a minimum age for the organisation redeeming it. After 5 failed tries in an hour, further tries get rate_limited until the hour rolls on.
Receipts#
Every successful response carries billing.charged_usd and billing.balance_usd, so a client always knows what it just spent and what is left.