What is a Webhook and why is it needed
Request Authenticity Verification
Webhook Processing Recommendations
Webhook is a mechanism for automatically sending notifications from our service to your system (CRM, ERP, 1C, your own application, etc.) when certain events occur via HTTP(S) requests.
Instead of regularly polling the API (for example, checking SMS delivery status), your server receives an HTTP(S) request at the moment the event actually occurs.
Using webhooks allows you to:
The following event types are currently available:
Go to Control Panel → API → Webhooks and click the "Create Webhook" button. The form for creating a new webhook will open.
In the webhook creation form, specify the following parameters:
Determines the event in the Mobizon system upon which the webhook will be sent.
Available options:
The format in which the webhook data will be sent to your server:
rawxmljsonChoose the format depending on the capabilities of your handler.
The URL to which webhooks will be sent.
Restrictions:
Important:
The secret key is used to verify the authenticity of the request.
Features:
If the secret key is not set:
Check the "Active" flag if the webhook should start working immediately after creation.
Click the "Save" button. The created webhook will appear in the list.
200–299 no later than 5 seconds.200–299 range is returned, the system will perform a retry.Retry attempts:
All webhooks are sent via an HTTP(S) request using the POST method.
| Field | Description |
|---|---|
eventId | Unique event identifier (same for retry attempts) |
eventType | Event type (e.g., sms-delivery-report) |
eventCreateTs | Event creation date and time (yyyy-mm-dd hh:mm:ss) |
webhookId | Webhook identifier |
attempt | Delivery attempt number |
data | Event data |
sign | Digital signature of the request |
sms-delivery-report){
"eventId": 26,
"eventType": "sms-delivery-report",
"eventCreateTs": "2026-01-15 11:42:28",
"webhookId": 1,
"attempt": 1,
"data": {
"campaignId": 245455096,
"messageId": 169275418,
"segNum": 3,
"statusUpdateTs": "2026-01-15 11:42:08",
"status": "DELIVRD",
"to": "380737893456"
},
"sign": "3f0a37cf5e27fe0615504b6d700b4b657ecfd39d"
}
data Field| Field | Description |
|---|---|
campaignId | SMS campaign ID |
messageId | SMS message ID |
segNum | Number of SMS segments |
statusUpdateTs | Status update time |
status | Final delivery status |
to | Recipient number |
Webhooks for forms can be sent for various user actions: form submission, contact confirmation, or unsubscribing.
form-submission)The event is sent immediately after the user successfully fills out and submits the form.
{
"eventId": 40,
"eventType": "form-submission",
"eventCreateTs": "2026-01-15 16:53:30",
"webhookId": 1,
"attempt": 1,
"data": {
"formId": 846,
"submissionId": 3680,
"items": [
{
"submissionDataId": 12303,
"fieldId": 3744,
"fieldType": "TEXT_STRING",
"fieldName": "Name",
"value": "Ivan"
},
{
"submissionDataId": 12304,
"fieldId": 3745,
"fieldType": "EMAIL",
"fieldName": "E-mail",
"value": "test@mobizon.com",
"confirmationRequired": 1
},
{
"submissionDataId": 12305,
"fieldId": 3746,
"fieldType": "MOBILE",
"fieldName": "Celular",
"value": "380737893456",
"confirmationRequired": 1
}
]
},
"sign": "0a38941c47689e3cb3634db817cd4851d2511c47"
}
Description of the items field
Each element of the array corresponds to one form field.
| Field | Description |
|---|---|
submissionDataId | Form field value ID |
fieldId | Form field ID |
fieldType | Field type (TEXT_STRING, EMAIL, MOBILE, etc.) |
fieldName | Field name |
value | Value entered by the user |
confirmationRequired | Confirmation requirement flag (1 — required) |
form-contact-confirmation)The event is sent after the user confirms their email address or phone number using a code in SMS or Email.
{
"eventId": 42,
"eventType": "form-contact-confirmation",
"eventCreateTs": "2026-01-15 16:54:15",
"webhookId": 1,
"attempt": 1,
"data": {
"formId": 846,
"submissionId": 3680,
"item": {
"submissionDataId": 12305,
"fieldId": 3746,
"fieldType": "MOBILE",
"fieldName": "Celular",
"value": "380737893456",
"confirmationTs": "2026-01-15 16:54:14"
}
},
"sign": "fe0da5443a9f5cadd0e972301415816cec481137"
}
form-contact-unsubscribe)The event is sent if the user has unsubscribed via the unsubscribe form.
{
"eventId": 45,
"eventType": "form-contact-unsubscribe",
"eventCreateTs": "2026-01-15 17:33:47",
"webhookId": 1,
"attempt": 1,
"data": {
"formId": 846,
"unsubscribeTs": "2026-01-15 17:33:46",
"items": [
{
"submissionId": 3675,
"submissionDataId": 12289,
"fieldId": 3745,
"fieldType": "EMAIL",
"fieldName": "E-mail",
"value": "test@mobizon.com",
"confirmationTs": ""
}
]
},
"sign": "06b78cf55ad19f9810babc415e86535384b74663"
}
The sign field, calculated using the SHA1 algorithm, is used for verification.
The signature string is formed in the following order:
eventId|attempt|eventCreateTs|secretKey
Where secretKey is the secret key specified when creating the webhook.
$secretKey = 'secret123';
$payload = json_decode(file_get_contents('php://input'), true);
$hash = sha1(
$payload['eventId'] . '|' .
$payload['attempt'] . '|' .
$payload['eventCreateTs'] . '|' .
$secretKey
);
if (hash_equals($hash, $payload['sign'])) {
http_response_code(200);
} else {
http_response_code(403);
}
eventId and not process the same event again.| Problem | Possible Cause |
|---|---|
| Webhook does not arrive | URL is unavailable or redirect limit exceeded |
| Repeated notifications | Server did not return HTTP 200 in time |
| Signature mismatch | Incorrect secret key or field order |
| Processing error | Missing payload structure verification |
Webhooks allow you to receive data about SMS statuses and forms:
Correct signature verification and careful handling of repeated requests ensure reliable integration.