Channelsadvanced

Webhook events reference

The full list of webhook event types your subscriptions can listen to, grouped by what they're useful for.

4 min read

Webhook events reference

This is the list of event types Atender currently emits to Webhook subscriptions. Every delivery has the same envelope shape:

{
  "event": "<event name from the table below>",
  "eventId": "<unique delivery UUID>",
  "deliveredAt": "<ISO 8601>",
  "payload": { ... }
}

The payload shape varies by event type. eventId matches the X-Webhook-Delivery header — use it to deduplicate.

GET /v1/webhooks returns the authoritative list of currently-emitted events in meta.availableEvents — if this page and the API ever disagree, trust the API. Some older event names are still accepted as subscription values for backward compatibility but are not emitted; they’re listed under Accepted but not emitted below.

Conversation lifecycle

  • conversation.created — A new conversation is created — via any channel, including via POST /v1/conversations/outbound.
  • conversation.resolved — A conversation moves to Done.
  • conversation.reopened — A conversation moves from Done back to Active, usually because the customer replied.
  • conversation.commented — An internal comment is added to a conversation.

Useful for keeping a third-party system in sync with conversation state, or for shipping resolution data downstream (analytics, CSAT triggers from your own systems, etc.).

Messages

  • message.received — An inbound message arrives from a customer, on any channel.
  • message.sent — An agent (or an Agent Stack, or an automation) sends a reply.

Useful when you’ve pushed a conversation in via the API and need the agent’s reply back. Subscribe to message.sent and ship the reply wherever the customer is (your own chat surface, your CRM, your marketplace inbox).

SLA

  • sla.warning — A conversation is approaching its SLA deadline. The exact warning threshold is set on the SLA policy. The payload includes a level field indicating whether the warning is standard or urgent.
  • sla.breached — A conversation has missed its SLA.

Useful for paging out, pinging a Slack channel, or triggering escalation in your own systems before or after a breach.

Cases

  • case.created — A new case is created.
  • case.updated — A case’s fields change. The payload includes a previous snapshot so you can diff state.
  • case.deleted — A case is removed.
  • case.transitioned — A case moves to a different workflow step.
  • case.assigned — A case’s assignee changes.
  • case.status_changed — A case’s status changes.
  • case.commented — A comment is added to a case.
  • case.action_sent — An action on a case is sent.
  • case.action_completed — An action on a case completes.
  • case.conversation_linked — A conversation is linked to a case.
  • case.conversation_unlinked — A conversation is unlinked from a case.

Useful for mirroring case state into an external ticketing or order system.

Knowledge Base articles

  • kb.article.created — A new article is added.
  • kb.article.updated — An article changes — content edits, publishes, unpublishes, archives, review-state changes, and translation syncs all collapse onto this one event. The payload’s change field tells you which kind of update it was.
  • kb.article.deleted — An article is removed.

The payload identifies the article (id, slug, title, status, and more) but doesn’t carry the content — treat deliveries as lightweight notifications and refetch the full article via the public API.

Handbook procedures

  • handbook.procedure.created — A new procedure is added.
  • handbook.procedure.updated — A procedure changes. Like KB articles, content edits, publishes, unpublishes, archives, review-state changes, and translation syncs all collapse onto this one event, and the payload’s change field describes the update.
  • handbook.procedure.deleted — A procedure is removed.

Treat these as lightweight notifications and refetch the full procedure via the public API.

Accepted but not emitted

For backward compatibility, the API still accepts these event names when you create or update a subscription — a subscription listing them stays valid — but no producer dispatches them today, so your endpoint will never receive them:

  • conversation.updated — Accepted, not currently emitted.
  • contact.created — Accepted, not currently emitted.
  • contact.updated — Accepted, not currently emitted.
  • assignment.changed — Accepted, not currently emitted.
  • tag.added — Accepted, not currently emitted.
  • tag.removed — Accepted, not currently emitted.

Picking events to subscribe to

Subscribe to the events you actually need to react to. Atender will not let you reduce noise after the fact — every subscription gets every event in its events array.

Common patterns:

  • Mirror conversations into a third-party system: conversation.created, conversation.commented, message.received, message.sent, conversation.resolved, conversation.reopened.
  • Ship agent replies back to a custom channel: message.sent only.
  • Page on SLA breaches: sla.warning and sla.breached.
  • Mirror case state into a ticketing or order system: the case.* events.
  • Sync your help center or runbook into an external system: the kb.article.* and handbook.procedure.* events.

See also

Tags

Reference