Skip to main content

Account

Usage

What this account has used against its plan, and what it is allowed.

GET/usage
Usage
curl --request GET \
  --url 'https://truestat.io/api/v1/usage' \
  --header 'Authorization: Bearer <token>'
{
  "data": {
    "events": {
      "over": false,
      "used": 3296,
      "limit": 1000000,
      "rejected": 0
    },
    "limits": {
      "max_sites": 30,
      "max_alerts": 30,
      "max_team_seats": 30,
      "retention_days": 1825
    },
    "period_end": "2026-10-03T17:55:11.000Z",
    "period_start": "2026-09-03T17:55:11.000Z",
    "crawler_events": {
      "over": false,
      "used": 14521,
      "limit": 500000
    }
  },
  "meta": {}
}

Both meters, the plan's limits, and the window they apply to.

Two meters, never added together

events counts what people did. crawler_events counts what machines did. They have separate allowances and opposite consequences:

ExhaustingWhat happens
eventsCollection continues; reading closes until the plan grows.
crawler_eventsCrawler collection pauses; no screen closes.

Summing the two would undo the reason they are separate. Measured over thirty days of real traffic: one site was 91.5% crawler, another 54%, a third 0%. On a single meter the first customer would burn a month's allowance on 850 human visits — on traffic a third party sent them and they never asked for.

Going over closes the reading, never the collecting

over: true means the account has gone past the allowance and beyond the grace band. Collection does not stop — your events keep landing. What pauses is reading the period, on the API and the dashboard together.

That is the deliberate trade, and it runs in the customer's favour: a gap in the data would be permanent, silent and impossible to buy back afterwards, while a locked screen is none of those things. Nothing is lost while this lasts, and moving up a step opens the period you already collected. At your limit covers it from the customer's side.

This endpoint keeps answering throughout — it is how you find out that is what happened. So does account. Everything else, including the site list, returns 402 quota_exhausted, exactly as the dashboard shows billing and nothing else.

rejected is the honest half of the meter: events your site produced that were not processed. It is published rather than hidden because it is the number that says how much bigger the plan needs to be — counting only the accepted events would understate it.

It resets with the period. What matters is what is being missed now, not a lifetime total.

null means unlimited

Not zero, and not unknown. A null limit is a real answer: this account has no cap on that dimension.

data itself is null when there is no live plan. An account without a subscription has no plan, so it has no quota either — answering "0 of 10,000 used" would invent one it does not have.

Which retention figure to trust

limits.retention_days is the account's quota. Site settings reports the figure actually applied to that site's reads, resolved by the same code that does the clamping.

They agree on ordinary accounts. When they differ, the site's is the one that decides whether your window comes back clamped.

Authorizations

Authorizationstringheaderrequired

An API key from Settings → API keys. Scopes available: analytics:read, sites:read, sites:write, settings:read, settings:write, goals:read, goals:write, funnels:read, funnels:write, notes:read, notes:write, alerts:read, alerts:write, team:read, team:write, revenue:read, revenue:write.

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Response

application/json

The answer.

dataobject
metaobject