The message_template_status_update field reports lifecycle changes for an existing WhatsApp template. It is the primary webhook field for approval, rejection, pause, disablement, archive, deletion, and appeal status.
What message_template_status_update Reports
This field identifies the template and reports the current lifecycle event, category, language, and any reason or extra metadata available for that event.
It is especially important for:
- moving newly created templates from pending to approved or rejected,
- detecting templates that were paused, disabled, or flagged,
- showing rejection reasons and recommendations,
- keeping archived or deleted template state in sync.
When It Fires
Meta sends it when a template is approved, rejected, disabled, archived, unarchived, paused, flagged, locked, reinstated, deleted, or enters appeal.
Event Values
Common event values include:
| Event | Meaning |
|---|---|
APPROVED | Template can be sent. |
REJECTED | Template failed review. Check reason and possibly rejection_info. |
PENDING | Template is still in review. |
FLAGGED | Negative feedback puts the template at risk. |
PAUSED | Template is temporarily paused. |
DISABLED | Template has been disabled due to feedback or policy. |
LOCKED | Template cannot be edited. |
IN_APPEAL | Template is in the appeal process. |
REINSTATED | Template is usable again. |
ARCHIVED / UNARCHIVED | Template moved into or out of archived state. |
DELETED / PENDING_DELETION | Template was deleted or scheduled for deletion. |
LIMIT_EXCEEDED | The WABA reached its template limit. |
Payload Shape
{
"object": "whatsapp_business_account",
"entry": [
{
"id": "<WABA_ID>",
"time": 1751247548,
"changes": [
{
"field": "message_template_status_update",
"value": {
"event": "REJECTED",
"message_template_id": 1689556908129835,
"message_template_name": "abandoned_cart",
"message_template_language": "en",
"reason": "INVALID_FORMAT",
"message_template_category": "MARKETING",
"rejection_info": {
"reason": "Variables are not clearly separated.",
"recommendation": "Add descriptive text between variables."
}
}
}
]
}
]
}
Optional nested objects:
| Object | Used for |
|---|---|
disable_info | Disable date when the template is disabled. |
other_info | Pause, unpause, lock, or unlock details. |
rejection_info | Detailed invalid-format rejection reason and recommendation. |
Dualhook Handling
Dualhook subscribes to message_template_status_update as a management field. It uses the event to update template status in the dashboard, show review outcomes, classify template problems, and forward the management event to your configured endpoint.
Only template metadata and operational delivery status are stored. Dualhook is not in the message-send path and does not store any customer message bodies.
Implementation Notes
- Treat
message_template_idplus language as the safest identity pair. - For
REJECTED, show bothreasonandrejection_infowhen present. - For
PAUSED,FLAGGED, andDISABLED, slow or stop sends that use the affected template. - Keep unknown
eventvalues. Meta adds lifecycle events over time. - Do not assume
reasonis always a string; scheduled deletion events can reportnull.