EnoSend
Home Features How it works Pricing Documentation Contact Sign in Get started
Free bulk campaigns · Developer API · Human-mode pacing

Low-Cost WhatsApp API For Developers

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.

4.9/5 · trusted by 1,200+ developers
# 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!"}'
3-day free trial 1 number to test Cancel anytime
REST
Clean JSON API, no SDK required
23
Webhook event types
99.9%
Target uptime
3
Products, one platform
⚡ Oh, and one more thing

We made our API feel human.

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 ↓

Human-mode

Your messages arrive like a real person typed them.

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.

A
Ama Mensah
last seen recently
Want to feel the difference yourself?

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.

Start trial →
One template, every send unique

Write one message. Everyone gets a different version.

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.

📝 You write this once {Hi|Hey|Hello} {Ama|Kojo|Akua}, your order is ready
✨ Each contact receives

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.

Bulk send · Free

One API call. Up to 500 contacts. Done.

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.

Bulk sendfree

What you get for $0

  • ✓ Up to 500 recipients per call
  • ✓ Spintax {a|b|c} rendering
  • ✓ Per-recipient custom text
  • ✓ Idempotency keys (no double-sends)
  • ✓ Async 202 + poll URL
  • ✓ Same dashboard for monitoring
+ Human-modesafety

What Human-mode adds

  • ⚡ Natural pacing: presence → typing → pause → send
  • ⚡ Length-aware typing duration with jitter
  • ⚡ Daily warm-up budget (30→1,500/day as the number ages)
  • ⚡ Flag detection + auto-pause mid-batch
  • ⚡ Recipient-level cooldowns across the queue
  • ⚡ The thing that keeps your number alive
⚠️
We let you bulk send without Human-mode. We also let you know what happens.

WhatsApp 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…" }
For AI agents

Let Claude (and any AI agent) send WhatsApp for you

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.

1. Grab your key
Dashboard → API Keys

Create a wa_live_… key (the same one the REST API uses). Copy the ready-made Claude config snippet next to it.

2. Paste into Claude
One config block

Add the snippet to claude_desktop_config.json. Restart Claude and the tools appear under the 🔧 icon.

3. Ask in plain English
It just sends

"Send 233244… a WhatsApp saying the order ships tomorrow" → done. Every send lands in your dashboard, billed to your wallet.

Desktop & Code

JSON config

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"
      }
    }
  }
}
Claude.ai

Custom connector

On claude.ai, use the OAuth form. One public Client ID for everyone; your API key goes in Client Secret.

Remote MCP URL
https://mcp.enosend.com/mcp
OAuth Client ID
enosend-mcpsame for every account
Client Secret
wa_live_YOUR_KEYyour dashboard API key

The Client ID is not your API key. Only the secret field carries wa_live_….

Tools exposed to the agent

Same REST API as the dashboard. send_message returns immediately; use status tools when you ask if a send was delivered.

list_instancesConnected numbers
check_human_modeInspect Human-mode
toggle_human_modeEnable / change pace
send_messageOne text (no polling)
get_message_statusDelivery status
check_message_statusSame as above
send_bulk_messagesUp to 500 recipients
get_bulk_statusBulk campaign progress

Works with any MCP-aware client: Claude Desktop, ChatGPT Desktop, Cursor, Continue, custom agents. One URL, your key, your account.

Products

Build on a growing platform

Each product is a clean REST surface with shared billing, auth, and webhooks. Plug in once and get the whole platform.

WhatsApp API

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 more
Free

Bulk Messaging

Build 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 optional
Choose your path

Dashboard campaigns or developer API

Most competitors sell only an API. EnoSend gives marketers a full campaign builder for free, and developers the REST endpoints they expect.

For developers

REST API & webhooks

Send and receive from your backend, bot, or automation. Signed webhooks, multiple instances, and SDK-friendly JSON. Integrate in minutes.

  • Text, media, polls, buttons
  • 23 webhook event types
  • Node, Python, PHP examples
  • Same Human-mode toggle per number
See API setup →
Developer tools

Everything you need to integrate fast

Full documentation, an interactive API tester, signed webhooks, and code examples. Go from zero to your first message in minutes.

node.js · receive & reply
// 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);
});
Developer resources

Use any language you love

Pure REST + JSON. Official SDK examples for the popular stacks, plus copy-paste snippets in the docs.

JS

Node.js

Type-safe wrapper over the REST API. Async/await everywhere, zero deps.

View example →
Py

Python

Drop-in for Django, Flask, FastAPI. Works with httpx or requests.

View example →
PHP

PHP / Laravel

Guzzle-based client, Laravel facade, queue-friendly outbound sender.

View example →
n8n

n8n & Zapier

Use the Webhook + HTTP Request nodes. No code, no SDK needed.

View example →
Send anything

Every WhatsApp message type, one API

Not just plain text. Everything WhatsApp supports, surfaced as clean endpoints.

Text

Formatted text, mentions, links. Markdown-style bold and italic.

Image & video

JPG, PNG, GIF, MP4 with caption support and inline previews.

Documents

PDF, DOCX, XLSX, CSV. Anything up to WhatsApp's 100 MB limit.

Voice notes

OGG / MP3 voice messages, play-once mode, recorded audio.

Contact cards

vCards with multiple numbers, emails and addresses.

Location & polls

Pin a location, run an interactive poll, button menus.

How it works

Connect, send & scale in 3 steps

Link your WhatsApp once, then launch a bulk campaign from the dashboard or integrate the API into your stack.

1

Connect your WhatsApp

Scan a QR code to link your number securely. We hold the session server-side so your phone can stay in your pocket.

2

Send via API or campaigns

Fire POST /messages/text from your app, or launch a Bulk Messaging campaign from the dashboard. Text, media, polls: all supported.

3

Receive & track in real time

Set a webhook URL for incoming messages and delivery events. Build bots, notifications, or a full inbox on top.

Use cases

What developers build with it

Anything that needs to send, receive, or react to a message. You own the logic.

AI Chatbot

Connect your LLM to WhatsApp

Hook MESSAGES_UPSERT, pass the text to your AI (OpenAI / Claude / Gemini), reply via the send API. Full bot in under 50 lines.

No-code

n8n / Make / Zapier flows

Use the webhook URL as a trigger. Route messages, send notifications, update CRMs. No code needed.

Transactional

Notifications & receipts

Order confirmations, booking reminders, payment receipts. Fire a POST when an event happens and the message lands instantly.

Multi-tenant

One instance per client

Agencies can spin up isolated WhatsApp sessions per client via the API. Volume discounts on the Partner plan.

Support

Build a WhatsApp inbox

Pull message history, chats, contacts. Sync into your helpdesk or build your own inbox UI.

Marketing

Bulk outreach & campaigns

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.

Integrations

Works with your stack

It's REST + JSON. If it can speak HTTP, it can use this API.

n8n Make Zapier OpenAI / Claude / Gemini Node.js Python PHP Go + anything that speaks HTTP
FAQ

Common questions

Yes. Campaigns, contact lists, and scheduling are included free. You pay for your WhatsApp session plan (Basic / Pro / etc.) and, optionally, Human-mode per connected number. Human-mode adds presence, typing, and natural pacing, ideal for daily outreach. Standard sends stay instant with no daily cap.
No. Messages are sent from your own WhatsApp number. Recipients see your brand, your profile photo, and your number exactly as if you typed it yourself. With Human-mode on, they even see typing indicators before your message arrives.
Yes. Pro and Plus plans support multiple connected sessions, each fully isolated with its own webhook events, API access, and optional Human-mode subscription.
Think of a session as one WhatsApp number connected and running on EnoSend. Once connected, all messages for that number flow through. Pay per active session.
Push only. We POST to your URL the moment an event fires. Each payload is HMAC-SHA256 signed so you can verify it's us before processing.
Yes. Standard REST + JSON, so n8n's Webhook + HTTP Request nodes work out of the box. Same for Make and Zapier.
New sessions return 402 insufficient_funds. Set up auto top-up to avoid interruption. Refills automatically when balance drops below a threshold you define.
Yes. The interactive API Tester lets you fire real requests from the browser. Paste your key, pick an endpoint, fill the form, hit Run.

Ready to integrate?

Get your API key and send your first message in minutes. No per-message fees. Start building today.