{
"error": {
"code": "insufficient_credits",
"message": "The account does not hold enough credits for this template's category."
}
}The HTTP status tells you the class of problem; the code tells you exactly which. Codes are stable — build on them, not on the message text, which may be reworded.
All codes
| HTTP | code | Meaning |
|---|---|---|
| 400 | invalid_request | The body is not valid JSON or fails the schema. |
| 401 | invalid_api_key | The Authorization header is missing, malformed, unknown or revoked. |
| 402 | insufficient_credits | The account does not hold enough credits for this template's category. |
| 404 | template_not_found | No template with that name and language exists on this account. |
| 404 | message_not_found | No message with that id exists on this account. |
| 409 | template_not_approved | The template exists but Meta has not approved it yet, or rejected it. |
| 409 | unsupported_template | Carousel templates cannot be sent through the API yet. |
| 409 | number_not_connected | The account's WhatsApp number is not connected and live. |
| 422 | invalid_phone | `to` is not a valid Indian mobile number. |
| 422 | variable_count_mismatch | The number of body parameters does not match the template's variables. |
| 422 | unsupported_component | A component was supplied that this template does not have, or of a type the API does not support. |
| 429 | rate_limited | Too many sends on this key in the last minute. Retry after the `Retry-After` seconds. |
| 502 | send_failed | Our messaging platform refused the send. Any credits debited were refunded. |