All webhooks
Templates
Template approved
template.approvedFires when a WhatsApp Business message template is approved by Meta and becomes sendable. The event is emitted during periodic template status synchronisation, when the Meta review status transitions to `approved`. Use it to invalidate any cached list of approved templates and to learn which templates can now be sent via `POST /v1/messages/send-template`.
HTTP request
AISAR sends a signed POST request to your webhook_url:
http
POST {webhook_url}
Content-Type: application/json
X-AISAR-Signature: sha256=...
{
"event": "template.approved",
"event_id": "evt_01JXXXXXXXXXXXXXXXXXXXXX",
"timestamp": "2026-06-01T12:00:00.000000Z",
"company_id": 1,
"data": {
"template": {
"id": 42,
"external_id": "123456789012345",
"name": "order_update",
"slug": "order_update_en_57",
"language": "en",
"category": "utility",
"status": "published",
"meta_status": "approved",
"meta_status_reason": null,
"channel_id": 57,
"channel_type": "whatsapp_business"
}
}
}The X-AISAR-Signature header carries an HMAC-SHA256 signature of the request body — use it to verify the request came from AISAR.
Example payload
json
{
"event": "template.approved",
"event_id": "evt_01JXXXXXXXXXXXXXXXXXXXXX",
"timestamp": "2026-06-01T12:00:00.000000Z",
"company_id": 1,
"data": {
"template": {
"id": 42,
"external_id": "123456789012345",
"name": "order_update",
"slug": "order_update_en_57",
"language": "en",
"category": "utility",
"status": "published",
"meta_status": "approved",
"meta_status_reason": null,
"channel_id": 57,
"channel_type": "whatsapp_business"
}
}
}Payload fields
| Field | Type | Description |
|---|---|---|
template.id | integer | AISAR template ID — pass it as `template_id` to `/v1/messages/send-template` |
template.external_id | string|null | Meta's template ID |
template.name | string | Template name as registered with Meta |
template.slug | string | Internal slug |
template.language | string | BCP-47 language code (e.g. `en`, `en_US`) |
template.category | string|null | Category: `marketing`, `utility`, or `authentication` |
template.status | string | Local lifecycle status: `draft`, `published`, `archived` |
template.meta_status | string | Always `approved` for this event |
template.meta_status_reason | string|null | Always `null` for an approved template |
template.channel_id | integer|null | WhatsApp Business channel the template belongs to |
template.channel_type | string|null | Channel type key — `whatsapp_business` |