support.canned_reply.created

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

Ability to subscribesupport-conversation:view

When this fires

A creator saves a new reusable reply on a project:

  • Dashboard: Saved Replies → Add Reply from the support inbox.
  • REST: POST /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.

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 the canned reply endpoint if you mirror the picker somewhere else.

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.

Related events

  • support.canned_reply.updated: the snippet is reworded, given a new shortcut or moved.
  • support.canned_reply.deleted: the snippet is removed from the picker.

Header Parameters

SB-Signature*string

t=<unix seconds>,v1=<hex>: the HMAC-SHA256 of "<t>.<raw body>" under the endpoint's secret. Verify it before acting, and refuse a t more than 300 seconds from now. During a secret rotation a v0= signature under the previous secret may precede v1=.

SB-Event-Id*string

The event's ULID, bare. The envelope's id is the same ULID prefixed evt_, so strip the prefix before comparing. Deduplicate on it: a retry carries the same id.

SB-Event-Name*string

The event name, the same as the envelope's type.

Content-Type*string

Always application/json.

User-Agent*string

Always Subscriby-Webhooks/1.0.

Request Body

application/json

The signed JSON envelope posted to your endpoint.

TypeScript Definitions

Use the request body type in TypeScript.

The envelope every event is delivered in.

Response Body

Example Requests

POST/support.canned_reply.created

How is this guide?