Legacy API Notice: This documentation covers the Legacy Sent API (v2). For new integrations, please refer to the latest Sent API v3 Error Handling.
Error Reference
The Sent API uses standard HTTP status codes and returns detailed error information following the FastEndpoints problem details format.
Error Codes Overview
| Status Code | Error Type | Common Causes |
|---|---|---|
400 | Bad Request | Invalid parameters, validation errors, insufficient balance, template not found |
401 | Unauthorized | Missing or invalid API credentials |
403 | Forbidden | Access denied to resource |
404 | Not Found | Contact or template not found |
429 | Too Many Requests | Rate limit exceeded (future implementation) |
500 | Internal Server Error | Server-side errors |
Error Response Format
All errors follow this standard structure:
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred",
"status": 400,
"errors": {
"fieldName": ["Error message"]
}
}Common Error Codes
400 Bad Request
Invalid request parameters or business logic errors.
Validation Errors
{
"status": 400,
"errors": {
"phoneNumber": ["Phone number is required"],
"templateId": ["TemplateId is required"]
}
}Invalid Phone Number
{
"status": 400,
"title": "Bad Request",
"detail": "Invalid phone number"
}Insufficient Balance
{
"status": 400,
"title": "Bad Request",
"detail": "Insufficient balance. Current balance: 0.0050, estimated cost: 0.0200"
}Template Not Found
{
"status": 400,
"title": "Bad Request",
"detail": "Template not found"
}Invalid Channel
{
"status": 400,
"title": "Bad Request",
"detail": "Invalid channel: email. Supported channels are: sms, whatsapp"
}401 Unauthorized
Authentication failures.
Missing Headers
{
"status": 401,
"title": "Unauthorized",
"detail": "Header x-api-key not found"
}Invalid Credentials
{
"status": 401,
"title": "Unauthorized",
"detail": "Invalid API credentials!"
}403 Forbidden
Access denied to the requested resource.
{
"status": 403,
"title": "Forbidden"
}404 Not Found
Resource not found.
{
"status": 404,
"title": "Not Found"
}Common scenarios:
- Contact not found (when looking up by ID)
- Template not found for the authenticated customer
429 Too Many Requests
Rate limiting (future implementation).
{
"status": 429,
"title": "Too Many Requests",
"detail": "Rate limit exceeded. Please retry after 60 seconds."
}500 Internal Server Error
Server-side errors.
{
"status": 500,
"title": "Internal Server Error",
"detail": "An unexpected error occurred"
}Error Handling Best Practices
1. Implement Retry Logic
- Use exponential backoff for server errors (5xx)
- Don't retry client errors (4xx)
- Set reasonable timeout limits
2. Parse Error Details
- Check for validation errors in the
errorsfield - Handle specific error messages in the
detailfield - Log errors for debugging
3. Handle Specific Error Scenarios
- Monitor balance levels to prevent insufficient balance errors
- Validate inputs before sending requests
- Implement proper error recovery flows
Common Error Scenarios
Phone Number Validation
- Include country code for accurate parsing
- Remove special characters before sending
- Use E.164 format when possible (+1234567890)
Template Errors
- Ensure template is published and approved
- Verify all required parameters are provided
- Check parameter names match exactly
Balance Issues
- Monitor balance levels proactively
- Implement auto-recharge if possible
- Check estimated costs before sending
Contact Lookup
- Use contact ID when available (faster)
- Handle auto-creation for phone lookups
- Don't assume contacts exist
Webhook Error Handling
When providing webhook URLs, ensure your endpoint:
- Responds quickly (< 5 seconds)
- Returns 2xx status codes
- Handles duplicate notifications
- Implements proper error logging