> ## 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 Lodging Links

> Return property links for a product, optionally filtered by departure or rate plan.

## Method

`GET` `/v1/products/:id/lodging/links`

## Path Parameters

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

## Query Parameters

<ParamField query="departureId" type="uuid">Limit results to links scoped to a specific departure.</ParamField>
<ParamField query="ratePlanId" type="uuid">Limit results to links scoped to a rate plan.</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/lodging/links?departureId=dep_456" \
    -H "Authorization: Bearer $VOYANT_API_KEY"
  ```

  ```javascript Node.js theme={null}
  const res = await fetch(
    "https://api.voyantcloud.com/v1/products/prod_123/lodging/links?ratePlanId=rate_002",
    { 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/lodging/links",
    params={"departureId": "dep_456"},
    headers={"Authorization": f"Bearer {os.environ['VOYANT_API_KEY']}"},
  )
  links = resp.json()["data"]
  ```
</RequestExample>

## Response

<ResponseExample>
  ```json 200 OK theme={null}
  {
    "data": [
      {
        "id": "pll_001",
        "property_id": "prop_987",
        "departure_id": "dep_456",
        "rate_plan_id": null,
        "active": "true"
      },
      {
        "id": "pll_002",
        "property_id": "prop_654",
        "departure_id": null,
        "rate_plan_id": "rate_002",
        "active": "true"
      }
    ]
  }
  ```
</ResponseExample>

<Tip>
  When no matching links are found, the API returns an empty array. Providing `ratePlanId` triggers a fallback that retries without the rate plan if needed.
</Tip>
