support.canned_reply.created
A saved reply is added to a project's support inbox.
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_replytool.
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.sentlike any other. - The save is rejected. A duplicate
shortcuton 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_replyname. 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
bodyis the one thing a consumer usually wants and the one thing not sent. This matches the family rule that nosupport.*payload carries message text; read it over the API. shortcutis unique per project, so it doubles as a stable handle for the snippet in a mirror, but it is optional and editable, so key onid.sort_orderis 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
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=.
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.
The event name, the same as the envelope's type.
Always application/json.
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
/support.canned_reply.createdHow is this guide?