update_canned_reply
Change one or more fields of a saved support reply. Anything omitted keeps its stored value.
Purpose
Edit a snippet in place — reword the body, rename it, give it a shortcut or move it in the picker. The change is partial by design: only the arguments present in the call are written, and every other field is filled from the stored row.
Emits support.canned_reply.updated with the fields that changed, and only when something did. Idempotent: sending the stored values again writes nothing and emits nothing.
Omitted is not the same as null
Leaving shortcut out keeps the current shortcut; passing shortcut: null
clears it. sort_order is the exception — null there is treated like an
omission and the stored position stays.
Required ability
support-canned-reply:update
Input schema
{
"type": "object",
"required": ["project_id", "canned_reply_id"],
"properties": {
"project_id": {
"type": "string",
"description": "UUID of the project the snippet belongs to."
},
"canned_reply_id": {
"type": "string",
"description": "UUID of the saved reply to change."
},
"title": {
"type": "string",
"description": "New label, 2 to 80 characters."
},
"body": {
"type": "string",
"description": "New reply text, 2 to 4000 characters."
},
"shortcut": {
"type": "string",
"description": "New slash-command, unique within the project. Pass null to clear it."
},
"sort_order": {
"type": "integer",
"minimum": 0,
"maximum": 999,
"description": "New position in the picker, 0 to 999."
}
}
}Output shape
{
"data": {
"id": "5d2f8a71-3c9e-4b06-a8f4-1e7c9d2b6a35",
"project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",
"title": "Refund policy (2026)",
"body": "Refunds are available within 14 days of your first payment. Reply here with the email you paid with and we'll sort it.",
"shortcut": "refund",
"sort_order": 0,
"created_at": "2026-06-02T09:14:02+00:00",
"updated_at": "2026-09-06T10:05:00+00:00"
}
}The full row after the change, not just the fields sent — so the response is what a creator now sees in the picker.
Example prompts
"Rename saved reply
5d2f8a71-3c9e-4b06-a8f4-1e7c9d2b6a35to 'Refund policy (2026)' and leave everything else."
"Give the opening-hours snippet the shortcut
hours."
"Drop the shortcut from the refund snippet — it keeps getting triggered by accident." (
shortcut: null)
Failure modes
VALIDATION_FAILED— atitleorbodythat is present but empty or outside its length limits, ashortcutover 30 characters, with disallowed characters, or already used by a different snippet in this project, orsort_orderoutside 0–999. Also returned when the token's owner is on the project's team but their role lacks the support permission on it.RESOURCE_NOT_FOUND—project_idnames a project the token cannot see, orcanned_reply_idis unknown, deleted, or belongs to another project.AUTHENTICATION_REQUIRED— no authenticated user on the request.TOKEN_MISSING_ABILITY— token lackssupport-canned-reply:update.
Related
get_canned_reply— read the current values first.create_canned_reply— the same rules, for a new snippet.support.canned_reply.updated— the event this raises.- Support canned replies API —
PATCH /v1/projects/{project}/support/canned-replies/{reply}. - Support inbox — the feature walkthrough.
How is this guide?