Base URL and authentication
Authorization: Bearer <YOUR_API_KEY> and needs the stats:read permission. Create a key under Settings → API keys (details).
These are all reads. Changing your plan, your payment method, or your team is dashboard-only.
Listing API keys and bot tokens is different: with an API key those need config:write, because a credential inventory is not a metric. An AI app connected to your account cannot use either listing at all.
GET /v1/account
Who you are and what your plan allows.
This endpoint does not return your email address, your Clerk user id, or your Stripe ids. It identifies an account, not a person.
GET /v1/account/usage
What you have consumed in the current billing period. This is the endpoint to poll if you want to catch an overage before the invoice does.
events_used is the unified figure: visitor events plus custom traceten.track() and conversion events. It resets at billing_period_end.
The limits here are the same values GET /v1/account reports, read from the same place, so the two cannot disagree.
event_limit and crawl_limit use 0 for unlimited. Check for zero before dividing:
The AI-crawl allowance
crawl_allowance_state tells you what your crawl allowance is doing right now. We calculate it from your usage, your plan and your overage setting, so you do not have to.
Only
capped means your numbers have stopped moving. In that state crawl_hits_used is the real total we captured up to the limit, and it stays where it is until your next billing period starts or you upgrade. Everything recorded before the limit stays available.
Alert on the state, not on the arithmetic:
AI visibility
visibility_runs_used counts engine runs, not prompts. One run is one prompt, asked on one engine, once. Because each prompt is asked several times on each engine every cycle, this number is much larger than visibility_prompts_used. The two are not comparable.
visibility_scan_state tells you whether new scans are being issued:
active: scans are running.not_started: nothing has run yet this period.paused_allowance: you have used the period’s scanning allowance, so we are not issuing new scans until it resets.
paused_allowance is not data loss. Every visibility figure we have already measured stays
available and keeps being served in full. The only thing that stops is new measurement. Your
scores, citations and competitor data are all still there, and scanning resumes at
billing_period_end. You should not normally see this state: the allowance is sized above what a
fully used plan needs, so reaching it usually means something went wrong on our side rather than
on yours. If you see it, tell us and we will look.GET /v1/team
The people who can act on your account, and what each of them can reach.
Read
account_wide_admin, not role. An org:admin restricted to specific sites is not an
account-wide admin, and every permission gate in Traceten requires both halves. Someone with
role: "org:admin" and a non-null site_keys cannot create sites, mint credentials, change your
plan or delete the account.503 with error: "clerk_unavailable". Retry. We do not return an empty team, because “this account has no members” would be a false statement to cache.

