Home›Reference
›Error Codes
Error Codes
All EnableX APIs return errors in a consistent JSON envelope. HTTP status codes signal the class of failure; the error_code field in the response body identifies the specific cause. This reference covers all error codes across the Video, Voice, and Messaging APIs.
Error response envelope
{
"status": "error",
"error_code": "INVALID_PARAM",
"message": "The 'to' field must be a valid E.164 phone number.",
"request_id": "req_7f3a1b9c2d4e5f6a"
}
Always log request_id when reporting issues to EnableX support — it allows tracing the exact request through the platform.
HTTP status codes
| HTTP | Meaning in EnableX context |
| 200 | Success — action completed, response body contains the result |
| 201 | Created — resource created successfully (rooms, calls, campaigns) |
| 400 | Bad Request — missing, malformed, or logically invalid parameter |
| 401 | Unauthorized — invalid or missing APP_ID / APP_KEY credentials |
| 403 | Forbidden — valid credentials but insufficient permissions, or a business rule violation |
| 404 | Not Found — the resource ID does not exist or has been deleted |
| 409 | Conflict — the resource is in an incompatible state for the requested action |
| 422 | Unprocessable Entity — parameter validation failed (format valid, value invalid) |
| 429 | Too Many Requests — rate limit exceeded; use exponential backoff |
| 500 | Internal Server Error — platform error; retry with backoff; contact support if persistent |
| 503 | Service Unavailable — planned or unplanned maintenance; check status.enablex.io |
Common errors (all APIs)
| HTTP | error_code | Cause and fix |
| 401 | UNAUTHORIZED | APP_ID or APP_KEY is wrong, expired, or not encoded correctly. Verify Basic Auth: base64(APP_ID:APP_KEY). Check for trailing whitespace in your credentials. |
| 401 | CREDENTIAL_EXPIRED | API credentials have been rotated. Regenerate keys in the Portal under My Projects → Settings → API Keys. |
| 403 | PROJECT_SUSPENDED | Your project has been suspended due to a billing or policy issue. Contact EnableX support. |
| 429 | RATE_LIMITED | You have exceeded the API rate limit for this endpoint. Implement exponential backoff starting at 1 second. Default limits: 100 req/s for messaging, 20 req/s for voice call creation. |
| 500 | INTERNAL_ERROR | Unexpected platform error. Safe to retry after 2–5 seconds. If persistent, file a support ticket with the request_id. |
Video API errors
| HTTP | error_code | Cause and fix |
| 400 | INVALID_PARAM | A required parameter is missing or has an invalid value (e.g., name too long, unsupported quality value). |
| 403 | ROOM_LOCKED | The room has been locked by the moderator. New participants cannot join. Unlock via PUT /video/v2/rooms/{room_id}/unlock or issue a moderator token. |
| 403 | MAX_PARTICIPANTS_REACHED | The room has reached its participant limit. Upgrade your plan or increase the settings.participants limit when creating the room. |
| 404 | ROOM_NOT_FOUND | The room_id does not exist or has been deleted. Verify the ID; permanent rooms survive restarts but ad-hoc rooms are deleted when empty. |
| 403 | TOKEN_EXPIRED | The JWT participant token has expired. Tokens are valid for the duration set at creation. Issue a fresh token — do not cache tokens across sessions. |
| 409 | RECORDING_ALREADY_ACTIVE | A recording is already running. Stop the existing recording before starting a new one. |
| 409 | RECORDING_NOT_ACTIVE | You attempted to stop a recording that is not running. Check recording state before issuing a stop. |
| 404 | RECORDING_NOT_FOUND | The recording_id does not exist or has expired (recordings expire after 90 days). |
Voice API errors
| HTTP | error_code | Cause and fix |
| 400 | INVALID_PARAM | Required call parameter missing or invalid (e.g., non-E.164 to number, unsupported codec). |
| 403 | CALLER_ID_NOT_ALLOWED | The from number is not provisioned on your project. Only assigned DIDs can be used as caller ID. |
| 403 | DESTINATION_BLOCKED | The destination number or country is on your project's block list. Check My Projects → Voice → Number Restrictions. |
| 422 | INVALID_RECIPIENT | The to number is not reachable (disconnected, invalid format, or operator rejection). |
| 409 | CALL_ALREADY_ENDED | You attempted to perform an action (transfer, record, hang up) on a call that has already ended. |
| 503 | CARRIER_UNAVAILABLE | The destination carrier is temporarily unreachable. Retry with backoff. If affecting multiple destinations, check status.enablex.io. |
Webhook action errors
When your webhook returns an invalid action JSON, EnableX terminates the call and posts a call-complete event with one of the following error_code values:
| error_code | Cause |
WEBHOOK_TIMEOUT | Your server did not respond within 5 seconds. Acknowledge immediately and process asynchronously. |
WEBHOOK_HTTP_ERROR | Your server returned a non-2xx HTTP status. |
INVALID_ACTION | The action JSON is malformed or references an unsupported action type. |
CONNECT_TIMEOUT | The outbound leg in a connect action did not answer within the specified timeout. |
RECORD_FAILED | Recording could not be started — check storage configuration. |
STREAM_FAILED | Media Streaming WebSocket connection could not be established to your url. |
SMS errors
| HTTP | error_code | Cause and fix |
| 400 | INVALID_PARAM | Missing or malformed parameter (e.g., text empty, to not E.164). |
| 403 | SENDER_NOT_CONFIGURED | The from Sender ID is not assigned to your project. Configure it in the Portal under SMS → Sender IDs. |
| 403 | DLT_VALIDATION_FAILED | India DLT: entity ID, Sender ID, or template ID is invalid or not registered on the DLT portal. |
| 403 | OPT_OUT | The recipient has opted out via STOP/UNSUBSCRIBE. The number is blocked for future sends until they opt back in. |
| 422 | INVALID_RECIPIENT | The to number is not in valid E.164 format or is not reachable. |
| 422 | MESSAGE_TOO_LONG | Message body exceeds carrier limits (160 GSM-7 chars per segment up to 7 segments, or 70 Unicode chars per segment). |
| 429 | RATE_LIMITED | Sending rate exceeds project limit. Use the Campaign Manager for high-volume sends. |
WhatsApp errors
| HTTP | error_code | Cause and fix |
| 403 | OUTSIDE_SESSION_WINDOW | Attempted a session (non-template) message outside the 24-hour customer reply window. Use a pre-approved template instead. |
| 403 | TEMPLATE_NOT_APPROVED | The template name does not exist or has not been approved by Meta. Verify template status in the Portal. |
| 403 | TEMPLATE_PARAM_MISMATCH | The number of parameters in the components array does not match the template's variable count. |
| 403 | SENDER_NOT_CONFIGURED | The from WhatsApp number is not registered as a WABA (WhatsApp Business Account) on your project. |
| 403 | WABA_RESTRICTED | Your WhatsApp Business Account has been restricted or flagged by Meta for policy violations. Check the Meta Business Manager for alerts. |
| 422 | INVALID_RECIPIENT | The recipient number is not registered on WhatsApp, or not in E.164 format. |
| 429 | RATE_LIMITED | WhatsApp Business rate limit reached. Limits depend on your WABA tier (Tier 1: 1,000 conversations/day, Tier 2: 10,000, Tier 3: 100,000). |
RCS errors
| HTTP | error_code | Cause and fix |
| 403 | RCS_AGENT_NOT_REGISTERED | Your RCS business agent has not been registered or approved. Complete agent registration in the Portal under RCS → Register Agent. |
| 422 | INVALID_RECIPIENT | The recipient device does not support RCS, or the number is invalid. Ensure fallback_sms is set for graceful degradation. |
| 422 | CAROUSEL_CARD_COUNT | The carousel array contains fewer than 2 or more than 10 cards. |
| 422 | SUGGESTION_COUNT_EXCEEDED | A card or message has more than 4 suggestions. |
| 422 | INVALID_MEDIA_HEIGHT | media_height must be "SHORT", "MEDIUM", or "TALL". |
AI API errors
| HTTP | error_code | Cause and fix |
| 404 | RECORDING_NOT_FOUND | The recording_id submitted for summarization does not exist or has expired. Use a valid, non-expired recording ID. |
| 409 | SUMMARY_ALREADY_REQUESTED | A summarization job is already in progress for this recording. Poll the existing summary_id for status. |
| 422 | UNSUPPORTED_LANGUAGE | The requested language code is not supported by the STT or TTS engine. Check the voice catalogue or supported language list. |
| 422 | AUDIO_TOO_SHORT | The audio submitted is under 3 seconds — too short for transcription or summarization. |
| 422 | AUDIO_FORMAT_UNSUPPORTED | The audio file format is not supported. Use WAV (PCM), MP3, OGG, FLAC, or M4A. |
| 500 | TRANSCRIPTION_FAILED | The transcription engine encountered an error. Retry once; if it persists, check that the audio file is not corrupted. |
Retry guidance
| Error class | Retry? | Strategy |
| 400, 403, 404, 422 | No | These are client errors — retrying with the same payload will produce the same error. Fix the request first. |
| 429 Rate Limited | Yes | Exponential backoff: wait 1s, 2s, 4s, 8s. Check response headers for Retry-After if present. |
| 500 Internal Error | Yes (limited) | Retry up to 3 times with 2s, 5s, 10s backoff. If all retries fail, surface an error and log the request_id. |
| 503 Unavailable | Yes | Check status.enablex.io for a maintenance window. Retry when the incident is resolved. |
Legacy Numeric Error Codes
For Reference Only — Older Endpoints
These codes are returned by older endpoints (Video v1, Voice v1 pre-2024). New endpoints
return the string codes documented above. If you receive a numeric code, refer to the tables
below — and treat the corresponding string code as the canonical value going forward.
Video API Error Codes
| Video API Code |
Description |
| 10000 |
The application is not found. |
| 10001 |
The room_id URL parameter is missing. |
| 10002 |
The required data is missing in name (Room Name). |
| 10003 |
An invalid value is passed in settings.scheduled. |
| 10004 |
The required data is missing in settings.scheduled_time. |
| 10005 |
An invalid date or time format is specified for settings.scheduled_time. |
| 10006 |
The value of date or time value specified for settings.scheduled_time is illegible. |
| 10007 |
An invalid value is specified for settings.participants. |
| 10008 |
An invalid value is specified for settings.auto_recording. |
| 10009 |
The key of settings cannot be recognized. |
| 10010 |
The required data is missing in owner_ref. |
| 10011 |
An invalid value is specified for settings.duration. |
| 10012 |
An invalid value is specified for settings.active_talker. |
| 10013 |
An invalid value is specified for settings.wait_moderator. |
| 10014 |
An invalid value is specified for settings.quality. |
| 10015 |
The required data is missing in sip.uri. |
| 10016 |
An invalid value is specified forsettings.adhoc. |
| 10017 |
An invalid value is specified for settings.adhoc |
| 10018 |
Illegible parameter. This parameter is not valid for this Room Type. |
| 10019 |
An invalid value is specified for settings.mode. |
| 10020 |
An illegible parameter is specified for settings.mode. |
| 10021 |
Room quality higher than the application quality is not permitted. |
| 10022 |
An invalid value is specified for settings.moderators. |
| 10023 |
An invalid value is specified for settings.moderators. |
| 10024 |
An illegible value is specified for settings.peep. |
| 10025 |
An illegible value is specified for settings.knock. |
| 10026 |
An invalid value of SIP URI is specified for settings.aor. |
| 10030 |
The update request for the active room is denided. |
| 10101 |
The required JSON key is missing for name (User Name). |
| 10102 |
The required JSON key is missing for user_ref. |
| 10103 |
The required JSON key is missing for role. |
| 10104 |
An invalid value is specified for role. |
| 10105 |
The server is busy. |
| 10106 |
Illegible Request. Update of this Room Type is not allowed. |
| 10111 |
Token denied. The conference is over. |
| 10112 |
Token denied. Tried to connect beyond the permissible cut-off time. |
| 10113 |
Token denied. The room is not active. |
| 10114 |
Token denied. The room is full. |
| 10201 |
The Reason URL parameter is missing for from_date. |
| 10202 |
The URL parameter is missing for to_date. |
| 10203 |
The URL parameter is missing for room-id. |
| 10204 |
The Reason URL parameter is missing for conf-num (Conference Number). |
| 40001 |
The room is not found. |
| 40002 |
Token denied. Unauthorized access to the room is not permitted. |
| 50000 |
An internal server error has occurred. |
| 50001 |
Failed to create the room. |
| 50002 |
Failed to fetch the list of rooms. |
| 50003 |
Failed to get room information. |
| 50004 |
Failed to delete the room. |
| 50005 |
Failed to get the list of users for the room. |
Voice API Error Codes
| Voice API Code |
Description |
| 400 |
Bad request. |
| 401 |
The Basic Authorization header is not found. |
| 404 |
The resource is not found. Details of the resource will be added in the JSON body. |
| 405 |
This method is not allowed. |
| 407 |
The authorization token is either wrong or not found. |
| 500 |
An internal server error has occurred. |
| 511 |
Additional authentication is required. |
| 6101 |
The Voice service is not subscribed. |
| 6110 |
The application is not found. |
| 6111 |
The call is not established. |
| 6112 |
The call is in the bridged mode and cannot play the media. |
| 6113 |
An error has occurred while creating a bridge. |
| 6114 |
Failed to add the channel to the bridge. |
| 6115 |
Failed to the play voice menu on the bridge. |
| 6116 |
External media request has failed. |
| 6117 |
Text-to-speech conversion is not supported for the Voice service. |
| 6118 |
The phone number is not found for the service. |
| 6119 |
Failed to start recording on the bridge. |
| 6120 |
An error occurred while converting text to speech. |
| 6121 |
Request for converting text to speech has failed. |
| 6122 |
The play request is pending. |
| 6123 |
Failed playing text-to-speech on the media channel. |
| 6124 |
An invalid parameter is specified for the outbound call. |
| 6125 |
Request for text-to-speech has failed. |
| 6126 |
Request for text-to-speech has failed. |
| 6127 |
Request for text-to-speech has failed. |
| 6128 |
The text-to-speech request is longer than the allowed limit of 1024 characters. |
| 6129 |
The number of text-to-speech requests has exceeded the quota or rate of requests allowed for your subscription. |
| 6130 |
A network or server-side issue has occurred. |
| 6131 |
An invalid parameter is specified for the outbound call. |
| 6132 |
An error occurred while answering an incoming call. |
| 6133 |
The inbound number is not associated with any service. |
| 6134 |
Unable to connect to the Voice server. |
| 6135 |
An invalid parameter has been specified for the recording request. |
| 6136 |
The specified recording format is not supported on the system. |
| 6137 |
This recording file name exists in the system. |
| 6138 |
Resource for recording is not found. |
| 6139 |
Not able to stop the recording. |
| 6140 |
Error occurred while fetching the recording file. |
| 6141 |
The SIP gateway service is unavailable. |
| 6142 |
Checking of the Wallet balance failed. |
| 6143 |
The speech was not recognized. |
| 6144 |
Speech recognition is cancelled by the user. |
| 6145 |
Speech recognition is cancelled due to the end of the stream. |
| 6146 |
Speech Recognition is cancelled due to an error. |