Rate Limits
Rate limits protect the API from abuse and ensure fair usage for all customers. Limits vary by pricing tier.
Limits by Tier
| Tier | Monthly Limit | Rate Limit | Price |
|---|---|---|---|
| Free | 50 calls | 10 / minute | $0 |
| Starter | 1,000 calls | 60 / minute | $29/mo |
| Pro | 10,000 calls | 200 / minute | $99/mo |
| Unlimited | No limit | 1,000 / minute | Custom |
Rate Limit Headers
Every API response includes headers to help you track your usage:
| Header | Description |
|---|---|
| X-RateLimit-Limit | Max requests per minute for your tier |
| X-RateLimit-Remaining | Requests remaining in current window |
| X-RateLimit-Reset | Unix timestamp when the window resets |
| X-Monthly-Limit | Monthly call limit for your tier |
| X-Monthly-Remaining | Calls remaining this billing period |
Example Response Headers
HTTP/1.1 200 OK X-RateLimit-Limit: 200 X-RateLimit-Remaining: 198 X-RateLimit-Reset: 1699564800 X-Monthly-Limit: 10000 X-Monthly-Remaining: 9542 Content-Type: application/json
Cache Hits
Responses are cached for 24 hours based on the image hash. When you request the same image:
- Cache hits don't count against your monthly quota
- Cache hits don't count against your rate limit
- The response includes
"cached": true - Response times are significantly faster (~10ms vs ~100ms)
Pro tip: Process your product catalog once, then query the same images freely without hitting limits.
Rate Limit Exceeded
When you exceed the rate limit, the API returns a 429 Too Many Requests error:
{
"error": {
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded. Please wait before making another request.",
"retry_after": 42
}
}The retry_after field indicates how many seconds to wait before retrying. You can also check the Retry-After header.
Monthly Quota Exceeded
When you exceed your monthly quota, the API returns a 403 Forbidden error:
{
"error": {
"code": "quota_exceeded",
"message": "Monthly quota exceeded. Upgrade your plan or wait for the next billing period.",
"current_usage": 10000,
"limit": 10000,
"resets_at": "2024-12-01T00:00:00Z"
}
}Best Practices
- Implement exponential backoff when you receive 429 errors
- Monitor the rate limit headers to predict when you'll hit limits
- Batch your requests during off-peak hours for large catalogs
- Cache results on your end to avoid redundant API calls
- Use webhooks (coming soon) for async processing instead of polling
Catalog Limits by Tier
The Catalog API has separate limits for products and searches:
| Tier | Max Products | Searches/Month | Batch Size |
|---|---|---|---|
| Free | 1,000 | 500 | 10 |
| Starter | 10,000 | 5,000 | 50 |
| Pro | 100,000 | 50,000 | 100 |
| Unlimited | No limit | No limit | 100 |
Need Higher Limits?
If you need higher limits than our Pro tier offers, contact us for a custom Enterprise plan. We can accommodate:
- Custom monthly quotas
- Higher rate limits
- Dedicated infrastructure
- SLA guarantees
- Priority support
Email support@dupifyapp.com to discuss your requirements.