Expert AI Labs
Back to API overview

Webhooks

Live

Outbound event subscriptions with HMAC-SHA256 signature verification. Subscribe at registration time; the signing secret is returned ONCE, save it. Rotate at any time with a 24-hour overlap window so you can deploy the new secret on the receiver before retiring the old one.

GET/api/v1/webhooksreadLive

List webhook subscriptions

Returns all webhook endpoints registered for the calling organization.

Example response
{
  "data": [
    {
      "id": "f4e9c2a8-7d31-4b6f-9c83-21e5d4a07b14",
      "url": "https://crm-bridge.example.com/webhook",
      "events": ["call.qualified", "lead.created", "claim.scope.ready"],
      "description": "Production CRM bridge",
      "signing_secret_prefix": "whsec_a1b2c3",
      "enabled": true,
      "created_at": "2026-02-14T09:11:00.000Z",
      "last_delivery_at": "2026-04-27T17:42:18.001Z",
      "last_delivery_status": 200
    }
  ]
}
GET/api/v1/webhooks/{id}readLive

Fetch a webhook subscription

Returns subscription metadata. The signing secret itself is never returned, only the public prefix.

Example response
{
  "id": "f4e9c2a8-7d31-4b6f-9c83-21e5d4a07b14",
  "url": "https://crm-bridge.example.com/webhook",
  "events": ["call.qualified", "lead.created", "claim.scope.ready"],
  "description": "Production CRM bridge",
  "signing_secret_prefix": "whsec_a1b2c3",
  "enabled": true,
  "created_at": "2026-02-14T09:11:00.000Z",
  "last_delivery_at": "2026-04-27T17:42:18.001Z",
  "last_delivery_status": 200
}
POST/api/v1/webhooksadminLive

Register a webhook endpoint

Subscribe to one or more event types. The endpoint must be HTTPS. We return a signing secret used for HMAC verification, save it; we will not show it again. Valid event names: call.received, call.classified, call.qualified, lead.created, lead.updated, outreach.email.sent, outreach.email.replied, claim.scope.ready, review.requested, review.received, audit.log.event.

Example request body
{
  "url": "https://crm-bridge.example.com/webhook",
  "events": ["call.qualified", "lead.created", "claim.scope.ready"],
  "description": "Production CRM bridge"
}
Example response
{
  "id": "f4e9c2a8-7d31-4b6f-9c83-21e5d4a07b14",
  "url": "https://crm-bridge.example.com/webhook",
  "events": ["call.qualified", "lead.created", "claim.scope.ready"],
  "description": "Production CRM bridge",
  "signing_secret_prefix": "whsec_a1b2c3",
  "enabled": true,
  "created_at": "2026-02-14T09:11:00.000Z",
  "signing_secret": "whsec_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
  "_warning": "Save this signing_secret now. It will not be shown again."
}
DELETE/api/v1/webhooks/{id}adminLive

Delete a webhook

Stops sending events to this endpoint immediately.

Example response
{
  "id": "f4e9c2a8-7d31-4b6f-9c83-21e5d4a07b14",
  "deleted": true
}
POST/api/v1/webhooks/{id}/rotate-secretadminLive

Rotate the signing secret

Returns a new secret. The previous secret remains valid for 24 hours, so you can deploy the new one on the receiver before retiring the old.

Example response
{
  "id": "f4e9c2a8-7d31-4b6f-9c83-21e5d4a07b14",
  "url": "https://crm-bridge.example.com/webhook",
  "signing_secret_prefix": "whsec_z9y8x7",
  "signing_secret": "whsec_z9y8x7w6v5u4t3s2r1q0p9o8n7m6l5k4",
  "_warning": "Save this signing_secret now. It will not be shown again. The previous secret remains valid for 24 hours."
}
GET/api/v1/webhooks/{id}/deliveriesreadRoadmap

Recent deliveries

List the last 100 delivery attempts with status, response code, latency, and retry count.

Example response
{
  "data": [
    {
      "id": "whd_8w3p1m",
      "event": "call.qualified",
      "status": "delivered",
      "response_status": 200,
      "latency_ms": 142,
      "attempt": 1,
      "delivered_at": "2026-04-27T17:42:18.001Z"
    }
  ],
  "next_cursor": null
}