Ogave

Home / SMPP error codes

SMPP error codes: Every command_status, what it means and what to do

Every SMPP response (submit_sm_resp, bind_transceiver_resp…) carries a command_status. 0 means success; anything else is an error code defined by SMPP 3.4 or by the server vendor. This table lists the codes gateways actually return, what they mean and what to do about each.

How to read a command_status

The value is a 32-bit integer, usually logged in hex (0x00000058) or decimal (88). Codes 0x00000000–0x000000FF are defined by the SMPP 3.4 specification; 0x00000400–0x000004FF are reserved for vendor-specific errors, so check your provider's documentation for those.

A non-zero command_status on submit_sm_resp means the message was not accepted: it was not sent and, on most platforms, not charged. A delivery problem after acceptance is reported later in a delivery receipt, not as a command_status.

Errors you should retry

Only a few codes are temporary: ESME_RTHROTTLED (0x58), ESME_RMSGQFUL (0x14), ESME_RSYSERR (0x08) and ESME_RX_T_APPN (0x64). Retry them with a growing delay. Retrying any other code without changing the request returns the same error.

All codes

HexDecimalNameMeaningWhat to do
0x000000000ESME_ROKNo errorNothing: the message was accepted.
0x000000011ESME_RINVMSGLENMessage length is invalidCheck the encoding and the length of short_message (max 254 octets; longer texts go in message_payload or as concatenated parts).
0x000000022ESME_RINVCMDLENCommand length is invalidThe PDU is malformed: check the client library or the PDU encoder.
0x000000033ESME_RINVCMDIDInvalid command IDThe server does not support this command (e.g. submit_multi or query_sm): use submit_sm.
0x000000044ESME_RINVBNDSTSIncorrect bind status for this commandBind as transmitter or transceiver to submit, as receiver or transceiver to get receipts.
0x000000055ESME_RALYBNDAlready boundThe session is already bound: do not send a second bind on the same connection.
0x000000066ESME_RINVPRTFLGInvalid priority flagUse priority_flag 0 to 3 (most gateways ignore it: send 0).
0x000000077ESME_RINVREGDLVFLGInvalid registered delivery flagUse registered_delivery 0 (no receipt) or 1 (receipt on success and failure).
0x000000088ESME_RSYSERRSystem errorA temporary problem on the server side: retry later with back-off; contact support if it persists.
0x0000000A10ESME_RINVSRCADRInvalid source addressCheck the sender: alphanumeric max 11 characters (TON 5, NPI 0), or a number in international format (TON 1, NPI 1).
0x0000000B11ESME_RINVDSTADRInvalid destination addressSend the number in international format without "+" or leading zeros (TON 1, NPI 1).
0x0000000C12ESME_RINVMSGIDMessage ID is invalidThe message_id does not exist or is not yours (query_sm / cancel_sm).
0x0000000D13ESME_RBINDFAILBind failedCheck system_id, password, the allowed IP addresses and how many binds the account may open.
0x0000000E14ESME_RINVPASWDInvalid passwordCheck the password of the SMPP account (case-sensitive, max 8 characters on many servers).
0x0000000F15ESME_RINVSYSIDInvalid system IDCheck the system_id of the SMPP account.
0x0000001117ESME_RCANCELFAILCancel SM failedThe message could not be cancelled (already sent or not found).
0x0000001319ESME_RREPLACEFAILReplace SM failedThe message could not be replaced (already sent or not found).
0x0000001420ESME_RMSGQFULMessage queue fullSlow down and retry: the server queue is full.
0x0000001521ESME_RINVSERTYPInvalid service typeLeave service_type empty unless your provider gave you a value.
0x0000003351ESME_RINVNUMDESTSInvalid number of destinationssubmit_multi: check number_of_dests.
0x0000003452ESME_RINVDLNAMEInvalid distribution list namesubmit_multi: check the distribution list name.
0x0000004064ESME_RINVDESTFLAGInvalid destination flagsubmit_multi: dest_flag must be 1 (address) or 2 (list).
0x0000004266ESME_RINVSUBREPInvalid submit with replaceSet replace_if_present_flag to 0.
0x0000004367ESME_RINVESMCLASSInvalid esm_class fieldUse esm_class 0, or 0x40 when the text carries a UDH (concatenated parts).
0x0000004468ESME_RCNTSUBDLCannot submit to distribution listSubmit to single numbers.
0x0000004569ESME_RSUBMITFAILsubmit_sm or submit_multi failedThe server refused the message (route, balance or content): check the account and retry later.
0x0000004872ESME_RINVSRCTONInvalid source address TONAlphanumeric sender: TON 5; international number: TON 1.
0x0000004973ESME_RINVSRCNPIInvalid source address NPIAlphanumeric sender: NPI 0; international number: NPI 1.
0x0000005080ESME_RINVDSTTONInvalid destination address TONUse TON 1 (international).
0x0000005181ESME_RINVDSTNPIInvalid destination address NPIUse NPI 1 (ISDN / E.164).
0x0000005383ESME_RINVSYSTYPInvalid system_type fieldLeave system_type empty unless your provider gave you a value.
0x0000005484ESME_RINVREPFLAGInvalid replace_if_present flagSet replace_if_present_flag to 0.
0x0000005585ESME_RINVNUMMSGSInvalid number of messagesCheck the request parameters.
0x0000005888ESME_RTHROTTLEDThrottling error (too many messages per second)Send slower than the speed of your account, or spread the traffic over more binds if allowed; retry the refused messages.
0x0000006197ESME_RINVSCHEDInvalid scheduled delivery timeUse the SMPP absolute (YYMMDDhhmmsstnnp) or relative (…R) time format, or leave it empty.
0x0000006298ESME_RINVEXPIRYInvalid validity periodUse the SMPP time format, or leave it empty for the default validity.
0x0000006399ESME_RINVDFTMSGIDPredefined message invalid or not foundSet sm_default_msg_id to 0.
0x00000064100ESME_RX_T_APPNReceiver temporary application errorTemporary: retry later.
0x00000065101ESME_RX_P_APPNReceiver permanent application errorPermanent: do not retry this message as it is.
0x00000066102ESME_RX_R_APPNReceiver reject message errorThe message was refused: do not retry it as it is.
0x00000067103ESME_RQUERYFAILquery_sm request failedThe message could not be queried (unknown or too old).
0x000000C0192ESME_RINVOPTPARSTREAMError in the optional part of the PDU bodyA TLV is malformed: check the client library.
0x000000C1193ESME_ROPTPARNOTALLWDOptional parameter not allowedRemove the TLV the server does not accept.
0x000000C2194ESME_RINVPARLENInvalid parameter lengthA TLV has a wrong length: check the client library.
0x000000C3195ESME_RMISSINGOPTPARAMExpected optional parameter missingAdd the TLV the server requires (see the provider documentation).
0x000000C4196ESME_RINVOPTPARAMVALInvalid optional parameter valueCheck the value of the TLVs you send.
0x000000FE254ESME_RDELIVERYFAILUREDelivery failure (data_sm_resp)The message could not be delivered: see the receipt or retry later.
0x000000FF255ESME_RUNKNOWNERRUnknown errorAn unspecified error on the server: contact support with the message ID and the time.

Frequently asked questions

What does ESME_RTHROTTLED (0x58) mean?

You are sending faster than the speed allowed for your account. Slow down to that speed (or spread traffic across the binds you are allowed) and resend the refused messages.

Is a message with an error code charged?

A message refused with a non-zero command_status was not accepted, so on most platforms it is not charged. Check your provider's terms.

Why do I get ESME_RINVDSTADR (0x0B)?

The destination number is not in the format the server expects. Send it in international format, digits only, with TON 1 and NPI 1.

What is the difference between a command_status and a delivery receipt error?

command_status answers your request at once (accepted or not). A delivery receipt arrives later and says whether the accepted message reached the phone, with its own stat and err fields.

Read more

Talk to a technical team

We're a technical team. You'll talk to someone who understands SMPP, wholesale routing, and carrier interconnects. Technical proposal in under 24 hours.

Technical email: Email address