Docs
GET /v2/account/usage

Get your API usage

account_getUsage

Your own request counts per day over the last 30 days, split by scope group, with window totals and your current rate limit. Use it to see where your requests go.

Details

Scope groups are the OpenAPI tags (analytics.gex, market.reference and so on). rate_limit.per_min is the same value as the x-ratelimit-limit header on requests made with an API key. quota is not reported yet and is always absent for now.

Units

count values are requests; date is a UTC calendar day, YYYY-MM-DD.

Freshness

Counts are provisional: they are not billing figures and may not include every request.

Empty results

Before you make any requests, by_day is empty and totals_by_scope_group is {}.

Example

http
GET /v2/account/usage
json
{
  "data": {
    "trailing_days": 30,
    "by_day": [
      {
        "date": "2026-09-27",
        "scope_group": "analytics.gex",
        "count": 4
      }
    ],
    "totals_by_scope_group": { "analytics.gex": 4 },
    "rate_limit": { "per_min": 600 }
  },
  "meta": { "caps": { "tier": "pro", "applied": [] } }
}

Response

Prices are dollars, timestamps epoch milliseconds, strikes integer thousandths of a dollar; null means unknown. Units →

200application/json

{trailing_days, by_day, totals_by_scope_group, rate_limit, quota?} in data

object

A successful response: the payload consumers parse plus response metadata. data shapes are the platform types — never reshaped by the envelope.

data object required

data shape for GET /v2/account/usage.

by_day array<UsageDay> required

Per-(day, scope-group) counts, ascending. Empty when nothing recorded.

count integer · int64 required

Metered request count for that day + scope group.

date string required ISO date

Civil date, YYYY-MM-DD (UTC).

scope_group string required

The scope group (OpenAPI tag) the requests fell under.

quota object nullable

Monthly quota position. Not reported yet: quota is always absent from the response for now.

limit integer · int64 required
resets_at integer · int64 required epoch ms

Reset instant, epoch-ms.

used integer · int64 required
rate_limit object required

Your current rate limit.

per_min integer · int32 required

Requests-per-minute cap for the caller's tier.

totals_by_scope_group map<string, integer · int64> required

Window totals per scope group.

trailing_days integer · int32 required

Width of the trailing window, in days.

meta object required

Response metadata.

caps object nullable

meta.caps — the entitlement caps that shaped this response. applied lists the caps that actually changed it (for example range_clamped).

applied array<string> required

Which caps actually shaped this response (e.g. range_clamped). Empty = nothing was clamped.

darkpool boolean nullable

Whether this account can use Off-Exchange in the site.

flow boolean nullable

Whether the OPRA option-flow capability (flow) is granted to this principal in the app: site Pro plus a CBOE non-professional attestation (never on an itm_ key). Emitted explicitly — true and false — by the account endpoints, so the app reads the grant instead of inferring it from tier and attestation; absent on routes that do not report it.

gexDepth string nullable

GEX data depth when the route reports it. Camel-cased to match the browser capability bundle; absent on unrelated routes.

tier string required

The tier the request was served under.

cursor string nullable

Opaque continuation cursor (pass back as ?cursor=); absent when there is nothing more to read.

plane string nullable

Which serving tier answered the read (meta.plane). Informational provenance: treat it as an opaque label, because new values may appear.

Errors

Every error is the JSON error envelope; branch on error.code.

StatusMeaning
401

unauthenticated