Skip to main content

Plans & Billing

ZebraTruth meters usage in credits. Every check reserves credits before it runs and commits them when it completes, so GET /v1/usage always reflects what the current period can still spend.

Plans

Each plan carries a credit allowance per billing period, a rate limit and a concurrency limit. Current allowances are shown on the dashboard. Credits do not roll over.

Individual plan limits

Individual is scoped to solo use. It includes compliance checks and the API, but not the operational surface around them: The same limits apply to an expired trial. The trial itself is unlimited — it is there to show the full breadth of coverage — but once it lapses the account is held to the entry-level allowance until a plan is chosen. Calling a restricted endpoint returns 403 entitlement_required.

Callbacks work on every plan

Only saved webhook endpoints are restricted — registering them, listing them, and reading delivery history, all under /v1/webhooks. Those return 403 entitlement_required on Individual. Passing a webhookUrl on an individual request is not restricted, on any plan. "responseMode": "async" therefore works on Individual too, which matters most there: a video check can run for minutes, and async is how you avoid holding the connection open for it.
On Individual, set webhookUrl per request. There is nothing to register in advance, and no delivery history to read afterwards — treat the callback itself as the record.

Scope limits are enforced twice

The second one exists because your plan can change after you chose your scope. Every Individual subscription starts as a trial, where the limits do not apply, so a selection made then can be wider than the plan you end up on. Rather than silently narrowing a compliance check — which would change its verdict while still returning 200 — the request is refused. A request that names its own jurisdictions and platforms is judged on what it names, so you can keep working immediately by sending no more than the limit, without editing your saved settings first.

Changing plan

Start a subscription with POST /v1/billing/checkout, passing plan as either individual or pro.

Upgrading Individual to Pro

POST /v1/billing/upgrade moves an Individual subscription to Pro immediately:
  • You are charged for Pro straight away.
  • Your billing period restarts on the upgrade date, and renewal moves with it. Upgrading on the 14th means your next charge is the 14th of the following month.
  • Unused Individual credits carry into the first Pro period, on top of the Pro allowance. GET /v1/usage reports the two parts separately as baseCredits and carriedCredits.
The request requires an Idempotency-Key header. Reuse the same key when retrying after a timeout — a retry with a new key can charge twice. Downgrading from Pro to Individual is not supported.

Checking Your Balance

Returns creditsRemaining, creditsTotal, creditsUsedThisMonth, and period dates. creditsTotal is also broken out as baseCredits (your plan’s allowance) plus carriedCredits (anything carried in from an upgrade). carriedCredits is 0 unless you have upgraded from Individual to Pro mid-period — without it, a Pro invoice next to a cap above the Pro allowance looks like a billing error.

Cost Breakdown

Every response includes costBreakdown showing per-agent, per-stage credit usage with cache hit indicators.