---
title: "Reply on a request"
method: POST
path: "/hd/desks/{desk_id}/tickets/{number}/replies"
tags: ["hd"]
---

# Reply on a request

`POST /hd/desks/{desk_id}/tickets/{number}/replies`

## Request

- Base URL: `https://api.sparkvault.com/v1`
- URL: `https://api.sparkvault.com/v1/hd/desks/{desk_id}/tickets/{number}/replies`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/sparkvault/apis/sparkvault-api/docs/hd/desks/:desk_id/tickets/:number/replies/post.ts> (a function with typed inputs; its response is checked against the schema)

The customer's reply on their own request, with the files uploaded to the request that it carries. A reply reopens a closed request; a reply on a request merged into another is added to that other request.

## Path parameters

- `desk_id` string, required
- `number` string, required

## Headers

- `X-SV-Client` 'help-desk-portal', required

## Request body

- object
  - `body` string, required: The reply, in safe markup: at most 65536 bytes.
  - `attachments` string[]: The `attachment_id` of each file uploaded to the request that the reply carries.

## Response `201`

The reply.

- object
  - `data` object, required
    - `event_id` string, required: The reply on the request's timeline.
  - `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 body is no JSON object, the reply is missing, empty or too long, or a file is not one uploaded to the request. CLIENT_HEADER_REQUIRED — see above.
- `401`: CUSTOMER_AUTH_REQUIRED — no bearer token, or one that is not a customer's of this desk now: unknown, expired, revoked, another desk's, or of the sign-in mode the desk no longer uses.
- `402`: QUOTA_EXCEEDED — the organization's storage cannot take the reply. No figures are given.
- `404`: NOT_FOUND — no such request, draft or file is the customer's: one that does not exist and one of another customer read the same, byte for byte.
- `409`: CONFLICT — the request was merged, or kept changing, while the reply was saved. Send it again.
- `429`: RATE_LIMIT_EXCEEDED — the request, or the customer, has taken its replies for the hour, or this client address or customer has spent its reads at the desk for the minute. `Retry-After` carries the seconds until the budget reopens, and `details` carries `limit` and `resets_at`.
- `503`: HELP_DESK_UNAVAILABLE — the desk does not take customers right now, or this customer is refused. INTERNAL_ERROR — the identity service's keys could not be read to verify a Secure Identity bearer. BUDGET_UNAVAILABLE — a budget the request spends could not be counted, so the request was refused rather than let through uncounted; `Retry-After` carries the seconds to wait before trying again.

## Changes

- **2026-10-28** `a9a10e328ba5`: 28 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 `402`
  - the response property `error/details` became required for the status `404`
  - …24 more
- **2026-10-28** `56d7c265a77a`: 7 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 `402`
  - the response property `error/details` became nullable for the status `404`
  - …3 more
- **2026-10-23** `ad4c62db5e08`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/sparkvault/apis/sparkvault-api/changes/hd/desks/:desk_id/tickets/:number/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)
