Rate Limiting
The API enforces multiple layers of rate limiting to ensure fair usage and protect service stability. All limits are enforced per account (not per key), except burst limits which are per API key.
Rate Limit Layers
BurstPer API key
30 requests / 10 seconds
Short-term spike protection. Prevents hammering the API with rapid-fire requests.
Applies to: All /v1 endpoints
DailyPer account
Varies by plan
Resets at midnight UTC. Shared across all API keys on your account.
Applies to: Authenticated endpoints
Limits by Plan
| Plan | Daily | Burst | Price Sources |
|---|---|---|---|
| Free | 250 | 30 / 10s | eBay, TCGPlayer |
| Pro | 10,000 | 30 / 10s | eBay, TCGPlayer, Cardmarket |
| Scale | 100,000 | 30 / 10s | eBay, TCGPlayer, Cardmarket |
Response Headers
Every authenticated response includes rate limit headers so you can track your usage programmatically.
X-RateLimit-LimitYour plan's daily request limit
X-RateLimit-RemainingDaily requests remaining
X-RateLimit-ResetISO8601 timestamp when daily limit resets
X-RateLimit-Burst-LimitBurst limit (30) — only on 429 responses
X-RateLimit-Burst-RemainingBurst requests remaining — only on 429 responses
Retry-AfterSeconds until you can retry — only on 429 responses
X-PlanYour current plan (Free, Pro, Scale)
429 Response Examples
Burst rate limit exceeded (30 req/10s)
{"error": "Too many requests. Slow down.","code": "BURST_RATE_LIMIT_EXCEEDED","retryAfter": 7}
Daily limit exceeded
{"error": "Daily rate limit exceeded. Resets at 2026-01-18T00:00:00Z","usage": {"plan": "Free","daily": {"remaining": 0,"limit": 250,"resetsAt": "2026-01-18T00:00:00Z"}}}
Best Practices
Handling 429 Errors
- Check the
Retry-Afterheader for wait time in seconds - Implement exponential backoff: wait 1s, 2s, 4s between retries
- Distinguish between burst (seconds) and daily (hours) limits
Reducing API Calls
- Cache responses — prices update every few hours, not seconds
- Use the
X-RateLimit-Remainingheader to pace requests - Batch lookups where possible instead of individual card requests