Template status
A template changed review state. Routed by WABA. Rejections carry Meta's reason and other_info; WhaBuzz stores them as the template's status_reason and the console shows it.
A template changed review state. Routed by WABA. Rejections carry Meta's reason and other_info; WhaBuzz stores them as the template's status_reason and the console shows it.
Event type: template.status. Fixture payloads are the WhaBuzz Demo tenant's real ids with a fictional customer number; id, tenant_id and created_at in envelopes are illustrative.
#Approved
What Meta POSTs to WhaBuzz (fixtures/meta/template_status_approved.json):
{
"object": "whatsapp_business_account",
"entry": [
{
"id": "26059971920328384",
"changes": [
{
"value": {
"event": "APPROVED",
"message_template_id": 1689556908129832,
"message_template_name": "renewal_reminder",
"message_template_language": "en",
"reason": "NONE",
"message_template_category": "UTILITY"
},
"field": "message_template_status_update"
}
]
}
]
}jsonWhat your endpoint receives, as the body of a signed POST. raw is abbreviated here; on the wire it is the full body above.
{
"id": "evt_01JAB3K9X2S8C4M7Q1V5R6T0YZ",
"type": "template.status",
"api_version": "2026-10-16",
"created_at": "2025-10-16T05:12:03.481Z",
"tenant_id": "a578246e-b97f-48e6-ae42-939ec3ccf917",
"waba_id": "26059971920328384",
"phone_number_id": null,
"display_phone_number": null,
"wamid": null,
"wa_id": null,
"user_id": null,
"dedupe_key": "message_template_status_update:<sha256 of the canonical value>",
"data": {
"event": "APPROVED",
"message_template_id": 1689556908129832,
"message_template_name": "renewal_reminder",
"message_template_language": "en",
"reason": "NONE",
"message_template_category": "UTILITY",
"field": "message_template_status_update"
},
"raw": {
"…": "the complete Meta POST body, byte for byte, as shown above"
},
"raw_path": "entry[0].changes[0].value"
}json#Rejected, with reason and other_info
What Meta POSTs to WhaBuzz (fixtures/meta/template_status_rejected.json):
{
"object": "whatsapp_business_account",
"entry": [
{
"id": "26059971920328384",
"changes": [
{
"value": {
"event": "REJECTED",
"message_template_id": 1689556908129833,
"message_template_name": "diwali_offer",
"message_template_language": "en",
"reason": "INVALID_FORMAT",
"other_info": {
"title": "FIRST_PAUSE",
"description": "Template body contains variables at the start or end."
}
},
"field": "message_template_status_update"
}
]
}
]
}jsonWhat your endpoint receives, as the body of a signed POST. raw is abbreviated here; on the wire it is the full body above.
{
"id": "evt_01JAB3K9X2S8C4M7Q1V5R6T0YZ",
"type": "template.status",
"api_version": "2026-10-16",
"created_at": "2025-10-16T05:12:03.481Z",
"tenant_id": "a578246e-b97f-48e6-ae42-939ec3ccf917",
"waba_id": "26059971920328384",
"phone_number_id": null,
"display_phone_number": null,
"wamid": null,
"wa_id": null,
"user_id": null,
"dedupe_key": "message_template_status_update:<sha256 of the canonical value>",
"data": {
"event": "REJECTED",
"message_template_id": 1689556908129833,
"message_template_name": "diwali_offer",
"message_template_language": "en",
"reason": "INVALID_FORMAT",
"other_info": {
"title": "FIRST_PAUSE",
"description": "Template body contains variables at the start or end."
},
"field": "message_template_status_update"
},
"raw": {
"…": "the complete Meta POST body, byte for byte, as shown above"
},
"raw_path": "entry[0].changes[0].value"
}jsonThis page as Markdown: /events/template-status.md. All docs in one file: /llms-full.txt.