One REST API for every channel you send on.
Scoped API keys, idempotent sends, real-time webhooks, and a schema-validated endpoint for every mini-app — WhatsApp, Audiences, Sequences, Bot Flows, Instagram, and Email.
Send a WhatsApp message in one call
Every send endpoint follows the same shape: authenticate with your scoped API key, describe the message, and optionally attach an Idempotency-Key so retried requests never duplicate a send.
- Type-specific endpoints for text, image, video, document, and location messages
- Consistent request/response schema across every mini-app
- 400 with a precise validation error on any malformed payload
curl -X POST "$BROADCASTS_API_BASE/api/ext/v1/whatsapp/messages/text" \
-H "X-API-Key: $BROADCASTS_API_KEY" \
-H "Idempotency-Key: order-8842-confirmed" \
-H "Content-Type: application/json" \
-d '{
"instanceId": "inst_9f2a",
"to": "+919876543210",
"text": "Your order #8842 has shipped! Track it here: https://trk.example/8842"
}'import fetch from "node-fetch";
const base = process.env.BROADCASTS_API_BASE;
const res = await fetch(base + "/api/ext/v1/whatsapp/messages/text", {
method: "POST",
headers: {
"X-API-Key": process.env.BROADCASTS_API_KEY,
"Idempotency-Key": "order-8842-confirmed",
"Content-Type": "application/json",
},
body: JSON.stringify({
instanceId: "inst_9f2a",
to: "+919876543210",
text: "Your order #8842 has shipped! Track it here: https://trk.example/8842",
}),
});
const message = await res.json();
console.log(message.id, message.status);import os, requests
response = requests.post(
f"{os.environ['BROADCASTS_API_BASE']}/api/ext/v1/whatsapp/messages/text",
headers={
"X-API-Key": os.environ["BROADCASTS_API_KEY"],
"Idempotency-Key": "order-8842-confirmed",
},
json={
"instanceId": "inst_9f2a",
"to": "+919876543210",
"text": "Your order #8842 has shipped! Track it here: https://trk.example/8842",
},
)
message = response.json()
print(message["id"], message["status"])Your API base URL and key are issued from your account's API settings once access is granted.
Built for production integrations
Scoped API keys
Every key is issued with explicit scopes — whatsapp:send, contacts:read, flows:write and more. Give an integration exactly the access it needs, nothing else.
Idempotent sends
Pass an Idempotency-Key header on any send endpoint and retry network failures safely — you'll never double-send a message because a request timed out.
Real-time webhooks
Subscribe to inbound messages, delivery status changes, and flow events. Your systems stay in sync without polling.
Validated & documented
Every endpoint is schema-validated end-to-end and ships with an interactive OpenAPI/Swagger reference — request shapes can't drift from the docs.
One key, every mini-app
Each product surface is exposed as its own scoped mini-app under /api/ext/v1.
Send text, image, video, document, and location messages; manage devices.
Broadcast
Trigger and estimate audience-wide broadcast campaigns.
Contacts
Create, look up, and manage contact records and custom fields.
Audiences
Add or remove contacts from segments; trigger audience-based automations.
Sequences
Enrol and manage contacts in multi-step, multi-channel nurture journeys.
Bot Flows
Trigger published Bot Flow sessions and read session state.
Templates
List and send approved WhatsApp message templates.
Send DMs and manage comment-to-DM automation.
Send transactional and campaign email through the same contact graph.
Media
Upload and retrieve media assets referenced across channels.
Developer FAQ
How do I authenticate with the Broadcasts API?
Every request carries an X-API-Key header. Keys are generated per-tenant from your dashboard and are issued with specific scopes (for example whatsapp:send or contacts:read), so an integration only gets the access it's granted.
How do I avoid sending a message twice on retry?
Send endpoints accept an Idempotency-Key header. If you retry a request with the same key after a timeout, Broadcasts returns the original result instead of sending again.
Can I get notified of delivery status and replies without polling?
Yes — configure a webhook endpoint to receive inbound messages, delivery status changes (sent, delivered, read, failed) and flow/sequence events in real time.
Is there interactive API documentation?
Yes, every account gets an OpenAPI-generated Swagger reference covering every mini-app endpoint, its scopes, request schema and example payloads.
