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.
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
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.
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.
{
"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.
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.
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
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
Promos
Alerts
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
# 1 · JWT — after POST /auth/login (valid 24h) Authorization: Bearer <jwt_token> # 2 · API token — server-to-server Authorization: Token <api_token>
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"
}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.