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-1e7c9d2b6a35 to '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 — a title or body that is present but empty or outside its length limits, a shortcut over 30 characters, with disallowed characters, or already used by a different snippet in this project, or sort_order outside 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_FOUNDproject_id names a project the token cannot see, or canned_reply_id is unknown, deleted, or belongs to another project.
  • AUTHENTICATION_REQUIRED — no authenticated user on the request.
  • TOKEN_MISSING_ABILITY — token lacks support-canned-reply:update.

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