Credits and billing
What paid work costs in the Zaraftis v1 API, and how reservations settle.
Work is paid for with prepaid credits. A workspace gets its first credits from the free trial, which starts when you choose the API path at sign-up, or from a credit pack bought through the dashboard checkout. Trial credits expire when the trial ends. Every accepted request reserves its disclosed maximum before any work starts, and unused credits are released when the work ends. Failed operations do not spend credits. Credits are whole numbers.
The catalog
The machine-readable catalog is served by GET /v1/capabilities (the operations array, with credit_catalog_version). The table below is rendered at build time from the same constant the endpoint serves:
| Operation | Credits | Notes |
|---|---|---|
| AI platform query | 20 | One successfully completed AI platform query, one prompt on one platform. The same credit cost on every platform except Claude (see below). Failed operations do not spend credits. |
| AI platform query, Claude | 100 | One successfully completed Claude query (one prompt). Claude carries the heavier query price; every other platform bills 20 credits per query. |
| Site audit | 10 | One successfully completed one-page site audit. |
| Auto AI visibility setup | 50 | max(50, 15 + 5*topics + 2*prompts) credits. unit_credits shows the 50-credit floor; the final cost scales with the requested counts (no competitor term). The default setup (5 topics, 25 prompts) costs 90 credits. |
| Manual AI visibility setup | 0 | Manual setup creation, where the caller supplies the topics, prompts, and competitors, is free. |
How a request is charged
Every request that starts paid work carries a billing object:
{
"billing": {
"operation": "ai_platform_query",
"credit_catalog_version": "2026-11-04",
"quantity_requested": 4,
"unit_credits": 20,
"maximum_credits": 80,
"reserved_credits": 80,
"billing_status": "reserved",
"wallet_history_id": "wh_3kP9xQ2mLr"
}
}
- When the request is accepted, the most it can cost is set aside:
billing_statusisreserved. - When the work ends, the same object comes back with
credits_deductedfor the work that succeeded,credits_releasedfor the rest, and a finalbilling_statusofdeductedorreleased. - A rejected request sets nothing aside and has no
billingobject.
If the wallet has no credits, or cannot cover the most the request can cost, the request answers 402 wallet_not_activated or 402 insufficient_credits and nothing is started. Reads keep working.
The accepted request is the approval: there is no separate confirmation step. Send an Idempotency-Key so a retry never charges twice; see Safe retries.
Rate limits and running scans
See Rate limits. GET /v1/capabilities shows how many scans a workspace can run at once in limits.concurrent_work.