support.canned_reply.deleted

A saved reply is removed from a project's support inbox.

This is the final event for the given canned_reply.id. The snapshot is taken just before the row goes, so the payload still names what disappeared even though GET /v1/projects/{project}/support/canned-replies/{reply} now returns 404.

When this fires

A creator removes a saved reply from a project:

  • Dashboard — the delete action on a snippet under Saved Replies in the support inbox.
  • RESTDELETE /v1/projects/{project}/support/canned-replies/{reply}.
  • MCP — the delete_canned_reply tool.

It does not fire when:

  • The snippet was already gone. A second delete writes nothing and emits nothing.
  • A message composed from the snippet is deleted or edited in a conversation. The saved reply is a template; what was sent is a separate message with its own lifecycle.
  • The project itself is deleted. Its snippets go with it under project.deleted without a per-snippet event.

Required ability

support-conversation:view — token must carry this at mint time to subscribe an endpoint to this event.

Payload

{
  "id": "evt_01HX...",
  "type": "support.canned_reply.deleted",
  "created_at": "2026-09-06T09:50:00Z",
  "api_version": "2026-05-01",
  "project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",
  "data": {
    "canned_reply": {
      "id": "c2f8e6a1-7d34-4b9e-a05c-3e1f9b7d2a68",
      "title": "Opening hours",
      "shortcut": "open",
      "sort_order": 1
    },
    "project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13"
  }
}

Field reference

FieldTypeNotes
idstring ULIDUnique event id, prefixed evt_. Use for idempotent processing.
typestringAlways support.canned_reply.deleted for this event.
created_atISO 8601 timestampServer-side emission time.
api_versionstringWebhook API contract version.
project_idstring UUIDProject this event belongs to.
data.canned_replyobjectSnapshot taken before the delete — id, title, shortcut, sort_order only. No body.
data.canned_reply.idstring UUIDSaved reply identifier. No longer resolvable over the API.
data.canned_reply.titlestringPicker label at the moment of deletion.
data.canned_reply.shortcutstring, nullableExpansion token at the moment of deletion, or null if none was set.
data.canned_reply.sort_orderintegerPicker position at the moment of deletion.
data.project_idstring UUIDMirrors the envelope project_id.

Caveats

  • The body is gone with the row and was never in any event, so a mirror that wants to keep the text must have fetched it while the snippet existed.
  • The freed shortcut can be reused by a new snippet straight away. Key a mirror on id, not on the shortcut.
  • Remaining snippets are not renumbered. Their sort_order values are unchanged and no updated events follow a delete.

How is this guide?

On this page

Subscriby is a product designed by you — for you.

No boardroom full of executives deciding what we ships next. Our roadmap always shaped by you with your feedback.

Share feedback or a request