Skip to main content

Rate Limits

LumoAuth applies rate limits per API key and per endpoint category to ensure service availability for all organizations.

Rate Limit Headers

Every API response includes rate limit headers:

Response Headers
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 997
X-RateLimit-Reset: 1706799060
Retry-After: 30
HeaderDescription
X-RateLimit-LimitMaximum requests allowed in the current window
X-RateLimit-RemainingRequests remaining in the current window
X-RateLimit-ResetUnix timestamp when the window resets
Retry-AfterSeconds to wait (only present on 429 responses)

Limits by Endpoint

Endpoint CategoryLimitWindow
Admin API (read)1,000 requestsper minute
Admin API (write)100 requestsper minute
OAuth token endpoint30 requestsper minute per client
SCIM endpoints200 requestsper minute
JIT / AAuth endpoints60 requestsper minute
Audit log export10 requestsper hour

Handling 429

429 Too Many Requests
{
"error": "rate_limit_exceeded",
"message": "Too many requests. Please retry after 30 seconds.",
"status": 429,
"retryAfter": 30
}

Implement exponential back-off with jitter when handling 429 responses:

Exponential Back-off (JavaScript)
async function requestWithRetry(fn, maxRetries = 5) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
const res = await fn();
if (res.status !== 429) return res;
const retryAfter = parseInt(res.headers.get("Retry-After") ?? "1", 10);
const jitter = Math.random() * 1000;
await new Promise((r) => setTimeout(r, retryAfter * 1000 + jitter));
}
throw new Error("Max retries exceeded");
}
tip

For bulk provisioning (e.g. importing large user sets), use the SCIM Bulk endpoint to reduce the number of individual API calls by combining multiple operations in a single request.