---
title: "create_job_download_link"
method: POST
path: "/v1/jobs/{job_id}/download-links"
tags: ["operations"]
---

# create_job_download_link

`POST /v1/jobs/{job_id}/download-links`

## Request

- Base URL: `https://ndi-api.nace.ai`
- URL: `https://ndi-api.nace.ai/v1/jobs/{job_id}/download-links`
- Auth: API key in header `X-API-Key`
- TypeScript: <https://skmtc.dev/nace/apis/ndi-platform-api/docs/v1/jobs/:job_id/download-links/post.ts> (a function with typed inputs; its response is checked against the schema)

Sign a short-lived link to one file a succeeded job's result names.

The file is authorized exactly as its stable ``/jobs/{job_id}/{resource}/{ref}``
URL authorizes it (per tenant, and for a service key per external account); the link then
fetches the bytes without API-key headers until ``expires_at``: from S3
when presigned, or from the API's token download on the local backend.

## Path parameters

- `job_id` string, uuid, required: Job identifier.

## Request body

- JobDownloadLinkRequest: Body for ``POST /jobs/{job_id}/download-links``.
  - `disposition` 'inline' | 'attachment': Whether a browser should render the file in place or save it. Types unsafe to render are always attachments.
  - `ref` string, required: Opaque file ref, the last segment of that stable URL.
  - `resource` 'split-artifacts' | 'ground-crops' | 'ground-transcript' | 'parse-images' | 'parse-transcript' | 'converted-pdf' | 'spreadsheet-cell-maps', required: Route segment of the job file, as in its stable URL `/v1/jobs/{job_id}/{resource}/{ref}`.

## Response `200`

Successful Response

- JobDownloadLink: Short-lived signed URL to one job file, fetchable without API-key headers.
  - `content_type` string, required: Media type the file is served with.
  - `disposition` 'inline' | 'attachment', required: Disposition the file is served with.
  - `expires_at` integer, required: Expiry of the URL, as Unix epoch seconds.
  - `file_name` string, required: Name the file is served under.
  - `url` string, required: Signed download URL. Treat it as a temporary credential. Customer-workspace links recheck storage access and job availability when opened; other links remain valid until expiry.

## Other responses

- `504`: Gateway Timeout
- `default`: Typed error envelope used by every 4xx and 5xx. ``error.code`` distinguishes the failure; HTTP status is a consequence of the code.

---

[API](https://skmtc.dev/nace/apis/ndi-platform-api.md) - [All operations](https://skmtc.dev/nace/apis/ndi-platform-api/llms.txt) - [OpenAPI document](https://skmtc.dev/nace/apis/ndi-platform-api/revisions/54dad7e0ff00?raw)
