Hi,
We're writing to let you know about an upcoming enhancement to our messaging delivery receipts (DLRs).
Starting October 15th, we will be introducing two new fields to the DLR payload: sub_error and sub_error_description. Sub_error is a secondary error code that will tie to the sub_error_description and provide a little more detail about why the message was not delivered.
Current fields DLR:
{
"guid": "882e504c-642d-11f1-9a00-403e0194065c",
"account_id": "14990",
"source_did": "19844013003",
"destination_did": "9196146787",
"timestamp": "2026-06-09T18:03:34.000Z",
"send_status": "undeliverable",
"status": "UNDELIV",
"error": "005"
}
Extra fields DLR:
{
"guid": "882e504c-642d-11f1-9a00-403e0194065c",
"account_id": "14990",
"source_did": "19844013003",
"destination_did": "9196146787",
"timestamp": "2026-06-09T18:03:34.000Z",
"send_status": "region-not-supported",
"status": "UNDELIV",
"error": "005",
"sub_error": "3505",
"sub_error_description": "SMS delivery to this region is not available for the operator."
}
No action is required on your part – these fields will simply be added to your existing DLR structure. However, these changes have expanded the data coming back inside of the send_status field, so if you are relying on send_status to be a specific set of values, be aware you will be seeing more statuses when this change is released.
If you'd like early access to these new fields before October 15th, please reach out to our Customer Support team at support@commio.com and we'll be happy to get you set up.
If you have any questions in the meantime, don't hesitate to reach out.
A mapping of DLR error codes is below.
| send_status | status | error | sub_error_description | sub_error |
| delivered | DELIVRD | 000 | The message was delivered | 000 |
| expired | EXPIRED | 003 | The message has expired | 003 |
| deleted | DELETED | 004 | The message was deleted | 004 |
| undelivered | UNDELIV | 005 | The message was not delivered | 005 |
| sent | SENT | 100 | The message was sent. | 100 |
| accepted | ACCEPTED | 110 | The message was accepted. | 110 |
| unregistered | REJECTED | 600 | The destination address is unregistered or unverified. | 600 |
| opt-out-filtered | REJECTED | 700 | The destination address has opted out of communication with this source address. | 700 |
| content-filtered | REJECTED | 800 | The message has been filtered based on the content | 800 |
| carrier-blocked | CARRIER_BLOCKED | 900 | The message was blocked by the carrier | 900 |
| user-network-protocol-error | EXPIRED | 003 | Message was aborted by a network peer due to a network protocol error. | 1302 |
| network-protocol-error | UNDELIV | 005 | General network protocol error caused by incompatible operator network protocol versions or parameters between network components. | 1501 |
| general-undelivered | UNDELIV | 005 | Indicates a failure in delivering an SMS to the recipient, possibly due to unavailability, memory capacity issues, or temporary communication issues. | 1502 |
| unknown-subscriber | UNDELIV | 005 | Typically, this indicates that the subscriber or recipient of the message is unknown or not recognized by the network. | 1503 |
| user-out-of-credit | UNDELIV | 005 | The end user is out of prepaid credit and cannot receive the message. | 1504 |
| unreachable-destination | EXPIRED | 003 | Indicates that the destination number is unreachable. For example, the destination is powered off or out of the service area. | 1505 |
| service-not-provisioned | UNDELIV | 005 | The destination address does not support the requested service. For example, MMS or SMS | 1506 |
| authentication-failed | UNDELIV | 005 | Indicates the mobile station failed authentication, often due to the subscriber's number being blocklisted. | 1507 |
| system-failure | UNDELIV | 005 | Indicates a system failure. | 1508 |
| receiver-rejected | UNDELIV | 005 | ESME receiver rejected the message | 1509 |
| receiver-app-error | UNDELIV | 005 | ESME receiver temporary app error | 1510 |
| Receiver-app-error-permanent | UNDELIV | 005 | ESME receiver permanent app error. | 1511 |
| message-canceled | EXPIRED | 003 | The request was received, but has not been sent to the next instance within its validity period and has expired with the appropriate error code, or the same error code was reverted from the operator. | 2301 |
| destination-blocklist | UNDELIV | 005 | The destination number has been blocklisted at the operator's request | 2501 |
| invalid-pdu | UNDELIV | 005 | Invalid PDU format. | 2502 |
| message-flooding | UNDELIV | 005 | As per the flooding filter rule, you can send 6 messages with the same content to the same destination in one hour while or you can send up to 20 messages with different content to the same destination in a period of one hour. | 2503 |
| invalid-destination-address | UNDELIV | 005 | Invalid destination address. Unprovisioned number, deactivated number, owner out of funds, invalid from address for phone type, etc. | 2504 |
| content-blocked | UNDELIV | 005 | User has opted out of sent content. Can be messaged after user opts back in to sent content. | 2505 |
| invalid-source-address | UNDELIV | 005 | Invalid source address. | 2506 |
| spam-rejected | UNDELIV | 005 | The message was detected as spam and will not be delivered | 2507 |
| message-too-long | UNDELIV | 005 | The message provided is too long. | 2508 |
| quota-exceeded | UNDELIV | 005 | Content provider service quota has been exhausted | 2509 |
| invalid-scheduled-delivery-time | UNDELIV | 005 | The provided scheduled delivered time is invalid. | 2510 |
| tf-number-not-verified | UNDELIV | 005 | The source toll free number is not verified. | 2511 |
| general-rejected | UNDELIV | 005 | The message has been rejected | 2512 |
| source-carrier-invalid | UNDELIV | 005 | The source carrier is invalid | 2513 |
| destination-carrier-invalid | UNDELIV | 005 | The destination carrier is invalid | 2514 |
| invalid-priority-flag | UNDELIV | 005 | Invalid priority flag. | 2515 |
| invalid-message-id | UNDELIV | 005 | The message ID is invalid | 2516 |
| failed-to-cancel | UNDELIV | 005 | Message failed to cancel | 2517 |
| failed-to-replace | UNDELIV | 005 | Message failed to be replaced | 2518 |
| invalid-submit-to-distribution-list | UNDELIV | 005 | Invalid submit to distribution list. | 2519 |
| invalid-source-ton | UNDELIV | 005 | Invalid Source Address Type of Number (TON) | 2520 |
| invalid-source-npi | UNDELIV | 005 | Invalid Source Address Numbering Plan (NPI) | 2521 |
| invalid-destination-ton | UNDELIV | 005 | Invalid Destination Address Type of Number (TON) | 2522 |
| invalid-destination-npi | UNDELIV | 005 | Invalid Destination Address Numbering Plan (NPI) | 2523 |
| recipient-address-blocked | UNDELIV | 005 | Recipient address is blocked or is not provisioned. | 3501 |
| operator-not-found | UNDELIV | 005 | Mobile operator not found for the destination address. | 3502 |
| short-code-operator-blocked | UNDELIV | 005 | The operator is preventing the destination from receiving messages from shortcodes. | 3503 |
| region-not-supported | UNDELIV | 005 | SMS delivery to this region is not available for the operator. | 3505 |
| smpp-undelivered | UNDELIV | 005 | The error is of a reserved type. | 3505 |
| submit-failed | UNDELIV | 005 | Received error on submission | 3506 |
| source-carrier-disabled | UNDELIV | 005 | Source carrier is disabled | 3507 |
| destination-carrier-disabled | UNDELIV | 005 | Destination carrier is disabled | 3508 |
| no-valid-route | UNDELIV | 005 | No valid route found for message. | 3509 |
| route-denied | UNDELIV | 005 | Route for message was denied. | 3510 |
| error-sending-address-unresolved | UNDELIV | 005 | Invalid Recipient MDN | 2524 |
| error-sending-address-unresolved | UNDELIV | 005 | Invalid MDN Format | 2525 |
| error-sending-address-unresolved | UNDELIV | 005 | Invalid Recipient MDN | 2526 |
| error-unspecified | UNDELIV | 005 | Invalid MDN length | 2527 |
| error-message-format-corrupt | UNDELIV | 005 | Invalid Message Format Or Text Msg content size exceeded | 2528 |
| error-content-not-accepted | UNDELIV | 005 | Message Size exceeds size accepted by Recipient Carrier | 3511 |
| error-sending-address-unresolved | UNDELIV | 005 | MDN is not active for A2P 10DLC for the destination | 3512 |
| error-unspecified | UNDELIV | 005 | Route Not Open Between Sender and Recipient Carrier | 3513 |
| error-sending-address-unresolved | UNDELIV | 005 | Invalid Sender MDN | 3514 |
| error-content-not-accepted | UNDELIV | 005 | Message Size exceeds size accepted by Recipient Carrier | 3515 |
| error-sending-address-unresolved | UNDELIV | 005 | MDN is not active for A2P 10DLC for the destination | 3516 |
| error-unspecified | UNDELIV | 005 | Sender MDN is blocked by Velocity Spam | 3517 |
| error-unspecified | UNDELIV | 005 | Recipient MDN is blocked by Velocity Spam | 3518 |
| error-unspecified | UNDELIV | 005 | Sender MDN and Recipient MDN are blocked by Velocity Spam | 3519 |
| error-unspecified | UNDELIV | 005 | Sender MDN is blocked by Msg Trust Spam | 3520 |
| error-unspecified | UNDELIV | 005 | Sender MDN is blocked by Media Scanning Spam check | 3522 |
| error-unspecified | UNDELIV | 005 | Velocity Spam Recipient MDN is Blocked | 3523 |
| error-unspecified | UNDELIV | 005 | Velocity Spam Sender MDN is Blocked | 3524 |
| error-unspecified | UNKNOWN | 007 | Internal Error | 3701 |
| error-campaign-blocked | UNDELIV | 005 | Campaign Blocked by Operator | 3526 |
| error-content-not-downloaded | UNDELIV | 005 | Content Cannot Be Downloaded on Handset | 1512 |
| error-unspecified | UNDELIV | 005 | An invalid response has been received | 1514 |
| invalid-client-network | UNDELIV | 005 | Invalid client network | 3527 |
| msg-operator-rejected | UNDELIV | 005 | RCS Business Messaging not enabled on device. | 4501 |
Comments