> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tape.network/llms.txt
> Use this file to discover all available pages before exploring further.

# Get Object

> Fetch an object's decoded bytes by its track address.

Fetches an object's decoded bytes. This is the primary content endpoint: give it a track address, get the payload back.

The gateway does the assembly for you. If the object was uploaded as a stream, the gateway follows the manifest transparently and you receive the complete payload.

## Range requests

The endpoint honors `Range` headers and answers with `206 Partial Content` and a `Content-Range` header (`Accept-Ranges` is advertised). For streamed objects, a range request resolves the manifest and fetches only the segment tracks your range touches, which is what keeps range reads over large files cheap ([how streams are laid out](/protocol/architecture/tracks)).

## Response headers

| Header           | Value                                 |
| ---------------- | ------------------------------------- |
| `Content-Type`   | from the object's metadata            |
| `Content-Length` | the payload size                      |
| `ETag`           | the track's on-chain commitment       |
| `Cache-Control`  | `public, max-age=31536000, immutable` |

The caching headers are safe to take literally: this URL is track-addressed, so it can only ever serve one payload. That's what makes Tapedrive content a good fit for CDNs and edge caches ([serving through a CDN](/tools/cdn)).

Looking up an object by name instead of track address? Name resolution goes through [list objects](/apis/gateway/objects/list-objects).

## Errors

One case is specific to this endpoint: `400` when the track exists but isn't certified yet: the network hasn't proven the data is available, so the gateway won't serve it. Everything else follows the [shared error conventions](/apis/gateway), and the endpoint is metered per IP ([rate limits](/apis/rate-limits)).

## Example

Set `$TAPE_GATEWAY` using the [gateway API setup](/apis/gateway), then replace the
example track address with the one returned by your upload:

```bash theme={null}
curl -i "$TAPE_GATEWAY/object/7f3kD9mQxYz2pW8vN4cRtE5uH6bJamd9GvKq2rTeUWXs"
```

```text Response theme={null}
HTTP/2 200
content-type: image/jpeg
content-length: 87342
etag: "HxbTgzim3nRPhWSyBEUvvteNRWLbrAxV3rDJyoW4mZ5J"
cache-control: public, max-age=31536000, immutable
accept-ranges: bytes
```
