When a send call answers status: "S", the message was accepted. Whether it reached the phone becomes known
later. There are two ways to learn it.1. We call you (recommended)#
Add callback_url to the send call (Send SMS). When the result is known, we send an HTTP
POST with a JSON body to that address:{
"message_id": 1284417,
"uid": "order-1042",
"PhoneNumber": "37491234567",
"SMSMessage": "Your verification code is 482913",
"MessageType": "T",
"MessageLength": 32,
"MessageParts": 1,
"ClientCost": 0.021,
"DLRStatus": "Delivered",
"SMSID": "7f3a9c2e51",
"SentDateUTC": "10/08/2026 09:30:02",
"ErrorCode": null,
"ErrorDescription": null,
"Remarks": null
}
| Field | Meaning |
|---|
message_id | The message_id the send call gave you. |
uid | Your own reference from the send call. |
PhoneNumber | The number the message went to. |
SMSMessage | The text. |
MessageType | T for plain text, U for Unicode. |
MessageLength | Number of characters. |
MessageParts | Number of SMS parts the text was split into. |
ClientCost | What the message cost you. |
DLRStatus | The result. See the table below. |
SMSID | An id of this single message. One message_id has several when the send went to many numbers. |
SentDateUTC | When the message was sent, in UTC, as text. Do not rely on its exact layout. |
ErrorCode, ErrorDescription, Remarks | Reserved. Usually null. |
DLRStatus | Meaning | Final? |
|---|
Delivered | The phone received the message. | Yes |
Undeliverable | The network could not deliver it. | Yes |
Expired | The phone was unreachable until the message ran out of time. | Yes |
Rejected | The network refused the message. | Yes |
Accepted | The network took the message; no final result yet. | No |
Unknown | No result was reported. | Yes |
| empty text | The message is still on its way. | No |
Answer HTTP 200 quickly. Any other answer, including 204, counts as "not received" and we send the report
again later.
The same report can arrive more than once. Use message_id together with SMSID to recognise a repeat.
Reports can arrive in any order and some minutes after the send.
Use an https:// address. The report is not signed, so give the address a long random part that only you
know, and treat a report as a hint: when the result matters (for example for billing), confirm it with the
status call below.
2. You ask us#
Look the message up with List SMS records, filtering campaignId by the message_id you
got:{
"apiId": "YOUR_API_KEY",
"pageNumber": 1,
"pageSize": 20,
"filters": [
{"propertyName": "campaignId", "value": "1284417", "comparer": "Equals"}
]
}
Each record carries deliveryStatus. Ask again after a pause while the result is not final; do not poll in a
tight loop.Viber and WhatsApp#
Modified at 2026-10-08 11:11:25