Developer API — Introduction
Connect your own website, CRM, Google Sheet or code to Wably — base URL, your API key, GET vs POST, the response format and error handling.
The Wably Developer API lets your own systems do what you normally do in the dashboard: send WhatsApp messages and templates, add and tag contacts, read conversations, update deals and orders.
You don't need to be a developer to use it with no-code tools like Make, Zapier, n8n or Pabbly — they all have an "HTTP request" step that works with this API.
Base URL#
https://app.wably.in/api/v1
Every endpoint path in these docs is added to the base URL. For example /whatsapp/send means https://app.wably.in/api/v1/whatsapp/send.
Your API key#
- In Wably, open your profile menu → API Developer.
- Under API keys, click + Create API key, give it a name (e.g. Website), and copy it. The secret is shown only once.
- Use one key per app or integration, so you can disable one without breaking the others.
Send the key with every request in one of these ways:
| Method | How |
|---|---|
apiToken parameter |
In the query string (GET) or as a form field (POST) — works on every endpoint |
| Bearer header | Authorization: Bearer YOUR_API_KEY — works on most endpoints |
Your API key has the full permissions of your Wably account. Never put it in public website JavaScript, screenshots or chats. If it leaks, Disable or Delete it in API Developer and create a new one.
GET or POST#
Every endpoint accepts both, with the same parameters (Upload Media is POST only). Use POST for anything that sends or changes data, and send the body as application/x-www-form-urlencoded form fields.
curl -X POST 'https://app.wably.in/api/v1/whatsapp/send' \
-d 'apiToken=YOUR_API_KEY' \
-d 'phone_number_id=YOUR_PHONE_NUMBER_ID' \
-d 'phone_number=919876543210' \
-d 'message=Hello from Wably!'
The response#
Every response is JSON with a status and a message:
{ "status": "1", "message": "Message sent successfully.", "wa_message_id": "wamid.HBgM..." }
status |
Meaning |
|---|---|
"1" |
Success. message is a confirmation, or the data you asked for (an object or a list). |
"0" |
Failed. message explains why, e.g. "The phone number id field is required." |
Failures usually still return HTTP 200. Always check status, not just the HTTP code.
Common errors#
| What you get | Cause | Fix |
|---|---|---|
HTTP 401 {"status":"0","message":"Unauthenticated."} |
Wrong or disabled API key | Copy the key again, or create a new one |
| HTML page instead of JSON | No API key sent | Add apiToken |
status "0" with "… field is required" |
A required parameter is missing | Check the endpoint's parameter table |
| Message not delivered after sending | Customer's 24-hour window is closed | Send a template instead |
Phone number formats#
Two different numbers appear in most requests:
phone_number_id— the ID of your WhatsApp number in Wably (not the number itself). See Finding your IDs.phone_number— the customer's number with country code, digits only:919876543210. No+, spaces or leading zero.
Next#
- Finding your IDs
- Messaging endpoints
- Prefer AI over code? Connect Wably to Claude or ChatGPT with the Wably MCP server.