meta object showing how many calls you have used, how many remain, and when your quota resets.
Monthly call quotas
Quotas reset on your billing renewal date, the same day of the month you first subscribed. Unused calls do not roll over.
Per-minute burst limits
In addition to monthly quotas, each plan enforces a per-minute request cap to prevent burst abuse. Exceeding this limit returns HTTP429 with the RATE_LIMITED error code. Unlike quota exhaustion, per-minute limits reset automatically after 60 seconds — no action needed.
Rate limit headers
Every response (not just429s) includes standard IETF draft-7 rate limit headers, so you can track your per-minute budget without parsing the response body:
When a request is rejected with
429 RATE_LIMITED, the response also includes a Retry-After header (seconds to wait before retrying) alongside the meta.retry_after field in the body.
All API keys on your account share one quota pool. Every call made by any of your keys counts toward the same monthly total.
Tracking usage
Every API response includes ameta object. You do not need a separate request to check your usage. For richer analytics like daily call volume, top endpoints, and status code breakdown, use the dedicated GET /account/usage endpoint.
When you exceed your quota
Whencalls_used reaches your monthly limit, all further requests return HTTP 429 with the QUOTA_EXCEEDED error code. This is distinct from RATE_LIMITED, which is returned when you exceed the per-minute burst cap:
What to do when you hit your limit
-
Wait for the reset. Check
meta.reset_atto see the exact UTC time your quota resets on your next billing date. - Upgrade your plan. Log in to your developer dashboard and select a higher plan. Upgrades take effect immediately. See Plans for pricing and call limits.
Reducing unnecessary usage
Cache responses where possible
Cache responses where possible
Some endpoints return data that changes infrequently, like the company list (
/companies) or available dates (/market/available-dates). Cache these in your application and refresh on a schedule rather than fetching on every request.Avoid polling in tight loops
Avoid polling in tight loops
NGX equity prices refresh roughly every 20 minutes. Polling every few seconds burns through your quota for no benefit, since the data behind those extra calls hasn’t changed.If you’re polling specifically to catch changes as soon as they happen, the WebSocket API is a better fit than any polling interval: it pushes a message only when the data actually changes, and it doesn’t count against this quota at all.
Use one key per integration
Use one key per integration
Multiple keys do not give you more calls since all keys share one quota pool. Keep your key count to what you actually need.