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

WhatsApp outreach & API for teams and developers

Send bulk campaigns from the dashboard — no code required — or integrate our REST API into your app. Connect multiple numbers, no per-message fees, real-time webhooks. Add Human-mode when outreach needs natural pacing and typing indicators.

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
Smart delivery

Same API call. Natural delivery.

Enable Human-mode on any connected number and every send flows through presence, typing, and natural pacing — your code stays exactly the same. Bulk Messaging is free; Human-mode is the optional upgrade for campaign-style outreach.

your-code.js — unchanged
await fetch(`${API}/messages/text`, {
  method: 'POST',
  headers: { 'Authorization': `Bearer ${KEY}` },
  body:    JSON.stringify({
    number: '233244000000',
    text:   '{Hi|Hey|Hello}, your order is on the way!',
  }),
});
🟢
Set "online" presence
~600 ms · soft signal to WhatsApp
⌨️
"Typing…" for the right duration
Length-aware · ~50ms × characters · jittered
Brief pause
Mimics the human moment before pressing Send
📤
Render {Hi|Hey|Hello} → pick a variant
Personalised copy for every recipient
Send & log
Your code still gets the same JSON response
The bulk-send trap

Send 200 messages in a row → number banned.

Standard API delivery is perfect for OTPs and 1:1 replies. Try the same firehose for outreach and WhatsApp flags your account in hours — sometimes minutes.

~3hrsavg time to ban on fresh numbers blasting 200+ identical sends
Human-mode pacing

Same API call. Looks like a person typed every one.

Every send flows through presence → typing → pause → deliver. Your code stays identical — flip one switch and your outreach reads natural to WhatsApp's anti-spam.

0 code changesenable per number, daily quotas tuned for real outreach volume
Variant tokens

One template. Dozens of unique sends.

Write {Hi|Hey|Hello} {name} once. Each recipient gets a different render — no AI, no extra cost, no duplicate-message footprint.

1 template → 27 variantsjust 3 token groups of 3 options each
Products

Build on a growing platform

Each product is a clean REST surface with shared billing, auth, and webhooks. Plug in once — 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 — 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, 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.