Skip to Content
GuidesQuickstart

Quickstart

From nothing to a delivered SMS. There’s nothing to install — every step is one request.

Create an account and get your key

Sign up , confirm your phone number and email, then open API Keys in the dashboard. Your key looks like sk_live_ followed by a long string.

New accounts get 5 free SMS, which is enough to finish this page.

The full key is shown once, when it’s created or rotated. Copy it then. We only ever store a hash of it, so we can’t show it to you again — but you can generate a new one whenever you need.

Send your first message

Put your own number in recipients so you can watch it arrive.

curl -X POST https://api.wakalisms.com/sms/send -H "X-API-Key: YOUR_KEY" -H "Content-Type: application/json" -d '{"recipients":["+254712345678"],"message":"Hello from Wakali SMS"}'

A 202 means we accepted it and your wallet has been charged:

{ "job_id": "b6b2b6f0-7c21-4b0a-9f3e-2a1d5c7e9b40", "recipients_count": 1, "cost_kes": 0.45, "status": "sent", "invalid_recipients": [] }

202 means accepted for delivery, not delivered. Handsets are reached a moment later, and that’s what the next step is for.

Confirm it arrived

Look the message up by the provider id returned with it:

curl https://api.wakalisms.com/sms/messages?page_size=1 -H "X-API-Key: YOUR_KEY"

Each message carries a status:

StatusMeaning
queuedWith us, on its way to the carrier
sentThe carrier accepted it
deliveredIt reached the handset
failedIt didn’t get there — see provider_status
skippedA merge tag had no value for this contact, so nothing was sent

Polling is fine while you’re testing. In production, let us tell you instead — see Delivery & webhooks.

Send to more people

recipients takes up to 10,000 numbers in one call, and every format Kenyans actually type is accepted:

curl -X POST https://api.wakalisms.com/sms/send -H "X-API-Key: YOUR_KEY" -H "Content-Type: application/json" -d '{"recipients":["0712345678","254733123456","+254110456789"],"message":"Doors open at 6pm."}'

Anything we can’t read comes back in invalid_recipients and isn’t charged. The rest still go. See Phone numbers for exactly what we accept.

Before you go live

  • Register a Sender ID so messages come from your brand rather than a shared name — and read Sender IDs first, because the shared one only reaches Safaricom.
  • Set up a webhook so you learn about delivery without polling.
  • Handle errors properly — Handling errors covers what’s worth retrying and what isn’t.
  • Top up your wallet. A send fails with 402 when the balance won’t cover it, and nothing is sent.

Common first-timer problems

What you seeWhy
401 Invalid or missing credentialsThe key is wrong, or you sent it as Authorization instead of X-API-Key
402 Insufficient balanceTop up on the Wallet page. Nothing was sent and nothing was charged
422 No valid phone numbers to send toNone of the numbers parsed — check Phone numbers
Message sent but nothing arrivedUsually the Sender ID doesn’t cover that recipient’s network. See Sender IDs
Last updated on