Send template messages, broadcasts, flows and replies from a WhatsApp Business Account with the Zernio API, plus groups, calling and Click-to-WhatsApp attribution.
Send template messages, broadcasts, flows and replies on WhatsApp from a connected WhatsApp Business Account (platform value whatsapp). A conversation starts with POST /v1/inbox/conversations and a template; a broadcast starts with POST /v1/broadcasts. The same account serves the inbox, group chats, voice calling and Click-to-WhatsApp attribution.
Quick reference
| Property | Value |
|---|---|
| Message types | Text, template, image, video, document, audio, interactive, location, contact card |
| Template required | Yes, outside the 24-hour customer service window |
| Media limits | Media requirements |
| Scheduling | Broadcasts only (no scheduled single messages) |
| Inbox (DMs) | Yes |
| Inbox (comments) | No |
| Group chats | Yes, non-coexistence numbers only (Group chats) |
| Flows | Yes (forms, surveys, booking) |
| Calling | Yes, inbound and outbound voice (Calling) |
| Analytics | No (delivery status per message only) |
Before you start
WhatsApp requires a WhatsApp Business Account (WABA) inside a Meta Business account (business.facebook.com); a personal WhatsApp account cannot be connected. The WABA is created during the connection flow if you do not have one, and it needs at least one phone number registered to it.
Two rules shape every send. You can message a customer freely for 24 hours after their last message; outside that window the message must be an approved template (Templates). A freshly connected number starts on Meta's lowest messaging tier, 250 unique contacts per day, and Meta raises it as you build messaging history and keep quality up.
Connect
Call GET /v1/connect/whatsapp with profileId and redirect_url. Embedded Signup is the only browser route onto Meta's Cloud API; the coexistence variant adds a QR code the business scans with the WhatsApp Business app (coexistence).
import Zernio from '@zernio/node';
const zernio = new Zernio();
const { data: connect } = await zernio.connect.getConnectUrl({
path: { platform: 'whatsapp' },
query: {
profileId: '66a1f0c2a4b9d3e8f1a2b3c4',
redirect_url: 'https://myapp.com/callback',
onboarding: 'api'
}
});
console.log(connect.authUrl);Response (200):
{
"authUrl": "https://www.facebook.com/v21.0/dialog/oauth?client_id=...",
"state": "..."
}Send the user to authUrl. They land back on redirect_url with accountId, the id every WhatsApp call takes from here on.
Three questions decide how you connect, and the connection guide answers each with the call to make:
- Whose number. A number you buy through Zernio can also carry Calls and SMS and can only be connected on the profile it was bought for. A number you already own connects through Embedded Signup or with a Meta System User token.
- Coexistence or Cloud API only. Keeping the number in the WhatsApp Business app (coexistence) caps throughput at 20 messages per second and turns off the Groups API and calling. Pass
onboarding=apito skip it. - One number per profile. Each profile holds exactly one WhatsApp number; connect a second number to a second profile.
Who bills what
WhatsApp has two billers, Zernio and Meta. Pricing & costs says which charge lands on which invoice; WhatsApp rates has Meta's numbers by country.
In this section
Connection & Setup
Embedded Signup, coexistence, System User credentials, and the business profile customers see
Broadcasts
Send a template to many recipients with per-recipient variables and scheduling
Templates
Create templates, read Meta's review status, import from the template library
Contacts
Create and import contacts with a WhatsApp channel so broadcasts can target them
Phone Numbers
Which number gets WhatsApp, the liveness check, and the two-step PIN
Calling
Inbound and outbound WhatsApp voice calls forwarded to a phone, SIP or AI agent
Sandbox
Test against Zernio's shared number before buying one
Group Chats
Create groups, manage participants, invite links and join requests
Inbox
Receive and reply, interactive and commerce messages, delivery webhooks
Meta Business Agent
Provision and run Meta's AI agent on a number without the merchant opening Business Manager
Flows
Native forms, surveys and booking screens inside WhatsApp
Click-to-WhatsApp Ads
Capture the ad click and send conversions back to Meta
Pricing & Costs
What Zernio charges and what Meta charges
Media & Limits
Media formats and sizes, what the API does not expose, and every Meta error code with its fix
Analytics
WhatsApp exposes no post-level analytics through its API. Delivery status (sent, delivered, read) is tracked per message and per broadcast recipient, and arrives as the message.delivered and message.read events (inbox webhooks).
Common errors
The connect call fails on a 404 when profileId is unknown, and on a 402 when the team has no payment method (connecting accounts). The conflicts that matter for WhatsApp appear later, when the user picks a number: they come back on your redirect_url as error=one_whatsapp_per_profile, whatsapp_number_pinned_to_profile or whatsapp_number_already_connected, each with its fix in connection and setup.
Related
- Connecting accounts: the redirect flow, headless mode and scopes shared by every platform.
- Messages: the inbox API reference.
- Broadcasts and Contacts: API reference.
- WhatsApp webhooks and phone number webhooks: template reviews, number lifecycle.
- Phone numbers: buying, porting, KYC and per-country pricing.
Snapchat
Publish Stories, Saved Stories and Spotlight videos to a Snapchat Public Profile with the Zernio API, once your account is approved for the closed beta.
Connection & Setup
Connect a WhatsApp Business Account to a profile through Meta's Embedded Signup or a System User token, choose coexistence or Cloud API only, and set the business profile customers see.