EnoSend
Home Features How it works Pricing Documentation Contact Sign in Get started
Simple process · No technical knowledge required

How EnoSend works for you

Get started in minutes — sign up for a 3-day free trial, connect your WhatsApp, grab an API key, and send your first message.

Two paths

Same platform — pick what fits you

Steps 1–3 are the same for everyone. After that, marketers use Bulk Messaging in the dashboard; developers grab an API key and integrate.

Developers

REST API integration

Create an API key, send your first POST, set a webhook. Code examples in Node, Python, and PHP in steps 4–5.

Go to API setup →
1

Create your account

Sign up with your email or Google. You'll land on your dashboard with an empty wallet — no card, no payment required to look around.

Create account
2

Pick a plan, top up your wallet

Plans start at GHS 30/month. Your wallet covers any session fees and (on Partner) per-session charges. Auto top-up keeps the lights on — pick a balance threshold and refill amount.

See plans
3

Connect your WhatsApp number

Click "New instance" in the dashboard, type your number, scan the QR code from WhatsApp on your phone — Settings → Linked Devices → Link a Device. The connection is held server-side; you don't need to keep your phone open.

Can't scan? Use the phone-link fallback to get an 8-character pairing code instead.

4

Get your API key

Go to API Keys → New key. Copy the wa_live_… token immediately — we never show it again. Keys can be revoked or rotated any time without breaking other keys.

bash
# Save it as an env var
export WA_KEY="wa_live_a1b2c3d4…"
5

Send your first message

One POST to /v1/instances/<id>/messages/text. The message lands instantly. Add a webhook URL to receive replies and delivery receipts.

node.js
const res = await fetch(`https://api.enosend.com/v1/instances/${INSTANCE}/messages/text`, {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${process.env.WA_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    number: '233244000000',
    text:   'Hello from EnoSend!',
  }),
});
const data = await res.json();
console.log(data); // { ok: true, message_id: "..." }
python
import os, requests

r = requests.post(
    f"https://api.enosend.com/v1/instances/{INSTANCE}/messages/text",
    headers={"Authorization": f"Bearer {os.environ['WA_KEY']}"},
    json={"number": "233244000000", "text": "Hello from EnoSend!"},
)
print(r.json())
php
use GuzzleHttp\Client;

$res = (new Client())->post(
  "https://api.enosend.com/v1/instances/$INSTANCE/messages/text",
  [
    'headers' => ['Authorization' => "Bearer {$_ENV['WA_KEY']}"],
    'json'    => ['number' => '233244000000', 'text' => 'Hello from EnoSend!'],
  ]
);
6

Run campaigns with Bulk Messaging — upgrade with Human-mode

Bulk Messaging is free: import contacts, build a campaign, schedule or send now. Track delivery and read rates in real time from your dashboard.

Standard sends deliver instantly — perfect for notifications, order updates, and 1:1 conversations. No daily cap.

For daily outreach at scale, add Human-mode on any connected number (optional, per instance). Every send flows through presence → typing → natural pause → send. Your API code and campaign setup stay the same — just flip the checkbox in instance Settings.

Choose a pace: Stealth, Balanced (recommended), or Fast. Use {Hi|Hey|Hello} in your message body for automatic variant rotation.

See the delivery pipeline →  ·  Human-mode pricing →

Start a free campaign →
Two-way

Receive messages via webhooks

When a customer replies, we POST to the URL you set. Every payload is HMAC-signed so you can verify it's us.

node.js — webhook receiver
const crypto = require('crypto');

app.post('/webhook', (req, res) => {
  // 1. Verify signature
  const sig = req.headers['x-addiny-signature'];
  const expected = 'sha256=' + crypto.createHmac('sha256', SECRET)
    .update(JSON.stringify(req.body)).digest('hex');
  if (sig !== expected) return res.sendStatus(401);

  // 2. Handle the event
  const { event, data } = req.body;
  if (event === 'MESSAGES_UPSERT' && !data.key.fromMe) {
    handleIncoming(data);
  }

  res.sendStatus(200);
});
Under the hood

What happens between you and WhatsApp

Persistent server-side connection

Once your QR is scanned, we hold the WhatsApp session on our servers. Your phone can sleep, your laptop can close — the API keeps working.

Auto-reconnect

If WhatsApp drops the connection, we re-establish it automatically. You're notified via CONNECTION_UPDATE webhook if a re-scan is ever needed.

Signed webhooks

Every payload includes X-EnoSend-Signature — HMAC-SHA256 over the body. Verify before you process to keep your endpoint immune to spoofing.

Live status updates

Track delivery, read receipts and typing indicators via the MESSAGES_UPDATE and PRESENCE_UPDATE events.

Multiple sessions

Pro and Plus plans let you connect 3–6 separate numbers, each fully isolated. Manage them from one dashboard with one API key.

Rotatable API keys

Create as many keys as you want for different apps. Revoke one and it stops working instantly — no downtime for the others.

Ready to send your first message?

Sign up, connect your WhatsApp, and integrate in minutes. No per-message fees.