WACRM Developer API

Build chatbots and integrations on your WhatsApp inbox

A REST API for sending WhatsApp text messages, interactive reply buttons, list menus, and Meta templates. Includes real-time signed webhooks and full support for n8n, Make, Zapier, Node.js, and Python.

Base URL https://wacrm.bitlancetechhub.com · JSON in and out · Bearer auth.

1. Get an API key

In your WACRM workspace, open Settings → Developers → Create API key. The key (format wak_live_…) is shown once — we store only a SHA-256 hash of it, so copy it immediately. Revoke and re-issue keys from the same panel at any time.

Send it on every request as a Bearer token:

Authorization Header
http
Authorization: Bearer wak_live_XXXXXXXXXXXXXXXX

All requests and responses are JSON. A key is scoped to the workspace that created it and can act only on that workspace's data.

2. Lead Capture & Management API

Programmatically capture leads from external website forms, landing pages, mobile apps, or backend servers. If a lead includes a phone number, WACRM automatically creates/links a contact record and matches existing conversation history.

POST /api/v1/leadsCreate a new Lead with custom attributes
POST/api/v1/leads
curl -X POST https://wacrm.bitlancetechhub.com/api/v1/leads \
  -H "Authorization: Bearer wak_live_XXXX" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Jane Doe",
    "phone": "+919876543210",
    "email": "jane@example.com",
    "company": "Acme Corp",
    "value": 55000,
    "notes": "Inquired via website form",
    "custom_fields": {
      "city": "Mumbai",
      "utm_source": "google_ads",
      "interest": "Growth Plan"
    }
  }'
GET /api/v1/leadsList and filter captured workspace leads
GET/api/v1/leads?status=new&limit=50
bash
curl "https://wacrm.bitlancetechhub.com/api/v1/leads?status=new&limit=50" \
  -H "Authorization: Bearer wak_live_XXXX"

3. Send a message

POST /api/v1/messages

Free-form Text Message (`type: "text"`)

Allowed inside the 24-hour customer service window (i.e. customer messaged you in the last 24h).

POST/api/v1/messages
curl -X POST https://wacrm.bitlancetechhub.com/api/v1/messages \
  -H "Authorization: Bearer wak_live_XXXX" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "919876543210",
    "type": "text",
    "text": "Hi! Your order has shipped 🎉"
  }'

Interactive Reply Buttons (`type: "buttons"`)

Send 1 to 3 quick reply buttons (title max 20 chars). Customer button taps arrive via webhook.

POST/api/v1/messages
curl -X POST https://wacrm.bitlancetechhub.com/api/v1/messages \
  -H "Authorization: Bearer wak_live_XXXX" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "919876543210",
    "type": "buttons",
    "text": "How can we help you today?",
    "header": "Welcome",
    "footer": "Bitlance Assistant",
    "buttons": [
      { "id": "btn_track", "title": "Track Order" },
      { "id": "btn_support", "title": "Contact Support" }
    ]
  }'

Interactive List Menu (`type: "list"`)

Send a tap-to-expand list menu with up to 10 options organized into sections.

POST/api/v1/messages
curl -X POST https://wacrm.bitlancetechhub.com/api/v1/messages \
  -H "Authorization: Bearer wak_live_XXXX" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "919876543210",
    "type": "list",
    "text": "Please choose a service package:",
    "button_label": "View Options",
    "sections": [
      {
        "title": "Available Packages",
        "rows": [
          { "id": "pkg_basic", "title": "Basic Plan", "description": "Starter package" },
          { "id": "pkg_pro", "title": "Pro Plan", "description": "Full feature suite" }
        ]
      }
    ]
  }'

Approved Template Message (`type: "template"`)

Required outside the 24h window and for initial customer outreach. Must be Approved on Meta.

POST/api/v1/messages
curl -X POST https://wacrm.bitlancetechhub.com/api/v1/messages \
  -H "Authorization: Bearer wak_live_XXXX" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "919876543210",
    "type": "template",
    "template_name": "order_update",
    "language": "en_US",
    "params": ["Rahul", "#1042"],
    "header_value": "https://example.com/banner.jpg"
  }'

Success Response:

200 OK Response
json
{
  "success": true,
  "message_id": "wamid.HBgMOTE2Mzk4…",
  "contact_id": "18fe6dff-…",
  "conversation_id": "cc1a8c7f-…"
}

The contact and conversation are created automatically if they don't exist yet. Sent messages appear in the inbox thread as bot messages.

Error Responses

StatusCodeMeaning
401—Missing or invalid API key.
400TEMPLATE_HEADER_REQUIREDThe template has a media/variable header — pass header_value.
402PAYMENT_METHOD_REQUIREDThe WhatsApp Business Account has no payment method — Meta refused the paid send. Fix in Meta's Billing Hub.
429PAIR_RATE_LIMITWhatsApp allows ~1 message per 6 seconds to the same recipient. Honor the Retry-After header; back off exponentially (4^attempt seconds).
502—Meta rejected the send for another reason — the error text carries Meta's message and details.

4. List templates

Returns the Approved templates your key can send — name, language, category, header shape, body text (with placeholders), and footer.

GET/api/v1/templates
curl https://wacrm.bitlancetechhub.com/api/v1/templates \
  -H "Authorization: Bearer wak_live_XXXX"

5. Contacts

Look up contact by phone:

GET/api/v1/contacts?phone=919876543210
bash
curl "https://wacrm.bitlancetechhub.com/api/v1/contacts?phone=919876543210" \
  -H "Authorization: Bearer wak_live_XXXX"

Create or update contact:

POST/api/v1/contacts
bash
curl -X POST https://wacrm.bitlancetechhub.com/api/v1/contacts \
  -H "Authorization: Bearer wak_live_XXXX" \
  -H "Content-Type: application/json" \
  -d '{ "phone": "919876543210", "name": "Rahul Saini" }'

6. Receive messages (webhook)

Set your endpoint URL in Settings → Developers → Webhook. Every inbound message is POSTed to your URL within moments of arriving:

Webhook Delivery Payload
json
POST <your-url>
Content-Type: application/json
X-Wacrm-Event: message.received
X-Wacrm-Signature: sha256=<hex HMAC-SHA256 of raw body>

{
  "event": "message.received",
  "created_at": "2026-09-03T15:40:00.000Z",
  "data": {
    "contact": { "id": "…", "phone": "919876543210", "name": "Rahul" },
    "conversation_id": "…",
    "message": {
      "whatsapp_message_id": "wamid.…",
      "type": "text",
      "text": "I want to order",
      "media_url": null,
      "interactive_reply_id": null,
      "timestamp": "2026-09-03T15:39:58.000Z"
    }
  }
}

Signature Verification Examples:

const crypto = require('crypto');

function verifySignature(rawBody, signatureHeader, secret) {
  const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(signatureHeader || '')
  );
}

7. Rate limits

  • POST /api/v1/leads — 60 requests/minute per key.
  • POST /api/v1/messages — 60 requests/minute per key.
  • Read endpoints — 120 requests/minute per key.
  • POST /api/v1/contacts — 60 requests/minute per key.

8. n8n chatbot in 3 nodes

  1. Webhook node (POST) — paste its URL into Settings → Developers. Every customer message triggers the flow.
  2. Logic node — AI Agent node, Switch on {{$json.data.message.text}}, or database lookup.
  3. HTTP Request node — POST to /api/v1/messages with your wak_live_… key in the Authorization header to reply.

Ready to build?

Create your API key in Settings → Developers — or start a free trial and connect your WhatsApp Business number in two minutes. Questions: ceo@bitlancetechhub.com.