> ## 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.

# Downloads

Standard S3 read operations, served from decoded and verified content. Reads can be anonymous, subject to the gateway's metering ([rate limits](/apis/rate-limits)), or signed.

## GetObject and HeadObject

Fetch an object or its metadata. Responses carry `Content-Type`, `Content-Length`, a quoted `ETag` (the on-chain commitment), `Last-Modified`, and `Cache-Control`. Single-track GETs also advertise `Accept-Ranges`.

<Tabs>
  <Tab title="aws CLI">
    ```bash theme={null}
    aws s3 cp s3://my-bucket/reports/q2.pdf ./q2.pdf --profile tapedrive
    ```
  </Tab>

  <Tab title="rclone">
    ```bash theme={null}
    rclone copy tapedrive:my-bucket/reports/q2.pdf ./
    ```
  </Tab>

  <Tab title="Presigned URL">
    ```bash theme={null}
    url=$(aws s3 presign s3://my-bucket/reports/q2.pdf --profile tapedrive --expires-in 3600)
    curl -o q2.pdf "$url"
    ```
  </Tab>
</Tabs>

## Range requests

A `Range` header returns `206 Partial Content` with the requested bytes. On streamed (multi-segment) objects the gateway resolves the manifest and decodes only the segments your range covers ([how streams are laid out](/protocol/architecture/tracks)). An unsatisfiable range returns `416` (`InvalidRange`).

```bash theme={null}
curl -H "Range: bytes=0-1048575" -o first-mb.bin "$url"
```

## Listing

`ListObjectsV2` supports `prefix` and `delimiter` for directory-style browsing, pagination with continuation tokens, and up to 1000 keys per page. The V1 fallback works for older tooling.

Listings come from the gateway's replay-built catalog: a listing page is one range scan, so browsing stays fast at any bucket size ([objects](/protocol/architecture/objects)).

<Tabs>
  <Tab title="aws CLI">
    ```bash theme={null}
    aws s3 ls s3://my-bucket/reports/ --profile tapedrive
    ```
  </Tab>

  <Tab title="rclone">
    ```bash theme={null}
    rclone lsl tapedrive:my-bucket/reports/
    ```
  </Tab>

  <Tab title="boto3">
    ```python theme={null}
    pages = s3.get_paginator("list_objects_v2").paginate(
        Bucket="my-bucket", Prefix="reports/"
    )
    ```
  </Tab>
</Tabs>
