create_canned_reply
Save a reusable support reply on a project, with an optional slash-command shortcut and picker position.
Purpose
Add a snippet to a project's saved replies. It appears in the thread composer's picker straight away, and a creator can pull it in by typing its shortcut. The text is validated against the same rules the dashboard form applies, so a snippet accepted here renders in the composer exactly as one saved from the inbox.
Synchronous — the new row is returned, and support.canned_reply.created emits once.
Not idempotent
Two calls with the same title and body save two snippets. Only shortcut
is unique within a project, so a snippet without one can be duplicated freely.
Check list_canned_replies before creating.
Required ability
support-canned-reply:create
Input schema
{
"type": "object",
"required": ["project_id", "title", "body"],
"properties": {
"project_id": {
"type": "string",
"description": "UUID of the project the snippet belongs to."
},
"title": {
"type": "string",
"description": "Short label shown in the picker, 2 to 80 characters."
},
"body": {
"type": "string",
"description": "The reply text, 2 to 4000 characters."
},
"shortcut": {
"type": "string",
"description": "Slash-command a creator types to insert the snippet: letters, numbers, dashes and underscores, up to 30 characters, unique within the project."
},
"sort_order": {
"type": "integer",
"minimum": 0,
"maximum": 999,
"description": "Position in the picker, 0 to 999. Defaults to 0."
}
}
}Output shape
{
"data": {
"id": "5d2f8a71-3c9e-4b06-a8f4-1e7c9d2b6a35",
"project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",
"title": "Refund policy",
"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-09-06T10:05:00+00:00",
"updated_at": "2026-09-06T10:05:00+00:00"
}
}title comes back trimmed. body is stored as sent, whitespace included, because it reaches members verbatim. An omitted or empty shortcut is stored as null.
Example prompts
"Save a canned reply on project
7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13called 'Refund policy' with shortcutrefundthat says refunds are available within 14 days."
"Turn the answer I just sent Jane into a saved reply called 'Invite link expired'."
"Add a saved reply for opening hours and put it at the top of the picker." (
sort_order: 0, then bump the others)
Failure modes
VALIDATION_FAILED—titleoutside 2–80 characters,bodyoutside 2–4000,shortcutlonger than 30 characters, containing anything but letters, numbers, dashes and underscores, or already used by another snippet in this project, orsort_orderoutside 0–999. The envelope names the offending field. 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: unknown, another team's, or outside the token'sscope:project:allow-list.AUTHENTICATION_REQUIRED— no authenticated user on the request.TOKEN_MISSING_ABILITY— token lackssupport-canned-reply:create.
Related
list_canned_replies— check for an existing snippet first.update_canned_reply— change one later.support.canned_reply.created— the event this raises.- Support canned replies API —
POST /v1/projects/{project}/support/canned-replies. - Support inbox — the feature walkthrough.
How is this guide?