---
name: "ticket_save_template"
area: "helpdesk"
title: "Save a canned reply"
price: "$0.001"
method: "POST"
url: "https://api.conecto.chat/v1/tools/ticket_save_template"
mcp_server: "https://api.conecto.chat/mcp/helpdesk"
auth: "Authorization: Bearer <conecto_sk_ key>"
docs_url: "https://conecto.chat/tools/helpdesk/ticket_save_template"
---

# Save a canned reply (`ticket_save_template`)

Saves a canned reply under a name, with the status and tags it applies whenever it is sent.

Save a canned reply (a macro) under a name, replacing the one with that name. body may use {requester_name}, {requester_email}, {ticket_number}, {ticket_subject} and {business_name}. status and tags, if given, are applied each time it is sent with ticket_reply (e.g. status "resolved").

Price: $0.001 a call. A call that fails costs nothing.

## Use it when

The same answer goes out again and again: repair times, returns, care tips.

## Say this to your agent

> Save our standard answer about repair times, and set tickets to waiting on the customer when we send it.

## Inputs

| Name | Type | Required | Description | Allowed values | Default |
|---|---|---|---|---|---|
| `name` | string | yes | 1 to 80 characters. |  |  |
| `body` | string | yes | 1 to 8,000 characters. |  |  |
| `status` | string | no |  | `"open"`, `"pending"`, `"resolved"` |  |
| `tags` | array of strings | no | Short labels like "refund" or "vip" (kept lower-case, spaces become dashes). Up to 20 items. |  |  |

## Example

Written for Halverson Cycle & Repair, a bike shop with a repair workshop in Portland, Oregon.

MCP: call `ticket_save_template` on the MCP server `https://api.conecto.chat/mcp/helpdesk` with these arguments:

```json
{
  "name": "repair-times",
  "status": "pending",
  "tags": [
    "repairs"
  ],
  "body": "Hello {requester_name},\n\na tune-up takes 2 to 3 working days, and a repair that needs parts 5 to 7. We text you as soon as your bike is ready to pick up.\n\n{business_name}"
}
```

REST:

```bash
curl https://api.conecto.chat/v1/tools/ticket_save_template \
  -H "Authorization: Bearer $CONECTO_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "repair-times", "status": "pending", "tags": ["repairs"], "body": "Hello {requester_name},\n\na tune-up takes 2 to 3 working days, and a repair that needs parts 5 to 7. We text you as soon as your bike is ready to pick up.\n\n{business_name}"}'
```

## Response

```json
{
  "call_id": "5f0c8a2e-3b7d-4c1e-9a64-2d8e1f7b0c93",
  "tool": "ticket_save_template",
  "status": "succeeded",
  "replayed": false,
  "cost_usd": "$0.001",
  "balance_usd": "$19.75",
  "result": {
    "template": {
      "name": "repair-times",
      "body": "Hello {requester_name},\n\na tune-up takes 2 to 3 working days, and a repair that needs parts 5 to 7. We text you as soon as your bike is ready to pick up.\n\n{business_name}",
      "status": "pending",
      "tags": [
        "repairs"
      ],
      "updated_at": "2026-10-14T08:00:00+00:00"
    },
    "created": true
  }
}
```

`result`: The saved reply (name, body, status, tags), and created: true when the name is new.

## Errors

| Code | Status | When | Fix |
|---|---|---|---|
| `invalid_input` | 400 | The body uses a placeholder that does not exist, or a tag is not valid. | Use only the placeholders the message lists, like {requester_name}. |
| `conflict` | 409 | A reply with that name was saved at the same moment. | Call again. |

The refusals every tool can give (401 key, 402 balance, 429 limits) are on the errors page: https://conecto.chat/docs/errors.md

## Related

- [ticket_list](https://conecto.chat/tools/helpdesk/ticket_list.md): Tickets, newest activity first, filtered by status, priority, requester, tag, field or contact, or as a work queue. Free up to 1,000,000 reads a month.
- [ticket_get](https://conecto.chat/tools/helpdesk/ticket_get.md): One ticket with its request, every reply, customer message and note, its fields, SLA state and rating. Free up to 1,000,000 reads a month.
- [ticket_create](https://conecto.chat/tools/helpdesk/ticket_create.md): Opens a support ticket for a customer request; the customer is emailed only if you ask. $0.01 a call.
- [ticket_reply](https://conecto.chat/tools/helpdesk/ticket_reply.md): Emails the requester a reply in the ticket's thread, with files if needed, or adds a private note, and can set the status. $0.05 a call.
- [ticket_update](https://conecto.chat/tools/helpdesk/ticket_update.md): Changes a ticket's status, priority, category, subject, tags, fields, assignee, or the CRM records it is about. $0.01 a call.
- [ticket_merge](https://conecto.chat/tools/helpdesk/ticket_merge.md): Merges a duplicate ticket into another: its messages, notes, email threads, tags and fields move over. $0.01 a call.
- [ticket_connect_inbox](https://conecto.chat/tools/helpdesk/ticket_connect_inbox.md): Makes an inbox a support inbox: every new email to it opens a ticket, and replies stay in its thread. $0.001 a call.
- [ticket_list_templates](https://conecto.chat/tools/helpdesk/ticket_list_templates.md): Every saved reply with its text, status and tags. Free up to 1,000,000 reads a month.
- [ticket_delete_template](https://conecto.chat/tools/helpdesk/ticket_delete_template.md): Deletes a saved reply by name. $0.001 a call.
- [ticket_get_settings](https://conecto.chat/tools/helpdesk/ticket_get_settings.md): The help desk's SLA targets, auto-close, satisfaction survey setting and support inboxes. Free up to 1,000,000 reads a month.
- [ticket_update_settings](https://conecto.chat/tools/helpdesk/ticket_update_settings.md): Sets the SLA targets per priority, auto-close and the satisfaction survey. $0.001 a call.
- [ticket_report](https://conecto.chat/tools/helpdesk/ticket_report.md): How support went over the last days: volumes, backlog, response and resolution times, SLA results, ratings, and tickets by channel, priority and tag. Free up to 1,000,000 reads a month.
