---
title: "Download a file of a request"
method: GET
path: "/hd/desks/{desk_id}/attachments/{attachment_id}/download"
tags: ["hd"]
---

# Download a file of a request

`GET /hd/desks/{desk_id}/attachments/{attachment_id}/download`

## Request

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

A single-use link to a file a message carries on one of the customer's own requests. A file of a type Chrome and Firefox both show as a page from such a link (a JPEG, PNG, GIF, WebP, AVIF or BMP image, or a PDF) is served inline; anything else downloads, every recording included.

## Path parameters

- `desk_id` string, required
- `attachment_id` string, required

## Query parameters

- `ticket` integer, required

## Headers

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

## Response `200`

The link.

- object
  - `data` HelpDeskDownloadLink, required
    - `url` string, uri, required: A single-use link to the file. An inline file's link asks Forge to show it (`disposition=inline`), in a tab of its own.
    - `expires_at` integer, required: Epoch seconds the link expires.
    - `disposition` 'inline' | 'attachment', required: Inline only for a type Chrome and Firefox both show as a page from a single-use link (a JPEG, PNG, GIF, WebP, AVIF or BMP image, or a PDF); anything else downloads, every recording included.
  - `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`: 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`: PLAN_REQUIRED or QUOTA_EXCEEDED — the organization cannot serve the download right now (its plan, or its bandwidth). 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.
- `429`: RATE_LIMIT_EXCEEDED — the customer has taken their downloads or bytes for the day, this client address its downloads for the hour, the desk its customers' download bytes 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 `404`
  - …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 `404`
  - …2 more
- **2026-10-23** `ad4c62db5e08`: 1 info
  - endpoint added

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