Rate Limits

Rate Limits


ZipZign enforces rate limits to protect service stability. These are separate from your monthly document quota.


Rate limit table


Endpoint

Limit

Window

POST /api/documents

100 requests

per hour, per user

POST /api/auth/login

10 requests

per hour, per IP

POST /api/documents/:id/sign

10 requests

per 5 minutes, per IP


All other endpoints are not rate-limited under normal usage.


Rate limit response


When a rate limit is hit, ZipZign returns 429 Too Many Requests:


{
"error": "RateLimitExceeded",
"message": "Too many requests. Retry after 60 seconds.",
"retryAfter": 60
}


Response headers


Rate-limited endpoints include headers to help you track usage:


X-RateLimit-Limit: 100
X-RateLimit-Remaining: 7
X-RateLimit-Reset: 1744900800
Retry-After: 60


Header

Description

X-RateLimit-Limit

Max requests allowed in window

X-RateLimit-Remaining

Requests left in current window

X-RateLimit-Reset

Unix timestamp when window resets

Retry-After

Seconds to wait before retrying (on 429)


Handling 429s in code


async function createDocument(payload, retries = 3) {
const response = await fetch('https://zipzign.com/api/documents', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.ZIPZIGN_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(payload)
});

if (response.status === 429 && retries > 0) {
const err = await response.json();
const wait = (err.retryAfter ?? 60) * 1000;
console.log(`Rate limited. Retrying in ${wait / 1000}s...`);
await new Promise(resolve => setTimeout(resolve, wait));
return createDocument(payload, retries - 1);
}

return response.json();
}


Batch document creation


If you need to create many documents programmatically (e.g., bulk sending), stay under the 100/hour limit by adding a delay:


const delay = ms => new Promise(r => setTimeout(r, ms));

for (const payload of documents) {
await createDocument(payload);
await delay(40); // ~90 docs/minute, safely under 100/hour
}


Quota vs. rate limits


Rate limit

Quota

Scope

Requests per time window

Documents per month

Error

RateLimitExceeded (429)

QuotaExceeded (429)

Resets

Every hour / 5 minutes

1st of each month

Affected by sandbox

No

No (sandbox is free)

Updated on: 16/04/2026

Was this article helpful?

Share your feedback

Cancel

Thank you!