Skip to main content

Register or replace your notification URL

PUT 

/api/v1/tenants/me/webhook

Registers the URL we call. A new registration replaces the previous one; a null or empty webhookUrl unsubscribes you.

The URL must be publicly reachable over http or https — https is strongly recommended, the body carries activity data. Loopback, private and link-local addresses (localhost, 127.0.0.1, 10.x, 192.168.x, 169.254.x) are rejected: our platform cannot be used to reach internal targets. 500 characters maximum.

A domain that does not resolve yet is accepted, so you can register the URL before bringing your receiver online.

We send a POST to this URL when one of your campaigns ends (campaign_done) and when your credit falls below its alert threshold (low_credit). One URL per account — it receives every event type, so route on the event field.

The body looks like this:

{
"tenantId": "8a1f…",
"timestamp": "2026-09-01T14:22:07Z",
"event": "campaign_done",
"title": "Campagne terminée",
"body": "La campagne \"September payment reminder\" est terminée",
"payload": {
"campaignId": "c1d2e3f4-…",
"name": "September payment reminder",
"stats": { "total": 1500, "answered": 1120, "no-answer": 310, "busy": 45, "failed": 25 }
}
}

payload.campaignId is the identifier returned by the voice push or campaign endpoints, which is how you match a notification to the job you started.

Before relying on it: the call is made once, with no retry and a 5-second timeout, so a notification can be lost if your server is down at that moment; it is not signed, so treat the URL as a secret and re-check state with GET /api/v1/campaigns/{id}; and your response code is ignored — answer 200 quickly and process asynchronously.

The webhook is an accelerator, not a delivery guarantee. Use it to react fast, and keep a periodic check of your campaigns as a safety net.

Request​

Responses​

The registered URL.