Instant
OTPs, confirmations, alerts: queued in under a second, gone right after.
the sms api of the bloonio platform
Lisoloo delivers your login codes, alerts and campaigns: right now, on a set date, or every week. One REST API, real-time delivery receipts.
$ curl -X POST …/api/v1/lisoloo/sms-api/send \ -H "app-key: sk_live_••••••••••••" \ -d '{ "to": ["+243 998 857 000"], "message": "Your KITOKO code: 493 201. Valid 5 min.", "sender_id": "KITOKO" }'
202 · accepted · msg_8f3kq2
Your KITOKO code: 493 201. Valid 5 min.
09:41queued sent delivered
delivered · 1 segment · 1.8 s
002 / sending
Three sending modes, one endpoint. The sending_type field does the rest.
OTPs, confirmations, alerts: queued in under a second, gone right after.
"sending_type": "immediate"
Appointment reminders, announcements, payroll: set the date and time, Lisoloo remembers.
"sending_type": "scheduled",
"scheduled_dates": [
{ "date": "2026-07-01", "time": "08:00" }
] Daily, weekly or monthly, between two dates, several times a day if needed.
"sending_type": "recurring",
"recurring_schedule": {
"frequency": "weekly",
"times": ["09:00"]
} 003 / integration
A single app-key header. Separate test and live keys, sk_test_… / sk_live_… format.
Statuses pushed to your URL (Basic Auth), automatic retries with exponential backoff.
Python, Node.js and PHP maintained, or copy the request as-is.
Complete specification, explorable and testable in the docs.
60 sends / min by default. Need more? Talk to us.
Browse the documentationcurl -X POST \
https://apps.api.bloonio.com/api/v1/lisoloo/sms-api/send \
-H "app-key: $LISOLOO_APP_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": ["+243998857000"],
"message": "Your KITOKO code: 493 201. Valid 5 min.",
"sender_id": "KITOKO",
"sending_type": "immediate"
}' import requests
resp = requests.post(
"https://apps.api.bloonio.com/api/v1/lisoloo/sms-api/send",
headers={"app-key": LISOLOO_APP_KEY},
json={
"to": ["+243998857000"],
"message": "Your KITOKO code: 493 201. Valid 5 min.",
"sender_id": "KITOKO",
"sending_type": "immediate",
},
)
message_id = resp.json()["message_id"] const resp = await fetch("https://apps.api.bloonio.com/api/v1/lisoloo/sms-api/send", {
method: "POST",
headers: {
"app-key": process.env.LISOLOO_APP_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
to: ["+243998857000"],
message: "Your KITOKO code: 493 201. Valid 5 min.",
sender_id: "KITOKO",
sending_type: "immediate",
}),
});
const { message_id } = await resp.json(); $ch = curl_init("https://apps.api.bloonio.com/api/v1/lisoloo/sms-api/send");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"app-key: " . getenv("LISOLOO_APP_KEY"),
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode([
"to" => ["+243998857000"],
"message" => "Your KITOKO code: 493 201. Valid 5 min.",
"sender_id" => "KITOKO",
"sending_type" => "immediate",
]),
]);
$resp = json_decode(curl_exec($ch), true); 004 / use cases
Logins and payments confirmed in seconds, on any handset.
Fewer no-shows, calendars that stay full.
Payments received, low stock, incidents: your team knows before the customer does.
Thousands of recipients, one API call, per-message tracking.
005 / pricing
You top up a balance; every SMS debits it at the unit price. No forced tiers, no hidden fees: your balance and the current price are readable from the API at any time.
GET /balance remaining balance & unit price POST /calculate turns a budget into an SMS count, before you send Big volumes or specific routes? Write to us →
006 / questions
Yes. The sender_id field takes an alphanumeric identifier (11 characters max.), your brand for instance. Depending on the destination country, prior registration may be required; we handle it with you.
A GSM-7 SMS holds 160 characters (153 per segment beyond that). Unicode characters lower the limit to 70. Each segment is billed as one SMS.
Two options: poll GET /status with the message id, or receive webhooks on your URL. 14 states cover the whole cycle, from pending to delivered.
Every account gets two keys (sk_test_…, sk_live_…). The test key lets you integrate and automate your checks without touching the production balance.
The message ends up undelivered, expired or failed depending on the case, visible by webhook or through the status endpoint. You always know what was delivered, and to whom.
Lisoloo is operated by Bloonio and serves the DRC first; coverage expands route by route. Write to us with your destinations and we confirm before you send anything.
007 / contact
A technical question, a volume quote or a partnership: the message lands directly with the team operating the platform.
answer within one business day
We reply to the address you gave, within one business day.
Open an account, start in the test environment, switch to production when you're ready.