---
title: "Send a request"
method: POST
path: "/hd/desks/{desk_id}/tickets"
tags: ["hd"]
---

# Send a request

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

## Request

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

Send one of the customer's own drafts as a request: its subject, its description in safe markup, and the files uploaded to the draft that it carries. The request is routed by the desk's rules and gets the desk's next number.

## Path parameters

- `desk_id` string, required

## Headers

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

## Request body

- object
  - `ticket_id` string, required: The draft the request is sent from.
  - `subject` string, required
  - `body` string, required: The description, in safe markup: at most 65536 bytes.
  - `attachments` string[]: The `attachment_id` of each file uploaded to the draft that the request carries.

## Response `201`

The request.

- object
  - `data` object, required
    - `number` integer, required: The request's number: every route names it by it.
    - `ticket_id` string, 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 body is no JSON object, `ticket_id` is no draft's id, the subject or the description is missing, empty or too long, or a file is not one of the customer's uploads waiting on the draft (or is still being saved). 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 request. No figures are given.
- `409`: DRAFT_EXPIRED — the draft is gone, past its day, or is not the customer's: the same answer for each. A draft sent twice answers the request its first send opened. CONFLICT — the request, or its draft as files were uploaded to it, kept changing while it was saved: send it again.
- `429`: RATE_LIMIT_EXCEEDED — the customer, or this client address, has sent its requests for the day, 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`: 24 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 `409`
  - …20 more
- **2026-10-28** `56d7c265a77a`: 6 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 `409`
  - …2 more
- **2026-10-23** `ad4c62db5e08`: 1 info
  - endpoint added

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