To ensure fair usage and system stability, the Surventrics API enforces rate limits on all requests.
Per API key
100
requests/minute
Rate limits are applied per API key, not per IP address. This means all requests using the same API key share the same rate limit bucket.
Every API response includes headers to help you track your rate limit status:
| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests per minute |
X-RateLimit-Remaining | Remaining requests in current window |
X-RateLimit-Reset | Unix timestamp when the limit resets |
HTTP/1.1 200 OK
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1705845600When you exceed the rate limit, the API returns a 429 Too Many Requests response:
HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1705845600
{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded. Try again in 45 seconds."
}
}X-RateLimit-Remaining to anticipate limitsWhen you receive a 429 response, wait before retrying. Use the X-RateLimit-Reset header to know exactly when to retry, or implement exponential backoff:
async function apiRequestWithRetry(url, options, maxRetries = 3) {
let retries = 0;
while (retries < maxRetries) {
const response = await fetch(url, options);
if (response.status !== 429) {
return response;
}
// Get reset time from header
const resetTime = response.headers.get('X-RateLimit-Reset');
const waitMs = resetTime
? (parseInt(resetTime) * 1000) - Date.now()
: Math.pow(2, retries) * 1000; // Exponential backoff
console.log(`Rate limited. Waiting ${waitMs}ms before retry...`);
await new Promise(resolve => setTimeout(resolve, Math.max(waitMs, 1000)));
retries++;
}
throw new Error('Max retries exceeded');
}The REST API is available on Business and Enterprise plans only — requests from keys on other plans are rejected with 403. There are no per-second burst limits.
| Plan | API access | Rate limit |
|---|---|---|
| Free / Pro | Not available | — |
| Business | Included | 100 requests/minute per key (default) |
| Enterprise | Included | Configurable per key |
The limit is applied per API key (default 100 requests/minute). Contact support if you need a higher per-key limit.