Webhooks
Register HTTPS endpoints to receive events in real time.
GET
/webhook-endpointsComing soonPOST/webhook-endpointsComing soonPATCH/webhook-endpoints/{endpoint_id}Coming soonDELETE/webhook-endpoints/{endpoint_id}Coming soonPOST/webhook-endpoints/{endpoint_id}/testComing soonGET/webhook-endpoints/{endpoint_id}/deliveriesComing soonList webhook endpoints
Section titled “List webhook endpoints”GET
/v1/webhook-endpointsComing sooncurl "https://api.waasl.io/v1/webhook-endpoints" \ -H "Authorization: Bearer $WAASL_API_KEY"const res = await fetch("https://api.waasl.io/v1/webhook-endpoints", { 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/webhook-endpoints", headers={"Authorization": f"Bearer {os.environ['WAASL_API_KEY']}"},)r.raise_for_status()print(r.json())Response 200 — Endpoints
{ "data": [ { "id": "whe_9sKq", "url": "https://example.com", "events": [ "string" ], "enabled": true, "secret": "whsec_5bX…", "created_at": "2026-10-01T08:15:00Z" } ]}Register a webhook endpoint
Section titled “Register a webhook endpoint”POST
/v1/webhook-endpointsComing soonThe response is the only time the signing secret is shown — store it.
Request body
| Field | Type | Description |
|---|---|---|
url required |
string (uri) | |
events required |
string[] | Event types, or ["*"] for all. |
description |
string |
curl -X POST "https://api.waasl.io/v1/webhook-endpoints" \ -H "Authorization: Bearer $WAASL_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "url": "https://example.com/waasl/webhook", "events": [ "message.received", "message.status_updated" ]}'const res = await fetch("https://api.waasl.io/v1/webhook-endpoints", { method: "POST", headers: { Authorization: `Bearer ${process.env.WAASL_API_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "url": "https://example.com/waasl/webhook", "events": [ "message.received", "message.status_updated" ] }),});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/webhook-endpoints", headers={"Authorization": f"Bearer {os.environ['WAASL_API_KEY']}"}, json={ "url": "https://example.com/waasl/webhook", "events": ["message.received", "message.status_updated"] },)r.raise_for_status()print(r.json())Response 201 — Created — includes secret once
{ "id": "whe_9sKq", "url": "https://example.com", "events": [ "string" ], "enabled": true, "secret": "whsec_5bX…", "created_at": "2026-10-01T08:15:00Z"}Update a webhook endpoint
Section titled “Update a webhook endpoint”PATCH
/v1/webhook-endpoints/{endpoint_id}Coming soonPath parameters
| Field | Type | Description |
|---|---|---|
endpoint_id required |
string |
Request body
| Field | Type | Description |
|---|---|---|
url |
string (uri) | |
events |
string[] | |
enabled |
boolean |
curl -X PATCH "https://api.waasl.io/v1/webhook-endpoints/whe_9sKq" \ -H "Authorization: Bearer $WAASL_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "url": "https://example.com", "events": [ "string" ], "enabled": true}'const res = await fetch("https://api.waasl.io/v1/webhook-endpoints/whe_9sKq", { method: "PATCH", headers: { Authorization: `Bearer ${process.env.WAASL_API_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "url": "https://example.com", "events": [ "string" ], "enabled": true }),});if (!res.ok) throw new Error((await res.json()).code);const data = await res.json();import osimport requests
r = requests.patch( "https://api.waasl.io/v1/webhook-endpoints/whe_9sKq", headers={"Authorization": f"Bearer {os.environ['WAASL_API_KEY']}"}, json={ "url": "https://example.com", "events": ["string"], "enabled": True },)r.raise_for_status()print(r.json())Response 200 — Updated endpoint
{ "id": "whe_9sKq", "url": "https://example.com", "events": [ "string" ], "enabled": true, "secret": "whsec_5bX…", "created_at": "2026-10-01T08:15:00Z"}Delete a webhook endpoint
Section titled “Delete a webhook endpoint”DELETE
/v1/webhook-endpoints/{endpoint_id}Coming soonPath parameters
| Field | Type | Description |
|---|---|---|
endpoint_id required |
string |
curl -X DELETE "https://api.waasl.io/v1/webhook-endpoints/whe_9sKq" \ -H "Authorization: Bearer $WAASL_API_KEY"const res = await fetch("https://api.waasl.io/v1/webhook-endpoints/whe_9sKq", { method: "DELETE", headers: { Authorization: `Bearer ${process.env.WAASL_API_KEY}` },});if (!res.ok) throw new Error((await res.json()).code);import osimport requests
r = requests.delete( "https://api.waasl.io/v1/webhook-endpoints/whe_9sKq", headers={"Authorization": f"Bearer {os.environ['WAASL_API_KEY']}"},)r.raise_for_status()Returns 204 — Deleted.
Send a test event
Section titled “Send a test event”POST
/v1/webhook-endpoints/{endpoint_id}/testComing soonPath parameters
| Field | Type | Description |
|---|---|---|
endpoint_id required |
string |
curl -X POST "https://api.waasl.io/v1/webhook-endpoints/endpoint_id/test" \ -H "Authorization: Bearer $WAASL_API_KEY"const res = await fetch("https://api.waasl.io/v1/webhook-endpoints/endpoint_id/test", { method: "POST", 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.post( "https://api.waasl.io/v1/webhook-endpoints/endpoint_id/test", headers={"Authorization": f"Bearer {os.environ['WAASL_API_KEY']}"},)r.raise_for_status()print(r.json())Response 200 — The delivery attempt
{ "id": "string", "event_id": "string", "event_type": "string", "attempt": 0, "response_status": 0, "duration_ms": 0, "delivered_at": "2026-10-01T08:15:00Z"}List recent deliveries
Section titled “List recent deliveries”GET
/v1/webhook-endpoints/{endpoint_id}/deliveriesComing soonThe last 30 days of attempts with response codes — for debugging and manual replay.
Path parameters
| Field | Type | Description |
|---|---|---|
endpoint_id required |
string |
Query parameters
| Field | Type | Description |
|---|---|---|
cursor |
string | The next_cursor from the previous page. |
curl "https://api.waasl.io/v1/webhook-endpoints/endpoint_id/deliveries" \ -H "Authorization: Bearer $WAASL_API_KEY"const res = await fetch("https://api.waasl.io/v1/webhook-endpoints/endpoint_id/deliveries", { 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/webhook-endpoints/endpoint_id/deliveries", headers={"Authorization": f"Bearer {os.environ['WAASL_API_KEY']}"},)r.raise_for_status()print(r.json())Response 200 — A page of deliveries
{ "data": [ { "id": "string", "event_id": "string", "event_type": "string", "attempt": 0, "response_status": 0, "duration_ms": 0, "delivered_at": "2026-10-01T08:15:00Z" } ], "next_cursor": "MjAyNi0xMC0wMVQwODoxNTowMC4wMDBafGN2XzNQekE5MQ", "has_more": true}