Send transactional and promotional SMS to Safaricom, Airtel, Telkom and Faiba subscribers from one endpoint. Branded sender IDs, automatic multi-part handling, delivery callbacks the moment a phone rings.
Whether you're sending one delivery alert or 500,000 promo messages, the path is the same.
Use your approved sender ID for branded messages, or post directly with a shortcode. Sozuri auto-routes by carrier so every recipient sees the right name.
A single POST /v1/messaging with to, from, message, type and campaign. Numbers are normalised, multi-part splits are detected, throttling is automatic.
Each accepted message gets a messageId instantly. Delivery webhooks fire to your callback URL the moment Safaricom, Airtel, Telkom or Faiba confirm receipt.
Transactional and promotional senders, registered with each Kenyan carrier. The right name shows on every handset, every time.
Pass an array or a CSV of numbers in a single request. Sozuri batches, paces and routes by carrier so your platform doesn't have to.
160 GSM-7 or 70 Unicode characters per part — Sozuri detects, splits and reassembles so emojis and long messages just work.
Webhooks push status, network and messageId the second a phone rings. Idempotent, retry-safe.
Tag every send with a campaign name. The dashboard rolls up delivery, click-through and cost per blast in real time.
Drop a future timestamp on a request and Sozuri queues it. Pair with a campaign tag for recurring promo cadences and birthday alerts.
A single REST call. The same payload pattern works for SMS, WhatsApp, Premium and the rest of the platform — only the channel changes.
# Send a transactional SMS
curl -X POST "https://api.sozuri.net/v1/messaging" \
-H "Authorization: Bearer $SOZURI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"project": "Galaxion",
"from": "GALAXION",
"to": "+254712345678",
"channel": "sms",
"type": "transactional",
"message": "Your order #4821 has shipped. Track: galaxion.co.ke/t/4821",
"campaign": "shipping-alerts"
}'
// Send a transactional SMS
const res = await fetch("https://api.sozuri.net/v1/messaging", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.SOZURI_API_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
project: "Galaxion",
from: "GALAXION",
to: ["+254712345678", "+254723456789"],
channel: "sms",
type: "transactional",
message: "Your order #4821 has shipped.",
campaign: "shipping-alerts"
})
});
# Send a transactional SMS
import requests, os
res = requests.post(
"https://api.sozuri.net/v1/messaging",
headers={"Authorization": f"Bearer {os.environ['SOZURI_API_KEY']}"},
json={
"project": "Galaxion",
"from": "GALAXION",
"to": "+254712345678",
"channel": "sms",
"type": "transactional",
"message": "Your order #4821 has shipped.",
"campaign": "shipping-alerts",
},
)
// Send a transactional SMS (Guzzle)
$client = new \GuzzleHttp\Client();
$client->post("https://api.sozuri.net/v1/messaging", [
"headers" => ["Authorization" => "Bearer " . getenv("SOZURI_API_KEY")],
"json" => [
"project" => "Galaxion",
"from" => "GALAXION",
"to" => "+254712345678",
"channel" => "sms",
"type" => "transactional",
"message" => "Your order #4821 has shipped.",
"campaign" => "shipping-alerts",
],
]);
The single highest-converting SMS a retailer can send is the shipping update. Sozuri delivers it sub-three-seconds across every Kenyan carrier — with a delivery callback so your CRM updates itself.
Upload a CSV of segmented customers, tag the campaign, schedule a send. The dashboard shows delivery, opt-out and conversion rates rolling in within minutes — per network, per cohort.
From KSh 0.78 per Safaricom SMS down to KSh 0.38 at volume. No commitments. Sender ID setup is a one-time KSh 8,000 + VAT per network.
Sender ID approval is per-carrier and is handled by Safaricom, Airtel and Telkom directly. The Sozuri team submits on your behalf with KYC documents; expect 5–10 business days per network. Once approved, the sender is available across all your projects.
A standard GSM-7 SMS is up to 160 characters per part. Adding emoji or non-Latin characters switches the encoding to Unicode (UCS-2), which caps a part at 70 characters. Multi-part messages are billed per part. Sozuri detects and reports parts on the synchronous response so there are no surprises.
There's no hard upper limit on the to array, but the platform paces sends at 100 TPS per project (400 TPS aggregate). For a 500,000-message campaign, that's roughly 80 minutes end-to-end. Schedule overnight if you want everything delivered before morning.
Sozuri retries transient failures (busy network, temporary off-net) automatically. Permanent failures — invalid number, blacklist, DND — come back on the delivery webhook with a non-success status and a descriptive code, so your platform can mark the record without polling.
Free signup credits cover your first 100 messages — enough to wire the API end-to-end before billing kicks in. No card. No call.