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

# List Product Media

> Retrieve media items assigned to a product in sort order.

## Method

`GET` `/v1/products/:id/media`

## Path Parameters

<ParamField path="id" type="uuid" required>Product ID.</ParamField>

## Headers

<ParamField header="Authorization" type="string">Bearer token (requires `products:read`).</ParamField>

## Request Example

<RequestExample>
  ```bash cURL theme={null}
  curl "https://api.voyantcloud.com/v1/products/prod_123/media" \
    -H "Authorization: Bearer $VOYANT_API_KEY"
  ```

  ```javascript Node.js theme={null}
  const res = await fetch("https://api.voyantcloud.com/v1/products/prod_123/media", {
    headers: { Authorization: `Bearer ${process.env.VOYANT_API_KEY}` },
  })
  const { data } = await res.json()
  ```

  ```python Python theme={null}
  import os, requests

  resp = requests.get(
    "https://api.voyantcloud.com/v1/products/prod_123/media",
    headers={"Authorization": f"Bearer {os.environ['VOYANT_API_KEY']}"},
  )
  media = resp.json()["data"]
  ```
</RequestExample>

## Response Example

<ResponseExample>
  ```json 200 OK theme={null}
  {
    "data": [
      {
        "id": "media_01J0E6V4ZBAVQ9PQJRT2P27QX0",
        "url": "https://cdn.voyantcloud.com/media/prod_123/cover.jpg",
        "kind": "hero",
        "alt": "Ocean view room",
        "sort": 0,
        "assetId": "asset_01HZY8SM9P8K4B8N7Q"
      },
      {
        "id": "media_01J0E6V4ZBAVQ9PQJRTR6K9HQC",
        "url": "https://cdn.voyantcloud.com/media/prod_123/pool.jpg",
        "kind": "gallery",
        "alt": null,
        "sort": 1,
        "assetId": null
      }
    ]
  }
  ```

  ```json 404 Not Found theme={null}
  { "error": "Product not found" }
  ```
</ResponseExample>

Items are returned in ascending `sort` order. Each record includes the resolved `url`, optional `assetId`, and metadata.
