callback field) or at the account level with a default callback URL. Events are delivered as JSON arrays — SmsManager may batch multiple events into a single POST — so your handler must always iterate over the array even when you expect only one event. Always return HTTP 200 to acknowledge receipt; if your server is unreachable, SmsManager may retry delivery.
Webhook events summary
sentMessage event
SmsManager sends asentMessage event whenever the status of an outbound message changes. You typically receive an initial sent or sending event shortly after the API call, followed by a final delivery status event.
Field reference
string
The unique identifier of the original API request that sent this message.Example:
"bc36f3d1-d284-463a-921b-a3560c154649"string
Unique identifier for this message. When the message was sent via
POST /messages, this ID has the form <base_id>-<recipient_index> (e.g. e27ff0ac-87b5-4e1d-b644-5fc6029e2a11-0).Example: "e27ff0ac-87b5-4e1d-b644-5fc6029e2a11"string
The channel that delivered (or attempted to deliver) the message. One of:
sms, viber, whatsapp_text, whatsapp_template.integer
Unix timestamp of the status event.Example:
1700000000object
The custom
payload object you attached to the original message request, echoed back unchanged. Use this to correlate the event with your own records.Example: { "campaign_id": "winter-sale" }string
Always
"outgoing" for sentMessage events.object
The recipient for this event.
string
The current delivery status of the message. Possible values:
string
A human-readable description of the result, optionally prefixed with a numeric code in square brackets. Examples:
"[0] Delivered", "[307] Insufficient credit", "[131042] There was an error related to your payment method", "Unauthorized error".object
Present when
gateway is sms. Contains billing and routing details for this SMS.object
Present when
gateway is viber. Contains the same sub-fields as the sms object: sender, country, operator, price_czk, price_eur, count.object
Present when
gateway is whatsapp_template. Contains the same sub-fields as the sms object: sender, country, operator, price_czk, price_eur, count.object
Present when
gateway is whatsapp_text. Contains the same sub-fields as the sms object: sender, country, operator, price_czk, price_eur, count.Example payload
incomingReplyMessage event
SmsManager sends anincomingReplyMessage event when a recipient replies directly to a message you sent. The event includes the request_id, message_id, and payload of your original outbound message, so you can immediately correlate the reply with its context.
Field reference
string
The
request_id of the original outbound message this reply is responding to.string
The
message_id of the original outbound message this reply is responding to.object
The
payload object from your original outbound message, echoed back for correlation.Example: { "campaign_id": "winter-sale" }string
The channel on which the reply arrived. One of:
sms, viber, whatsapp. Note: for WhatsApp, the gateway value is always whatsapp — it is not split into whatsapp_text or whatsapp_template for incoming messages.integer
Unix timestamp of when the reply was sent by the recipient. If that information is unavailable, this is the time SmsManager received the reply.
string
Always
"incoming" for incomingReplyMessage events.string
The phone number of the person who replied. In some countries, alphanumeric senders are not fully supported.Example:
"420777123456"string
The number or sender ID that received the reply (your virtual number or sender name).Example:
"420777654321"string
The text of the reply message.Example:
"Thank you!"Example payload
incomingMessage event
SmsManager sends anincomingMessage event when a new inbound message arrives on one of your numbers that is not a reply to any specific outbound message — for example, a customer texting your long number or short code directly.
Field reference
string
The channel on which the message arrived. One of:
sms, viber, whatsapp.integer
Unix timestamp of when the message was sent by the sender. If that information is unavailable, this is the time SmsManager received the message.
string
Always
"incoming" for incomingMessage events.string
The phone number of the person who sent the message.Example:
"420777123456"string
Your number or sender ID that received the message.Example:
"420777654321"string
The text of the inbound message.
Example payload
Configuring webhook URLs
You can set a webhook URL at two levels: 1. Per-message callback Include acallback field in your POST /message or POST /messages request body:
callback. You can update it via the SmsManager REST API:
Always respond with
HTTP 200 when you receive a webhook event. If your server returns an error status or is unreachable, SmsManager may retry the delivery. Returning 200 quickly (before performing any slow processing) keeps your webhook endpoint reliable.