curl --request POST \
--url https://api.hubmessage.io/v1/webhooks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"url": "https://destination/webhook",
"description": "Template webhook",
"events": [
"UPDATE_TEMPLATE_STATUS",
"UPDATE_TEMPLATE_CATEGORY"
],
"signing": false,
"authType": "NONE"
}
'{
"id": "8F2C00000000000000000000000000A1",
"channelId": null,
"instanceId": null,
"url": "https://destination/webhook",
"description": "Template webhook",
"events": [
"UPDATE_TEMPLATE_STATUS",
"UPDATE_TEMPLATE_CATEGORY"
],
"status": "ENABLED",
"signing": false,
"secret": null,
"auth": {
"type": "NONE",
"configured": false
},
"payloadFormat": "DEFAULT",
"customAttributes": {},
"createdAt": "2026-07-15T19:00:00.000+00:00",
"updatedAt": "2026-07-15T19:00:00.000+00:00"
}Templates
Create template webhook
Register a template webhook (independent of any instance)
POST
/
v1
/
webhooks
curl --request POST \
--url https://api.hubmessage.io/v1/webhooks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"url": "https://destination/webhook",
"description": "Template webhook",
"events": [
"UPDATE_TEMPLATE_STATUS",
"UPDATE_TEMPLATE_CATEGORY"
],
"signing": false,
"authType": "NONE"
}
'{
"id": "8F2C00000000000000000000000000A1",
"channelId": null,
"instanceId": null,
"url": "https://destination/webhook",
"description": "Template webhook",
"events": [
"UPDATE_TEMPLATE_STATUS",
"UPDATE_TEMPLATE_CATEGORY"
],
"status": "ENABLED",
"signing": false,
"secret": null,
"auth": {
"type": "NONE",
"configured": false
},
"payloadFormat": "DEFAULT",
"customAttributes": {},
"createdAt": "2026-07-15T19:00:00.000+00:00",
"updatedAt": "2026-07-15T19:00:00.000+00:00"
}Overview
Creates a template webhook. It does not depend on an instance — theinstanceId is stored as null automatically — and receives only WhatsApp template events.
The events field accepts only UPDATE_TEMPLATE_STATUS and UPDATE_TEMPLATE_CATEGORY. Any non-template event results in 422.
payloadFormat is ignored
For template webhooks the format is always DEFAULT. You may omit the field; if sent (any value), it is silently discarded and persisted as DEFAULT.
HMAC signing
Ifsigning: true, the secret field is generated and returned only in this response. Store it securely — it will not be shown again.
This endpoint requires the ENTERPRISE role on your account.
After creation, routing may take up to ~5 min to reflect (cache TTL).
Authorizations
Body
application/json
Template events only. At least one required. Any non-template event results in 422.
Minimum array length:
1Accepted template events: UPDATE_TEMPLATE_STATUS (template status update — approved/rejected etc.) and UPDATE_TEMPLATE_CATEGORY (template category update).
Available options:
UPDATE_TEMPLATE_STATUS, UPDATE_TEMPLATE_CATEGORY Example:
[
"UPDATE_TEMPLATE_STATUS",
"UPDATE_TEMPLATE_CATEGORY"
]
Response
Template webhook created successfully. channelId and instanceId come back null. The secret field is returned only in this response when signing is true.
Configured template events
Accepted template events: UPDATE_TEMPLATE_STATUS (template status update — approved/rejected etc.) and UPDATE_TEMPLATE_CATEGORY (template category update).
Available options:
UPDATE_TEMPLATE_STATUS, UPDATE_TEMPLATE_CATEGORY Example:
[
"UPDATE_TEMPLATE_STATUS",
"UPDATE_TEMPLATE_CATEGORY"
]