Channels

Eight channels.One request shape.

The body you send to /v1/messages does not change when the channel does. What changes is what the channel can carry, what it needs before it can send, and who bills you for it.

whatsappsmssms_onewayvoiceemailtelegraminstagrammessenger

The channel field takes any of these, plus auto. Omit it and Zavu resolves one from the recipient and from what the sender is actually wired for.

Capabilities

Pick a message type. The channels answer.

Most rich types have exactly one home. Knowing which before you design a flow around buttons is cheaper than finding out from a 400.

messageType

1 of 8 channelsWhatsApp only. Ask for this type and the request is routed to WhatsApp before anything else is decided — a sender without a WhatsApp Business Account gets a 400.

WhatsApp

whatsapp

Carries it

SMS

sms

Not this one

One-way SMS

sms_oneway

Not this one

Voice

voice

Not this one

Email

email

Not this one

Telegram

telegram

Not this one

Instagram

instagram

Not this one

Messenger

messenger

Not this one

These are the values of messageType. Whichever you pick, the field names never change — only the channel that ends up carrying it.

Routing

Where does this one leave from?

Type a recipient and watch the same decisions the handler makes, in the same order, with the one that settled it named.

messageType

channel

What the sender can send on

Toggle these. Routing only ever picks something the sender is actually wired for.

Resolved channel

WhatsApp

"channel": "whatsapp"

How it got there

  1. 01to is a phone number in E.164, so WhatsApp, SMS, one-way SMS and voice are the candidates.
  2. 02Nothing was named, so the order is WhatsApp, Instagram, Messenger, Telegram, SMS, one-way SMS, email.
  3. 03Voice is not in that list. It is used only when you ask for it.
  4. 04First one this sender can reach that recipient on: whatsapp.

autowhatsapp

The 24-hour window

WhatsApp has one rule worth learning first

A free-form WhatsApp message is only accepted while the contact's last inbound message is under 24 hours old. Run it and see what comes back.

No inbound yet
0 h left

The contact has never written to you, so there is no window to be inside of.

What the API answered

The call

Same body, different destination

to and channel are the only fields that move between these. Everything else is the same request.

send.ts
npm add @zavudev/sdk
import Zavudev from "@zavudev/sdk";

const zavu = new Zavudev();

const { message } = await zavu.messages.send({
  to: "+56912345678",
  text: "Your order shipped.",
});

// channel: "auto" is the default. The sender's own channels decide
// which one this leaves on.
console.log(message.channel, message.status);

The ledger

What each one carries, and what it needs first

A channel is not a checkbox. Each has a shape of message it can render and a piece of setup it will not send without.

WhatsApp

whatsapp

Carries

Text, media, documents, stickers, buttons, lists, CTA URL buttons, location and contact requests, reactions, and approved templates.

Needs first

A WhatsApp Business Account connected to the sender. Free-form replies also need an open 24-hour window; templates do not.

SMS

sms

Carries

Plain text, and templates rendered down to text.

Needs first

A phone number assigned to the sender. The number on its own does not turn SMS on.

One-way SMS

sms_oneway

Carries

Plain text. The recipient cannot reply.

Needs first

Nothing. No number, no credential — the fastest route to a sender that can send.

Voice

voice

Carries

Text spoken aloud, or a voice agent that holds the conversation.

Needs first

A phone number and the voice channel switched on. Routing never picks voice on its own; name it. Language follows the recipient's country unless you set voiceLanguage.

Email

email

Carries

Subject, plain text and HTML, up to 50 attachments and inline images by content id.

Needs first

A verified domain and a from-address on the sender. Recipients are checked before dispatch, so a certain bounce never leaves.

Telegram

telegram

Carries

Text, media and interactive elements. No template approval to wait for.

Needs first

A bot token on the sender. Recipients are numeric chat ids, so the channel has to be named.

Instagram

instagram

Carries

Text to an Instagram inbox.

Needs first

A connected Instagram Business account. Its own window: 24 hours of free replies, then a human agent only, up to seven days.

Messenger

messenger

Carries

Text to a Facebook Page inbox, Marketplace conversations included.

Needs first

A connected Facebook Page. Recipients are numeric chat ids.

A sender reports what it can send on right now in its channels array. Read that rather than inferring capability from a phone number or an email address on the record.

What it costs

Who bills you, and for what

Two of these are ours. The other two are passed through at cost, so you can check them yourself.

WhatsApp · Telegram · Instagram · Messenger

2,000 a month, free

Shared across the four on the free plan. Paid plans have no message caps, and Zavu charges nothing per message on any of them.

WhatsApp conversations

Meta's rates, at cost

Meta bills templates and conversations by country and category, straight to your WhatsApp Business account. We add no markup.

SMS · Voice

Per send

Billed from your prepaid balance on every plan, at published per-destination rates.

Email

$0.40 per 1,000

Transactional. Marketing is $0.80 per 1,000. Billed from the balance in blocks of 1,000 messages.

Free teams start with $2 of credit. Past the free allowance a send returns 429 with a2p_limit_exceeded; at zero balance an email send returns 402 with insufficient_balance.

Pick a channel, or let routing pick it.

Start free, no card. Turn on the rest whenever you want, without touching the code you already wrote.

Channels | WhatsApp, SMS, email, voice, Telegram and Meta — Zavu | Zavu