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

# Get Product Itinerary

> Return itinerary days for a product, with optional segments and activity options.

## Method

`GET` `/v1/products/:id/itinerary`

## Path Parameters

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

## Query Parameters

<ParamField query="locale" type="string">Optional locale override (e.g., `fr`, `en-GB`) for day titles/descriptions.</ParamField>
<ParamField query="include" type="string">Comma-separated list of extras to include: `segments` and/or `options`.</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/itinerary?locale=fr&include=segments,options" \
    -H "Authorization: Bearer $VOYANT_API_KEY"
  ```

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

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

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

## Response

<ResponseExample>
  ```json 200 OK theme={null}
  {
    "itinerary_id": "iti_01J0C3M4N7Z4YB8V5KT7S01Q2X",
    "version_id": "itv_01J0C3MY5Y2D2T3GQH1FH0N4JM",
    "days": [
      {
        "id": "day_001",
        "day_no": 1,
        "title": "Arrivée et installation",
        "description": "Accueil à l'aéroport et transfert à l'hôtel.",
        "thumbnail_url": null,
        "thumbnail_asset_id": null,
        "segments": [
          {
            "id": "seg_001",
            "day_id": "day_001",
            "sort": 1,
            "title": "Transfert privé",
            "description": "Chauffeur anglophone",
            "place_id": "ChIJd_Y0eVIvkIARuQyDN0F1LBA",
            "start_time": "09:00",
            "end_time": "10:30",
            "option_groups": [
              {
                "id": "grp_001",
                "activity_id": "seg_001",
                "type": "addons",
                "label": "Extras",
                "description": null,
                "min_selections": 0,
                "max_selections": 2,
                "is_required": false,
                "sort_index": 1,
                "options": [
                  {
                    "id": "opt_001",
                    "group_id": "grp_001",
                    "label": "Champagne à bord",
                    "description": "Bouteille de champagne brut",
                    "price_delta": 45,
                    "currency": "EUR",
                    "duration_minutes": null,
                    "inventory_sku": null,
                    "capacity_per_slot": null,
                    "timeslot_rule_id": null,
                    "min_qty": 0,
                    "max_qty": 1,
                    "is_default": false,
                    "sort_index": 1
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  }
  ```
</ResponseExample>

<Tip>
  `include=options` implies `segments` and expands each segment with `option_groups`. Use `include=segments` alone when you only need segment ordering without options.
</Tip>
