Errors
Status codes and the error response shape.
Errors use standard HTTP status codes and share one JSON shape:
{
"statusCode": 404,
"timestamp": "2026-10-10T08:45:35.000Z",
"path": "/v1/tickets/T-261010-0001",
"method": "GET",
"message": "Ticket T-261010-0001 not found",
"error": "NotFoundException"
}| Field | Description |
|---|---|
statusCode | The HTTP status. |
message | What went wrong. A string, a list of strings, or { "en": "…", "ar": "…" } for errors shown to end users. |
error | The error's name. |
validationErrors | On 400: the fields that failed validation and why. |
errorDetails | On send failures: code, title, message, details. See below. |
Status codes
| Status | Meaning |
|---|---|
400 | The body or query is invalid. Unknown fields are rejected too. |
401 | The API key is missing, invalid, expired or revoked. |
402 | Not enough Enigma credits to send the message. |
403 | The key lacks the scope this endpoint needs. |
404 | The channel, contact, conversation or ticket does not exist in your organization. |
429 | Rate limit exceeded. See Rate limits. |
502 | WhatsApp rejected the message. |
Send failures
When a template send fails, errorDetails says why, so you can act on it:
{
"statusCode": 502,
"message": {
"en": "Failed to send the message to WhatsApp. Please try again.",
"ar": "فشل إرسال الرسالة إلى واتساب. يرجى المحاولة مرة أخرى."
},
"error": "MessageSendFailedError",
"errorDetails": {
"code": 131047,
"title": "Re-engagement message",
"message": "More than 24 hours have passed since the customer last replied."
}
}- On
502,errorDetails.codeis the WhatsApp error code. - On
402,errorDetails.titleisWALLET_INSUFFICIENT. Top up your balance in the dashboard.
A message can also fail after WhatsApp accepted it. That failure arrives on the
message_status webhook, with the same errorDetails.