> ## 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 Wizard Session

> Fetch the persisted wizard session payload by ID.

## Method

`GET` `/v1/bookings/wizard/:id`

## Path Parameters

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

## Headers

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

## Request Example

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

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

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

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

## Response Fields

<ResponseField name="session" type="object" required>Full session record from `bookings.wizard_sessions`.</ResponseField>
<ResponseField name="session.id" type="uuid" required>Session identifier.</ResponseField>
<ResponseField name="session.workspace_id" type="uuid">Workspace that owns the session.</ResponseField>
<ResponseField name="session.language" type="string">Language associated with the session.</ResponseField>
<ResponseField name="session.currency" type="string">Currency used for pricing.</ResponseField>
<ResponseField name="session.step" type="integer">Current wizard step.</ResponseField>
<ResponseField name="session.version" type="integer">Client-side version counter.</ResponseField>
<ResponseField name="session.data" type="object">Stored JSON payload (steps, passengers, pricing, etc.).</ResponseField>
<ResponseField name="session.booking_id" type="uuid">Booking ID if the session has already been committed.</ResponseField>
<ResponseField name="session.expires_at" type="timestamp">Session expiration timestamp.</ResponseField>
<ResponseField name="session.locked_at" type="timestamp">Timestamp when commit processing locked the session.</ResponseField>
<ResponseField name="session.consumed_at" type="timestamp">Timestamp when the session was consumed.</ResponseField>

## Response Example

<ResponseExample>
  ```json 200 OK theme={null}
  {
    "session": {
      "id": "wzd_01J0C6ZFWN6JQM4TP7A1ZA6X0M",
      "workspace_id": "ws_01HZYPM2QF2R8X9SZQ0J9SYBCN",
      "user_id": null,
      "visitor_id": "anon_987",
      "language": "en",
      "currency": "EUR",
      "step": 3,
      "version": 1,
      "data": {
        "step_1": { "productId": "prod_123", "departureId": "dep_456" },
        "step_2": { "rooms": [{ "categoryKey": "double", "occupancy": 2, "quantity": 1 }] },
        "step_3": { "extensions": [{ "id": "ext_wifi", "quantity": 1 }] }
      },
      "booking_id": null,
      "expires_at": "2025-01-12T12:00:00Z",
      "locked_at": null,
      "consumed_at": null
    }
  }
  ```

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

<Tip>
  Sessions are stored per-region. The API automatically attempts a fallback region when the session is not found in the default database.
</Tip>
