---
title: "Download asset content"
method: GET
path: "/api/v1/assets/{id}/content"
tags: ["Asset Management"]
---

# Download asset content

`GET /api/v1/assets/{id}/content`

## Request

- Base URL: `https://api.imagestep.dev`
- URL: `https://api.imagestep.dev/api/v1/assets/{id}/content`
- Auth: API key in header `Authorization`

Redirects (302) to a signed URL for the asset's own bytes, valid for 5 minutes. The asset
does NOT need to be published — this is the private read path. The redirect is
`Cache-Control: private, no-store`: the URL is the credential, so follow it and do not keep it.

USE THIS WHEN:
- Fetching your own asset's bytes from a script, SDK or CLI
- Previewing an asset you do not want on a public URL

DO NOT USE WHEN:
- You want a stable, cacheable, public URL → publish the asset
  (POST /api/v1/assets/update with published=true) and use `publicUrl`

## Path parameters

- `id` string, required

## Query parameters

- `variant` 'readable' | 'original' | 'preview'

## Other responses

- `302`: Redirect (`Location`) to the signed URL for the bytes. Follow it (`curl -L`).
- `400`: - `invalid_param` on `variant` — not one of readable, original, preview - `invalid_state` on `variant` — that rendition is not written yet: `preview` exists once ingest has run (the asset is DONE)
- `404`: `asset_not_found` — no such asset, or it is not yours
- `429`: Rate limited — `error.code` is `rate_limited` and `retryable` is true. `Retry-After` says how many seconds to wait.

---

[API](https://skmtc.dev/imagestep/apis/imagestep-api.md) · [All operations](https://skmtc.dev/imagestep/apis/imagestep-api/llms.txt) · [OpenAPI document](https://skmtc.dev/imagestep/apis/imagestep-api/revisions/5e8e922a3085?raw)
