Quotas by surface
Prospect search is also gated by credits. In practice your credit balance bounds search throughput before the rate limit does, so budget credits first and treat the 20/minute ceiling as a burst cap.
Reading the headers
Every response — success or 429 — carries three headers:
The binding window is whichever of the two windows has fewer remaining requests — the one that will stop you first. If both have the same number remaining, the headers bind to whichever resets later. This is why
RateLimit-Limit can appear to jump between values like 120 and 10,000 across consecutive responses: you are seeing the minute window and the day window trade places as the tighter constraint.
You can watch the headers on any call:
Handling 429s
When you exceed a limit, the API returns429 with the standard error envelope and a Retry-After header giving the seconds to wait:
Retry-After. When both windows are exhausted at once, it reflects the window that resets last, so sleeping for Retry-After seconds is always sufficient — you will never wake up still rate limited by the other window.
A minimal backoff pattern:
RateLimit-Remaining as you go and pause for RateLimit-Reset seconds when it approaches zero.
Staying under the limits
- Batch where the API lets you. Building a list from a saved search moves rows server-side in one call instead of paging results through prospect search — see Build a list from search.
- Use pagination cursors at the largest page size that fits your processing, rather than many small pages.
- Exports are asynchronous by design: one call starts the job, and polling the job status is far cheaper against your quota than re-fetching list contents — see Export a list.