Skip to main content

Status details

A status says what happened to a message; a status detail says why. It is a two-level code source.reason returned next to the status:

The first level names where the reason is, not the status: recipient — the recipient's side, sender — the sender, template — the template, content — the message content, policy — the messenger's rules, channel — the delivery channel. So REJECTED with recipient.no_viber_user reads as "rejected because the recipient has no Viber".

Rules:

  • The detail is present only when the reason is known. Otherwise there is no such field, and the response is exactly as before.
  • The status itself does not change: the detail is added next to the status the message already has.
  • A detail belongs to the channel the message is on. If an undelivered Viber message is resent by SMS, the Viber reason no longer applies and the detail disappears.
  • New codes are added over time, existing ones are never renamed. Treat an unknown code as "no detail" and keep processing the status.
CodeDescription
recipient.no_viber_userThe number has no Viber
recipient.no_whatsapp_userThe number cannot receive WhatsApp: no account or an outdated app
recipient.blocked_senderThe recipient has blocked the sender
recipient.opted_outThe recipient has opted out of marketing messages
recipient.no_suitable_deviceNo device of the recipient can receive the message
policy.marketing_limitThe messenger limited marketing messages to this recipient
policy.outside_service_windowWhatsApp: 24 hours have passed since the recipient last wrote — send a template
sender.not_permittedThe sender is not approved or not allowed to send
sender.message_type_not_allowedThis message type is not allowed for the sender
template.not_foundTemplate not found
template.unavailableThe template is paused or disabled
template.parameters_mismatchThe parameters do not match the template
content.spamBlocked as spam
content.blacklisted_wordThe text contains a forbidden word
content.invalid_textThe text is empty or too long
content.invalid_mediaInvalid attachment: image, video, file or its caption
content.invalid_buttonInvalid button or button link
content.invalid_carouselInvalid carousel
content.invalid_parametersOther invalid message parameters
channel.no_routeNo delivery route to the number
channel.provider_errorFailure on the side of the delivery channel

Example — JSON status of a Viber message that was not delivered because the number has no Viber:

{
"msg_id": 123456789,
"type": "viber",
"status": "REJECTED",
"success": false,
"updated": "2026-10-20T12:34:00+03:00",
"status_detail": "recipient.no_viber_user"
}