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

PlanDailyBurstPrice Sources
Free25030 / 10seBay, TCGPlayer
Pro10,00030 / 10seBay, TCGPlayer, Cardmarket
Scale100,00030 / 10seBay, 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-After header 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-Remaining header to pace requests
  • Batch lookups where possible instead of individual card requests