API Errors & Status Codes
API Errors & Status Codes
HTTP status codes
Code | Meaning |
|---|---|
| Request succeeded |
| Document or resource created successfully |
| Invalid request body or parameters |
| Missing or invalid API key |
| API key valid, but insufficient permissions |
| Document or resource does not exist |
| Action not valid for current document state |
| Request understood but invalid (e.g., HTML too large) |
| Rate limit or quota exceeded |
| ZipZign error — contact support |
Error response format
All errors return a JSON body:
{
"error": "ErrorCode",
"message": "Human-readable description of the error"
}
Common error codes
Authentication errors
{ "error": "Unauthorized", "message": "Invalid or missing API key" }
Validation errors
{ "error": "ValidationError", "message": "'signers' is required for type 'signable'" }
{ "error": "HTMLTooLarge", "message": "HTML content exceeds 500 KB limit" }
{ "error": "TooManySigners", "message": "Maximum 6 signers allowed per document" }
State conflict errors
{ "error": "DocumentAlreadySigned", "message": "Cannot modify content after signing has begun" }
{ "error": "ConsentRequired", "message": "consentGiven must be true to proceed with signing" }
Quota and rate limit errors
{
"error": "QuotaExceeded",
"message": "Monthly document quota reached. Upgrade your plan or wait for quota reset."
}
{
"error": "RateLimitExceeded",
"message": "Too many requests. Retry after 60 seconds.",
"retryAfter": 60
}
Not found
{ "error": "NotFound", "message": "Document doc_abc123 not found" }
Handling errors in code
const response = await fetch('https://zipzign.com/api/documents', {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(payload)
});
if (!response.ok) {
const err = await response.json();
console.error(`ZipZign error [${response.status}]: ${err.error} — ${err.message}`);
if (response.status === 429) {
const retryAfter = err.retryAfter ?? 60;
// back off and retry
}
}
Updated on: 16/04/2026
Thank you!