Send template messages

One call sends an approved template to one recipient or a list, with variable values filled per send.

POSThttps://api.mobilesasa.com/api/v1/whatsapp/send

Parameters

FieldTypeRequiredDescription
account_uuiduuidYesWhich connected WhatsApp account to send from.
template_uuiduuidYesAn APPROVED template on that account.
recipientsstring[]YesPhone numbers of opted-in recipients (Kenyan formats accepted).
paramsstring[]NoValues for the template's {{1}}, {{2}} placeholders, in order. Same values apply to every recipient in the call.
media_idstringNoMeta media ID for templates with an image/document header.
curl -X POST https://api.mobilesasa.com/api/v1/whatsapp/send \
  -H "Authorization: Bearer $MOBILESASA_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "account_uuid": "ACCOUNT_UUID",
    "template_uuid": "TEMPLATE_UUID",
    "recipients": [
      "0712345678",
      "0733000002"
    ],
    "params": [
      "Jane",
      "February",
      "KES 128,400"
    ]
  }'
Response
{
  "success": true,
  "data": {
    "queued": 2,
    "failed": 0
  }
}

Per-recipient personalisation

Variables apply per call — to give each recipient different values (their own name, their own balance), loop single-recipient calls. Each send is billed individually at the template category rate either way.

Requirements & failure modes

  • The template must be APPROVED; sends with pending or rejected templates fail with a validation error.
  • Billing draws from your KES wallet at the category rate; insufficient wallet balance fails the call before anything sends.
  • Recipients must have opted in to WhatsApp messages from you — Meta enforces quality signals, and sustained blocks hurt your number's rating.

Track outcomes in message history — statuses move through queued → sent → delivered → read, with failed carrying the reason.