Skip to content

Rate Limits

The inSigner API enforces rate limits to ensure fair usage and platform stability.

LimitValue
Requests per API key120 requests per minute
Bulk sends1 per 5 minutes per organization
Webhook creations10 per hour per user

Every API response includes rate limit headers so you can track your usage:

HeaderDescription
RateLimit-LimitMaximum requests allowed in the current window
RateLimit-RemainingRequests remaining in the current window
RateLimit-ResetSeconds until the rate limit window resets

Example response headers:

RateLimit-Limit: 120
RateLimit-Remaining: 87
RateLimit-Reset: 42

When you exceed the rate limit, the API returns a 429 Too Many Requests response with a Retry-After header:

{
"type": "https://docs.insigner.com/errors/rate-limited",
"title": "Too Many Requests",
"status": 429,
"detail": "Rate limit exceeded. Please retry after the reset period."
}
Retry-After: 42
async function fetchWithRetry(url, options, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
const res = await fetch(url, options);
if (res.status === 429) {
const retryAfter = parseInt(res.headers.get('Retry-After') || '60', 10);
console.log(`Rate limited. Retrying in ${retryAfter}s...`);
await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));
continue;
}
return res;
}
throw new Error('Max retries exceeded');
}
  • Space out batch operations. If you’re creating many documents, add small delays between requests.
  • Cache when possible. Templates and organization info don’t change often — cache those responses.
  • Use webhooks instead of polling. Instead of repeatedly checking document status, set up a webhook to get notified automatically.
  • Implement exponential backoff. If retries also get rate-limited, increase the delay between attempts.