template.status
POST
your webhook addressTemplate reviewed. A template version was approved or rejected. An approved version can be sent at once with POST /messages; category is the category it was approved in (null for a rejected one).
Body
| Field | Type | Description |
|---|---|---|
type | string | Always template.status. |
timestamp | string (date-time) | When the event happened, UTC. |
data | object | |
data.template | object | |
data.template.name | string | The name to send the template with. |
data.template.version | integer | The number of the reviewed version. |
data.status | string | One of: approved, rejected. |
data.category | string, nullable | The category of an approved version. |
json
{
"type": "template.status",
"timestamp": "2026-11-02T12:00:04+00:00",
"data": {
"template": {
"name": "welcome_bonus",
"version": 3
},
"status": "approved",
"category": "marketing"
}
}Headers
| Header | Description |
|---|---|
webhook-id | The delivery, whd_…. The same on every attempt of one delivery: use it to drop a repeated delivery. |
webhook-timestamp | Unix time of the attempt, in seconds. Refuse deliveries older than 5 minutes. |
webhook-signature | v1, and the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{body}, keyed with the secret (the part after whsec_, base64-decoded). |
content-type | application/json |
user-agent | ACE-SEND-Webhooks/1 |
Check the signature before you trust the body, answer 2xx within 5 seconds and do the work afterwards. See Webhooks for the signature check, retries and duplicates.