Skip to main content
Route each event by event_type, and open that event’s page for the shape of data.

Read the envelope

Every webhook request body is this envelope, and every WebSocket event frame carries the same envelope in its event field. Only data changes between event types. Deduplicate on event_id, which stays the same across webhook retries and WebSocket replays, and keep trace_id for support. This one carried a message.failed event:
captured-output

Choose an event type

Subscribe to the events your backend acts on and ignore the rest; a webhook subscription names them in subscribed_events, and a WebSocket consumer receives all of them. Most agents need message.received first and chat.created second.

List event types

Read the names the API accepts in subscribed_events. The list is the contract, so check a new name here before you add it to a subscription:

What you get back

Relay answers 200 with every event name and the URL of this catalog. The order matches the table above, and the list changes only with a new API contract version:
captured-output

When it fails

A 401 means the Agent Token is missing or revoked. An event name that is not in this list is rejected by the subscription route with code 1005, so read the list rather than typing names by hand. If an event you subscribed to never arrives, read delivery and retries before assuming it did not fire.

Next steps