Place outbound calls to your customers: a spoken text-to-speech message, a recorded audio file, a spoken one-time code, or a bridge that connects two numbers. Calls are charged from the same messaging wallet as SMS and refunded for every call the network refuses.
iTest mode never dials
With a test-mode key, calls are simulated end to end: nothing reaches the network, the wallet moves test credits only, and each call settles as
completed.Endpoint
POST
/v1/messaging/voice| Field | Type | Description |
|---|---|---|
action | string | speech (default), audio, otp or bridge. |
name | string | Campaign name shown in the dashboard. |
caller_id | string | Number or approved name shown to the recipient. |
script | string | What the voice reads out. Required for speech. |
audio_url | string | Public https link to the recording. Required for audio. |
otp_text | string | The code to read out. Required for otp. |
recipientsrequired | string[] | Up to 5,000 numbers per campaign. |
bridge_to | string | Second leg of a bridge call, used with to. |
schedule_at | string | ISO time to release the campaign later. |
Text-to-speech broadcast
curl -X POST https://api.webrabbitmedia.com/v1/messaging/voice \
-H "Authorization: Bearer $WEBRABBIT_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Delivery reminder",
"caller_id": "0240000000",
"script": "Hello, your order is on its way.",
"recipients": ["0240000000", "0240000001"]
}'Response · 200
{
"ok": true,
"campaign_id": "b1f2…",
"recipients": 2,
"submitted": 2,
"rejected": 0,
"cost": 4.76,
"breakdown": [
{ "country": "Ghana", "iso2": "GH", "recipients": 2, "rate_per_call": 2.38, "cost": 4.76 }
]
}Call statuses
Each call moves through queued → submitted → one of answered, completed, no_answer, busy, rejected, failed or cancelled. The network reports the outcome to us as it happens, so the dashboard updates without a refresh.
Pricing
Voice is priced per call by destination country, the same way SMS is. Calls the network rejects are credited straight back to your wallet.
