Developer API — Business plan

WhatsApp Send API for Developers

Send WhatsApp messages from your CRM, store, or internal tools with a single HTTP call. Your own number, flat monthly pricing, no Meta business verification, no per-message fees.

API keys are created in the dashboard under API Keys (Business plan).

Authentication

All requests are authenticated with an API key in the Authorization header. Keys look like bwa_live_… and are shown once at creation — BulkWA stores only a hash.

Authorization: Bearer bwa_live_YOUR_KEY

Base URL: https://bulkwa-server.onrender.com. Keep keys server-side; never ship them in browser or mobile code. Revoke a leaked key instantly from the dashboard.

Send a message

POST/v1/messages
FieldTypeDescription
tostring, requiredRecipient phone in international format, e.g. +14155550123. 8-15 digits.
messagestring, requiredText message body, max 4096 characters.
session_iduuid, optionalWhich of your WhatsApp numbers to send from. Defaults to your first connected session.

cURL

curl -X POST https://bulkwa-server.onrender.com/v1/messages \
  -H "Authorization: Bearer bwa_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "+14155550123",
    "message": "Your order #1042 has shipped!"
  }'

Node.js

const res = await fetch("https://bulkwa-server.onrender.com/v1/messages", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.BULKWA_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    to: "+14155550123",
    message: "Your order #1042 has shipped!",
  }),
});

const data = await res.json();
// { id: "wamid...", status: "sent", to: "+14155550123" }

Response — 200

{
  "id": "3EB0538DA65B5B2F7A2B",
  "status": "sent",
  "to": "+14155550123"
}

API sends count against your plan’s message quota, are serialized with your campaigns’ anti-ban delays, and respect STOP opt-outs automatically. Text messages only for now — media support is planned for v1.1.

List your sessions

GET/v1/sessions
curl https://bulkwa-server.onrender.com/v1/sessions \
  -H "Authorization: Bearer bwa_live_YOUR_KEY"

Response — 200

{
  "sessions": [
    {
      "id": "0b6a1c9e-...",
      "phone_number": "+14155550100",
      "status": "connected"
    }
  ]
}

Check plan & usage

GET/v1/me
curl https://bulkwa-server.onrender.com/v1/me \
  -H "Authorization: Bearer bwa_live_YOUR_KEY"

Response — 200

{
  "plan": "business",
  "api_access": true,
  "usage": {
    "messages_sent_this_month": 1250,
    "monthly_limit": 10000,
    "remaining": 8750,
    "messages_sent_today": 84,
    "daily_limit": null
  }
}

Rate limits

  • 60 requests per minute per account on every /v1 endpoint. Exceeding it returns 429.
  • Message sends also count against your plan’s monthly message quota — the same pool your dashboard campaigns use.
  • Sends through the same WhatsApp number are automatically spaced with anti-ban delays; bursts are queued, not dropped.

Error codes

Errors are JSON: { "error": "code", "message": "human explanation" }

StatusCodeMeaning
400invalid_request / invalid_toMalformed body — check that `to` has 8-15 digits and `message` is a non-empty string (max 4096 chars).
401missing_api_key / invalid_api_keyNo key, a malformed key, or a revoked key. Create a new key in the dashboard.
402payment_lockedYour subscription payment failed. Update your payment method in Billing.
403upgrade_requiredThe developer API requires the Business plan.
404session_not_foundThe session_id you passed does not belong to your account.
409session_not_connectedNo connected WhatsApp session. Reconnect in the dashboard and retry.
422recipient_opted_outThis recipient replied STOP to you — BulkWA blocks the send for compliance.
429quota_exceeded / rate limitYou hit your plan's message quota or the 60 requests/minute rate limit. Retry later.
502send_failedWhatsApp did not acknowledge the message. Safe to retry.
503service_unavailableTemporary backend issue (e.g. quota check failed). Retry with backoff.

Start sending in five minutes

Upgrade to the Business plan, connect your WhatsApp number by QR code, create a key, and make your first API call.