Skip to main content

Rate Limits and API Authentication

API Key Authentication (Optional)

For production use, you may need an API key for rate limiting and tracking purposes. Include your API key in the request header:

X-API-Key: your-api-key-here
note

During development and testing, the API key is optional. For production deployments, contact the Xplore team to obtain an API key.

Example Request with Authentication

curl -X GET "https://xplore.api.v2.routerprotocol.com/v1/quote?fromChain=1&..." \
-H "X-API-Key: your-api-key-here" \
-H "Content-Type: application/json"

Rate Limiting

Default Limits

TierRequests per MinuteRequests per Hour
Free601,000
Standard30010,000
EnterpriseCustomCustom

Rate Limit Headers

Response headers indicate your current rate limit status:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1640000000

Handling Rate Limits

When you exceed your rate limit, you'll receive a 429 Too Many Requests response. Implement exponential backoff for retries:

async function fetchWithRetry(url, options, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
const response = await fetch(url, options);
if (response.ok) return response;

if (response.status === 429) {
// Rate limited - wait before retry
const retryAfter = response.headers.get('Retry-After') || Math.pow(2, i);
await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));
continue;
}

if (response.status >= 500) {
// Server error - retry with backoff
await new Promise(resolve => setTimeout(resolve, Math.pow(2, i) * 1000));
continue;
}

// Client error - don't retry
throw new Error(`HTTP ${response.status}`);
} catch (error) {
if (i === maxRetries - 1) throw error;
}
}
}