---
title: "Get a generation download URL"
method: GET
path: "/v2/generations/{id}/download"
tags: ["Generations"]
---

# Get a generation download URL

`GET /v2/generations/{id}/download`

## Request

- Base URL: `https://api.sync.so`
- URL: `https://api.sync.so/v2/generations/{id}/download`
- Auth: API key in header `x-api-key`

Obtain the available full output for a completed generation in your organization using x-api-key. No Studio project or user session is required. Returns an unquoted URL as text, not JSON or a redirect. Current plan and billing-version eligibility select the existing clean or watermarked output. Upgrading cannot remove a watermark burned into a historical output; no output is regenerated. S3 URLs request seven-day validity but may expire earlier if credentials expire or access changes. Request another URL when needed. URL-only records return their stored URL unchanged, without an availability check or renewed expiry. S3 existence is checked when resolving the URL; later deletion can still make the download fail. Fetch the returned URL without sending your API key.

## Path parameters

- `id` string, uuid, required

## Query parameters

- `fileName` string

## Headers

- `x-sync-accelerate` 'true' | 'false'

## Response `200`

Unquoted download URL. Fetch it separately to download the existing output.

## Other responses

- `400`: Invalid generation ID
- `401`: Missing, invalid, or revoked API key
- `404`: generation_not_found: missing, deleted, or outside your organization. generation_output_unavailable: no eligible output or the selected file is missing.
- `409`: generation_not_ready: generation is pending or processing. Poll its status before retrying.
- `422`: generation_not_downloadable: generation failed or was rejected. Authentication also rejects draft organizations with 422.
- `503`: generation_download_unavailable: storage could not be checked or a URL could not be signed. Retry with backoff.

## Changes

- **2026-10-30** `e93bb609962a`: 6 info
  - added the optional property `billingUrl` to the response with the `400` status
  - added the optional property `billingUrl` to the response with the `401` status
  - added the optional property `billingUrl` to the response with the `404` status
  - added the optional property `billingUrl` to the response with the `409` status
  - …2 more
- **2026-10-03** `95579872dec0`: 6 info
  - added the optional property `dialogueEditSection` to the response with the `400` status
  - added the optional property `dialogueEditSection` to the response with the `401` status
  - added the optional property `dialogueEditSection` to the response with the `404` status
  - added the optional property `dialogueEditSection` to the response with the `409` status
  - …2 more
- **2026-09-26** `52a7a8729fa9`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/sync/apis/sync-api-v2/changes/v2/generations/:id/download/get.md)

---

[API](https://skmtc.dev/sync/apis/sync-api-v2.md) - [All operations](https://skmtc.dev/sync/apis/sync-api-v2/llms.txt) - [OpenAPI document](https://skmtc.dev/sync/apis/sync-api-v2/revisions/26662c96c138?raw)
