Rate Limits
API requests are rate-limited per API key based on your plan tier.
Limits by plan
| Tier | Requests/second | Requests/minute | Requests/day |
|---|---|---|---|
| Standard | 5 | 100 | 5,000 |
| Professional | 15 | 500 | 25,000 |
| Enterprise | Custom | Custom | Custom |
The Free tier does not include API access.
Rate limit headers
When rate limiting is active, every response includes these headers:
| Header | Description |
|---|---|
X-RateLimit-Limit | Your per-minute request allowance |
X-RateLimit-Remaining | Requests remaining in the current window |
X-RateLimit-Reset | Unix timestamp when the window resets |
Retry-After | Seconds to wait before retrying (only on 429 responses) |
Handling 429 responses
When you exceed your rate limit, the API returns HTTP 429 Too Many Requests. Build retry logic with exponential backoff:
import time
import requests
def call_with_retry(url, headers, json_body, max_retries=3):
for attempt in range(max_retries):
resp = requests.post(url, headers=headers, json=json_body)
if resp.status_code == 429:
wait = int(resp.headers.get("Retry-After", 2 ** attempt))
time.sleep(wait)
continue
return resp
raise Exception("Rate limit exceeded after retries")
Tips for staying under limits
- Use batch endpoints for bulk processing — one request processes up to 500 properties instead of 500 individual calls
- Use the Comprehensive endpoint to fetch multiple data types in a single call instead of hitting each endpoint separately
- Cache responses — identical requests within the 5-minute idempotency window return cached results at zero credit cost
- Request only what you need — fewer comparables and fewer census keys mean fewer credits consumed
Credit usage
For per-endpoint credit costs, plans, and pricing details, see the Credits & Pricing page.
Checking your usage
View your current credit balance, rate limit status, and usage history at dashboard.padstats.io.