Limits
Your limits depend on your offers and apply to your whole account, across all your keys. Track your usage at any time with GET /v1/usage.
Limits by plan
Live and Historical stack: with both, you get the rights of both. What each offer includes and how to buy it: Plans and billing.
| Limit | Sandbox | Live | Historical | Live + Historical |
|---|---|---|---|---|
| Billing | Free | Monthly subscription | One-time purchase, lifetime access | Monthly subscription + One-time purchase, lifetime access |
| Stream | 10-minute delay | Real time | 10-minute delay | Real time |
| Concurrent connections | 1 | 5 | 1 | 5 |
| Concurrent subscriptions | 2 | 50 | 2 | 50 |
| Custom configurations | 1 | 25 | 1 | 25 |
| History | Last 7 days | Not included | Full available depth | Full available depth |
| Monthly compute budget | 50,000,000 units | Not included | 20,000,000,000 units | 20,000,000,000 units |
| Monthly export volume | Not included | Not included | 20 GB | 20 GB |
| REST requests per key | 60 per minute | 300 per minute | 1,200 per minute | 1,200 per minute |
How limits are counted
- Per account: connections, subscriptions and budgets are shared by all your keys. Creating more keys does not raise your limits.
- Custom configurations: an indicator used on an instrument with parameters that differ from its defaults. For example, Fathom Trades with a minimum volume of 50 instead of 30. Each combination counts once, even if several subscriptions use it.
- Compute budget: every access to history (a query, an export, or a subscription that starts in the past) consumes units: the number of trades read, times the indicator cost shown in the catalog. You can estimate that cost up front, for free.
- Export volume: the amount of data your exports download.
The compute budget and the export volume renew at the start of every month (UTC), including with the lifetime access of the Historical offer. A request that would exceed them is rejected before it starts, with 429 QUOTA_EXCEEDED.
Technical limits
These are the same for every plan.
| Item | Limit | If you exceed it |
|---|---|---|
| REST requests | Depends on your plan, per minute and per key | 429 RATE_LIMITED |
| REST request body size | 16 KB | 413 |
| Active keys | 10 per account | 409 QUOTA_EXCEEDED |
| Allowed instruments and IP addresses per key | 32 of each | 400 INVALID_PARAMETERS |
| Grace period when rotating a key | 7 days at most | 400 INVALID_PARAMETERS |
| Sign-in links | 5 per hour per e-mail address, valid for 15 minutes | 429 RATE_LIMITED |
| Browser stream token | Valid for 60 s, single use | Connection closed (4001) |
auth message after the WebSocket opens | 5 s | Connection closed (4001) |
| Message sent on the WebSocket | 64 KB | Connection dropped |
Subscription name (sub) | 1 to 64 characters, unique on the connection | error INVALID_PARAMETERS |
| Resume from a cursor | Disconnects of up to about 15 minutes | reset, then a new snapshot |
| Data waiting to be sent (slow client) | 256 KB, then 1 MB | Intermediate versions skipped, then connection closed (4008) |
| Client silence | 30 s | Connection closed (4008) |
| Results per history page | 1 to 10,000 (1,000 by default) | Next page through next |
| Calculation kept after the last unsubscribe | 10 minutes | Warm-up (warming) on the next subscribe |
Requests per minute
Each key can send a set number of REST requests per minute, depending on your plan. Unused requests accumulate up to that limit. Every response tells you where you stand:
RateLimit-Limit: 1200
RateLimit-Remaining: 1197
RateLimit-Reset: 1RateLimit-Remaining: requests available right now;RateLimit-Reset: seconds until the full limit is restored.
Past the limit, the request is rejected with 429 RATE_LIMITED; the Retry-After header says how many seconds to wait. The SDK waits and retries automatically.
Track your usage
curl https://api.fathomcharts.com/v1/usage -H "Authorization: Bearer $FATHOM_CHARTS_API_KEY"{
"period": "2026-10",
"resetsAt": "1793491200000000000",
"plan": "live_history",
"limits": {
"computeBudget": 20000000000,
"exportBytes": 21474836480,
"restPerMinute": 1200,
"historyDays": 36500,
"delaySeconds": 0,
"maxConnections": 5,
"maxSubscriptions": 50,
"maxCustomConfigs": 25,
"realtime": true
},
"used": { "computeUnits": 1840233, "historyItems": 51207, "exportBytes": 734003200, "restRequests": 412 },
"remaining": { "computeUnits": 19998159767, "exportBytes": 20740833280 }
}plan: your offers, one ofsandbox,live,historyorlive_history(both);periodandresetsAt: the current month and the date of the next renewal;limits: the limits that apply to you. With a test key, these are the Sandbox limits.historyDaysis 0 without history, and 36500 for the full available depth;usedandremaining: your usage this month and what you have left.