Keys, quotas and billing
What a key grants, what it consumes, and what happens when it runs out.
API keys
- One active key per account at this stage.
- The key is shown in clear only at creation: we never store it in clear, so it can never be shown again.
- Regenerating a key revokes the previous one immediately. Plan to update your CI secrets right after.
What authentication changes
| Without a key | With a key | |
|---|---|---|
| Rate allowed | 5 requests/hour per IP address | 60 requests/hour per account |
| Discoverability and catalog quality | Available | Available |
| Agent simulation | Always disabled | Subject to your monthly quota |
| Account attribution, history, badges | No | Yes |
Rate limiting protects processing capacity; it's independent of the quota, which governs cost. The two rarely meet.
Simulation quota
Only the agent simulation consumes quota — it's the one check that calls a language model, and therefore the one that costs money to run. The other two are unlimited, within the rate limit.
| Plan | Simulations per month | Cycle |
|---|---|---|
| Free | 0 | — |
| Growth (€29/month) | 150 | Aligned with your subscription, not the calendar month |
General readiness scan
general_scan — the 4-category layer described in the API reference — isn't governed by the quota above: it makes no language-model call, so it costs nothing to run. It's throttled instead, and the authenticated path is gated separately from the rate limit.
| Anonymous | Authenticated | |
|---|---|---|
| Allowance | 3 requests/hour per IP address | 20 requests/hour per account — currently limited to an internal beta, not yet self-serve |
| Over the limit, or not eligible | Degrades silently, never a 429 | Degrades silently, never a 429 |
In every case the audit itself still runs — only the general_readiness field comes back null, and options.general_scan on the finished job says false regardless of what you sent.
When the quota runs out
The request is refused with a 402 and the quota_exceeded code, and no audit is created. The body carries quota_used and quota_limit.
No silent degradation: the request does not fall back to an audit without simulation that would return a lower score without saying so. A pipeline using the score as a blocking gate must know the simulation didn't run, not receive a truncated result it believes is complete.
Billing
- Everything goes through the Stripe billing portal, reachable from the dashboard — there's no in-house billing screen to integrate against.
- On a failed payment, the Growth quota is kept during Stripe's automatic retries, and Stripe sends its own reminders.
- The quota only drops back to Free once the subscription is actually cancelled.
Detailed recommendations by plan
This is about the private dashboard's Agent Readiness tab, not the API — see the callout at the end of this section if you only integrate over HTTP.
| Plan | What the dashboard shows |
|---|---|
| Free | Every signal's measured state (present, absent…) is always visible, for all 14 scored signals plus the 13 always-open diagnostic ones. Full what/why/how guidance — the copyable prompt, the share button — only on the 5 highest-weight signals. |
| Growth | Same as Free, plus full guidance on the remaining 9 scored signals — nothing stays locked. |