Messaging reference · SMPP

SMPP Protocol
& Error Codes

A practical reference for sessions, PDUs, receipts, throughput, status codes and resilient messaging operations.

Rightech SolutionsUpdated 15 September 2026Technical reference

Profile before assumption. SMPP implementations vary. Confirm the negotiated version, optional parameters, receipt format and provider-specific error mapping.

01

Session lifecycle

An ESME establishes TCP connectivity and binds as transmitter, receiver or transceiver. A transceiver can submit and receive on one session. Keepalive traffic commonly uses enquire_link; orderly closure uses unbind. Reconnection should use backoff and avoid duplicate submissions.

02

Essential PDUs

bind_transceiver

Authenticate and open a bidirectional session.

submit_sm

Submit a short message to the SMSC.

submit_sm_resp

Returns command status and, on acceptance, a provider message ID.

deliver_sm

Delivers a mobile-originated message or delivery receipt to the ESME.

data_sm

Transfers message data using TLV-oriented semantics where supported.

enquire_link

Checks that an idle SMPP session remains responsive.

unbind

Requests orderly session termination.

generic_nack

Reports an invalid or unsupported PDU header condition.

03

Delivery receipts

A successful submit_sm_resp means the SMSC accepted the submission; it does not prove handset delivery. A later receipt may report DELIVRD, EXPIRED, UNDELIV, REJECTD or another provider-defined state. Correlate the receipt message ID with the original submission and normalise formats cautiously.

04

Common command-status codes

0x00000000ESME_ROK

Request completed successfully.

0x00000001ESME_RINVMSGLEN

Message length is invalid.

0x00000002ESME_RINVCMDLEN

PDU command length is invalid.

0x00000003ESME_RINVCMDID

Command ID is invalid or unsupported.

0x00000004ESME_RINVBNDSTS

Command is not permitted in the current bind state.

0x00000005ESME_RALYBND

The session is already bound.

0x00000008ESME_RSYSERR

A system error occurred at the SMSC.

0x0000000AESME_RINVSRCADR

Source address is invalid.

0x0000000BESME_RINVDSTADR

Destination address is invalid.

0x0000000DESME_RBINDFAIL

Bind failed; verify credentials, bind type and source IP.

0x0000000EESME_RINVPASWD

Password is invalid.

0x0000000FESME_RINVSYSID

System ID is invalid.

0x00000014ESME_RMSGQFUL

The message queue is full.

0x00000045ESME_RSUBMITFAIL

The submit operation failed.

0x00000058ESME_RTHROTTLED

Submission rate exceeded the permitted limit.

These are common SMPP 3.4 values. Networks may return additional standard or vendor-specific codes; consult the provider profile before retrying or rerouting.

05

Windowing and throughput

Windowing permits several unanswered requests at once. Throughput depends on the agreed messages-per-second rate, response latency, window size and multipart segmentation. On throttling, slow down according to the provider policy; aggressive immediate retries can amplify congestion and create duplicates.

06

Operational checklist

  • Validate system_id, password, bind mode and source IP
  • Monitor bind state, enquire-link response and reconnect rate
  • Track sequence numbers and outstanding window depth
  • Normalise message IDs without losing the raw value
  • Separate submission acceptance from final delivery
  • Make retry rules status-aware and duplication-safe

Reference behaviour against the SMS Forum SMPP v3.4 specification and the exact bilateral provider profile in use.