Skip to main content

Rate Limits

Limits by tier

TierRequests / monthRequests / minuteVerification credits
Free2,0001010
Pro50,000100500
Growth500,0005005,000
EnterpriseCustomCustomCustom

See Pricing for plan costs and credit top-ups.

Response headers

Every API response includes rate limit headers:

HeaderDescription
X-RateLimit-LimitYour per-minute request limit
X-RateLimit-RemainingRequests remaining in the current minute window
X-RateLimit-ResetUnix timestamp when the current window resets
Retry-AfterSeconds to wait before retrying (only on 429 responses)

When you hit the limit

You'll receive a 429 (Too Many Requests) response:

{
"error": "rate_limit_exceeded",
"message": "You have exceeded your request limit. Retry after 47 seconds.",
"code": 429,
"retry_after": 47
}

Retry guidance

Use exponential backoff when you receive a 429:

import time
import requests

def verify_with_backoff(payload, api_key, max_retries=5):
delay = 1
for attempt in range(max_retries):
resp = requests.post(
"https://api.policynumbers.com/v1/verify",
headers={"Authorization": f"Bearer {api_key}"},
json=payload,
)
if resp.status_code != 429:
return resp
retry_after = int(resp.headers.get("Retry-After", delay))
time.sleep(retry_after)
delay = min(delay * 2, 60)
raise Exception("Rate limit retries exhausted")

Start with the Retry-After value from the header. If absent, start at 1 second and double each attempt, capping at 60 seconds.

Monthly reset

Monthly request counts reset on the first day of each calendar month (UTC midnight). Unused requests do not roll over.