SMS API
Send SMS from your own app and check delivery.
Send SMS from your own app or website, such as sign-up codes, order updates and reminders, and check delivery. Messages are charged from your wallet at the same prices as the dashboard.
You need an approved sender ID. For codes and alerts, use your transactional sender ID.
Send a message
POSThttps://socialboostlab.com/api/sms/v1/messages
| JSON field | Description |
|---|---|
torequired | Phone number, ideally with country code, e.g. +2348031234567. Local numbers use your default country. |
messagerequired | The text, up to 1,600 characters (long messages are sent as several SMS pages). |
sender_id | One of your approved sender IDs. Leave it out to use your default. |
curl -X POST https://socialboostlab.com/api/sms/v1/messages \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"to": "+2348031234567", "message": "Your code is 482913. It expires in 10 minutes.", "sender_id": "MYBRAND"}'
import requests
r = requests.post(
"https://socialboostlab.com/api/sms/v1/messages",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"to": "+2348031234567", "message": "Your code is 482913.", "sender_id": "MYBRAND"},
timeout=30,
)
r.raise_for_status()
print(r.json()["data"]["id"])
$ch = curl_init("https://socialboostlab.com/api/sms/v1/messages");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer YOUR_API_KEY", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode(["to" => "+2348031234567", "message" => "Your code is 482913.", "sender_id" => "MYBRAND"]),
]);
$result = json_decode(curl_exec($ch), true);
const res = await fetch("https://socialboostlab.com/api/sms/v1/messages", {
method: "POST",
headers: { Authorization: "Bearer YOUR_API_KEY", "Content-Type": "application/json" },
body: JSON.stringify({ to: "+2348031234567", message: "Your code is 482913.", sender_id: "MYBRAND" }),
});
const { data } = await res.json();
Response 201 Created:
{
"data": {
"id": 90412,
"to": "+2348031234567",
"status": "sent",
"sender_id": "MYBRAND",
"cost": "4.8000",
"error": null,
"sent_at": "2026-10-16T15:54:02+00:00",
"delivered_at": null
}
}Check delivery
GEThttps://socialboostlab.com/api/sms/v1/messages/{id}
curl https://socialboostlab.com/api/sms/v1/messages/90412 -H "Authorization: Bearer YOUR_API_KEY"
requests.get("https://socialboostlab.com/api/sms/v1/messages/90412", headers={"Authorization": "Bearer YOUR_API_KEY"}).json()
| status | Meaning |
|---|---|
queued | Accepted, waiting to go to the network. |
sent | Handed to the network; waiting for the delivery report (usually seconds to minutes). |
delivered | Delivered to the phone. delivered_at is set. |
failed | Not delivered; error says why. If the network rejected it, the cost is refunded. |
rejected | The network refused the message (e.g. the sender ID isn't approved on that network). The cost is refunded. |
rejected_dnd | The number is on the Do-Not-Disturb list and the message wasn't transactional. The cost is refunded. |
Balance
GEThttps://socialboostlab.com/api/sms/v1/balance
curl https://socialboostlab.com/api/sms/v1/balance -H "Authorization: Bearer YOUR_API_KEY"
# {"data": {"balance": "12500.00", "currency": "NGN"}}Good practice
- Send the number with its country code to avoid surprises.
- Only text people who gave you their number for this purpose; marketing messages need a promotional sender ID and an opt-out.
- Retry on
429after a minute; don't retry on400without fixing the request. - Keep your key on your server and rotate it if it might have leaked.
Was this page helpful?
Thanks! Still stuck? Ask our team.