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/api/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.