Docs/Rate Limits

Rate Limits

Understand API request limits, credit usage, and how to handle throttling gracefully.

View Markdown OpenAPI JSON

Current limits

AreaLimitWhat it means
API key requests60 requests / minute and 5,000 requests / dayDefault quota for authenticated API keys.
/api/batchUp to 500 emails / requestSubmit batches within the per-request email limit.
Anonymous checker5 checks / day / IP addressApplies to the public checker when no account API key is used.
Verification volumeAvailable account creditsCredits govern how many verifications can be run.
Bulk CSV uploadsCredits required for every email in the fileUploads require enough credits for the number of emails being verified.

Request quotas and credits are separate controls. API keys default to 60 requests per minute and 5,000 requests per day. Those quotas control how quickly an authenticated integration can call the API. Account credits control how many verifications can be run.

For high-volume list work, /api/batch accepts up to 500 emails in one request. Bulk CSV uploads are governed by credits rather than by request count: the account must have enough credits for the number of emails in the uploaded file before the verification job can run.

The public anonymous checker is limited to 5 checks per day per IP address. For account balance rules, see Credits & Usage. For large imports, use Bulk Verification; for integration behavior, review Error Handling, Quick Start, and pricing.

Rate limit response

When an API key exceeds its request quota, the API returns a 429 Too Many Requests response. The response includes Retry-After so the client knows how long to wait before retrying.

json
{
  "error": "Too Many Requests",
  "message": "Rate limit exceeded. Please retry after the indicated delay.",
  "status_code": 429,
  "retry_after": 15
}

Retry-After header

The Retry-After response header indicates how many seconds to wait before retrying an API-key request that exceeded quota:

http
HTTP/1.1 429 Too Many Requests
Retry-After: 15
Content-Type: application/json

Handling rate limits in code

Read the header first, wait for the indicated number of seconds, and then retry. If the header is missing, use a conservative fallback delay.

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