Binding is the first thing you do, and the first thing to get right
Before an SMPP session can send a single message, it has to *bind* to the SMSC: establish and authenticate the connection. The very first parameter of that bind decides what the session can do: send, receive, or both. Choosing the wrong SMPP bind type is a classic early mistake. Its symptom often isn't an error but an absence: messages send fine, yet delivery reports never arrive, and you spend hours hunting a bug that's really just a bind you set up one-directionally. Get the bind type right and the rest of the SMPP integration has a solid foundation. For the authoritative reference, see the SMPP v3.4 specification. The official SMPP v3.4 specification is available as a PDF from the SMPP Forum at https://smpp.org/SMPP_v3_4_Issue1_2.pdf.
There are three bind types. They map cleanly to what you need, and modern practice has a clear default. Here's the whole decision.
The three bind types
| Bind type | Can send? | Can receive? | Use when |
|---|---|---|---|
| bind_transmitter | Yes | No | You only send, and don't need DLRs or inbound (rare) |
| bind_receiver | No | Yes | You only receive — DLRs and inbound messages |
| bind_transceiver | Yes | Yes | You send AND receive on one connection (the modern default) |
The key fact that catches people: to receive delivery reports, you must bind as a receiver or a transceiver. A transmitter-only bind cannot get them. Since almost every real integration wants both to send messages and to know whether they were delivered, that rules the transmitter-only bind out for most use cases and points straight at the transceiver.
Modern implementations mostly use bind_transceiver for simplicity: one connection that both sends and receives, rather than managing a separate transmitter and receiver pair. Unless you have a specific reason to split them, transceiver is the right default.
When you'd split transmitter and receiver
The transceiver default works for most people, but sometimes you need separate transmitter and receiver binds. Knowing why helps you decide when the extra complexity is worth it, and when it's just extra work.
- Independent scaling: high-volume senders sometimes want multiple transmitter binds for outbound throughput while a single receiver handles DLRs, scaling the two directions separately.
- Separation of concerns: some architectures keep the sending service and the DLR-processing service as distinct processes, each with its own bind, so a failure in one doesn't affect the other.
- Provider constraints: occasionally an SMSC's bind limits or configuration make separate binds the practical setup; check your provider's connection rules.
- Legacy compatibility: older systems built before transceiver was ubiquitous may still use the split model.
If you're building a standard send-and-track-delivery flow, a single transceiver bind is simpler, uses fewer connections, and avoids coordination headaches.
Getting the bind to succeed
- Choose transceiver unless you have a reason not toOne bind, both directions, delivery reports included. This is the default that fits most integrations and the least to get wrong.
- Set registered_delivery to actually get DLRsBinding as a receiver/transceiver enables receiving DLRs, but you also request them per message via the registered_delivery field. The DLR format guide covers the details.
- Get the bind credentials and connection rightBind failures are almost always config: wrong system_id/password, un-whitelisted IP, wrong port, or too many concurrent binds. The causes in our SMPP error codes guide. Fix the specific cause; don't loop.
- Handle enquire_link keepalivesKeep the bound session alive with periodic enquire_link PDUs, and reconnect-and-rebind on disconnect, so your transceiver stays up rather than silently dropping.
SMSRoute is a no-KYC SMS API with crypto billing (BTC, ETH, USDT, XMR, LTC, and SOL) and supports SMPP binds for high-throughput sending alongside REST. Whichever transport you u
Related reading
FAQ
What are the SMPP bind types?
Which SMPP bind type do I need for delivery reports?
Should I use bind_transceiver or separate binds?
Why do my SMS send but I get no delivery reports over SMPP?
Send your first SMS in 5 minutes
No KYC. Pay with BTC, ETH, USDT, XMR, LTC, and SOL. Live routes to 149 countries.
Get an API key →