support.canned_reply.created

A saved reply is added to a project's support inbox.

The dashboard calls these Saved Replies; the event keeps the canned_reply name. The snapshot carries the snippet's title, shortcut and position but never its body — fetch that with GET /v1/projects/{project} /support/canned-replies/{reply} if you mirror the picker somewhere else.

When this fires

A creator saves a new reusable reply on a project:

  • DashboardSaved Replies → Add Reply from the support inbox.
  • RESTPOST /v1/projects/{project}/support/canned-replies.
  • MCP — the create_canned_reply tool.

It does not fire when:

  • A saved reply is inserted into a conversation. Using a snippet is just composing a message; the reply that goes out raises support.message.sent like any other.
  • The save is rejected. A duplicate shortcut on the same project, or a body outside its limits, fails validation and writes nothing.

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.created",
  "created_at": "2026-09-06T09:40: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": "hours",
      "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.created for this event.
created_atISO 8601 timestampServer-side emission time.
api_versionstringWebhook API contract version.
project_idstring UUIDProject this event belongs to.
data.canned_replyobjectThe new snippet — id, title, shortcut, sort_order only. No body.
data.canned_reply.idstring UUIDSaved reply identifier.
data.canned_reply.titlestringThe label shown in the picker, 2–80 characters.
data.canned_reply.shortcutstring, nullableThe token typed in the composer to expand the snippet — letters, digits, dashes and underscores, up to 30 characters, stored without a leading slash. null when none was set.
data.canned_reply.sort_orderintegerPosition in the picker, 0999. Defaults to 0 when the request omits it.
data.project_idstring UUIDMirrors the envelope project_id.

Caveats

  • The body is the one thing a consumer usually wants and the one thing not sent. This matches the family rule that no support.* payload carries message text; read it over the API.
  • shortcut is unique per project, so it doubles as a stable handle for the snippet in a mirror — but it is optional and editable, so key on id.
  • sort_order is not a dense sequence. Several snippets can share a value; the dashboard orders ties by creation.

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