SMPP Protocol

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.

Protocol Operations and Protocol Data Units

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.

Example of an SMPP session

SMPP session illustrationSMPP session illustration mobile

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 categories

OperationPurpose
Session ManagementEnable the establishment of SMPP sessions between an ESME and MC and provide means of handling unexpected errors.
Message SubmissionSubmission of messages from ESME(s) to the MC.
Message DeliveryEnable an MC to deliver messages to the ESME.
Message BroadcastProvide Cell Broadcast service within a Message Centre.
Ancillary OperationsProvide enhanced features: cancellation, query, message replacement etc.

SMPP PDU Example: Send SMS

submit_sm
BytesFieldMeaning
Protocol Data Unit header
00000048Length72 bytes
00000004Command IDSUBMIT_SM
00000000Command Statusn/a
00000002Sequence Number2
Protocol Data Unit body
00Service Typenull (none specified)
05Source Address TONAlphanumeric
00Source Address NPINone / Unknown
4d656c726f73654c616273300Source AddressMelroseLabs
01Destination Address TONInternational
01Destination Address NPIISDN
343433373333313332333334333533363337333830300Destination Address447712345678
00ESM Class0
00Protocol ID0
00Priority Flag0
00Schedule Delivery TimeDeliver immediately
00Validity PeriodSMSC default validity
01Registered DeliverySMSC delivery receipt requested
00Replace If Present Flag0
00Data CodingDefault character set
00Short Message Default Msg ID0
10Short Message Length16 bytes
48656c6c6f20576f726c6420e282ac01b650201Short MessageHello 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
00Replace If Present Flag0
00Data CodingDefault character set
submit_sm_resp
BytesFieldMeaning
Protocol Data Unit header
00000051Length81 bytes
80000004Command IDSUBMIT_SM
00000000Command Statusn/a
00000002Sequence Number2
Protocol Data Unit body
303935373261306130396263373366326539306539333862633665613863613264636630636434356234303938316534363239663834303535343765613331Message ID09572a0a09bc73f2e90e938bc6ea8ca2dcf0cd45b40981e4629f8405547ea31

SMPP Commands

Command IDValuePurpose
bind_receiver0x00000001Establish a receiver bind.
bind_receiver_resp0x80000001
bind_transmitter0x00000002Establish a transmitter bind.
bind_transmitter_resp0x80000002
query_sm0x00000003Query status of previously submitted message.
query_sm_resp0x80000003
submit_sm0x00000004Submit message to the Message Center for onward delivery to mobile / short message entity (SME).
submit_sm_resp0x80000004
deliver_sm0x00000005Send message to ESME from MC (typically delivery receipt or mobile originated SMS).
deliver_sm_resp0x80000005
unbind0x00000006Unbind from MC and close SMPP session
unbind_resp0x80000006
replace_sm0x00000007Replace a previously submitted message that is pending delivery.
replace_sm_resp0x80000007
cancel_sm0x00000008Cancel delivery of previously submitted message(s).
cancel_sm_resp0x80000008
bind_transceiver0x00000009Establish a transceiver bind.
bind_transceiver_respbind_transceiver_resp
outbind0x0000000BRequest ESME to bind (sent by MC).
outbind_resp0x8000000B
enquire_link0x00000015Initiate a check to confirm ESME/MC is still reachable.
enquire_link_resp0x80000015
submit_multi0x00000021Submit message to the Message Center for onward delivery to multiple mobiles / short message entities (SME).
submit_multi_resp0x80000021
alert_notification0x00000102Indicate to ESME that mobile subscriber has become available.
data_sm0x00000103Submit packet to MC for onward delivery to SME or from MC to ESME.
data_sm_resp0x80000103
broadcast_sm0x00000111Submit message to the Message Center for onward delivery to mobiles in a specified geographical area or set of areas.
broadcast_sm_resp0x80000111
query_broadcast_sm0x00000112Query status of previously submitted broadcast message.
query_broadcast_sm_resp0x80000112
cancel_broadcast_sm0x00000113Cancel delivery of previously submitted broadcast message.
cancel_broadcast_sm_resp0x80000113
generic_nack0x80000000Acknowledge unrecognized or corrupt PDU.
Reserved0x00010200-0x000102FF
0x80010200-0x800102FF
Reserved for MC vendors to define.

For more info visit https://smpp.org.

Last updated: 24 Nov 2025