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.
/api/v1/leadsGET/api/v1/leadsGET/api/v1/contactsPOST/api/v1/contactsPOST/api/v1/messagesGET/api/v1/templatesBase 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: 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.
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"
}
}'curl "https://wacrm.bitlancetechhub.com/api/v1/leads?status=new&limit=50" \ -H "Authorization: Bearer wak_live_XXXX"
3. Send a message
Free-form Text Message (`type: "text"`)
Allowed inside the 24-hour customer service window (i.e. customer messaged you in the last 24h).
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.
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.
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.
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:
{
"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
| Status | Code | Meaning |
|---|---|---|
| 401 | — | Missing or invalid API key. |
| 400 | TEMPLATE_HEADER_REQUIRED | The template has a media/variable header — pass header_value. |
| 402 | PAYMENT_METHOD_REQUIRED | The WhatsApp Business Account has no payment method — Meta refused the paid send. Fix in Meta's Billing Hub. |
| 429 | PAIR_RATE_LIMIT | WhatsApp 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.
curl https://wacrm.bitlancetechhub.com/api/v1/templates \ -H "Authorization: Bearer wak_live_XXXX"
5. Contacts
Look up contact by phone:
curl "https://wacrm.bitlancetechhub.com/api/v1/contacts?phone=919876543210" \ -H "Authorization: Bearer wak_live_XXXX"
Create or update contact:
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:
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
- Webhook node (POST) — paste its URL into Settings → Developers. Every customer message triggers the flow.
- Logic node — AI Agent node, Switch on
{{$json.data.message.text}}, or database lookup. - HTTP Request node — POST to
/api/v1/messageswith yourwak_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.