Personalized bulk
A different message for every recipient in one request. Statements, balances, due dates, anything per-person.
POSThttps://api.mobilesasa.com/v1/send/bulk-personalized
Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| senderID | string | Yes | An approved sender ID on your account. |
| messageBody | array | Yes | Array of { phone, message } objects, each recipient with their own text. |
curl -X POST https://api.mobilesasa.com/v1/send/bulk-personalized \
-H "Authorization: Bearer $MOBILESASA_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"senderID": "MOBILESASA",
"messageBody": [
{
"phone": "0712000001",
"message": "Dear Amina, your loan instalment of KES 5,400 is due on 15 Aug."
},
{
"phone": "0733000002",
"message": "Dear Peter, your loan instalment of KES 12,100 is due on 15 Aug."
},
{
"phone": "0700000003",
"message": "Dear Grace, your loan instalment of KES 3,250 is due on 15 Aug."
}
]
}'Response
json
{
"status": true,
"responseCode": "0200",
"message": "Accepted",
"bulkId": "30b2ec2b-89a6-4414-ae8d-cb08d12d19ef"
}One bulkId covers the whole array. Pass it to delivery reports to get a row back per recipient.
Notes
- Billing is per part per message. A long message for one recipient doesn't affect what the others cost.
- Render the personalisation yourself (your data lives in your system). Pull names/amounts from your database, build the array, send once.
- Invalid phones in the array are skipped; the rest deliver. The daily duplicate rule applies per recipient.
- For per-message tracking IDs, loop v2 single sends instead. Bulk-personalized doesn't return per-row IDs.