Developers · REST API
WhatsApp & leads, from your own software
One API key, plain JSON over HTTPS. Send WhatsApp messages from your connected number, push and update leads with the same rules the CRM uses, and get every lead, message and payment event pushed to your system. Works from PHP, Python, Node, Java, Google Sheets, Zapier, n8n — anything that can call a URL.
Quick start — four calls
1 · Create a key
In the CRM: Settings → Integrations → Developer API → Create API key. Pick the workspace, the default WhatsApp number and what the key may reach (WhatsApp, Leads, Webhooks). The key is shown once.
2 · Send it as a header
Authorization: Bearer sd_live_… on every call (X-Api-Key works too). For tools that can only open a link, append ?key=sd_live_… to a GET URL.
3 · Copy an example
Every endpoint below has curl, PHP, Python and Node samples and a Try-it panel. Responses are JSON: ok:true, or ok:false with an error code and a plain-English message.
curl -X POST https://api.salesdaddy.in/v1/ext/whatsapp/send \
-H "Authorization: Bearer sd_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"type":"template","to":"919876543210",
"template":"appointment_reminder","params":["Ramesh","4 pm"]}'
→ {"ok":true,"messageId":"4c1d…","status":"queued"}https://api.salesdaddy.in/v1/ext/whatsapp/send ?key=sd_live_YOUR_KEY &to=919876543210 &template=appointment_reminder ¶ms=Ramesh,4pm # or free text while the 24-hour window is open: ?key=sd_live_YOUR_KEY&to=919876543210&text=Hello
curl -X POST https://api.salesdaddy.in/v1/ext/leads \
-H "Authorization: Bearer sd_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Ramesh Kumar","mobile":"9876543210",
"source":"website","city":"Chennai"}'
→ {"ok":true,"leadId":"a3f1…","duplicate":false}curl -X POST https://api.salesdaddy.in/v1/ext/webhooks \
-H "Authorization: Bearer sd_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"ERP","url":"https://erp.example.com/salesdaddy",
"events":["lead.created","message.received","message.status","payment.paid"]}'
→ {"ok":true,"webhook":{"id":"…","secret":"a1b2…"}} # secret shown onceWhat the API covers
- • Text, image, video, audio, PDF
- • Approved templates with variables and media headers
- • Reply buttons and list menus
- • Is the 24-hour window open?
- • Delivery status: sent → delivered → read
- • Your numbers and templates
Leads
- • Create with dedupe by mobile
- • Find by phone, search, page newest first
- • Update fields, add notes with follow-ups
- • Move the pipeline status
- • Statuses, sources, users, tags, custom fields
Webhooks
- • lead.created, lead.status_changed
- • message.received, message.status
- • payment.paid, payment.failed
- • task.overdue, form.submitted
- • HMAC-signed, retried for 6 hours
- • Pause, resume, test ping
Two WhatsApp rules to know (Meta sets them)
- • 24-hour window. Free text, files, buttons and lists can be sent only within 24 hours of the customer’s last message (
window_closedotherwise). Check withGET /v1/ext/whatsapp/window?to=…. - • Templates work any time. Create them in Sales Daddy (Settings → Templates), wait for Meta’s approval, then send by name with
params.GET /v1/ext/whatsapp/templateslists the approved ones and how many params each takes. - • Every send lands in the inbox as a normal conversation, the customer becomes a lead if new, and your team can take over the chat at any point.
- • Delivery is asynchronous. A send returns
queued; pollGET /v1/ext/whatsapp/messages/:idor subscribe tomessage.status.
Reference
Generated from the server’s own request schemas, so it is always current. Open an endpoint for fields, examples and copy-ready code; the Try-it panel calls the real API with your key. The raw spec is at https://api.salesdaddy.in/v1/ext/openapi.json.
Limits, security, errors
- • A key acts as the user who created it: their role, one workspace, and only the scopes it was given. It can never do more than that person can in the CRM.
- • Keys are stored hashed and shown once. Revoke in one click; it stops on the very next call. Admins see every key in the company.
- • 60 requests a minute and 5,000 a day per key (
rate_limitedwithretryAfter). Ask us for more. - • Every call is logged with its endpoint and result. Unexpected failures are logged on our side and fixed by us — reply
server_errormeans retry in a moment. - • Webhooks are signed:
x-sales-daddy-signature: sha256=HMAC_SHA256(secret, timestamp + "." + body). Verify it, reply 2xx within 15 s; we retry after 1 m, 5 m, 30 m, 2 h, 6 h. - • Errors are
{ ok:false, error, message }:invalid_key,scope_denied,window_closed,template_not_approved,template_params_mismatch,invalid_number,status_requires_manager,rate_limited…
Questions, answered
Do I need a developer?
For the one-link send, no: paste the URL with your key into a browser, a Google Sheet formula, Excel, Zapier or n8n. For everything else, any developer who has called a REST API before is done in an hour with the samples.
Can I send to any number?
Yes — any WhatsApp number. Outside the 24-hour window you need an approved template; inside it, free text and files work. The number becomes a lead in your CRM automatically.
Which WhatsApp number sends?
The key’s default number, or the workspace primary. Pass `from` on a send to pick another connected number.
Does it cost extra?
The API is part of your Sales Daddy plan. WhatsApp conversation charges from Meta apply as usual.
Can I limit what a key can do?
Yes. When creating it, tick only WhatsApp, only Leads, only Webhooks, or any mix. The key also inherits the creator’s CRM role.
Is there an AI / Claude connection too?
Yes — a separate MCP server lets Claude, ChatGPT and other assistants work your CRM in natural language. See /developers/mcp.
Your CRM, wired to everything you run.
Start free, create a key in Settings → Integrations, send your first message in a minute.
