Skip to main content
Webhooks notify your server when call events happen. You register an endpoint, Wave POSTs signed JSON to it, and retries on failure.

Register an endpoint

Webhook endpoints are managed in the Wave dashboard under Webhooks: add a URL, choose the events, and copy the signing secret (shown once).

Events

You can subscribe to any event below (max 5 endpoints per project). Today only call.initiated is emitted — the rest are accepted in the subscription allowlist but won’t fire until the real-time event stream lands.

Payload

Each delivery is a JSON body with the event type and a data object. The X-Wave-Event-Id header carries a unique id for idempotency.

Verifying the signature

Every delivery is signed. The X-Wave-Signature header is sha256=<hex> — an HMAC-SHA256 of the raw request body using your endpoint’s signing secret (whsec_…). Verify it with a constant-time compare before trusting the payload:
Compute the HMAC over the raw body bytes, before any JSON parse/re-serialize — re-stringifying can change the bytes and break the check.

Retries & dead-letter

Each attempt has a 10-second timeout. Failed deliveries retry up to 5 attempts on a backoff ladder, then dead-letter: Exhausted deliveries are dead-lettered (retained 72h) and appear — with a replay action — in the dashboard’s delivery logs.