Bulk messaging

Send messages to many recipients in a single request. Bulk supports plain SMS, templated WhatsApp, and mixed channels — with optional fallback so critical messages still land if the first channel fails. This page covers basic bulk SMS and WhatsApp sends, limits, and best practices.

POST/messages/bulk

Authentication

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

-H "x-api-key: YOUR_API_KEY"

Bulk SMS

Send the same message to multiple recipients. Each entry in messages has a to and a body.

curl -X POST https://api.tryzend.com/messages/bulk \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "messages": [
      {"to": "+233593152134", "body": "Welcome to our service!"},
      {"to": "+233593152135", "body": "Welcome to our service!"},
      {"to": "+233593152136", "body": "Welcome to our service!"}
    ],
    "preferred_channels": ["sms"],
    "fallback_enabled": true
  }'

Response

{
  "id": "bulk_1705312345678",
  "status": "pending",
  "recipients": 3,
  "estimated_cost": 0.06,
  "message": "3 messages queued for processing"
}

The response returns immediately with a bulk_id. Use it to track progress — see Advanced bulk.

Request fields

messagesobject[]required
The recipients. Each entry needs a to, plus a body and/or template_params.
preferred_channelsstring[]required
Ordered list of channels to attempt, e.g. ["whatsapp", "sms"].
fallback_enabledboolean
Whether to fall back to the next channel if the first fails.
template_idstring
Template to render for all messages. See Templates.

Bulk WhatsApp with templates

Send a template to multiple recipients, supplying per-recipient values in template_params. Set template_id once at the top level.

{
  "messages": [
    {
      "to": "+233593152134",
      "template_params": {
        "code": "123456",
        "verification_url": "https://yourapp.com/verify?code=123456"
      }
    },
    {
      "to": "+233593152135",
      "template_params": {
        "code": "789012",
        "verification_url": "https://yourapp.com/verify?code=789012"
      }
    }
  ],
  "template_id": "6884c5d09c14b2b164500d58",
  "preferred_channels": ["whatsapp"]
}

See Templates for defining templates and Variables & variants for the variables you pass here.

Bulk message limits

  • Maximum recipients: 10,000 per request
  • Rate limit: 1,000 messages per hour
  • Processing time: 5–10 minutes for large batches
  • Cost: varies by channel and message type

Note

For batches near the recipient cap, split the send and space batches apart to stay within the rate limit. See the batching and rate-limiting patterns in Advanced bulk.

Best practices

  • Optimize batch size. SMS batches of ~1000, WhatsApp ~500, and mixed channels ~750 work well.
  • Rate limit large sends. Space batches out to stay under 1,000 messages per hour.
  • Enable fallback for critical messages. Set fallback_enabled: true so OTPs and time-sensitive alerts retry over another channel.
  • Handle errors. Check the response and surface message on failure — see bulk errors.
  • Track progress. Store the returned bulk_id and poll status rather than assuming delivery.

Next steps

  • Advanced bulk — individual customization, mixed channels, scheduling, webhooks, status tracking, analytics, and errors.
  • Templates — create and manage the templates used in bulk WhatsApp sends.