Why Use a Local SMS API for Tanzania?
International SMS APIs (Twilio, Vonage, Bandwidth) route messages to Tanzania through regional aggregators. Each hop adds latency and cost. For use cases where speed matters — OTP codes, fraud alerts, payment confirmations — a 5–15 second delay is the difference between a customer completing a transaction and abandoning it.
Sakura SMS routes directly to every Tanzanian carrier:
- Vodacom Tanzania — direct SMPP connection
- Airtel Tanzania — direct SMPP connection
- Tigo Tanzania — direct SMPP connection
- Halotel — direct SMPP connection
- TTCL — direct connection
Average delivery: 0.3 seconds. No international hops. Pricing in TZS.
Quickstart — Send SMS in 5 Minutes
Step 1: Sign up and get your API key
Create a free account — no credit card required. Your API key is generated immediately in the dashboard under Settings → API Keys. You receive 20 free messages to start.
Step 2: Send your first message
// Node.js / JavaScript
const response = await fetch("https://sakurasms.com/api/v1/messages", {
method: "POST",
headers: {
"Authorization": "Bearer sk_live_your_api_key_here",
"Content-Type": "application/json"
},
body: JSON.stringify({
sender_id: "MYAPP",
message: "Your verification code is 8421. Valid for 10 minutes.",
recipients: ["255712345678"]
})
})
const data = await response.json()
console.log(data.message_id) // e.g. "msg_01J3K..."Step 3: Check delivery status
curl https://sakurasms.com/api/v1/messages/msg_01J3K... \
-H "Authorization: Bearer sk_live_your_api_key_here"Core API Endpoints
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/messages | Send SMS (single or bulk) |
| GET | /api/v1/messages | List messages with filters |
| GET | /api/v1/messages/:id | Get single message status |
| GET | /api/v1/messages/:id/deliveries | Per-recipient delivery records |
| POST | /api/v1/messages?test=true | Sandbox send (no real SMS, no credit cost) |
Webhooks — Get Delivery Receipts in Real Time
Instead of polling for status, configure a webhook URL to receive delivery events as they happen:
# Register your webhook in the dashboard:
# Settings → Webhooks → Add Endpoint
# URL: https://yourapp.com/webhooks/sakura-sms
# Events: message.delivered, message.failed, message.undeliverableAll webhook payloads are signed with HMAC-SHA256 using your webhook secret. Verify before processing.
Sending Bulk SMS via API
Send to multiple recipients in a single request:
const response = await fetch("https://sakurasms.com/api/v1/messages", {
method: "POST",
headers: {
"Authorization": "Bearer sk_live_your_api_key_here",
"Content-Type": "application/json"
},
body: JSON.stringify({
sender_id: "MYSTORE",
message: "Flash sale! 20% off all items today only. Shop now: mystore.co.tz",
recipients: [
"255712345678",
"255754321098",
"255767890123",
// ... up to 10,000 recipients per request
]
})
})Each recipient gets an individual message_id for delivery tracking. The API returns immediately — delivery happens asynchronously via webhooks.
Scheduled SMS
Send at a future time using scheduled_at:
body: JSON.stringify({
sender_id: "MYAPP",
message: "Reminder: Your appointment is tomorrow at 2pm.",
recipients: ["255712345678"],
scheduled_at: "2026-07-02T10:00:00+03:00" // EAT timezone
})The message is queued and dispatched at the specified time. Cancel via DELETE /api/v1/messages/:id before the scheduled time.
Sandbox / Test Mode
Test your integration without sending real SMS or spending credits. Add ?test=true to any send request:
curl -X POST "https://sakurasms.com/api/v1/messages?test=true" \
-H "Authorization: Bearer sk_live_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{ "sender_id": "TEST", "message": "Test message", "recipients": ["255712345678"] }'Response is identical to a live send, but no SMS is dispatched and no credit is deducted. Sandbox sends are logged in your dashboard for inspection.
Rate Limits
| Plan | Requests/minute | Messages/request | Messages/month |
|---|---|---|---|
| Trial | 10 | 100 | 20 |
| Starter | 60 | 1,000 | 10,000 |
| Growth | 120 | 5,000 | 50,000 |
| Business | 300 | 10,000 | 200,000 |
| Enterprise | Custom | Custom | Custom |
Rate limit headers are returned on every response: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.
Full API Documentation
Complete reference including all parameters, error codes, and SDK guides at sakurasms.com/developers.
Get your free API key — 20 messages included