Automation
Workflows built in the Waasl console — list them, pause or publish, and trigger them from your systems.
GET
/workflowsAvailablePOST/workflows/{workflow_id}/statusAvailablePOST/workflows/{workflow_id}/runsComing soonList workflows
Section titled “List workflows”GET
/v1/workflowsAvailablecurl "https://api.waasl.io/v1/workflows" \ -H "Authorization: Bearer $WAASL_API_KEY"const res = await fetch("https://api.waasl.io/v1/workflows", { headers: { Authorization: `Bearer ${process.env.WAASL_API_KEY}` },});if (!res.ok) throw new Error((await res.json()).code);const data = await res.json();import osimport requests
r = requests.get( "https://api.waasl.io/v1/workflows", headers={"Authorization": f"Bearer {os.environ['WAASL_API_KEY']}"},)r.raise_for_status()print(r.json())Response 200 — Workflows
{ "data": [ { "id": "wf_round_robin", "name": "Round-robin assignment", "status": "draft", "trigger": "conversation.created", "updated_at": "2026-10-01T08:15:00Z" } ]}Publish or pause a workflow
Section titled “Publish or pause a workflow”POST
/v1/workflows/{workflow_id}/statusAvailablePath parameters
| Field | Type | Description |
|---|---|---|
workflow_id required |
string |
Request body
| Field | Type | Description |
|---|---|---|
status required |
“published” | “paused” | “draft” |
curl -X POST "https://api.waasl.io/v1/workflows/wf_round_robin/status" \ -H "Authorization: Bearer $WAASL_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "status": "published"}'const res = await fetch("https://api.waasl.io/v1/workflows/wf_round_robin/status", { method: "POST", headers: { Authorization: `Bearer ${process.env.WAASL_API_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "status": "published" }),});if (!res.ok) throw new Error((await res.json()).code);const data = await res.json();import osimport requests
r = requests.post( "https://api.waasl.io/v1/workflows/wf_round_robin/status", headers={"Authorization": f"Bearer {os.environ['WAASL_API_KEY']}"}, json={ "status": "published" },)r.raise_for_status()print(r.json())Response 200 — Updated workflow
{ "id": "wf_round_robin", "name": "Round-robin assignment", "status": "draft", "trigger": "conversation.created", "updated_at": "2026-10-01T08:15:00Z"}Trigger a workflow
Section titled “Trigger a workflow”POST
/v1/workflows/{workflow_id}/runsComing soonStarts a workflow whose trigger is API call for one contact, passing your own
variables (order number, delivery slot…). Workflow steps can read them as
{{trigger.variables.order_id}}.
Path parameters
| Field | Type | Description |
|---|---|---|
workflow_id required |
string |
Headers
| Field | Type | Description |
|---|---|---|
Idempotency-Key |
string | A unique key (UUID recommended). Retrying with the same key returns the original result instead of acting twice. Kept for 24 hours. |
Request body
| Field | Type | Description |
|---|---|---|
contact required |
object | object | An existing contact_id, or an identity to find-or-create. |
variables |
object |
curl -X POST "https://api.waasl.io/v1/workflows/wf_round_robin/runs" \ -H "Authorization: Bearer $WAASL_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d '{ "contact": { "channel_type": "whatsapp", "identifier": "+96550001234" }, "variables": { "order_id": "4821", "slot": "18:00–20:00" }}'const res = await fetch("https://api.waasl.io/v1/workflows/wf_round_robin/runs", { method: "POST", headers: { Authorization: `Bearer ${process.env.WAASL_API_KEY}`, "Content-Type": "application/json", "Idempotency-Key": crypto.randomUUID() }, body: JSON.stringify({ "contact": { "channel_type": "whatsapp", "identifier": "+96550001234" }, "variables": { "order_id": "4821", "slot": "18:00–20:00" } }),});if (!res.ok) throw new Error((await res.json()).code);const data = await res.json();import os, uuidimport requests
r = requests.post( "https://api.waasl.io/v1/workflows/wf_round_robin/runs", headers={"Authorization": f"Bearer {os.environ['WAASL_API_KEY']}", "Idempotency-Key": str(uuid.uuid4())}, json={ "contact": { "channel_type": "whatsapp", "identifier": "+96550001234" }, "variables": { "order_id": "4821", "slot": "18:00–20:00" } },)r.raise_for_status()print(r.json())Response 202 — Run started
{ "run_id": "run_X81aa", "status": "running"}