Docs/Getting started

Rate limits

Keep each account under 100 requests in any 10 seconds and 600 requests a minute, across all of its API keys. That is the budget the API is planned around, and we can start enforcing it at any time, so build your client to slow down as soon as it sees a 429.

A few endpoints already enforce limits of their own, because each call does real work: an AI model run, a database search or a purchase.

These endpoints have their own limits today

EndpointLimitOver the limit
POST /copilot/planAbout 5 plans a minute and 250 a day per account, shared with the AI features in the app429 with a Retry-After header
Lead Finder searches (POST /lead-finder/searches)20 searches a minute, plus a daily allowance of rows you can browse (2,000 a day, 250 on a trial)429 with Retry-After and retryAfterSeconds in the body
Lead Finder imports (POST /lead-finder/imports)Up to 25,000 people a day when you import the first results of a search, and 3 imports running at once429
Autopilot (POST /autopilot/runs)One run waiting for approval at a time, and 5 new runs a day429
Email verification on a trial100 addresses in all until the trial converts402 with trial_allowance_exceeded

Days are UTC days.

Back off when you get a 429

  1. Read the Retry-After header when there is one. It is the number of seconds to wait.
  2. When there isn't one, wait 1 second, then 2, then 4, and so on, up to about a minute.
  3. Send requests from one queue per account rather than in parallel bursts, and spread big jobs out over time.

Batch instead of looping

The cheapest request is the one you don't send:

  • POST /leads takes up to 1,000 leads in one request. Never loop over leads one by one.
  • POST /dfy/domains/check checks up to 100 domains in one request.
  • POST /email-verification/jobs verifies a whole list as one job; poll the job, not each address.
  • Webhooks push replies, bounces and status changes to you, so you don't need to poll for them.

Questions about the API? Email support@emailchaser.com.