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.
The key goes through your secret store, never the repository
Never commit a key, not even to a private repository. Put it in your CI's secret store and read it from the CABFY_API_KEY environment variable — the command line picks it up automatically.

What authentication changes

Without a keyWith a key
Rate allowed5 requests/hour per IP address60 requests/hour per account
Discoverability and catalog qualityAvailableAvailable
Agent simulationAlways disabledSubject to your monthly quota
Account attribution, history, badgesNoYes

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.

PlanSimulations per monthCycle
Free0
Growth (€29/month)150Aligned with your subscription, not the calendar month
The cycle follows your subscription, not the calendar
The cycle follows your subscription's real dates. A subscription started on the 12th renews on the 12th, not on the 1st — don't write calendar-month reset logic client-side.

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.

AnonymousAuthenticated
Allowance3 requests/hour per IP address20 requests/hour per account — currently limited to an internal beta, not yet self-serve
Over the limit, or not eligibleDegrades silently, never a 429Degrades 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.

PlanWhat the dashboard shows
FreeEvery 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.
GrowthSame as Free, plus full guidance on the remaining 9 scored signals — nothing stays locked.
The lock follows the plan
The dashboard shows Store Connection to every account. For Product Quality, evidence and detailed recommendations are removed from private Free-account results; Growth keeps the full report. Public surfaces remain fully readable.