REST API
WaDesk ships a public, versioned REST API at /api/v1 so your own apps, CRMs, and automations can drive a workspace programmatically — send messages, run broadcasts and campaigns, schedule sends, and manage contacts, deals, flows, templates, and devices.
Plan feature. API access is a paid feature. The API key console appears under More → Developers, and a live, always-up-to-date reference is served at /developers/docs.
Authentication
Every request is authenticated with a workspace API key. Generate one under More → Developers (the full key is shown only once at creation — copy it then; only its hash is stored, and it can be revoked at any time).
Send it as a Bearer token:
Authorization: Bearer wsk_your_api_key_here
… or in an X-Api-Key header. Keys are scoped to a single workspace, so a key only ever sees and acts on that workspace's data.
How it works under the hood
The API is a thin, safe layer over the same code the dashboard uses. Each endpoint validates your request and then routes it through the identical controllers and sending pipeline as the UI — so an API send behaves exactly like a send from the dashboard, including engine routing, pacing, retry, and per-recipient tracking. There is no separate, divergent send path to go out of sync.
What you can do
| Area | Endpoints |
|---|---|
| Messages | POST /messages (send text/location), GET /messages, GET /messages/{id} (delivery status) |
| Broadcasts | GET/POST /broadcasts, GET /broadcasts/{id}, /recipients, /stop |
| Campaigns | GET/POST /campaigns, /statistics, GET /campaigns/{id}, /stop, delete |
| Scheduled | POST /scheduled |
| Contacts & Groups | GET/POST /contacts, GET/PUT/DELETE /contacts/{id}, GET/POST /contact-groups |
| Deals | GET/POST /deals, GET/PUT/DELETE /deals/{id} (advance stage by updating stage_id) |
| Flows | GET /flows, GET /flows/{id}, POST /flows/{id}/enroll, /subscribers |
| Templates & Auto-replies | GET/POST /templates, GET/POST /auto-replies (and per-id read/update/delete) |
| Devices & Account | GET /devices, GET /devices/{id}, GET /me |
| Webhooks | Register event webhooks to receive inbound & delivery events — see Webhooks |
Example: send a message
curl -X POST https://your-domain.com/api/v1/messages \
-H "Authorization: Bearer wsk_your_api_key_here" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"to":"15551234567","type":"text","text":"Hello from the API"}'
Responses are JSON in a { data, meta } envelope; validation errors return 422 with a clear message, and a missing/expired key returns 401.
Live reference
The complete, interactive endpoint reference — with every request body and response — is generated from the code and served in your app at /developers/docs (OpenAPI). Because it is generated, it always matches the running version.