Error Response Format
All errors follow this schema:code— Machine-readable error code for programmatic handlingmessage— Human-readable error descriptiondetails— Additional context (optional)request_id— Unique identifier for this request (include when contacting support)documentation_url— Link to relevant documentation (optional)
HTTP Status Codes
| Status Code | Description |
|---|---|
200 | Success — Request completed successfully |
400 | Bad Request — Invalid request parameters |
401 | Unauthorized — Invalid or missing API key |
403 | Forbidden — Valid API key but insufficient permissions |
404 | Not Found — Resource doesn’t exist |
413 | Payload Too Large — Request body exceeds limit |
429 | Too Many Requests — Credit quota exceeded |
500 | Internal Server Error — Something went wrong on our end |
503 | Service Unavailable — Temporary service disruption |
Common Error Codes
Authentication Errors
unauthorized
Authentication failed due to missing or invalid API key.
- Verify your API key is correct
- Check that the
Authorizationheader is properly formatted:Bearer YOUR_API_KEY - Ensure your API key hasn’t been revoked
- Get a new key from the dashboard
api_key_expired
Your API key has expired.
- Generate a new API key in your dashboard
- Update your application with the new key
Permission Errors
forbidden
Your API key is valid but doesn’t have permission for this operation.
- Upgrade your plan to access this feature
- Contact support if you believe this is an error
Request Errors
invalid_request
One or more request parameters are invalid.
- Check the error message for specific field issues
- Verify parameters match the API specification
- Ensure data types are correct (strings, numbers, arrays)
- Review the documentation URL if provided
invalid_image
Image upload or URL is invalid.
- Convert image to a supported format
- Ensure image is not corrupted
- Check image size is under 10MB
payload_too_large
Request body exceeds maximum size.
- Reduce the number of items in bulk requests
- Split large requests into multiple smaller requests
- For images, compress or resize before uploading
Resource Errors
not_found
The requested resource doesn’t exist.
- Verify the resource ID is correct
- Check if the resource may have been deleted
- Ensure you’re searching the correct office
monitor_not_found
Monitor with the specified ID doesn’t exist.
Rate Limit Errors
quota_exceeded
You’ve exceeded your monthly credit quota.
- Wait until the reset time indicated in the message
- Upgrade your plan for more credits
- Purchase overage credits
- Implement exponential backoff in your retry logic
monitor_limit_exceeded
You’ve reached the maximum number of monitors for your plan.
Server Errors
internal_error
An unexpected error occurred on our servers.
- Retry the request (we recommend exponential backoff)
- If the problem persists, contact support with the
request_id
service_unavailable
The API is temporarily unavailable.
- Wait the specified
retry_afterseconds before retrying - Check status.signa.so for service status
Example Error Handling
Retry Logic with Exponential Backoff
For transient errors (500, 503), implement exponential backoff:Webhook Error Handling
When delivering webhooks, we expect:- 2xx response — Webhook accepted
- Any other response — We’ll retry
- Attempt 1: Immediately
- Attempt 2: After 1 minute
- Attempt 3: After 5 minutes
- Attempt 4: After 30 minutes
- Attempt 5: After 2 hours
Getting Help
If you encounter persistent errors:- Check the
request_idin the error response - Review your request parameters against the API documentation
- Test with a simple request to isolate the issue
- Check service status at status.signa.so
- Contact support at [email protected] with the
request_id
Contact Support
Include the
request_id from error responses for faster resolutionError Code Reference
| Code | HTTP Status | Description | Retryable |
|---|---|---|---|
unauthorized | 401 | Invalid/missing API key | No |
api_key_expired | 401 | API key expired | No |
forbidden | 403 | Insufficient permissions | No |
invalid_request | 400 | Invalid parameters | No |
invalid_image | 400 | Invalid image format/size | No |
payload_too_large | 413 | Request too large | No |
not_found | 404 | Resource not found | No |
monitor_not_found | 404 | Monitor not found | No |
quota_exceeded | 429 | Credit limit exceeded | Yes (after reset) |
monitor_limit_exceeded | 429 | Too many monitors | No |
internal_error | 500 | Server error | Yes |
service_unavailable | 503 | Service down | Yes |
Best Practices
Log Request IDs
Log Request IDs
Always log the
request_id from errors for debugging and support:Handle All Error Types
Handle All Error Types
Don’t just catch generic errors - handle specific error codes:
Don't Retry Client Errors
Don't Retry Client Errors
Only retry server errors (5xx) and rate limits (429). Retrying 4xx errors wastes time:
Provide User-Friendly Messages
Provide User-Friendly Messages
Translate technical errors into user-friendly messages: