API
Entitlements and limits
What an API key can read, the three 403 codes and what each means, and the limits on deep-history reads.
Who can use a key
A key works only when its account has API access:
- The web Pro plan includes the API Explorer tier, for exploratory use.
- The API plan includes API Pro.
A key on an account without API access gets 403 not_entitled_tier on every route.
The account must also have declared its market-data classification (non-professional or professional). Until it has, every route answers 403 attestation_required. The declaration is made once, in account settings.
What a key cannot read
- Index symbols — SPX, NDX, VIX and the like — and options on them are available in the ITMatrixHQ apps only. A key gets
403 not_entitled_symbolfor them on every symbol-scoped route. - In-app features use first-party sessions and are not part of this API. The reference lists exactly what a key can call.
Installing an SDK does not change any of this: entitlements are decided by the server for the credential that makes the call.
The three 403s
| Code | Means | Fix |
|---|---|---|
not_entitled_tier | Your plan or API tier does not include this data. | Check the plan on the account the key belongs to. |
not_entitled_symbol | This symbol is not available to keys (index data). | Use an equity or ETF symbol. |
attestation_required | The account has not declared its market-data classification. | Declare it once in account settings. |
meta.caps
Entitlement-checked routes report what they applied in meta.caps: tier is the plan the request was served under, and applied lists any cap that shaped the response (empty means nothing was clamped). Read it rather than assuming a response is unrestricted.
Limits
- Deep-history reads (long bar ranges, historical sessions) are limited to a small number in flight per key at once — two by default. Past that, the API answers
429 rate_limitedwithRetry-After: 1. Run bulk history jobs with at most two concurrent requests per key. - Flow reads are deliberately small: live large trades need a
symbolor amin_premium_usdfloor, end-of-day flow needs an explicitsessionplus one of those, and both return at most 100 events. - Streams cap subscriptions and distinct symbols per connection; a new subscription past the cap is refused with
quota_exceeded. See Streaming.