---
title: "Redirect a public object to its canonical filename URL or read a private signed object"
method: GET
path: "/storage-objects/{id}/content"
---

# Redirect a public object to its canonical filename URL or read a private signed object

`GET /storage-objects/{id}/content`

## Request

- Base URL: `https://api.eurobase.dev`
- URL: `https://api.eurobase.dev/storage-objects/{id}/content`
- Auth: none declared

Anonymous ready public reads permanently redirect to the canonical filename-bearing URL without bandwidth accounting. A valid signed token returns a private attachment directly.

## Path parameters

- `id` string, required

## Query parameters

- `token` string

## Response `200`

Private signed storage object bytes

## Other responses

- `308`: Ready public object canonical filename redirect; no object bytes are read or accounted
- `401`: Private object read token required (storage-read-token-required), invalid (storage-read-token-invalid), or expired (storage-read-token-expired)
- `403`: Signed read token rejected, or project public serving is suspended (reason project_suspended, ADR 0080)
- `404`: Storage object not found
- `409`: Read bandwidth quota blocks the content fetch before provider bytes are requested
- `500`: Ready object metadata cannot produce a valid canonical filename
- `503`: Quota or storage accounting evidence is temporarily unavailable; no response body bytes are returned

---

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