Rate Limits
Understand API rate limits, how to handle them gracefully, and best practices for building resilient integrations.
Pro Plan Limits
| Endpoint | Requests/Min | Requests/Day | Burst Limit |
|---|---|---|---|
| POST /v2/valuate | 100 | 10,000 | 50 |
| GET /v2/valuations/* | 300 | 50,000 | 100 |
| POST /v2/batch | 10 | 100 | 5 |
Rate Limit Headers
Every API response includes headers to help you track your rate limit status:
| Header | Description | Example |
|---|---|---|
| X-RateLimit-Limit | Maximum requests allowed in the current window | 100 |
| X-RateLimit-Remaining | Requests remaining in the current window | 87 |
| X-RateLimit-Reset | Unix timestamp when the rate limit resets | 1702483260 |
| Retry-After | Seconds to wait before retrying (only on 429) | 30 |
Handling 429 Errors
When you exceed rate limits, you'll receive a 429 status code. Implement exponential backoff with the Retry-After header:
async function fetchWithRetry(url, options, maxRetries = 5) {
for (let attempt = 1; attempt <= maxRetries; attempt++) {
const response = await fetch(url, options);
if (response.status === 429) {
// Get retry delay from header or use exponential backoff
const retryAfter = response.headers.get('Retry-After');
const delay = retryAfter
? parseInt(retryAfter) * 1000
: Math.min(1000 * Math.pow(2, attempt), 60000);
console.log(`Rate limited. Retrying in ${delay}ms...`);
await new Promise(resolve => setTimeout(resolve, delay));
continue;
}
return response;
}
throw new Error('Max retries exceeded');
}Best Practices
Use Batch Endpoints
For bulk operations, use /v2/batch instead of individual requests. One batch of 1000 items counts as 1 request.
Monitor Headers
Check X-RateLimit-Remaining proactively. Slow down before hitting limits rather than waiting for 429s.
Cache Responses
Valuations are valid for 24 hours. Cache results locally to reduce redundant API calls.
Use Webhooks
Instead of polling for batch results, use webhooks to receive notifications when processing completes.
Need Custom Limits?
Enterprise plans include custom rate limits tailored to your use case.