{ Developer platform }

More than just
an SMS gateway

SemaHub — a high-performance SMPP gateway for sending efficient, reliable and scalable messages, with automatic encoding, delivery tracking and webhooks built in.

POST /messages
curl -X POST https://api.semahub.sms/api/v1/messages \
  -H "Authorization: Token sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "destination": "+255712345678",
    "body": "Your SemaHub code is 12345 🎉",
    "sender_id": "MyApp"
  }'

# 202 Accepted
{ "id": "a1b2c3d4-…", "status": "submitted",
  "encoding": "UCS-2", "segments": 1 }
Encodings
GSM-7 / UCS-2
Auth methods
JWT + API token
Delivery tracking
Per segment
Webhooks
Signed · HTTPS
{ Everything in the box }

One gateway for your entire messaging stack

From your first test message to millions of personalized segments a month — every part of the platform is exposed through a clean, documented REST API.

Messaging

Single, bulk, and per-recipient personalized sends from one API.

Templates

Reusable templates with variables, preview, and encoding analysis.

Scheduling

Queue any send for later with a single scheduled_at timestamp.

Delivery tracking

Per-segment receipts, status breakdowns, and delivery rates.

Sender IDs

Register alphanumeric or numeric IDs, set a default, manage approvals.

Usage reporting

Segment-level usage statistics over any date range.

Webhooks

Signed, HTTPS event notifications with rotatable secrets.

API tokens

Scoped, expiring tokens for secure server-to-server access.

{ Messaging }

Send one, send a million

A single set of endpoints covers every send pattern — individual transactional messages, high-volume broadcasts, and personalized campaigns where every recipient gets unique content.

  • Single SMS with automatic multi-part segmentation for long bodies.
  • Bulk send to thousands of destinations in one request, with per-number validation.
  • Bulk-personalized sends that merge per-recipient variables into a template.
  • Schedule any send for later with a single scheduled_at timestamp.
POST /messages/bulk-personalized
{
  "template_id": "a1b2c3d4-…",
  "sender_id": "Promos",
  "scheduled_at": "2025-06-15T14:30:00Z",
  "recipients": [
    { "destination": "255712345678",
      "variables": { "name": "Alice", "code": "ABC123" } },
    { "destination": "255698765432",
      "variables": { "name": "Bob", "code": "XYZ789" } }
  ]
}

Transactional

One-to-one sends for OTPs, alerts, and receipts.

Bulk broadcast

Reach an entire list in a single API call.

Scheduled

Queue campaigns to deliver at the perfect time.

{ Templates }

Write once, personalize infinitely

Store your recurring messages as templates with named variables. Organize them by category, star the ones you use most, and render a live preview with encoding analysis before sending.

  • Variable placeholders substituted at send time, per recipient.
  • Categories, search, and favorites to keep large libraries tidy.
  • Preview endpoint returns the rendered text plus encoding and segment count.
  • Full CRUD — create, update, and version your messaging content.
Order confirmation★ Favorite
Hi {{name}}, your order {{order_id}} ships today. Total: {{amount}}.
Category: TransactionalEncoding: GSM-71 segment
{ Delivery & analytics }

Know exactly what happened

Every message is tracked down to the segment. Pull delivery receipts in real time, break down status across your account, and report on usage over any date range.

  • Per-message detail with individual segment statuses.
  • Status breakdown: delivered, pending, submitted, failed, rejected, expired.
  • Delivery-rate, failure-rate, and average delivery-time analytics.
  • Segment usage statistics scoped to any from/to window.

Delivered

98.4%

Pending

1.1%

Failed

0.5%

Delivery rate

98.4%

Avg. delivery

2.3s

Segments this month

1,284,905

{ Sender IDs }

Show up as your brand

Register the sender IDs your recipients see, keep them managed in one place, and set a default that's used whenever you don't specify one. Approvals are tracked so you always know what's ready to send.

  • Alphanumeric IDs up to 11 characters, or numeric IDs up to 15 digits.
  • Approval status tracked per sender ID before it can be used.
  • Set an account default and override it per message when needed.
  • List, inspect, and remove sender IDs through the API.

MyBrand

Account default

Approved

Promos

Approved

Alerts

Pending
{ Built for developers }

A clean REST API, from auth to webhooks

Authenticate with a JWT after login or a long-lived API token for server-to-server calls. Then wire up webhooks to receive signed delivery events the moment they happen.

API tokens

Create scoped tokens with optional expiry for programmatic access. The secret is shown once at creation — store it safely, and revoke any token instantly.

  • Optional expiry dates
  • Shown once, then hashed
  • Revoke anytime

Webhooks

Register HTTPS endpoints to receive delivery-event notifications. Each payload is signed with a secret you can rotate, so you can verify authenticity on every request.

  • HTTPS-only endpoints
  • Signed with a rotatable secret
  • Event history retained
Two ways to authenticate
# 1 · JWT — after POST /auth/login (valid 24h)
Authorization: Bearer <jwt_token>

# 2 · API token — server-to-server
Authorization: Token <api_token>
Webhook delivery event
POST https://your-app.com/webhooks
X-SemaHub-Signature: t=1718…,v1=9f86d08…

{
  "event": "message.delivered",
  "message_id": "a1b2c3d4-…",
  "destination": "255712345678",
  "status": "delivered",
  "segments": 2,
  "delivered_at": "2025-06-15T14:31:07Z"
}
{ Security }

Trust built into every request

Authentication, verification, and signing are first-class parts of the platform — not add-ons — so your messaging pipeline is secure end to end.

JWT sessions

Log in for a signed JWT that stays valid for 24 hours across the dashboard and API.

Scoped API tokens

Issue and revoke long-lived tokens for each integration, with optional expiry.

Verified email

Accounts are confirmed with a 6-digit code, with resend and secure password reset flows.

Signed webhooks

Every event is signed so you can trust it really came from SemaHub before you act on it.

Ship your first message today

Create an account, grab an API token, and fire your first SMS in minutes. Scale to millions of personalized segments when you're ready.