Send Bulk SMS
Send SMS messages to multiple recipients simultaneously using your approved sender name.
Last updated · Markdown version
Use the bulk SMS endpoint to deliver messages to multiple recipients in a single API call.
It is suitable for:
- batch notifications
- marketing campaigns and broadcasts
- operational announcements
- multiple recipient alerts
Endpoint
POST /api/v2/messages/sms/bulkAuthorization
Authenticate using your API token in the Authorization HTTP header:
Authorization: Bearer <your_api_token>
Content-Type: application/jsonBackward Compatibility: Legacy X-API-Key and X-API-Secret headers, as well as credentials passed in the JSON body or query parameters, continue to be supported.
Request Format
Instead of remembering a long UUID sender_id, you can simply supply your sender ID name directly via "sender":
{
"sender": "BULK_IT",
"mobiles": [
"254700000001",
"254733000002"
],
"message": "Hello, thank you for being a valued customer!"
}Sender Flexibility: You can pass your alphanumeric sender name in "sender" (e.g. "BULK_IT" or "YOUR_BRAND"). If you have existing integrations using "sender_id" with a UUID or numeric ID, those will continue to work without modification.
Scheduled Bulk SMS
To schedule a broadcast for future delivery, pass an ISO 8601 timestamp in scheduled_at:
{
"sender": "BULK_IT",
"mobiles": [
"254700000001",
"254733000002"
],
"message": "Flash sale starts at 10:00 AM!",
"scheduled_at": "2026-03-10T10:00:00+03:00"
}Code Examples
curl -X POST "https://api.bulkitsms.com/api/v2/messages/sms/bulk" \
-H "Authorization: Bearer bk_live_8n6JQv3K1h9Lp0Md" \
-H "Content-Type: application/json" \
-d '{
"sender": "BULK_IT",
"mobiles": [
"254700000001",
"254733000002"
],
"message": "Hello! Your monthly statement is ready for viewing."
}'Parameters
| Parameter | Required | Type | Description |
|---|---|---|---|
sender | Yes | string | Your sender ID name (e.g. BULK_IT or YOUR_BRAND). |
mobiles | Yes | array of strings | List of recipient phone numbers in international or local format (e.g. ["254700000001", "0733000002"]). |
message | Yes | string | SMS text to send. Long messages will automatically be divided into multiple units. |
scheduled_at | No | string | Optional ISO 8601 timestamp for scheduled delivery (e.g. 2026-03-10T10:00:00+03:00). |
sender_id | Legacy | string / number | Legacy UUID or numeric ID for backward compatibility with older integrations. |
Responses
Success Response
{
"status": "success",
"message": "Bulk SMS processed",
"data": {
"requested": 2,
"queued": 2,
"failed": []
}
}Partial Bulk Failure
If one of the numbers is invalid, valid recipients are still queued and invalid ones are reported in failed:
{
"status": "success",
"message": "Bulk SMS processed",
"data": {
"requested": 2,
"queued": 1,
"failed": [
{
"mobile": "12345",
"message": "Invalid number"
}
]
}
}Error Response
{
"status": "error",
"message": "Invalid sender ID"
}Common Error Codes
Invalid credentials: Missing or invalid Bearer token / API key.Insufficient balance: Account balance is insufficient for the requested message units.Invalid number: None of the supplied numbers are valid phone numbers.Invalid sender ID: Specified sender name or ID does not exist or is not approved for your account.Restricted send time: Safaricom promotional window restriction (promotional messages are permitted between 8:00 AM and 6:00 PM Africa/Nairobi time).