Skip to main content
The Enrow API applies rate limits to ensure fair usage and maintain service quality. The limit is the same across all endpoints and all plans, it is enforced per API key, and it is measured in requests per second (RPS). This page explains the default limits, what happens when you exceed them, and how to stay within quota when scaling up.

What are the default rate limits?

Every POST endpoint allows 10 requests per second per API key. The limit is identical across all endpoints and all plans:
EndpointRate Limit
POST /email/find/single10 req/s
POST /email/find/bulk10 req/s
POST /email/verify/single10 req/s
POST /email/verify/bulk10 req/s
POST /phone/single10 req/s
POST /phone/bulk10 req/s
GET endpoints are not rate limited, so retrieving results — for example the single email result or bulk results — does not count against your quota.
Rate limits are per API key and measured in requests per second (RPS). Each API key has its own independent quota.

What happens when I exceed the rate limit?

When you exceed the rate limit, the API returns a 429 Too Many Requests response:
{
  "message": "Too Many Requests"
}
The recommended way to handle a 429 is to implement exponential backoff — wait a progressively longer delay before each retry so the API key has time to fall back under the limit:
async function requestWithRetry(url, options, maxRetries = 3) {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    const response = await fetch(url, options);

    if (response.status === 429) {
      const delay = Math.pow(2, attempt) * 1000;
      await new Promise(resolve => setTimeout(resolve, delay));
      continue;
    }

    return response;
  }

  throw new Error('Max retries exceeded');
}
For the full list of response codes and how to handle them, see Status codes and Error handling.

How can I avoid hitting the rate limit?

The most effective way to stay within quota is to send fewer, larger requests and to receive results through webhooks instead of polling.
Instead of making 100 single requests, make 1 bulk request (up to 5,000 items for email, 3,000 for phone). A single bulk POST counts as 1 request against your rate limit.
// ❌ 100 requests = 10 seconds at 10 RPS
for (const contact of contacts) {
  await findEmail(contact);
}

// ✅ 1 request
await findEmailsBulk(contacts);
See Find Bulk Emails and Verify Bulk Emails to get started.
Polling the GET endpoint wastes your rate limit quota. Use webhooks to receive results automatically as soon as a search or verification completes.
Store results to avoid redundant API calls for the same contact, which also saves credits.

Can I get higher rate limits?

Yes. Enrow can increase your RPS on a case-by-case basis. Contact us at api@enrow.io with your use case and expected volume.

FAQ

No. The 10 req/s limit applies independently to each POST endpoint, and the quota is tracked per API key rather than per account.
No. GET endpoints are not rate limited, so polling for results does not consume your RPS quota. That said, webhooks are still preferable to frequent polling.
Yes. A single bulk POST counts as 1 request against your rate limit, even though it can contain up to 5,000 items for email or 3,000 for phone.
A 429 Too Many Requests response with the body { "message": "Too Many Requests" }. Retry with exponential backoff. See Error handling for details.

Next steps

Find emails in bulk

Run up to 5,000 email searches in a single request to save rate limit quota.

Webhooks

Receive results automatically instead of polling the GET endpoints.

Error handling

Handle 429 and other responses gracefully in your integration.

Credits & billing

See how credits are consumed for each endpoint.