Skip to main content
The endpoint-based webhook system lets you register multiple destinations per organization, each with its own secret, its own status, and its own subscription to a subset of event types. This is the recommended model for all new integrations. Compare to the legacy single-URL webhook, which is kept for backward compatibility but only supports one URL per org.

Endpoints

Endpoint object

The endpoint’s full secret is returned once on creation and never again. Store it securely — if you lose it, delete the endpoint and recreate it.

Valid event types

events is validated against this exact set — values outside the list return 400. See Events catalog for each type’s payload shape.
  • telephony.incoming, telephony.complete, telephony.tool
  • web.incoming, web.complete, web.tool
  • call.graded
  • issue.reported
  • test-call.completed
  • alert.triggered

Endpoint statuses

  • active — deliveries flow normally.
  • disabled — manually paused via PATCH. No requests are sent. We never change a disabled endpoint’s status; flipping it back to active is always your call.
  • failing — set automatically when a delivery to the endpoint burns through its entire retry schedule (8 attempts over 24 hours) without ever getting a 2xx. A failing endpoint receives no further traffic. Once the endpoint is fixed, PATCH its status back to active; deliveries whose retry schedule hasn’t run out yet resume where they left off.

List endpoints

Returns an array of Endpoint objects.

Create an endpoint

Request fields

Returns 201 Created with the Endpoint object plus an extra top-level secret field containing the raw signing key — a 48-character hex string:
secret is returned only on creation. Subsequent GET responses include only the secret_hint. Copy the full value to your secret manager before dismissing the response.

Update an endpoint

Returns 200 OK with the updated Endpoint object.

Send a test delivery

Send a synthetic webhook.test event to one endpoint using the normal delivery pipeline, including canonical JSON serialization, X-ThunderPhone-Signature, delivery recording, and retry bookkeeping. The test targets the selected endpoint regardless of its events filter.
The endpoint receives an envelope like:
The API returns 200 OK after the first attempt, even if the destination returns an error. Inspect success, status, response_code, and error for the delivery outcome:
webhook.test is synthetic and cannot be added to an endpoint’s events subscription. If the first attempt fails, the delivery follows the same retry schedule as normal event deliveries.

Delete an endpoint

Returns 204 No Content. Delivery to the URL stops immediately; in-flight retries are abandoned.

Events catalog

The full list of events values you can subscribe to.

Webhooks overview

Signature verification and delivery semantics.