Skip to content

Rate Limits

Rate limits protect the API and ensure fair usage across all customers.

Limits by tier

TierRequests/minRequests/dayBurstMonthly credits
Free101,000510,000
Standard10050,00050500,000
Professional1,000Unlimited200Unlimited
EnterpriseCustomCustomCustomCustom

Rate limit headers

Every API response includes these headers:

HeaderDescriptionExample
X-RateLimit-LimitMax requests per minute10
X-RateLimit-RemainingRemaining in current window7
X-RateLimit-ResetUnix timestamp when window resets1712345678

429 Too Many Requests

When you exceed the rate limit:

Response 429 Too Many Requests

json
{
  "status": 429,
  "error": "Too Many Requests",
  "message": "Rate limit exceeded. Retry after 42s",
  "timestamp": "2026-04-04T14:30:00Z"
}

The response includes a Retry-After header (seconds until the window resets).

Retry strategy

Use exponential backoff with jitter:

typescript
async function callWithRetry(url: string, apiKey: string, maxRetries = 3) {
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
    const res = await fetch(url, {
      headers: { 'X-API-Key': apiKey },
    });

    if (res.status !== 429) return res;

    const retryAfter = parseInt(res.headers.get('Retry-After') || '1');
    const backoff = retryAfter * Math.pow(2, attempt);
    const jitter = Math.random() * 0.5;
    await new Promise(r => setTimeout(r, (backoff + jitter) * 1000));
  }

  throw new Error('Rate limit exceeded after all retries');
}

Best practices

  1. Cache responses — wallet balances and prices rarely change sub-second
  2. Use batch endpoints — one batch call uses fewer rate limit tokens than N individual calls
  3. Monitor headers — track X-RateLimit-Remaining to preemptively slow down
  4. Upgrade your plan — if you consistently hit limits, you likely need more capacity

CryptaChain API — built by CryptaCount Luxembourg S.a r.l.