Bulk WhatsApp Messaging to Your Opted-In Customers
Send an approved template to your audience in a 3-step campaign wizard: pick contacts or tags, or upload a CSV, map the variables, then send now or schedule it. Opted-out numbers are skipped, quiet hours hold sending, and delivery, reads and replies are tracked.
✦ 14-day free trial · Your own WhatsApp Business number · Meta bills messages directly
Official Broadcasting That Protects Your Number
StartMessaging runs on Meta's official WhatsApp Business Platform with your own WhatsApp Business Account, not on WhatsApp Web automation that gets numbers blocked. You send Meta-approved templates to opted-in contacts, and anyone who replied STOP is skipped automatically. Meta sets a daily messaging limit for your business; your quality rating and current limit are shown in the dashboard, and if Meta limits sending, the campaign pauses so you can resume it later. Before launch, a pre-launch check estimates how many people can get it today and what Meta will charge.
- Audience from picked contacts (up to 1,000), tag filters or a CSV upload (up to 50,000 rows)
- Variables mapped from contact fields, attributes or fixed text, with image, video or document headers
- Opted-out contacts skipped automatically, even if they opt out before their turn
- Send now or schedule up to 60 days ahead; pause, resume, unschedule or cancel, with delivery and read tracking
Everything a Bulk Send Needs, the Official Way
-
3-Step Campaign Wizard
Pick an approved template, choose the audience and review before launch. Save a draft, or create and launch in one go.
-
Personalised Variables & Media
Fill each template variable from a contact field, a custom attribute or fixed text, and add an image, video or document header.
-
Opt-Out Protection
Contacts who replied STOP can't be selected, and anyone who opts out before their turn is skipped. A CSV audience goes only to numbers that haven't opted out.
-
Pause, Resume & Reports
Pause a running campaign to stop the remaining sends and resume it later; messages already sent stay sent. Each campaign's report follows sent, delivered, read, button taps and replies, explains why messages failed, shows about what Meta charged and exports the recipients as a CSV.
-
Follow-Up Chatbot Flow
Optionally enrol recipients in a chatbot flow so replies to the campaign are handled automatically. On the Business plan.
-
Single Sends via API
Send one template per request from your own code with POST /api/v1/messages. Bulk sends happen in the dashboard, and you can read campaign results over the API.
-
Scheduling & Quiet Hours
Schedule a broadcast from 2 minutes to 60 days ahead, then unschedule or cancel it until it starts. Quiet hours pause sending and carry on by themselves when they end, and a calendar shows what went out and what is scheduled.
-
Pre-Launch Check
Before you launch, see what Meta says about your number and template, account restrictions, payment problems, how many people can get it today, US numbers that will be skipped and an estimated Meta charge.
Official Bulk Messaging vs Unofficial Bulk Senders
Blasting messages through WhatsApp Web automation or modified apps breaks WhatsApp's terms and puts your number at risk. Here's how the official route differs.
| Comparison Point | StartMessaging (Official API) | Unofficial Bulk Senders |
|---|---|---|
| How messages are sent | Official WhatsApp Business Platform, with your own WABA | Automates WhatsApp Web or a phone app |
| Message format | Meta-approved templates with media headers and buttons | Free text, often flagged as spam |
| Opt-outs | STOP replies skipped automatically | Tracked by hand, if at all |
| Sending pace | Within Meta's messaging limit, with quiet hours; pause and resume anytime | Manual delays to avoid detection |
| Delivery & read tracking | ||
| Number risk | Low with opted-in contacts and approved templates | High; numbers are often blocked |
Send an approved template from your code
curl -X POST https://waba-api.startmessaging.com/api/v1/messages \
-H "Authorization: Bearer sm_live_your_api_key" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: diwali-sale-919812345678" \
-d '{
"to": "+919812345678",
"type": "template",
"template": {
"name": "diwali_sale",
"language": "en_US",
"headerMediaUrl": "https://cdn.example.com/diwali-sale.jpg",
"parameters": [
{
"text": "Aarti"
}
],
"buttonParameters": [
{
"index": 0,
"subType": "copy_code",
"couponCode": "DIWALI25"
}
]
}
}' const res = await fetch('https://waba-api.startmessaging.com/api/v1/messages', {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + process.env.SM_API_KEY,
'Content-Type': 'application/json',
'Idempotency-Key': 'diwali-sale-919812345678',
},
body: JSON.stringify({
"to": "+919812345678",
"type": "template",
"template": {
"name": "diwali_sale",
"language": "en_US",
"headerMediaUrl": "https://cdn.example.com/diwali-sale.jpg",
"parameters": [
{
"text": "Aarti"
}
],
"buttonParameters": [
{
"index": 0,
"subType": "copy_code",
"couponCode": "DIWALI25"
}
]
}
}),
});
const { data } = await res.json();
console.log(data.id, data.status); import os, requests
res = requests.post(
'https://waba-api.startmessaging.com/api/v1/messages',
headers={
'Authorization': f"Bearer {os.environ['SM_API_KEY']}",
'Idempotency-Key': 'diwali-sale-919812345678',
},
json={
"to": "+919812345678",
"type": "template",
"template": {
"name": "diwali_sale",
"language": "en_US",
"headerMediaUrl": "https://cdn.example.com/diwali-sale.jpg",
"parameters": [
{
"text": "Aarti"
}
],
"buttonParameters": [
{
"index": 0,
"subType": "copy_code",
"couponCode": "DIWALI25"
}
]
}
},
)
data = res.json()['data']
print(data['id'], data['status']) <?php
$body = <<<'JSON'
{
"to": "+919812345678",
"type": "template",
"template": {
"name": "diwali_sale",
"language": "en_US",
"headerMediaUrl": "https://cdn.example.com/diwali-sale.jpg",
"parameters": [
{
"text": "Aarti"
}
],
"buttonParameters": [
{
"index": 0,
"subType": "copy_code",
"couponCode": "DIWALI25"
}
]
}
}
JSON;
$ch = curl_init('https://waba-api.startmessaging.com/api/v1/messages');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('SM_API_KEY'),
'Content-Type: application/json',
'Idempotency-Key: diwali-sale-919812345678',
],
CURLOPT_POSTFIELDS => $body,
]);
$data = json_decode(curl_exec($ch), true)['data'];
echo $data['id'] . ' ' . $data['status']; Broadcast — Frequently Asked Questions
What is bulk WhatsApp messaging, and is it allowed?
Bulk WhatsApp messaging means sending the same approved template to many customers at once. It's allowed on the official WhatsApp Business Platform when recipients have opted in to hear from you and you use Meta-approved templates. Tools that automate WhatsApp Web or the phone app to blast messages break WhatsApp's terms and often get numbers blocked.
How many contacts can I send a broadcast to?
Pick up to 1,000 contacts by hand, select everyone who matches your tag filters, or upload a CSV of up to 50,000 rows. Meta also sets a messaging limit for your business: how many different customers you can message outside a 24-hour window in a rolling 24 hours, shared by all your numbers. Meta raises it as your quality stays good. The pre-launch check estimates how many people can get the campaign today, and if Meta limits sending, the campaign pauses so you can resume it later.
Do I need to use pre-approved templates for broadcasts?
Yes. WhatsApp requires business-initiated messages to use approved templates. You can create templates in our dashboard. Meta reviews templates; most decisions arrive quickly, but timing is set by Meta.
Can I pause a campaign after launch?
Yes. Launching starts sending right away, but you can pause a running campaign to stop the remaining sends and resume it later, or cancel it so nobody else receives it. Messages already sent stay sent. A scheduled campaign can be unscheduled (it becomes a draft again) or cancelled until it starts. You can also duplicate a campaign to reuse its setup.
Can I schedule a broadcast?
Yes, on Team and up. Pick a time from 2 minutes to 60 days ahead; the audience is checked again when it sends, so anyone who opted out in the meantime is skipped. If your workspace has quiet hours, sending waits them out and carries on by itself. On the Business plan, a campaign can also repeat every day, on chosen weekdays or monthly.
Can I broadcast carousels or limited-time offers?
No. Campaigns can't send carousel, limited-time offer, authentication or catalog templates, so the campaign picker hides them. Carousel, limited-time offer and authentication templates can go out one at a time from the inbox or through the API (POST /api/v1/messages). Broadcasts send standard templates with text or media headers, variables, quick replies, links and coupon codes.
Can I send bulk messages through the API?
The API sends one message per request with POST /api/v1/messages, within your plan's API rate limits. Campaigns are created and launched in the dashboard; over the API you can read a campaign's status and results.
Do I need TRAI DLT registration to send WhatsApp broadcasts in India?
No. WhatsApp Business Platform messages do not need TRAI DLT registration — DLT applies to SMS. You still need opt-in from each contact and Meta-approved templates.
Start Broadcasting on WhatsApp Today
14-day free trial. Connect your own WhatsApp Business number in minutes.