Bulk SMS campaigns

Send one message to thousands of people as a single campaign, see what it will cost before it goes, and track every delivery.

Choose who receives it

A bulk send needs a message and exactly one way to pick recipients.

group_idYou already keep the audience as a contact group, e.g. Loyal customers
recipientsYour system has the list of numbers right now
csv_upload_idThe list came from a spreadsheet you uploaded

Note: Clean the list before you send: international format (+254…), no duplicates, no people who asked to stop. Invalid numbers fail and show up in the failed list.

Send the campaign

POST /v1/sms/send-bulk
{
  "campaign_name": "Friday deals",
  "from": "DUKAFRESH",
  "group_id": "grp_loyal",
  "message": "Friday deals are live: 20% off fresh produce until 8pm. Reply STOP to opt out."
}

The response gives you a campaign_id, how many numbers it will reach (recipient_count) and the credits it is expected to use (estimated_credits = recipients × segments). Those credits are reserved straight away, so a campaign cannot run out halfway.

Cost before you send

Up to 160 standard characters110,000 × SMS rate
161 to 306 characters220,000 × SMS rate
Has an emoji (up to 70 characters)110,000 × SMS rate

Tip: Keeping a campaign to one segment often halves the cost. Shorten links and drop emoji.

Schedule it

Add scheduled_at to send later, for example at 9am when people are awake but not busy. Until it starts you can cancel with DELETE /v1/campaigns/{id}, and reserved credits go back to your balance.

Track it

  1. Watch progress

    GET /v1/campaigns/{id} shows the campaign and its progress. GET /v1/campaigns lists all of them.

  2. Get each result

    Subscribe to sms.delivered and sms.failed webhooks to update each customer record as results come in.

  3. Report on it

    GET /v1/reports/summary gives sent, delivered, failed and credits for any date range.

Limits

send-bulk allows 10 requests a minute. One request can reach a whole group, so you rarely need more. Never loop single sends for a campaign.

Was this page helpful?
Powered by StdioX Labs