429 Too Many Requests
without being processed.
The same limits apply in sandbox and production.
Limits
Both limits cover the requests you make with your own access tokens. Requests made by the Nmbr
Component are counted separately and do not count toward either limit.
How rate-limiting buckets work
A rate-limiting bucket is a counter. Each one counts your requests in a one-minute window. The window opens on your first request and the counter resets 60 seconds later. It is not aligned to the clock minute. Your allowance is per authenticated entity. Requests to partner endpoints count against your partner, and requests to company endpoints count against the company in the access token you used. Each company you serve gets its own 1,000 requests per minute, so a busy company can’t exhaust another company’s allowance. The reveal bucket is additional. A call to a/reveal endpoint counts against both the reveal
bucket and the API requests bucket. Reveal endpoints return sensitive values such as a full Social
Insurance Number, so they carry a tighter limit of their own. Read one record at a time and cache
what you need rather than revealing a list of employees in a loop.
Nmbr Component traffic does not count toward your API rate limits. Requests the Component makes
for your users go into a rate-limiting bucket of their own, separate from the buckets above. A user
working in the Component never consumes the allowance your own integration is spending.
Rate limit headers
Every response carries your standing in the rate-limiting bucket:
A
429 response adds two more:
When more than one limit applies to an endpoint, the headers describe the rate-limiting bucket you
are closest to exhausting.
Over the limit
ResponseRetry-After seconds, then retry. A 429 means the request never reached the API, so nothing
was created, updated, or deleted. If the request carried an X-Idempotency-Key, the key was not
consumed and you can retry with the same one. See Idempotency.
Staying under the limit
- Use the bulk and batch endpoints to write many entities in one request instead of one request per entity.
- Use
expandto pull related resources into a single response instead of following each stub with another request. - Back off using
Retry-Afterinstead of retrying immediately. Retrying in a tight loop keeps you over the limit and delays your own recovery.

