wwa
Sign inRead the API docs
Self-hosted · your database, your keys

A WhatsApp API your backend can rely on.

Link a number, get a token, POST to /v1/send. wa keeps the sessions alive, retries the webhooks and logs every delivery — you ship the feature.

Read the API docsSign in
Invite-only. Ask the person running this instance for an invite.
POST /v1/send
curl -X POST https://api.sapa.tokoaplikasi.id/v1/send \
  -H "Authorization: Bearer $WA_DEVICE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"target":"628123456789",
       "message":"Order 40192 is on its way."}'

Link real devices

Scan a QR code once. wa keeps the session alive across restarts and tells you the truth about its state: connected, disconnected, logged_out.

One endpoint

A token, a target, a message. Every send returns an id you can follow through the message log, plus text, media, locations and polls from the same call.

Signed webhooks

Incoming messages, status changes and device events, HMAC-signed and retried on a backoff that widens from one minute to one hour before giving up after a day.

Three steps

From QR code to first message in a minute.

Every step is visible in the dashboard: device status, tokens, and the delivery log for each message you send.

  1. 01
    Add a device
    Name it, then scan the code with WhatsApp → Linked devices. The status walks qr → connecting → connected.
    connected
  2. 02
    Create a token
    Each device gets its own token, scoped to that device alone. Shown once at creation, revocable whenever you want.
    shown once
  3. 03
    Send
    POST to /v1/send from your backend. You get a message id per recipient, and the delivery status arrives on your webhook.
    200 OK