Also great for businesses sending bulk campaigns
Clean REST endpoints, signed webhooks, multiple connected numbers, no per-message fees. Drop it in your stack and your first message is out in minutes, not days.
# Send a WhatsApp message curl -X POST \ 'https://api.enosend.com/v1/instances/INSTANCE_ID/messages/text' \ -H 'Authorization: Bearer wa_live_…' \ -d '{"number":"233244000000","text":"Hello!"}'
Most WhatsApp APIs blast your message out the instant you hit send. That's perfect for OTPs, but exactly how outreach numbers get banned in hours. So we built something different. Keep reading ↓
Flip Human-mode on for any connected number. Your contact sees them go online, then typing…, then your message arrives after a brief pause. Same API call, zero code changes. WhatsApp anti-spam treats it like a real conversation, not a bot blast.
Sign up and you get a 3-day free trial. Flip Human-mode on for one number, send a message to your own phone, and watch it arrive the way a real person would send it.
Wrap your variations in curly braces, separated by pipes. Each contact gets one variant picked automatically (no AI, no extra cost). Two hundred recipients, two hundred slightly different messages. WhatsApp can't tell it's a campaign because, honestly, none of them look the same.
{Hi|Hey|Hello} {Ama|Kojo|Akua}, your order is ready
You can test this during your 3-day free trial too: fire one campaign with spintax and see the unique sends in your delivery log.
Stop writing your own fan-out loops. POST /messages/bulk takes either a single template (with spintax) for marketing blasts, or a per-recipient array for personalised transactional batches. You get a campaign_id back instantly. Poll, webhook, or check the dashboard. It's free. Human-mode is the safety layer on top.
{a|b|c} rendering202 + poll URLWhatsApp typically flags numbers blasting 50+ identical sends within hours. We surface a loud warning in every API response when Human-mode is off, but the choice is yours. Bans are on you.
# Marketing blast: spintax + 500 numbers, one call curl -X POST 'https://api.enosend.com/v1/instances/<id>/messages/bulk' \ -H 'Authorization: Bearer wa_live_…' \ -H 'Idempotency-Key: promo-2026-06-01' \ -d '{ "text": "{Hi|Hey|Hello}! 30% off {today|this week}", "numbers": ["233244000001", "233244000002", "..."] }' # → 202 Accepted # { "campaign_id": "9b1a3f…", "total": 500, "human_mode": true, # "warnings": [], "poll_url": "https://api.enosend.com/v1/.../bulk/9b1a3f…" }
EnoSend ships an MCP server, the open standard that AI clients like Claude Desktop, ChatGPT Desktop and Cursor speak. Drop your API key in once and your assistant can send WhatsApps, run bulk campaigns, and toggle Human-mode on your behalf. The agent never sees the key value; it travels with each request in a header you configure once.
Create a wa_live_… key (the same one the REST API uses). Copy the ready-made Claude config snippet next to it.
Add the snippet to claude_desktop_config.json. Restart Claude and the tools appear under the 🔧 icon.
"Send 233244… a WhatsApp saying the order ships tomorrow" → done. Every send lands in your dashboard, billed to your wallet.
Paste into claude_desktop_config.json, restart Claude, and the tools appear under the 🔧 icon.
// ~/Library/Application Support/Claude/claude_desktop_config.json { "mcpServers": { "enosend": { "url": "https://mcp.enosend.com/mcp", "headers": { "Authorization": "Bearer wa_live_YOUR_KEY" } } } }
On claude.ai, use the OAuth form. One public Client ID for everyone; your API key goes in Client Secret.
https://mcp.enosend.com/mcpenosend-mcpsame for every accountwa_live_YOUR_KEYyour dashboard API keyThe Client ID is not your API key. Only the secret field carries wa_live_….
Same REST API as the dashboard. send_message returns immediately; use status tools when you ask if a send was delivered.
list_instancesConnected numberscheck_human_modeInspect Human-modetoggle_human_modeEnable / change pacesend_messageOne text (no polling)get_message_statusDelivery statuscheck_message_statusSame as abovesend_bulk_messagesUp to 500 recipientsget_bulk_statusBulk campaign progressWorks with any MCP-aware client: Claude Desktop, ChatGPT Desktop, Cursor, Continue, custom agents. One URL, your key, your account.
Each product is a clean REST surface with shared billing, auth, and webhooks. Plug in once and get the whole platform.
A clean REST API to send messages, manage sessions, receive webhook events, and connect WhatsApp to any system — your AI, n8n, Zapier, or your own backend.
Learn moreBuild contact lists, launch scheduled WhatsApp campaigns, and track delivery in real time — included free. Add Human-mode on your connected number when you want presence, typing, and paced delivery for campaign-style sends.
Free campaigns · Human-mode optionalMost competitors sell only an API. EnoSend gives marketers a full campaign builder for free, and developers the REST endpoints they expect.
Import contacts, write your message, schedule or send now. Track delivery and read rates from one dashboard. Perfect for promotions, reminders, and customer updates.
Send and receive from your backend, bot, or automation. Signed webhooks, multiple instances, and SDK-friendly JSON. Integrate in minutes.
Full documentation, an interactive API tester, signed webhooks, and code examples. Go from zero to your first message in minutes.
// 1. Receive webhook app.post('/webhook', async (req, res) => { const { event, data } = req.body; if (event === 'MESSAGES_UPSERT' && !data.key.fromMe) { // 2. Send to your AI const reply = await askAI(data.message.conversation); // 3. Reply via the API await fetch(`${API}/instances/${INSTANCE}/messages/text`, { method: 'POST', headers: { 'Authorization': `Bearer ${KEY}` }, body: JSON.stringify({ number: data.key.remoteJid.split('@')[0], text: reply }) }); } res.sendStatus(200); });
Pure REST + JSON. Official SDK examples for the popular stacks, plus copy-paste snippets in the docs.
Not just plain text. Everything WhatsApp supports, surfaced as clean endpoints.
Formatted text, mentions, links. Markdown-style bold and italic.
JPG, PNG, GIF, MP4 with caption support and inline previews.
PDF, DOCX, XLSX, CSV. Anything up to WhatsApp's 100 MB limit.
OGG / MP3 voice messages, play-once mode, recorded audio.
vCards with multiple numbers, emails and addresses.
Pin a location, run an interactive poll, button menus.
Link your WhatsApp once, then launch a bulk campaign from the dashboard or integrate the API into your stack.
Scan a QR code to link your number securely. We hold the session server-side so your phone can stay in your pocket.
Fire POST /messages/text from your app, or launch a Bulk Messaging campaign from the dashboard. Text, media, polls: all supported.
Set a webhook URL for incoming messages and delivery events. Build bots, notifications, or a full inbox on top.
Anything that needs to send, receive, or react to a message. You own the logic.
Hook MESSAGES_UPSERT, pass the text to your AI (OpenAI / Claude / Gemini), reply via the send API. Full bot in under 50 lines.
Use the webhook URL as a trigger. Route messages, send notifications, update CRMs. No code needed.
Order confirmations, booking reminders, payment receipts. Fire a POST when an event happens and the message lands instantly.
Agencies can spin up isolated WhatsApp sessions per client via the API. Volume discounts on the Partner plan.
Pull message history, chats, contacts. Sync into your helpdesk or build your own inbox UI.
Bulk Messaging is free: import lists, schedule campaigns, and track delivery in real time. Upgrade a number with Human-mode when you want natural pacing and typing indicators on outreach sends.
It's REST + JSON. If it can speak HTTP, it can use this API.
402 insufficient_funds. Set up auto top-up to avoid interruption. Refills automatically when balance drops below a threshold you define.Get your API key and send your first message in minutes. No per-message fees. Start building today.