Send Voice

Place automated voice calls from the Zend API. Read a message aloud with neural text-to-speech, or play your own hosted recording. Zend reads OTPs and long digit sequences digit-by-digit so codes come through clearly, and can fall back to SMS when a call goes unanswered. Send to up to 500 recipients in a single request.

This page covers authentication and sending a basic voice call. For deeper topics, see Audio & TTS and Voice delivery & billing.

Authentication

All API requests authenticate with your API key in the x-api-key header:

-H "x-api-key: YOUR_API_KEY"

The base URL for all endpoints is https://api.tryzend.com.

Send a voice call

POST/voice/send

Send either text (converted to natural speech) or voice_url (a hosted audio file) — not both. Enable fallback.sms to reach recipients who don't answer with an SMS.

curl -X POST https://api.tryzend.com/voice/send \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "recipients": ["233XXXXXXXXX"],
    "text": "Hello, this is a call from Zend. Your verification code is 4821.",
    "voice": "female",
    "retry": true,
    "fallback": {"sms": true}
  }'

Note

Exactly one of text or voice_url is required — sending both, or neither, returns a validation error.

Request fields

recipientsstring[]required
1–500 phone numbers. Ghana formats accepted (0XXXXXXXXX or 233XXXXXXXXX). Duplicates are removed automatically.
textstring
Message to speak, up to 600 characters. Converted to natural speech. Required unless voice_url is set. See Audio & TTS.
voice_urlstring
Public https URL to an mp3/wav file, up to 10 MB. Zend stores a copy and delivers it. Required unless text is set. See Audio & TTS.
voicestring
female (default) or male. Only applies to text-to-speech sends.
retryboolean
Defaults to true — retries the call until it's answered.
callback_urlstring
https URL to receive per-recipient status webhooks. See Voice delivery & billing.
fallbackobject
Send an SMS to recipients who don't answer. Contains sms (boolean), sms_text (string, required when voice_url is used; defaults to the spoken text for text sends), and sender_id (string). See Voice delivery & billing.

Response 201

{
  "batch_id": "voice_1f6a2b3c-4d5e-6789-abcd-ef0123456789",
  "recipients": 1,
  "message_ids": ["6884da240f0e633b7b979c00"],
  "status": "submitted",
  "credits_reserved": 0.35
}

Use the returned batch_id to poll delivery — see Voice delivery & billing.

Next steps