Rate Limits
Rate limits protect the API and ensure fair usage across all users. Limits are applied per API key.
The free npm package has no rate limits
Rate limits only apply to the hosted API. The offline
isDisposable() function has no limits — use it as much as you want.Plan limits
| Plan | Requests/minute | Checks/month | Price |
|---|---|---|---|
| Public (no key) | 10/day per IP | - | Free |
| Free | 5/min | 100 | $0 |
| Pro | 60/min | 10,000 | $9/mo |
| Business | 120/min | 100,000 | $29/mo |
| Scale | 300/min | 500,000 | $79/mo |
How rate limiting works
Per-minute limits use a sliding window algorithm. If you exceed the limit, you'll receive a 429 response. Wait a few seconds and retry.
Monthly limits reset on the 1st of each month (UTC). When you hit the monthly limit, all further requests return 429 until the next billing period.
Bulk requests count as one request for rate limiting but each email in the batch counts toward your monthly check limit.
Rate limit response
When rate limited, the API returns:
HTTP/1.1 429 Too Many Requests
{"error": "Rate limit exceeded. Slow down."}
Or for monthly limits:
{"error": "Monthly check limit reached. Upgrade your plan."}
Best practices
- 1.Use the offline check first. Call
isDisposable()locally before hitting the API. This catches 95%+ of disposable emails without using any API quota. - 2.Use bulk endpoints. If you need to check multiple emails, use
/v1/check/bulkinstead of individual requests. - 3.Cache results. If you check the same email again, cache the result on your side. DNS data doesn't change often.
- 4.Monitor your usage. Check your monthly usage in the dashboard to avoid hitting limits unexpectedly.