Credits & billing
Credits are charged per operation, cache hits are free, and you are never charged for our failures. This page says exactly what costs what.
How charging works
Each operation has a credit class reflecting what it costs us to serve. Charging a flat rate for everything would mean either overcharging for simple lookups or losing money on heavy ones, so we do neither.
| Class | Credits | Operations |
|---|---|---|
| Basic | 1 | profile, post, resolve |
| List | 2 | profile/posts |
| Advanced | 3–5 | Derived and higher-cost operations |
| Premium | 5–20+ | Specialised datasets, priced per endpoint |
The credit cost of a response is always returned in the X-Credits-Charged
header, including when it is zero.
Cache hits are free
A response served from cache costs 0 credits. You are billed for live fetches, not for asking again.
This is deliberate and it changes how you should build. Polling a resource every few minutes is cheap: you pay for the first fetch in a window and nothing for the rest. There is no penalty for checking twice, and no reason to build your own cache on top of ours.
freshness: "cached" → 0 credits
freshness: "fresh" → the operation's credit class
What is never charged
You are not billed when the request did not give you what you asked for:
| Outcome | Charged |
|---|---|
| Success, live fetch | Yes |
| Success, cache hit | No |
not_found — profile or post gone |
No |
private — account not public |
No |
unavailable / upstream_unavailable |
No |
400 — malformed request |
No |
429 — rate limited |
No |
| Idempotent replay | No — the original charge stands |
| Client cancelled after the fetch | Yes — the provider was already paid |
| Client cancelled before the fetch | No |
The two cancellation rows are the ones people trip on. A request you abandoned can still appear on your bill, because the cost is incurred when we call the provider, not when you read the response. The result is cached either way, so the retry is free — see errors & availability.
The not_found row costs us real money: our upstream bills us for a lookup of a
resource that turns out to be deleted. We absorb it. Passing that on would mean
charging you for the discovery that something you asked about no longer exists.
Running out
Requests do not stop when your credits run out. They continue and bill as overage at a higher per-credit rate. An integration failing at 3am because a balance hit zero is a worse outcome than a slightly larger invoice, so we chose the invoice.
Two things are planned to stop that being a surprise. Neither is built yet, so at launch the overage above is the only backstop:
- Balance alerts (planned) — an email at a threshold you set, to as many recipients as you want.
- Automatic top-up (planned) — refill by a fixed amount when the balance drops below a floor.
Per-project overage disabling — so exhausted credits return 402 instead of billing on — is also planned, not shipped.
Until those land, watch your balance in the dashboard, or reconcile from the usage ledger.
Plans
| Plan | Price | Credits | Per 1,000 | Rate limit |
|---|---|---|---|---|
| Free | $0 | 1,000 | — | 30/min |
| Builder | $19/mo | 7,500 | $2.53 | 120/min |
| Growth | $49/mo | 25,000 | $1.96 | 240/min |
| Higher volume | Per account | 25,000+ | Per account | Per account |
Plan credits reset monthly and roll over for one month. Credits bought as top-ups are valid for twelve months. Plan credits are spent first, so the balance that expires soonest goes first.
Last updated 27 August 2026