List Webhooks
Returns all webhooks configured for the workspace.200 OK
Create Webhook
Registers a new webhook endpoint. Requiresowner or admin role.
| Parameter | Type | Required | Description |
|---|---|---|---|
url | string | Yes | The HTTPS endpoint URL that receives webhook payloads. |
events | string[] | Yes | List of event types to subscribe to. Use ["*"] for all events. |
secret | string | No | Signing secret for HMAC verification. Auto-generated if omitted. |
active | boolean | No | Whether the webhook is active. Default true. |
201 Created
Get Webhook
Retrieves a webhook by ID.200 OK with the webhook object (excluding secret).
Update Webhook
Updates a webhook’s configuration. Requiresowner or admin role.
200 OK with the updated webhook object.
Delete Webhook
Permanently removes a webhook and all its delivery history. Requiresowner or admin role.
204 No Content
List Deliveries
Returns recent delivery attempts for a webhook. Uses cursor-based pagination.200 OK
Retry Delivery
Manually retries a failed webhook delivery.202 Accepted
Event Types
Subscribe to any combination of the following event types.| Event | Description |
|---|---|
message.created | A new message was sent in a conversation (user or assistant). |
message.updated | A message was edited or its metadata changed. |
conversation.created | A new conversation was started. |
conversation.ended | A conversation was closed or a widget session ended. |
contact.created | A new contact was created (e.g., via widget lead form). |
contact.updated | A contact’s information was updated. |
ticket.created | A support ticket was created from a conversation. |
ticket.updated | A ticket’s status or assignment changed. |
ticket.resolved | A ticket was marked as resolved. |
assistant.updated | An assistant’s configuration was changed. |
member.joined | A new member joined the workspace. |
member.left | A member was removed or left the workspace. |
Payload Format
Every webhook delivery sends a JSON payload with a consistent structure.| Field | Type | Description |
|---|---|---|
id | string | Unique event ID. Use this to deduplicate deliveries. |
event | string | The event type that triggered this delivery. |
timestamp | string | ISO 8601 timestamp of when the event occurred. |
workspaceId | string | The workspace where the event originated. |
data | object | Event-specific payload. Structure varies by event type. |
Signature Verification
Every webhook request includes anX-IllumiChat-Signature header containing an HMAC-SHA256 signature of the request body. Always verify this signature to ensure the payload was sent by IllumiChat.
The signature is computed as:
Verification Examples
Retry Policy
If your endpoint does not return a2xx status code within 30 seconds, IllumiChat retries the delivery with exponential backoff.
| Attempt | Delay | Total Elapsed |
|---|---|---|
| 1 | Immediate | 0 seconds |
| 2 | 60 seconds | ~1 minute |
| 3 | 300 seconds | ~6 minutes |
failed. You can manually retry failed deliveries at any time using the Retry Delivery endpoint.
Best practices for reliable webhook handling
Best practices for reliable webhook handling
Return 200 quickly. Acknowledge the webhook immediately and process the event asynchronously.Deduplicate by event ID. The same event may be delivered more than once during retries. Use the
id field to detect duplicates.Verify the signature. Always validate the X-IllumiChat-Signature header before processing.Handle unknown events gracefully. New event types may be added in the future. Return 200 for events you do not recognize.If a webhook consistently fails (more than 50 consecutive failures over 7 days), IllumiChat automatically disables the webhook and notifies workspace admins.