Self-hosted WhatsApp gateway

Your WhatsApp number, now with an API.

Scan a QR code, copy your token, and send order updates, invoices and reminders straight from your backend. Replies land on your webhook, or you can answer them yourself in the web inbox.

Setup
~2 minutes
Media
Up to 16 MB
Per message
$0
curl https://your-host/api/send \
  -H "Authorization: Bearer $WAAPI_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"to": "923001234567",
       "text": "Order #1042 has shipped 🚚"}'
200 OK
AS
Ali's Store
now
Order #1042 has shipped 🚚
10:43 āœ“āœ“
Great, can I get it before Friday?
10:44

Everything happens on the number you already have.

waapi links as a device, the same way WhatsApp Web does. Your phone keeps working, customers see your usual name and photo, and the whole thing runs on your own server.

A shared inbox in the browser

Every chat on the number shows up live, including messages sent from the phone. Reply with text or files and watch the read ticks turn blue.

Order #1042 has shipped 🚚
API 10:43 āœ“āœ“
Great, can I get it before Friday?
10:44
Yes, it's out for delivery Thursday šŸ‘
10:46 āœ“

Linked in one scan

Settings → Linked devices → Link a device. No Meta review, no business verification. Prefer a code? Use the 8-digit pairing code instead.

Connected

Webhooks you can trust

Incoming messages are POSTed to your URL as JSON, signed with HMAC-SHA256 and a timestamp so replays get rejected. Failed deliveries are retried.

X-WaApi-Signature: sha256=9f2c…e1
{
  "event": "message",
  "from": "923339876543",
  "push_name": "Sana",
  "type": "text",
  "text": "Great, can I get it before Friday?"
}

Sends at a human pace

Messages from one number go out one at a time with a random 1.5–4 second gap, under a daily cap you set. Your code fires and forgets; the queue does the waiting.

How it works

From sign-up to first message before your coffee cools.

  1. 01

    Add a number

    Create an account and click Add number. You can run a few numbers from one account, each with its own token.

  2. 02

    Scan from your phone

    Point WhatsApp at the QR code. The session is saved, so it reconnects by itself after restarts.

  3. 03

    Call /api/send

    From PHP, Node, Python, a cron job or a no-code tool. Anything that can make an HTTP request works.

The honest part

Great for some jobs. Wrong for others.

waapi isn't Meta's official Business API. That's why it's free and takes minutes to set up, but it also means WhatsApp can ban numbers that act like spammers. Use it for messages people are expecting.

Use it for

  • Order and delivery updates
  • Appointment and payment reminders
  • Invoices and receipts as PDFs
  • Replying to customers who wrote first

Don't use it for

  • Marketing blasts and broadcasts
  • Cold messages to bought lists
  • Login codes you can't afford to lose
  • Anything you'd hate to receive

Send your first message in the next five minutes.