seny

Webhooks API

Manage webhook endpoint subscriptions programmatically. For the high-level concept (what events exist, payload shapes, signature verification), see the Webhooks guide. This page is the API reference.

The endpoint object

{
  "id":          "whe_abc123",
  "url":         "https://your-backend.example.com/seny-webhook",
  "events":      ["conversation.ended", "form.submitted"],
  "status":      "enabled",
  "created_at":  "2026-04-09T14:12:00Z",
  "last_delivery": {
    "status": "success",
    "at":     "2026-04-10T12:36:10Z"
  }
}

List endpoints

GET /api/v1/webhook_endpoints

Create an endpoint

POST /api/v1/webhook_endpoints
{
  "url":    "https://your-backend.example.com/seny-webhook",
  "events": ["conversation.ended", "form.submitted"]
}

Response includes a one-time signing_secret you use to verify inbound deliveries. Store it securely — it's not retrievable later.

Update an endpoint

PATCH /api/v1/webhook_endpoints/:id
{
  "events": ["conversation.ended", "form.submitted", "criteria.evaluated"]
}

Disable / enable

POST /api/v1/webhook_endpoints/:id/disable
POST /api/v1/webhook_endpoints/:id/enable

Disabled endpoints stop receiving deliveries but are preserved along with their history.

Delete an endpoint

DELETE /api/v1/webhook_endpoints/:id

Permanently removes the endpoint and its delivery history.

Rotate signing secret

POST /api/v1/webhook_endpoints/:id/rotate_secret

Generates a new signing secret and returns it once. The old secret stays valid for 24 hours after rotation so you can deploy the new one without dropping events.

List deliveries

GET /api/v1/webhook_endpoints/:id/deliveries?status=failed&limit=50

Inspect every delivery attempt for an endpoint, with the full request/response payloads and retry history. Useful for debugging.

Resend a delivery

POST /api/v1/webhook_endpoints/:id/deliveries/:delivery_id/resend

Retries a specific delivery with a fresh request. The event id stays the same, so idempotent consumers handle it correctly.

Test an endpoint

POST /api/v1/webhook_endpoints/:id/test
{ "event": "conversation.ended" }

Sends a synthetic event of the given type to verify your endpoint is reachable and verifies signatures correctly. No conversation data is created.