Skip to main content
Broadcasts let you send the same message to many recipients without making individual API calls. Perfect for marketing campaigns, announcements, and bulk notifications.

Why Use Broadcasts?

Instead of making 10,000 individual API calls:
// Without broadcasts - 10,000 API calls
for (const contact of contacts) {
  await zavu.messages.send({
    to: contact.phone,
    text: "Black Friday sale starts now!",
  });
}
Use a single broadcast:
// With broadcasts - 3 API calls total
const broadcast = await zavu.broadcasts.create({
  name: "Black Friday Campaign",
  channel: "sms",
  text: "Black Friday sale starts now!",
});

await zavu.broadcasts.addContacts(broadcast.id, {
  contacts: contacts.map(c => ({ recipient: c.phone })),
});

await zavu.broadcasts.send(broadcast.id);

Key Features

Batch Processing

Add up to 1,000 contacts per request. Zavu handles rate limiting and delivery optimization automatically.

Personalization

Customize each message with per-contact template variables like names, order IDs, or custom fields.

Scheduling

Schedule broadcasts for future delivery. Perfect for time-zone aware campaigns.

Real-time Progress

Poll for delivery progress with instant updates on sent, delivered, and failed counts.

Balance Reservation

When you send a broadcast, Zavu reserves the estimated cost from your balance. This ensures funds are available for the entire campaign and prevents overspending.
Balance: $100.00 → Send Broadcast ($25 estimated) → Available: $75.00, Reserved: $25.00
Reserved funds are released when the broadcast completes or is cancelled. Learn more

Broadcast Lifecycle

Draft → Scheduled (optional) → Sending → Completed

                              Cancelled
StatusDescription
draftInitial state. Add/remove contacts freely.
scheduledWaiting to send at scheduled time.
sendingMessages being delivered.
completedAll messages processed.
cancelledBroadcast stopped before completion.

Quick Example

import Zavudev from '@zavudev/sdk';

const zavu = new Zavudev({
  apiKey: process.env['ZAVUDEV_API_KEY'], // This is the default and can be omitted
});

// 1. Create the broadcast
const broadcast = await zavu.broadcasts.create({
  name: "Order Confirmation Campaign",
  channel: "sms",
  text: "Hi {{name}}, your order #{{order_id}} has shipped!",
});

// 2. Add contacts with personalization
await zavu.broadcasts.addContacts(broadcast.id, {
  contacts: [
    {
      recipient: "+14155551234",
      templateVariables: { name: "John", order_id: "ORD-001" }
    },
    {
      recipient: "+14155555678",
      templateVariables: { name: "Jane", order_id: "ORD-002" }
    },
  ],
});

// 3. Send immediately
await zavu.broadcasts.send(broadcast.id);

// 4. Check progress
const progress = await zavu.broadcasts.getProgress(broadcast.id);
console.log(`${progress.percentComplete}% complete`);

Supported Channels

ChannelMessage TypesPersonalization
SMSTextTemplate variables
WhatsAppText, Image, Video, Audio, Document, TemplateTemplate variables
EmailText, HTMLTemplate variables
WhatsApp broadcasts using free-form messages (non-template) require an open 24-hour conversation window with each recipient. Use WhatsApp templates for marketing campaigns to recipients who haven’t messaged you recently.

Limits

LimitDefaultNotes
Contacts per request1,000Add contacts in batches
Contacts per broadcast1,000Contact support to increase
Concurrent broadcastsNo limitRate limits still apply

Next Steps