Rate Limits
Understand the request limits for each plan and how to handle them gracefully.
Limits by plan
| Plan | Rate Limit | Daily Limit |
|---|---|---|
| Free | 60 requests / minute | 25 verifications |
| Pro | 300 requests / minute | Per plan allocation |
| Business | 300 requests / minute | Per plan allocation |
Rate limit response
When you exceed the rate limit, you'll receive a 429 Too Many Requests response:
json
{
"error": "Too Many Requests",
"message": "Rate limit exceeded. Please slow down.",
"status_code": 429,
"retry_after": 15
}
Retry-After header
The Retry-After response header indicates how many seconds to wait before retrying:
http
HTTP/1.1 429 Too Many Requests
Retry-After: 15
Content-Type: application/json
Handling rate limits in code
python
import requests, time
def verify_with_retry(email, api_key, max_retries=3):
for attempt in range(max_retries):
response = requests.post(
"https://verimails.com/api/verify/single",
headers={"Authorization": f"Bearer {api_key}"},
json={"email": email}
)
if response.status_code == 200:
return response.json()
if response.status_code == 429:
retry_after = int(response.headers.get("Retry-After", 15))
print(f"Rate limited. Waiting {retry_after}s...")
time.sleep(retry_after)
continue
response.raise_for_status()
raise Exception("Max retries exceeded")
Best practices
- For bulk processing, add a small delay between requests (e.g.,
time.sleep(0.2)for ~5 req/sec) - Always respect the
Retry-Afterheader when you receive a 429 - Use exponential backoff for robustness in production systems
- For large lists, use Bulk Verification instead of many sequential API calls