SMPP (Short Message Peer-to-Peer) is an open, industry-standard protocol that enables flexible communication of short message data between External Short Message Entities (ESMEs), Routing Entities (REs), and Message Centres (MCs). It allows applications (ESMEs) to send SMS messages to mobile devices and receive SMS from them.
The SMPP protocol consists of operations in the form of request and response Protocol Data Units containing SMPP commands. For example, an ESME sending a message uses a submit_sm Protocol Data Unit to the MC, which replies with submit_sm_resp to indicate success or failure. Similarly, when an MC delivers a message, it sends a deliver_sm Protocol Data Unit to the ESME, which responds with deliver_sm_resp to acknowledge delivery.


Some operations are specific to ESMEs, others to MCs, and some depend on the session type. For example, an ESME can send submit_sm to an MC only over a Transmitter or Transceiver session, while an MC can send deliver_sm Protocol Data Units only to ESMEs with Receiver or Transceiver sessions.
| Operation | Purpose |
|---|---|
| Session Management | Enable the establishment of SMPP sessions between an ESME and MC and provide means of handling unexpected errors. |
| Message Submission | Submission of messages from ESME(s) to the MC. |
| Message Delivery | Enable an MC to deliver messages to the ESME. |
| Message Broadcast | Provide Cell Broadcast service within a Message Centre. |
| Ancillary Operations | Provide enhanced features: cancellation, query, message replacement etc. |
| Bytes | Field | Meaning |
|---|---|---|
| Protocol Data Unit header | ||
| 00000048 | Length | 72 bytes |
| 00000004 | Command ID | SUBMIT_SM |
| 00000000 | Command Status | n/a |
| 00000002 | Sequence Number | 2 |
| Protocol Data Unit body | ||
| 00 | Service Type | null (none specified) |
| 05 | Source Address TON | Alphanumeric |
| 00 | Source Address NPI | None / Unknown |
| 4d656c726f73654c616273300 | Source Address | MelroseLabs |
| 01 | Destination Address TON | International |
| 01 | Destination Address NPI | ISDN |
| 343433373333313332333334333533363337333830300 | Destination Address | 447712345678 |
| 00 | ESM Class | 0 |
| 00 | Protocol ID | 0 |
| 00 | Priority Flag | 0 |
| 00 | Schedule Delivery Time | Deliver immediately |
| 00 | Validity Period | SMSC default validity |
| 01 | Registered Delivery | SMSC delivery receipt requested |
| 00 | Replace If Present Flag | 0 |
| 00 | Data Coding | Default character set |
| 00 | Short Message Default Msg ID | 0 |
| 10 | Short Message Length | 16 bytes |
| 48656c6c6f20576f726c6420e282ac01b650201 | Short Message | Hello World €$£ Message is using Data Coding of 0 (i.e. the MC's default character set) which in this case is configured on the MC to be the GSM character set. Message encoding has following meaning: Hello World: 48656c6c6f20576f726c6420 SP: 20 €: 1b65 $: 02 £: 01 |
| 00 | Replace If Present Flag | 0 |
| 00 | Data Coding | Default character set |
| Bytes | Field | Meaning |
|---|---|---|
| Protocol Data Unit header | ||
| 00000051 | Length | 81 bytes |
| 80000004 | Command ID | SUBMIT_SM |
| 00000000 | Command Status | n/a |
| 00000002 | Sequence Number | 2 |
| Protocol Data Unit body | ||
| 303935373261306130396263373366326539306539333862633665613863613264636630636434356234303938316534363239663834303535343765613331 | Message ID | 09572a0a09bc73f2e90e938bc6ea8ca2dcf0cd45b40981e4629f8405547ea31 |
| Command ID | Value | Purpose |
|---|---|---|
| bind_receiver | 0x00000001 | Establish a receiver bind. |
| bind_receiver_resp | 0x80000001 | |
| bind_transmitter | 0x00000002 | Establish a transmitter bind. |
| bind_transmitter_resp | 0x80000002 | |
| query_sm | 0x00000003 | Query status of previously submitted message. |
| query_sm_resp | 0x80000003 | |
| submit_sm | 0x00000004 | Submit message to the Message Center for onward delivery to mobile / short message entity (SME). |
| submit_sm_resp | 0x80000004 | |
| deliver_sm | 0x00000005 | Send message to ESME from MC (typically delivery receipt or mobile originated SMS). |
| deliver_sm_resp | 0x80000005 | |
| unbind | 0x00000006 | Unbind from MC and close SMPP session |
| unbind_resp | 0x80000006 | |
| replace_sm | 0x00000007 | Replace a previously submitted message that is pending delivery. |
| replace_sm_resp | 0x80000007 | |
| cancel_sm | 0x00000008 | Cancel delivery of previously submitted message(s). |
| cancel_sm_resp | 0x80000008 | |
| bind_transceiver | 0x00000009 | Establish a transceiver bind. |
| bind_transceiver_resp | bind_transceiver_resp | |
| outbind | 0x0000000B | Request ESME to bind (sent by MC). |
| outbind_resp | 0x8000000B | |
| enquire_link | 0x00000015 | Initiate a check to confirm ESME/MC is still reachable. |
| enquire_link_resp | 0x80000015 | |
| submit_multi | 0x00000021 | Submit message to the Message Center for onward delivery to multiple mobiles / short message entities (SME). |
| submit_multi_resp | 0x80000021 | |
| alert_notification | 0x00000102 | Indicate to ESME that mobile subscriber has become available. |
| data_sm | 0x00000103 | Submit packet to MC for onward delivery to SME or from MC to ESME. |
| data_sm_resp | 0x80000103 | |
| broadcast_sm | 0x00000111 | Submit message to the Message Center for onward delivery to mobiles in a specified geographical area or set of areas. |
| broadcast_sm_resp | 0x80000111 | |
| query_broadcast_sm | 0x00000112 | Query status of previously submitted broadcast message. |
| query_broadcast_sm_resp | 0x80000112 | |
| cancel_broadcast_sm | 0x00000113 | Cancel delivery of previously submitted broadcast message. |
| cancel_broadcast_sm_resp | 0x80000113 | |
| generic_nack | 0x80000000 | Acknowledge unrecognized or corrupt PDU. |
| Reserved | 0x00010200-0x000102FF 0x80010200-0x800102FF | Reserved for MC vendors to define. |
For more info visit https://smpp.org.
Last updated: 24 Nov 2025