Free Your first WhatsApp number, forever

The WhatsApp API that takes five minutes, not five weeks.

Scan a QR code with any WhatsApp number, then send and receive messages over plain HTTP. No Meta business verification. No template approvals. No per-message fees.

First number free · $4/mo per extra number · No credit card to start

# Send a WhatsApp message
curl -X POST https://api.wasender.dev/messages/text \
  -H "Authorization: Bearer $WASENDER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "61371989950",
    "body": "Your order #1024 has shipped."
  }'

# → 200 OK
# {"sent": true, "message": {"id": "…", "status": "pending"}}

How it works

Three steps. No sales call.

No business verification, no template approvals, no waiting on a review queue. All you need is a phone that can scan a square.

Create a channel

Sign up and get a channel token — wsk_sg_… — that is scoped to exactly one WhatsApp number.

Scan the QR

GET /users/login/image returns a PNG. Scan it under Linked devices. Credentials persist, so reconnects never ask again.

POST your first message

Poll GET /health until it reads connected, then hit /messages/text. That is the whole integration.

Why teams switch

Built for developers, not for marketers.

One token per number. Clean JSON. Webhooks that retry. Everything you would build yourself if you had a spare month and a Baileys fork.

One QR scan, no verification

No Business Manager, no display-name review, no waiting on template approval. Scan once and the number stays linked.

Flat pricing you can forecast

$4 per connected number per month. No per-message fees, no 24-hour conversation windows, no credit balance to top up at 2am.

Webhooks that actually retry

Six events, HMAC-signed, retried with backoff. Failures are counted and replayable instead of quietly dropped.

No SDK to install

Plain HTTP and plain JSON. If your language can make a POST request, your integration is already three lines from done.

Groups, media, polls, reactions

Images, video, documents, voice notes, stickers, locations, contact cards, polls, reactions, starring, and full group administration.

Readable by your coding agent

An OpenAPI 3.1 spec plus llms.txt and llms-full.txt, so Claude or Cursor can wire the integration without you writing glue.

What you can do

Everything WhatsApp does, over HTTP.

Not a cut-down "send text only" API. Group chats, every media type, polls, reactions and receipts — all through the same token and the same JSON.

Group chat

Create groups, set the subject and description, add and remove participants, manage invite links, and leave — full group administration, not just sending.

Rich media

Images, video, audio, voice notes, documents and stickers. Upload once and reuse the file by id across as many sends as you like.

Polls & reactions

Send polls and read the votes back. React with any emoji, edit a message after sending, star it, or delete it for everyone.

Locations & contacts

Share a pin with coordinates, send a contact card, or post a link that renders with a proper rich preview instead of a bare URL.

Incoming messages

Real-time webhooks for every message received, with delivery and read receipts, so you can build two-way conversations and not just blasts.

Chat management

List and search chats, mark them read, archive, pin, mute or delete — the same controls your users have in the app.

Contacts & validation

Read your address book, fetch a contact's public profile, and check in bulk whether a list of numbers is actually reachable on WhatsApp.

Typing indicators

Set your online presence and send typing or recording indicators, so an automated reply still feels like a real conversation.

Agent-ready

Your AI can read the docs faster than you can.

Most API docs are a React app wrapped around the answer. Ours ship as plain text at a predictable path, generated from the same spec that serves the reference — so they cannot drift.

  • llms.txt — the whole API, the auth model and the gotchas, in a few thousand tokens
  • llms-full.txt — every endpoint with its full description
  • OpenAPI 3.1 — generate a typed client in any language
  • CORS-open — an agent can fetch it from anywhere, unauthenticated
# wasender.dev

> WhatsApp API Gateway. Send and receive WhatsApp
> messages over plain HTTP, on a normal phone number,
> with no Meta business verification and no
> per-message fees.

## Authentication

Every request carries a channel token — one per
connected WhatsApp number:

    Authorization: Bearer wsk_sg_xxxxxxxxxxxxxxxx

## Things that will bite you if you do not read them

- A 2xx means WhatsApp ACCEPTED the message, not that
  it was delivered. Confirm via webhooks or
  GET /statuses/{MessageID}.
- Recipients are international format WITHOUT a
  leading "+" — e.g. "61371989950".
// Send anything — the shape never changes.
POST /messages/text     { to, body }
POST /messages/image    { to, media }
POST /messages/location { to, lat, lng }

// One error envelope, on every single route.
{
  "error": {
    "code": 429,
    "message": "Rate limit exceeded",
    "href": "https://docs.wasender.dev/errors",
    "support": "support@wasender.dev"
  }
}

Simple by design

Learn it once. It works the same everywhere.

There is one way to authenticate, one response shape, and one error format. Nothing to configure before your first message, and nothing surprising on your fiftieth.

  • One bearer token per number — no key pairs, no OAuth dance, no signing
  • Plain JSON in, plain JSON out — no XML, no SOAP, no proprietary envelope
  • Every error carries a code, a readable message, a docs link and a support address
  • No SDK required — if your language can make an HTTP request, you are done

Pricing

One number free. Then $4 a month.

No tiers to outgrow, no seats, no message credits. You pay for connected numbers and nothing else.

Free
$0 / month

Enough to run a real side project, forever.

  • 1 connected WhatsApp number
  • Unlimited messages
  • Groups, media, polls, webhooks
  • Webhooks with retries
  • Community support
Start free

FAQ

Questions we get asked before signing up.

If yours is not here, email us — a human answers.

Do I need a Meta Business account or a verified business?

No. This is not the Cloud API. You link a normal WhatsApp number the same way you link WhatsApp Web — a QR scan under Linked devices. There is no business verification, no display-name review and no template approval queue.

Can I keep using WhatsApp on my phone?

Yes. Linking a device does not sign you out. That said, use a dedicated number for anything automated rather than your personal line — see the section above.

What happens if my session disconnects?

Credentials are stored after the first scan, so reconnects are automatic and need no new QR. You also get session.status and session.disconnected webhooks, so your app knows before your users do. During a reconnect the API returns 503 — retry with backoff.

Is there really no per-message charge?

Correct. There is no metering and no credit balance anywhere in the system. You are billed a flat $4 per connected number per month via Stripe, with the first number on your account free. Rate limits exist, but they protect the number from WhatsApp's anti-abuse systems — they are not an upsell.

Which languages and frameworks are supported?

All of them. There is no SDK to install and no client library to keep up to date — it is an HTTP API with JSON bodies, so anything that can call fetch, requests, curl or an HTTP node in a workflow tool already works.

Can I self-host it?

The session runtime is a self-contained service and the whole stack is designed to run on ordinary containers. Email us about self-hosting and we will talk through what it involves.

Your first WhatsApp number is free. Go get it.

Five minutes from now you can be sending messages from a real number, from your own code, with nobody's approval.

No credit card · No sales call · Cancel any number, any time