The Decision Most Teams Get Wrong
Most developers default to HTTP API. Most telecoms engineers default to SMPP. The right choice is actually based on your specific requirements, and a surprising number of teams get it backwards — they use SMPP when HTTP would be simpler, or HTTP when SMPP is essential.
Let's go through this properly.
HTTP REST API: What It Is and How It Works
The HTTP REST API treats SMS sending like any other web API call. You send a POST request with your authentication, recipient, sender, and message body. You get a response with a message ID. If you want delivery confirmation, you either poll an endpoint or receive a webhook callback.
POST https://app.bulksmsrates.com/v2/messages
Authorization: Bearer your_api_key
{
"to": "+447912345678",
"from": "MYSHOP",
"body": "Your order is on its way. Track: example.com/track/123"
}
That's it. If you can make an HTTP request, you can send SMS. The full API docs cover everything else — batch sending, DLR webhooks, number lookup.
Where HTTP API genuinely excels:
Simple integration. Any language with an HTTP client (which is all of them) works out of the box. No libraries specific to SMS, no persistent connections to manage, no binary protocol parsing.
Horizontal scaling. Because each request is stateless, you can run 100 application servers all calling the API simultaneously without coordination. This works beautifully with serverless (AWS Lambda, Cloudflare Workers) and modern containerised deployments.
Debugging. JSON requests and responses are human-readable. You can replay a call with curl, inspect it in a network tab, log it cleanly. Binary SMPP PDUs require special tooling.
The real limitations of HTTP:
Throughput ceiling. Even with connection pooling, HTTP overhead (TCP handshake, TLS, headers) adds latency per request. At 1,000 messages/second, that overhead accumulates. Most platforms rate-limit HTTP API to 100–500 requests/second per key.
Cost of connection. Each HTTPS request has overhead that SMPP doesn't. For very high volumes, this matters.
Stateless delivery reporting. DLRs arrive as webhook POST callbacks to a URL you specify. You need an endpoint to receive them, infrastructure to process them asynchronously, and a way to match callback message IDs to your original sends.
SMPP v3.4: What It Is and How It Works
SMPP (Short Message Peer-to-Peer) protocol version 3.4 is the industry standard for interconnecting SMS systems. It uses a persistent TCP connection. You bind once (authenticating with system_id and password), then submit messages using binary PDUs over the same connection until you unbind or the connection drops.
The flow looks like:
- 1.Open TCP connection to SMSC
- 2.Send
bind_transceiverPDU (authentication) - 3.Receive
bind_transceiver_resp(success/failure) - 4.Submit messages via
submit_smPDUs - 5.Receive
submit_sm_respfor each (immediate acknowledgement) - 6.Receive
deliver_smPDUs for delivery reports and inbound messages - 7.Send
enquire_linkevery 30–60 seconds to keep connection alive - 8.Eventually send
unbindPDU to close cleanly - •You're integrating SMS for the first time
- •You send fewer than 100 messages/second peak
- •You're using serverless or containerised infrastructure
- •Your team is web developers, not telecoms engineers
- •You want to ship quickly
- •You're processing 100+ messages/second sustained
- •You need sub-10ms per-message latency (OTP platforms, real-time alerts)
- •You're building a platform that aggregates SMS (reselling, white-label)
- •Your team already works with carrier-grade systems
- •DLR handling needs to be synchronous with message flow
The binary nature means less per-message overhead. Message submission takes ~2–5ms vs 50–200ms for HTTP.
Where SMPP genuinely excels:
Throughput. A single SMPP bind can sustain hundreds of messages per second. Multiple binds (running 4–8 simultaneous connections) can push thousands of messages per second. This is what you need for bulk campaign sending at scale.
Native DLR handling. Delivery reports arrive as deliver_sm PDUs on the same connection. No webhooks, no polling, no separate infrastructure. The DLR handling is symmetric with message submission.
Latency. When you're sending 10,000 OTPs triggered by user actions (login attempts, transactions), the 2–5ms per message latency of SMPP vs 100–200ms for HTTP is meaningful.
The real limitations of SMPP:
Connection management complexity. You need to handle: connect/reconnect logic (networks drop connections), keepalive enquire_link PDUs, window size (outstanding unacknowledged PDUs), error PDU handling, bind throttling.
This isn't rocket science, but it's not zero work either. You need an SMPP library for your language. Good ones exist for Python (smpplib), Java (CloudHopper), Node.js (node-smpp), and PHP.
Not serverless-friendly. Persistent TCP connections and serverless functions don't mix well. You'd need a dedicated SMPP connection pool service running alongside serverless functions — which adds infrastructure.
Binary debugging. When something goes wrong with SMPP, you need Wireshark or an SMPP-specific tool to see what's happening. You can't just read the request in a network tab.
The Real Performance Numbers
Based on our infrastructure data:
| Metric | HTTP API | SMPP (single bind) | SMPP (4 binds) |
|---|---|---|---|
| Max throughput | ~200 msg/sec | ~400 msg/sec | ~1,600 msg/sec |
| Per-message latency | 80–200ms | 3–8ms | 3–8ms |
| Connection setup | Per request | Once | Once |
| DLR delivery method | Webhook | Native PDU | Native PDU |
| Min infra needed | HTTP client | TCP + SMPP lib | TCP + SMPP lib |
For the SMPP gateway specifically, we support up to 16 simultaneous binds per account, giving very high throughput headroom for enterprise workloads.
Decision Framework
Start with HTTP API if:
Move to SMPP if:
The hybrid pattern — HTTP for low-volume transactional and admin, SMPP for bulk campaign sends — is common among our larger customers and genuinely makes sense. Use the right tool for each job.
Integration Time Estimates
HTTP API first integration: 30 minutes to first sent message with basic API calls. A full production integration with DLR webhook handling, error retries, and monitoring: 1–2 days.
SMPP first integration: 2–4 hours to first sent message using an SMPP library. A production-ready integration with reconnect logic, window management, and DLR handling: 3–5 days.
Neither is particularly complex for an experienced engineer, but the gap is real.
A Note on Providers
Some providers offer HTTP API but not SMPP, or SMPP but not HTTP API. If you're building a system that might need both — or if you want to test one and move to the other — check that your provider offers both on the same account.
BulkSMSRates supports both protocols on all account tiers, and DLR data is consistent between them (same message IDs, same status codes). You can switch between protocols without changing your message tracking infrastructure.