---
title: "Save a reply"
method: POST
path: "/products/help-desk/saved-replies"
tags: ["help-desk"]
---

# Save a reply

`POST /products/help-desk/saved-replies`

## Request

- Base URL: `https://api.sparkvault.com/v1`
- URL: `https://api.sparkvault.com/v1/products/help-desk/saved-replies`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/sparkvault/apis/sparkvault-api/docs/products/help-desk/saved-replies/post.ts> (a function with typed inputs; its response is checked against the schema)

Save a reply for reuse: the organization's (admins) or a team's (its members and admins). A desk keeps at most 500 saved replies, holding 2 MiB of text between them (each counted as its title and body take in the list), so one list answers them all. The organization must hold the help desk.

## Request body

- HelpDeskSavedReplyInput
  - `title` string, required
  - `body_markup` string, required: Safe markup, at most 65536 bytes.
  - `scope` 'org' | 'team', required: org: every operator uses it, admins keep it. team: that team's members use and keep it.
  - `team_id` string: With scope team.

## Response `201`

The saved reply.

- object
  - `data` HelpDeskSavedReply, required
    - `saved_reply_id` string, required
    - `title` string, required
    - `body_markup` string, required: Safe markup holding `{customer.first_name}`, `{ticket.number}` and `{operator.display_name}` placeholders.
    - `scope` 'org' | 'team', required
    - `team_id` string, nullable, required
    - `created_by` string, required
    - `created_at` integer, required
    - `updated_at` integer, required
    - `version` integer, required
  - `meta` ResponseMeta: Envelope metadata present on every successful response.
    - `api_version` string
    - `request_id` string
    - `response_ms` integer
    - `timestamp` integer: Unix seconds.
    - `pools` object: Storage and bandwidth capacity snapshot for the account.
    - `billing` object
      - `past_due` boolean
    - `quota` object: This minute of the account request budget. Present on authenticated success responses that passed the throttle; absent otherwise.
      - `limit` integer
      - `used` integer
      - `remaining` integer
      - `resets_at` integer: Unix seconds.

## Other responses

- `400`: VALIDATION_ERROR — the title, body, scope or team is malformed.
- `401`: AUTHENTICATION_ERROR — missing or invalid credentials.
- `403`: FORBIDDEN — the scope is not one the operator keeps. HELP_DESK_SUBSCRIPTION_REQUIRED — the organization does not hold the help desk.
- `409`: SAVED_REPLY_LIMIT — the desk keeps its most saved replies, or this one would take their text past 2 MiB.

## Changes

- **2026-10-28** `a9a10e328ba5`: 16 info
  - the response property `error/details` became required for the status `400`
  - the response property `error/details` became required for the status `401`
  - the response property `error/details` became required for the status `403`
  - the response property `error/details` became required for the status `409`
  - …12 more
- **2026-10-28** `56d7c265a77a`: 4 breaking
  - the response property `error/details` became nullable for the status `400`
  - the response property `error/details` became nullable for the status `401`
  - the response property `error/details` became nullable for the status `403`
  - the response property `error/details` became nullable for the status `409`
- **2026-10-23** `ad4c62db5e08`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/sparkvault/apis/sparkvault-api/changes/products/help-desk/saved-replies/post.md)

---

[API](https://skmtc.dev/sparkvault/apis/sparkvault-api.md) - [All operations](https://skmtc.dev/sparkvault/apis/sparkvault-api/llms.txt) - [OpenAPI document](https://skmtc.dev/sparkvault/apis/sparkvault-api/revisions/97cfadccd0c0?raw)
