Skip to content

Webhooks overview

Webhooks let Unexus notify your application the moment something happens in the contact center — no polling. You register an HTTPS endpoint once, and Unexus delivers each subscribed event to it as an HTTP POST.

sequenceDiagram
    participant Unexus as Unexus platform
    participant Delivery as Webhook delivery
    participant You as Your endpoint

    Note over Unexus: Event occurs (e.g. call.status)
    Unexus->>Delivery: Publish event
    Delivery->>You: POST (JSON envelope)
    You-->>Delivery: 2xx acknowledges

Register your endpoint via the Webhook Subscriptions API. A subscription couples one URL to one or more event types. Only enabled subscriptions receive deliveries.

Every delivery is an HTTP POST to your subscription URL:

POST /your/endpoint HTTP/1.1
Content-Type: application/json; charset=utf-8
X-UCS-Event: call.status
X-UCS-Delivery: 8f7c1a4e-2d3b-4c5a-9e8f-6a7b8c9d0e1f
{ ...envelope... }
HeaderDescription
X-UCS-EventThe event type of this delivery (e.g. call.status). Lets you route without parsing the body.
X-UCS-DeliveryUnique id of this delivery attempt. Use it for idempotency and support requests.

Every event body has the same outer shape; only data differs per event type:

{
"deliveryId": "8f7c1a4e-2d3b-4c5a-9e8f-6a7b8c9d0e1f",
"eventType": "call.status",
"occurredAt": "2026-07-21T09:15:23.412+00:00",
"tenant": "customer.unexus.nl",
"data": { }
}
FieldTypeDescription
deliveryIdstring (GUID)Unique per delivery. Matches the X-UCS-Delivery header.
eventTypestringEvent type identifier. Matches the X-UCS-Event header.
occurredAtstring (ISO 8601)When the event occurred (UTC).
tenantstring | nullThe Unexus tenant the event belongs to.
dataobjectEvent-specific payload. See the event catalog.
  • Return any 2xx status code to acknowledge the delivery.
  • Respond fast (well under 10 seconds — see timeout below). Queue the event internally and process it asynchronously; do not do heavy work in the request handler.
  • The response body is ignored.

Understand these guarantees when designing your consumer:

  • Timeout — deliveries time out after 10 seconds (installation configurable). A timeout counts as a failed delivery.
  • No retries (at-most-once) — if your endpoint is unreachable, times out, or returns a non-2xx status, that delivery is logged on the Unexus side and not retried. Treat webhooks as a real-time signal; if you need guaranteed completeness, periodically reconcile via the REST API.
  • No ordering guarantee — events may arrive out of order, especially under load. Use occurredAt (and your own state) rather than arrival order.
  • Independent per subscription — a failure of one subscriber never affects delivery to other subscribers.

See best practices for how to build a robust receiver.