Skip to main content

Rate Limits

The API enforces rate limits per API key using a token-bucket algorithm. Limits vary by subscription tier.


Limits by tier

TierPlanPer-key limitPer-account limit
0Free60 req/min100 req/min
1Indie300 req/min500 req/min
2Platform1,000 req/min2,000 req/min
3Scale3,000 req/min6,000 req/min

Rate limits are enforced at the edge (Cloudflare Durable Objects) — low latency, no central bottleneck.


Rate limit headers

Every response includes:

X-RateLimit-Limit: 300
X-RateLimit-Remaining: 298

When a limit is exceeded, the response also includes:

Retry-After: 4

Retry-After is the number of seconds to wait before retrying.


Handling 429s

// The SDK handles 429s automatically with exponential backoff + jitter.
// Default: 3 retries, respects Retry-After header.

// To customize:
const client = new Xavigate({
apiKey: 'test_sk_YOUR_KEY',
maxRetries: 5,
});
# The SDK handles 429s automatically with exponential backoff + jitter.
client = xavigate.Xavigate(
api_key="test_sk_YOUR_KEY",
max_retries=5,
)
# Read Retry-After from the 429 response header:
# Retry-After: 4
# Wait that many seconds, then retry the identical request.
sleep 4
curl -X POST https://api.xavigate.com/v1/nature/subjects ...

Best practices

  • Use the SDK. Auto-retry with jitter is built in — you don't need to implement backoff yourself.
  • Batch lazily. Don't fan out N API calls simultaneously. Process items in sequence or small batches with brief pauses.
  • Monitor X-RateLimit-Remaining. If it approaches 0, slow down before you hit a 429.
  • Need higher limits? Upgrade your tier in the dashboard under Billing.