BroadNet
Protocols BroadNet answer

SMPP 3.4 vs SMPP 5.0 — what changed and what to use

Last reviewed 1 min readReviewed by BroadNet engineering
Quick answer

SMPP 3.4 (1999) is still the SMS interconnect protocol that runs almost every A2P bind in production today. SMPP 5.0 (2003) added Unicode-clean headers, broadcast and cell-broadcast support, and TLVs for richer message classes — but most SMSCs and aggregators never moved to it. If you are picking today, bind to SMPP 3.4 over TLS unless your counterparty specifically asks for 5.0.

Plain-language definitionVendor-neutralReviewed September 30, 2026
DiagramAn SMPP session between your platform and BroadNet
Your platform (ESME)
BroadNet SMSC
One persistent TCP/TLS connection
  1. bind_transceiverOpen and authenticate the session
  2. bind_transceiver_respSession accepted
  3. submit_smSend a message
  4. submit_sm_respAccepted, message ID returned
  5. deliver_smDelivery receipt or inbound message
  6. deliver_sm_respAcknowledged
  7. enquire_linkKeepalive while idle
The long answer

Everything worth knowing, nothing that isn't.

§01

Why 3.4 won the install base

SMPP 3.4 shipped at the same moment SMS A2P took off. Every major SMSC vendor built deep, stable 3.4 implementations. The protocol is small (about 30 PDU types, eight commands you ever send), well-understood, and survives every NAT and firewall in the path. Twenty-seven years later, the SMPP 3.4 specification is still the protocol pinned at the top of every A2P interconnect contract.

§02

What 5.0 added

SMPP 5.0 cleaned up several rough edges: native UTF-8 message_payload, a proper service_type registry, broadcast_sm / query_broadcast_sm / cancel_broadcast_sm for cell broadcast, optional billing TLVs, and tighter congestion control with congestion_state. It also introduced the concept of message_state machines that the SMSC can drive on behalf of the ESME.

§03

Why almost nobody runs 5.0

Three reasons. First, SMSC vendors didn't get paid to upgrade — operators already had working 3.4 stacks. Second, the cell-broadcast use case 5.0 targeted went to dedicated cell broadcast centres (CBCs), not SMSCs. Third, the things 5.0 fixed (Unicode handling, billing TLVs) are usually solved at the application layer with TLVs on top of 3.4. The result: at BroadNet we have one 5.0 bind in production. We have over 1,000 active 3.4 binds.

§04

Practical advice

Bind as a transceiver over SMPP 3.4, with TLS on the port provided with your account. Use submit_sm with message_payload TLV for long messages (instead of UDH concatenation) when the receiving SMSC supports it. Negotiate enquire_link every 30 seconds, unbind cleanly. If your aggregator forces 5.0, ask why — there is no deliverability benefit on commercial A2P routes.

SMPP 3.4 vs SMPP 5.0 at a glance

SMPP 3.4SMPP 5.0
Released19992003
Production install baseNearly every A2P bindRare — seldom deployed
Native Unicode header—
Cell / broadcast support—
Congestion controlBasiccongestion_state signalling
Deliverability benefitBaselineNone on commercial A2P routes
Recommended todayYes — transceiver over TLSOnly if a counterparty requires it
BNWritten by the BroadNet engineering team·Operating carrier-grade messaging since 2003, headquartered in Dubai·Editorial standards
FAQ

Frequently asked questions

Should I use SMPP 5.0 for a new integration?
Almost never. Bind SMPP 3.4 over TLS unless a specific counterparty requires 5.0. The install base, tooling, and operator support all sit on 3.4, and 5.0 offers no deliverability advantage on commercial A2P routes.
Does SMPP 5.0 deliver messages better than 3.4?
No. Deliverability is a function of the operator route, not the SMPP version. The things 5.0 improved (Unicode headers, billing TLVs) are typically handled at the application layer on top of 3.4.
How do I send Arabic or emoji over SMPP 3.4?
Set data_coding to UCS-2 (0x08), or carry the body in a message_payload TLV. 3.4 handles Unicode content fine; you do not need 5.0 for it.
What bind type and port should I use?
A transceiver bind over TLS is the standard for A2P — it sends submit_sm and receives DLRs on one socket. BroadNet offers SMPP 3.4 binds; the host, port and credentials are provided with your test access.
Build with this

Need help wiring this up?

The pages below are the products and integration guides that put this concept on the wire. If you'd rather walk through it live, our engineering team takes calls same-day during MENA working hours.

Talk to our engineering team
Feedback

Was this answer helpful?

Your vote helps us prioritise which answers to expand with examples, diagrams, and code snippets.

Was this answer helpful?
Thanks — noted. We'll keep this answer maintained.
Got it. Tell us what was missing — send a quick note.

How we write and review content

Still need help?

Talk to a real engineer about your build.

We reply within one business day, and production accounts get 24/7 support. Our solutions engineers ship code, not scripts.

$ curl -X POST https://api.broadnet.me/sms/sendSms
Response SLA
Test-access requestsReply within 1 business day
Production24 / 7 · < 15 min
Operator NOC24 / 7 · pager