Home › SMS API

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
Quick start

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.com
Reference

Endpoints

MethodEndpointPurpose
POST/v1/smsSend a single message. Fields: from, to, text, type (otp | txn | mkt), dlr_url, validity, schedule_at, client_ref.
POST/v1/sms/batchSend 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/balanceCurrent account balance and currency.
GET/v1/reports?from=&to=Aggregated delivery, latency and spend by destination.
POST/v1/numbers/{number}/webhookSet 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.

Two-way SMS & numbers

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.

Ask about numbers

// 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.

Request sandboxTalk on WhatsApp
Chat on WhatsApp