SMPP v3.4 and HTTP API, one routing engine behind both
Aggregators bind over SMPP. Developers call a JSON endpoint. Either way you get the same routes, the same DLRs and the same account balance.
HTTP / REST API
HTTPS JSON API with API-key authentication. Single and bulk send, scheduling, DLR webhooks, inbound callbacks, balance and reporting endpoints.
- Single & batch send (up to 1,000 per call)
- Unicode, concatenation, flash, validity period
- Webhook or polling for delivery reports
- Idempotency keys for safe retries
SMPP v3.4
Carrier-grade SMPP for aggregators and platforms. Transmitter, receiver or transceiver binds with configurable throughput and DLR formats.
- Multiple binds per account, IP whitelisted
- GSM-7 / UCS-2, UDH concatenation
- Standard DLR with id, sub, dlvrd, stat, err
- TLS-wrapped SMPP on request
Send your first message
curl -X POST https://api.msguno.com/v1/sms \
-H "Authorization: Bearer $MSGUNO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"from":"MSGUNO","to":"+447700900123","text":"Hello from MSG UNO","type":"txn","dlr_url":"https://example.com/dlr"}'const res = await fetch("https://api.msguno.com/v1/sms", {
method: "POST",
headers: { "Authorization": "Bearer " + process.env.MSGUNO_API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ from: "MSGUNO", to: "+447700900123", text: "Hello from MSG UNO", type: "txn" })
});
console.log(await res.json()); // { message_id, status: "queued", parts: 1 }import os, requests
r = requests.post("https://api.msguno.com/v1/sms",
headers={"Authorization": f"Bearer {os.environ['MSGUNO_API_KEY']}"},
json={"from": "MSGUNO", "to": "+447700900123", "text": "Hello from MSG UNO", "type": "txn"})
print(r.json())$ch = curl_init("https://api.msguno.com/v1/sms");
curl_setopt_array($ch, [
CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer ".getenv("MSGUNO_API_KEY"), "Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode(["from"=>"MSGUNO","to"=>"+447700900123","text"=>"Hello from MSG UNO","type"=>"txn"]),
]);
echo curl_exec($ch);Host: smpp.msguno.com
Port: 2775 (TLS: 3550)
Bind: transceiver system_id / password issued per account
Throughput: agreed per bind (e.g. 50 msg/s), window 10
Encoding: data_coding 0 (GSM-7), 8 (UCS-2); UDH for concatenation
DLR: registered_delivery=1 → deliver_sm with
id:… sub:001 dlvrd:001 submit date:… done date:… stat:DELIVRD err:000
Keep-alive: enquire_link every 30 s
Source IPs: whitelisted per bind — send yours to info@msguno.comEndpoints
| Method | Endpoint | Purpose |
|---|---|---|
POST | /v1/sms | Send a single message. Fields: from, to, text, type (otp | txn | mkt), dlr_url, validity, schedule_at, client_ref. |
POST | /v1/sms/batch | Send up to 1,000 messages in one request with shared or per-recipient text. |
GET | /v1/sms/{message_id} | Message status and delivery report (polling alternative to webhooks). |
GET | /v1/balance | Current account balance and currency. |
GET | /v1/reports?from=&to= | Aggregated delivery, latency and spend by destination. |
POST | /v1/numbers/{number}/webhook | Set the inbound (MO) callback URL for a virtual number. |
Delivery statuses: queued, sent, DELIVRD, UNDELIV, EXPIRED, REJECTD, UNKNOWN. Full documentation and a Postman collection are shared with your sandbox credentials.
Receive replies on virtual numbers
Virtual long numbers and short codes in supported markets for inbound SMS: keyword campaigns, customer replies, opt-out capture and conversational support. Inbound messages arrive on your webhook or as deliver_sm on your SMPP bind.
- Dedicated long numbers in supported countries; shared numbers with keyword routing elsewhere.
- Short codes on request, subject to operator approval and lead time.
- Keyword auto-replies and STOP handling configured in the portal.
// Inbound (MO) webhook payload
POST https://example.com/inbound
{
"number": "+447700900999", // your virtual number
"from": "+447700900123",
"text": "YES",
"keyword": "YES",
"received_at":"2026-10-05T12:00:03Z",
"message_id": "in_9f2a..."
}
Need sandbox credentials?
Email the NOC with your use case and source IPs. Test binds and API keys are usually issued the same day.