From a6de4daf61f7a2d20eb69afbcc426d46263d6015 Mon Sep 17 00:00:00 2001 From: JordanHood Date: Wed, 1 Apr 2026 09:36:21 +0100 Subject: [PATCH 1/5] fix v2 doc errors and add missing integration guidance --- .../v2/api-endpoint-navigation-guide.md | 110 ++++++++++-------- site/partner/v2/authentication.md | 2 - site/partner/v2/index.md | 21 +++- site/partner/v2/webhook-integration-guide.md | 2 +- 4 files changed, 79 insertions(+), 56 deletions(-) diff --git a/site/partner/v2/api-endpoint-navigation-guide.md b/site/partner/v2/api-endpoint-navigation-guide.md index b28641a2..ecb4cf87 100644 --- a/site/partner/v2/api-endpoint-navigation-guide.md +++ b/site/partner/v2/api-endpoint-navigation-guide.md @@ -68,7 +68,15 @@ The **Locations** endpoint is the only endpoint that doesn't follow the product- ## Core Concepts -### 1. Price Guarantee Tokens +### 1. Date and Time Formats + +The API uses two datetime formats: + +* **Local datetime** (e.g., `2026-05-20T08:00:00`) -- Times without a timezone offset. These are always in the **airport's local timezone**. When you submit `parking_entry_datetime: "2026-05-20T08:00:00"` for Heathrow, that means 8am London time. The API returns parking and flight times in this same format. + +* **UTC datetime** (e.g., `2026-05-20T07:00:00.000Z`) -- Times with a `Z` suffix. Used for token expiry times and policy deadlines. These are always UTC. + +### 2. Price Guarantee Tokens **What:** A time-limited token that locks in a price **When:** Obtained from the Products endpoint **Why:** Ensures customers aren't charged more than the quoted price **Validity:** 30 minutes **Usage:** Required for Book endpoint @@ -82,7 +90,7 @@ The **Locations** endpoint is the only endpoint that doesn't follow the product- 5. API only charges £45.99 (the guaranteed price) ``` -### 2. Booking Reference vs Partner Reference +### 3. Booking Reference vs Partner Reference **Booking Reference:** @@ -100,7 +108,7 @@ The **Locations** endpoint is the only endpoint that doesn't follow the product- * **Usage:** Use this for List Bookings endpoint only * **Why:** Helps you match our bookings to your internal systems -### 3. Quote and Confirm Pattern +### 4. Quote and Confirm Pattern For amendments and cancellations, we use a two-step "quote and confirm" pattern: @@ -140,7 +148,7 @@ For amendments and cancellations, we use a two-step "quote and confirm" pattern: **Response includes:** * Location types -* Location codes (IATA / UNLOCODE) +* Location codes (IATA) * Location names * Available product types at each location @@ -167,26 +175,36 @@ For parking products, you have flexibility in how you specify timing. You can pr **Option 1: Explicit parking times** -* `parking_entry_date_time` - When the customer will arrive at the car park -* `parking_exit_date_time` - When the customer will leave the car park +* `parking_entry_datetime` - When the customer will arrive at the car park +* `parking_exit_datetime` - When the customer will leave the car park Use this when you know the exact parking duration needed. **Option 2: Flight-based calculation** * `outbound_flight_number` - Departure flight number -* `outbound_flight_date_time` - Departure flight time +* `outbound_departure_datetime` - Departure flight time * `inbound_flight_number` - Return flight number -* `inbound_flight_date_time` - Return flight time +* `inbound_arrival_datetime` - Return flight time Use this when you want the API to calculate appropriate parking times based on flight schedules. The API will automatically add buffer time for airport arrival/departure. **Important rules:** * At least one set of parameters must be provided -* If both sets are provided, `parking_entry_date_time` and `parking_exit_date_time` take precedence +* If both sets are provided, `parking_entry_datetime` and `parking_exit_datetime` take precedence * Flight-based calculation is useful when you're unsure how much time customers need between parking and their flight +**How flight-based derivation works:** + +When you provide `outbound_departure_datetime` instead of `parking_entry_datetime`, the API derives an appropriate parking start time based on the flight schedule. Similarly, `inbound_arrival_datetime` derives the parking end time. This adds buffer time for airport arrival and departure. + +You must provide at least one of each pair: +* `parking_entry_datetime` OR `outbound_departure_datetime` +* `parking_exit_datetime` OR `inbound_arrival_datetime` + +If both are provided in a pair, the explicit parking time takes precedence. + **Response includes:** * List of available products @@ -253,15 +271,13 @@ Examples: * Hotels: Room requirements, arrival time, guest count * Lounges: Passenger details, flight info, visit time * FastTrack: Passenger details, flight info, travel time -* Your partner reference (optional but recommended) +* Your partner reference (optional but recommended, max 20 characters) **Response includes:** * **Booking reference** (e.g., HX123456) - Our booking reference -* **Booking status** (`pending` or `confirmed`) -* **Hosted confirmation page URL** - A link to our hosted confirmation page +* **Booking status** (`Pending` or `Confirmed`) * **Recommended polling interval** (in seconds) - Suggested frequency for status checks -* All booking details **Important:** Always include an `Idempotency-Key` header to prevent duplicate bookings if there's a network error. Any unique string is accepted; UUID v4 is recommended. Re-use the same key to safely retry a failed request. @@ -285,17 +301,17 @@ You have four options for handling pending bookings, depending on how much contr **Option 1: Hosted Confirmation Page (Simplest)** -* Use the Holiday Extras co-branded hosted confirmation page URL included in the booking response +* Call `GET /v2/bookings/parking/{booking-reference}` to get the `confirmation_page_link` * Direct customers to this URL * We handle all status updates and display logic * The page automatically updates when the booking confirms * No polling or webhooks needed on your side -**Option 2: Confirmation Endpoint (Simple)** +**Option 2: GET Booking Endpoint (Simple)** -* Use the Confirmation endpoint (Stage 5) to display booking details +* Use `GET /v2/bookings/parking/{booking-reference}` to display booking details * The data returned is always relevant to the current status -* Shows "pending" messaging when pending, "confirmed" details when confirmed +* Shows pending state when pending, full confirmation details when confirmed * Make the same call regardless of status - we handle the logic * No need to track status transitions yourself @@ -323,35 +339,20 @@ You have four options for handling pending bookings, depending on how much contr --- -### Stage 5: Booking Confirmation Details - -**Endpoint:** `GET /v2/bookings/parking/{booking-reference}/confirmation-details` - -**Purpose:** Get formatted confirmation details for display +### Stage 5: Booking Confirmation -**When to use:** - -* Immediately after booking is created -* Displaying a confirmation page - -**Query parameters:** - -* `format`: `json` (default), `html`, or `markdown` - -**Response includes:** +After creating a booking, you have two options for showing confirmation details to customers: -* All booking details formatted for display -* Product-specific instructions (PIN codes, meeting points, etc.) -* Contact information -* Important notices +**Option 1: Hosted Confirmation Page** -**Format options:** +* Use the `confirmation_page_link` field from `GET /v2/bookings/parking/{booking-reference}` -- a URL to a Holiday Extras hosted confirmation page +* Direct customers here and we handle the display +* The page automatically updates when the booking confirms -* `json`: Returns an array of `{ type, value }` pairs (e.g., `{ "type": "booking_reference", "value": "HX123456" }`). Use these fields to build your own confirmation page. -* `html`: Returns a `{ text }` object containing a ready-to-use HTML snippet for web pages. -* `markdown`: Returns a `{ text }` object containing text-based format for simpler emails. +**Option 2: Build Your Own** -**Why use this?** The formatted confirmation includes product-specific instructions. It's optimized for customer-facing display. +* Use the booking details from `GET /v2/bookings/parking/{booking-reference}` (Stage 6) to build your own confirmation page +* The response includes all booking details, entry methods, and customer information --- @@ -372,8 +373,20 @@ You have four options for handling pending bookings, depending on how much contr **Response includes:** * Complete booking details -* Current status (pending, confirmed, cancelled, error) +* Current status (Pending, Confirmed, Aborted, Error, Received, Accepted) * Customer details +* `confirmation_page_link` -- hosted confirmation page URL (or null if not yet available) +* `entry_method` -- how the customer enters the car park (QR code, barcode, or reference number) +* `amendable_data` -- the current values of fields that can be amended. If empty, the booking cannot be amended. Use these values to pre-fill an amendment form before calling the amendment quote endpoint. +* `policies` -- amendment and refund policies for this booking (see below) + +**Understanding Policies:** + +The `policies` object tells you what changes are available and what refunds apply: + +* `amendments.permitted` -- whether the booking can be amended +* `amendments.until` -- deadline for amendments (UTC), or null if no deadline +* `refunds` -- an array of refund tiers, ordered by deadline descending. The first tier whose `until` datetime has not yet passed determines the refund amount. An empty array means no refund is available. **Important:** Use our **booking reference**, not your partner reference. @@ -468,7 +481,7 @@ You have four options for handling pending bookings, depending on how much contr #### Step 1: Cancel Quote -**Endpoint:** `PATCH /v2/bookings/parking/{booking-reference}/cancellations/quote` +**Endpoint:** `GET /v2/bookings/parking/{booking-reference}/cancellations/quote` **Purpose:** Preview the cancellation without executing it @@ -535,9 +548,8 @@ You have four options for handling pending bookings, depending on how much contr 4. POST /v2/bookings/parking → Include the price_guarantee_token → Create booking -5. GET /v2/bookings/parking/{booking-reference}/confirmation-details?format=html - → Display confirmation to customer - → Send confirmation email +5. Use confirmation_page_link from booking response + → Or build your own confirmation from GET /v2/bookings/parking/{booking-reference} ``` ### Workflow 2: Customer Wants to View Their Booking @@ -575,8 +587,8 @@ You have four options for handling pending bookings, depending on how much contr 5. POST /v2/bookings/parking/{booking-reference}/amendments/confirm → Include amendment_token → Booking updated -6. GET /v2/bookings/parking/{booking-reference}/confirmation-details?format=html - → Send updated confirmation email +6. GET /v2/bookings/parking/{booking-reference} + → Send updated confirmation email with latest booking details ``` ### Workflow 4: Customer Wants to Cancel @@ -584,7 +596,7 @@ You have four options for handling pending bookings, depending on how much contr ``` 1. GET /v2/bookings/parking/{booking-reference} → Get current booking details -2. PATCH /v2/bookings/parking/{booking-reference}/cancellations/quote +2. GET /v2/bookings/parking/{booking-reference}/cancellations/quote → Get cancellation_token and refund amount 3. Show customer: "You'll receive a refund of £40.99" → Customer confirms diff --git a/site/partner/v2/authentication.md b/site/partner/v2/authentication.md index 1c0643ea..5bbdc931 100644 --- a/site/partner/v2/authentication.md +++ b/site/partner/v2/authentication.md @@ -181,8 +181,6 @@ curl -X POST "https://auth.holidayextras.com/oauth2/revoke" \ -d "token=abc123xyz..." ``` -## - ## Error Responses Error responses follow RFC 6749 format: diff --git a/site/partner/v2/index.md b/site/partner/v2/index.md index 498a8d62..759bd5f4 100644 --- a/site/partner/v2/index.md +++ b/site/partner/v2/index.md @@ -4,7 +4,20 @@ Partner API 2026 (APIConnect) is the next step for our platform. It brings UK an This documentation is subject to change. Further features, including a booking list capability to support reconciliation and recovery flows, as well as wider product coverage, will be introduced in later phases. -Documentation: -* [APIConnect (Partner API 2026) - Understanding the OpenAPI Documentation](./api-endpoint-navigation-guide.md) -* [APIConnect (Partner API 2026) - Event Notifications](./webhook-integration-guide.md) -* [Authentication](./authentication.md) +## OpenAPI Schema + +The OpenAPI specification is available at: + +| Environment | Schema URL | +|-------------|-----------| +| Production | `https://api.holidayextras.com/partner-api/v2/schema.json` | +| Staging | `https://api-sandbox.holidayextras.com/partner-api/v2/schema.json` | + +View in [Swagger Editor](https://editor.swagger.io/) or import into [Postman](https://www.postman.com/). + +## Documentation + +* [Authentication](./authentication.md) - OAuth 2.0 client credentials flow +* [Understanding the OpenAPI Documentation](./api-endpoint-navigation-guide.md) - Endpoint workflows and integration guide +* [Event Notifications](./webhook-integration-guide.md) - Webhook integration for booking status updates +* [Error Responses](./problems/) - HTTP error codes and resolution guidance diff --git a/site/partner/v2/webhook-integration-guide.md b/site/partner/v2/webhook-integration-guide.md index fda933af..a0692ce8 100644 --- a/site/partner/v2/webhook-integration-guide.md +++ b/site/partner/v2/webhook-integration-guide.md @@ -79,7 +79,7 @@ The webhook contains **only identifiers**, not full booking details. This is int * No risk of processing stale information * Consistent data structure across all events -**After receiving a webhook, call:** `GET /api/v1/bookings/{booking_reference}` to fetch full booking details. +**After receiving a webhook, call:** `GET /v2/bookings/parking/{booking_reference}` to fetch full booking details. --- From a4d3bea178ac660df4aa36c557146e1863ea94e2 Mon Sep 17 00:00:00 2001 From: JordanHood Date: Wed, 1 Apr 2026 09:43:33 +0100 Subject: [PATCH 2/5] add environments table with matching auth/api URLs --- site/partner/v2/index.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/site/partner/v2/index.md b/site/partner/v2/index.md index 759bd5f4..542f1dc4 100644 --- a/site/partner/v2/index.md +++ b/site/partner/v2/index.md @@ -4,16 +4,17 @@ Partner API 2026 (APIConnect) is the next step for our platform. It brings UK an This documentation is subject to change. Further features, including a booking list capability to support reconciliation and recovery flows, as well as wider product coverage, will be introduced in later phases. -## OpenAPI Schema +## Environments -The OpenAPI specification is available at: +| | Production | Staging | +|---|---|---| +| **API** | `https://api.holidayextras.com` | `https://api-sandbox.holidayextras.com` | +| **Auth** | `https://auth.holidayextras.com` | `https://auth-staging.holidayextras.com` | +| **OpenAPI Schema** | `https://api.holidayextras.com/partner-api/v2/schema.json` | `https://api-sandbox.holidayextras.com/partner-api/v2/schema.json` | -| Environment | Schema URL | -|-------------|-----------| -| Production | `https://api.holidayextras.com/partner-api/v2/schema.json` | -| Staging | `https://api-sandbox.holidayextras.com/partner-api/v2/schema.json` | +Use staging for development and testing. Authenticate against the matching auth environment -- staging credentials will not work against production and vice versa. -View in [Swagger Editor](https://editor.swagger.io/) or import into [Postman](https://www.postman.com/). +View the schema in [Swagger Editor](https://editor.swagger.io/) or import into [Postman](https://www.postman.com/). ## Documentation From bfb312d1ed3604a9c27225544cee73c82b03247c Mon Sep 17 00:00:00 2001 From: JordanHood Date: Wed, 1 Apr 2026 10:03:39 +0100 Subject: [PATCH 3/5] add currency/pricing and renumber core concepts --- site/partner/v2/api-endpoint-navigation-guide.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/site/partner/v2/api-endpoint-navigation-guide.md b/site/partner/v2/api-endpoint-navigation-guide.md index ecb4cf87..38f62c12 100644 --- a/site/partner/v2/api-endpoint-navigation-guide.md +++ b/site/partner/v2/api-endpoint-navigation-guide.md @@ -76,7 +76,11 @@ The API uses two datetime formats: * **UTC datetime** (e.g., `2026-05-20T07:00:00.000Z`) -- Times with a `Z` suffix. Used for token expiry times and policy deadlines. These are always UTC. -### 2. Price Guarantee Tokens +### 2. Currency and Pricing + +All monetary values in the API are expressed in **minor currency units** (e.g., pence for GBP, cents for EUR). A price of `4599` in GBP means **45.99**. This applies to all price, commission, refund, and cost fields across every endpoint. + +### 3. Price Guarantee Tokens **What:** A time-limited token that locks in a price **When:** Obtained from the Products endpoint **Why:** Ensures customers aren't charged more than the quoted price **Validity:** 30 minutes **Usage:** Required for Book endpoint @@ -90,7 +94,7 @@ The API uses two datetime formats: 5. API only charges £45.99 (the guaranteed price) ``` -### 3. Booking Reference vs Partner Reference +### 4. Booking Reference vs Partner Reference **Booking Reference:** @@ -108,7 +112,7 @@ The API uses two datetime formats: * **Usage:** Use this for List Bookings endpoint only * **Why:** Helps you match our bookings to your internal systems -### 4. Quote and Confirm Pattern +### 5. Quote and Confirm Pattern For amendments and cancellations, we use a two-step "quote and confirm" pattern: From 2ca650d84e5b05d76d162af9bd56a4b9c32bbb16 Mon Sep 17 00:00:00 2001 From: JordanHood Date: Wed, 1 Apr 2026 10:16:29 +0100 Subject: [PATCH 4/5] fix broken problems/ link in index --- site/partner/v2/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/partner/v2/index.md b/site/partner/v2/index.md index 542f1dc4..2f872b60 100644 --- a/site/partner/v2/index.md +++ b/site/partner/v2/index.md @@ -21,4 +21,4 @@ View the schema in [Swagger Editor](https://editor.swagger.io/) or import into [ * [Authentication](./authentication.md) - OAuth 2.0 client credentials flow * [Understanding the OpenAPI Documentation](./api-endpoint-navigation-guide.md) - Endpoint workflows and integration guide * [Event Notifications](./webhook-integration-guide.md) - Webhook integration for booking status updates -* [Error Responses](./problems/) - HTTP error codes and resolution guidance +* [Error Responses](./problems/bad-request.md) - HTTP error codes and resolution guidance From 41609735859b6f9fd615462ce0e28a76895adc32 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 1 Apr 2026 09:16:52 +0000 Subject: [PATCH 5/5] Update dist --- docs/feed.xml | 2 +- docs/hxapi/asynchronous-bookings/index.html | 8 +- docs/hxapi/carhire/availability/index.html | 4 +- docs/hxapi/parking/av/airport/index.html | 20 +-- docs/hxapi/productlibrary/index.html | 28 ++-- docs/hxapi/transfers/av/index.html | 24 ++-- docs/hxapi/transfers/cancel/index.html | 4 +- .../transfers/cancellation-policy/index.html | 8 +- docs/hxapi/transfers/view/index.html | 4 +- docs/hxapi/upgrade/index.html | 16 +-- docs/hxapi/viewamendcancel/view/index.html | 20 +-- .../v2/api-endpoint-navigation-guide.md | 114 +++++++++------- .../api-endpoint-navigation-guide/index.html | 127 ++++++++++-------- docs/partner/v2/authentication.md | 2 - docs/partner/v2/authentication/index.html | 2 - docs/partner/v2/index.html | 43 +++++- docs/partner/v2/index.md | 22 ++- docs/partner/v2/webhook-integration-guide.md | 2 +- .../v2/webhook-integration-guide/index.html | 2 +- docs/search/index.html | 8 +- 20 files changed, 271 insertions(+), 189 deletions(-) diff --git a/docs/feed.xml b/docs/feed.xml index c95eaf0d..7ab1fa07 100644 --- a/docs/feed.xml +++ b/docs/feed.xml @@ -1,2 +1,2 @@ -Jekyll2026-03-31T14:43:37+00:00/feed.xmlHoliday Extras APIDocumentation to give to partners who would like to integrate with our API. +Jekyll2026-04-01T09:16:49+00:00/feed.xmlHoliday Extras APIDocumentation to give to partners who would like to integrate with our API. \ No newline at end of file diff --git a/docs/hxapi/asynchronous-bookings/index.html b/docs/hxapi/asynchronous-bookings/index.html index f230ceb6..f69bfa57 100644 --- a/docs/hxapi/asynchronous-bookings/index.html +++ b/docs/hxapi/asynchronous-bookings/index.html @@ -77,7 +77,7 @@

Availability Request

UK Products Availability Request

-
    +
    • XML
    • @@ -85,7 +85,7 @@

      UK Products Availability Request

    -
      +
      • https://api.holidayextras.com/v1/carpark/LGW?ABTANumber=YourABTANumber&Password=YourPassword&Initials=YourInitials&key=YourKey&token=YourToken&ArrivalDate=2025-01-07&ArrivalTime=1200&DepartDate=2025-01-08&DepartTime=1200&NumberOfPax=1&includeAsyncOnlyProducts=true
        @@ -102,7 +102,7 @@ 

        UK Products Availability Request

        European Products Availability Request

        -
          +
          • XML
          • @@ -110,7 +110,7 @@

            European Products Availability R

          -
            +
            • https://api.holidayextras.com/v1/carpark/MUC?ABTANumber=YourABTANumber&Password=YourPassword&Initials=YourInitials&key=YourKey&token=YourToken&ArrivalDate=2025-12-01&ArrivalTime=1200&DepartDate=2025-12-08&DepartTime=1200&NumberOfPax=1&System=ABG&lang=en&includeAsyncOnlyProducts=true
              diff --git a/docs/hxapi/carhire/availability/index.html b/docs/hxapi/carhire/availability/index.html
              index 38dbfb2c..eb126410 100644
              --- a/docs/hxapi/carhire/availability/index.html
              +++ b/docs/hxapi/carhire/availability/index.html
              @@ -53,7 +53,7 @@ 

              Request

              Example request:

              -
                +
                • XML
                • @@ -61,7 +61,7 @@

                  Request

                -
                  +
                  • https://api.holidayextras.com/v1/sandbox/carHire/products?key=1&From=06NOV16&ArrivalTime=1200&To=13NOV&DepartTime=1600&PickupLocation=FL965&DropoffLocation=FL965&DateOfBirth=1990-10-13
                    diff --git a/docs/hxapi/parking/av/airport/index.html b/docs/hxapi/parking/av/airport/index.html
                    index 50337b87..8198d7ab 100644
                    --- a/docs/hxapi/parking/av/airport/index.html
                    +++ b/docs/hxapi/parking/av/airport/index.html
                    @@ -49,7 +49,7 @@ 

                    Endpoint

                    For example, for London Gatwick the endpoint is:

                    -
                      +
                      • XML
                      • @@ -57,7 +57,7 @@

                        Endpoint

                      -
                        +
                        • https://api.holidayextras.com/v1/carpark/LGW
                          @@ -444,7 +444,7 @@ 

                          Worked Examples

                          UK Products Availability Request

                          -
                            +
                            • XML
                            • @@ -452,7 +452,7 @@

                              UK Products Availability Request

                            -
                              +
                              • https://api.holidayextras.com/carpark/LGW?ABTANumber=YourABTANumber&Password=YourPassword&Initials=YourInitials&key=YourKey&token=YourToken&ArrivalDate=2020-01-07&ArrivalTime=1200&DepartDate=2020-01-08&DepartTime=1200&NumberOfPax=1
                                @@ -471,7 +471,7 @@ 

                                UK Products Availability Response

                                NB: This is a shortened example compiled from a full availability response.

                                -
                                  +
                                  • XML
                                  • @@ -479,7 +479,7 @@

                                    UK Products Availability Response

                                    -
                                      +
                                      • <?xml version="1.0"?>
                                        @@ -707,7 +707,7 @@ 

                                        UK Products Availability Response

                                        European Products Availability Request -
                                          +
                                          • XML
                                          • @@ -715,7 +715,7 @@

                                            European Products Availability R

                                          -
                                            +
                                            • https://api.holidayextras.com/carpark/MUC?ABTANumber=YourABTANumber&Password=YourPassword&Initials=YourInitials&key=YourKey&token=YourToken&ArrivalDate=2017-12-01&ArrivalTime=1200&DepartDate=2017-12-08&DepartTime=1200&NumberOfPax=1&System=ABG&lang=en
                                              @@ -734,7 +734,7 @@ 

                                              European Products Availability

                                              NB: This is a shortened example compiled from a full availability response.

                                              -
                                                +
                                                • XML
                                                • @@ -742,7 +742,7 @@

                                                  European Products Availability

                                                -
                                                  +
                                                  • <?xml version="1.0"?>
                                                    diff --git a/docs/hxapi/productlibrary/index.html b/docs/hxapi/productlibrary/index.html
                                                    index 01e7d921..d9ebbdc0 100644
                                                    --- a/docs/hxapi/productlibrary/index.html
                                                    +++ b/docs/hxapi/productlibrary/index.html
                                                    @@ -83,7 +83,7 @@ 

                                                    Available Fields

                                                    The available fields vary by product type. For each product type there is a recommended list of fields which should be requested to get the information required to effectively sell the product.

                                                    -
                                                      +
                                                      • Parking
                                                      • @@ -97,7 +97,7 @@

                                                        Available Fields

                                                      -
                                                        +
                                                        • @@ -968,7 +968,7 @@

                                                          Example 1 - Default Response

                                                          Request

                                                          -
                                                            + -
                                                              +
                                                              • https://api.holidayextras.com/v1/product/LGW4/lite?token=000015778&key=mytestkey
                                                                @@ -1008,7 +1008,7 @@ 

                                                                Request

                                                                Response

                                                                -
                                                                  +
                                                                  • XML
                                                                  • @@ -1016,7 +1016,7 @@

                                                                    Response

                                                                  -
                                                                    +
                                                                    • <?xml version="1.0"?>
                                                                      @@ -1403,7 +1403,7 @@ 

                                                                      Example 2 - Restricted field list

                                                                      Request

                                              -
                                                + -
                                                  +
                                                  • https://api.holidayextras.com/v1/product/LGW4/lite?token=000015778&key=mytestkey&fields=name,longitude,latitude
                                                    @@ -1443,7 +1443,7 @@ 

                                                    Request

                                                    Response

                                                    -
                                                      +
                                                      • XML
                                                      • @@ -1451,7 +1451,7 @@

                                                        Response

                                                      -
                                                        +
                                                        • <?xml version="1.0"?>
                                                          @@ -1512,7 +1512,7 @@ 

                                                          Request

                                                          Requests for German products return a different set of fields. Explanation of fields not currently available.

                                                          -
                                                            + -
                                                              +
                                                              • https://api.holidayextras.com/v1/product/FRA0?key=mytestkey
                                                                @@ -1552,7 +1552,7 @@ 

                                                                Request

                                                                Response

                                                                -
                                                                  +
                                                                  • XML
                                                                  • @@ -1560,7 +1560,7 @@

                                                                    Response

                                                                  -
                                                                    +
                                                                    • <?xml version="1.0"?>
                                                                      diff --git a/docs/hxapi/transfers/av/index.html b/docs/hxapi/transfers/av/index.html
                                                                      index b9d1a63d..b23d442f 100644
                                                                      --- a/docs/hxapi/transfers/av/index.html
                                                                      +++ b/docs/hxapi/transfers/av/index.html
                                                                      @@ -856,7 +856,7 @@ 

                                                                      Worked Examples

                                                                      Airport to GIATA

                                                                      Request
                                                                      -
                                                                        +
                                                                        • XML
                                                                        • @@ -864,7 +864,7 @@
                                                                          Request
                                                                        -
                                                                          +
                                                                          • https:///api.holidayextras.com/v1/transfers/search?ABTANumber=YourABTANumber&Password=YourABTANumber&Initials=YourInitials&key=YourKey&token=YourToken&PickUp=ALC&PickUpType=IATA&DropOffType=GIATA&DropOff=439771&FromDate=2022-03-16&FromTime=1115&ReturnDate=2022-03-23&ReturnTime=1115&Adults=2&OutFlight=U28605&ReturnFlight=U28602
                                                                            @@ -882,7 +882,7 @@ 
                                                                            Request
                                                                            Response

                                                                            NB: This is a shortened example compiled from a full availability response.

                                                                            -
                                                                              +
                                                                              • XML
                                                                              • @@ -890,7 +890,7 @@
                                                                                Response
                                                                              -
                                                                                +
                                                                                • <API_Reply Product="Transfers" RequestCode="1" Result="OK" cached="1" expires="2021-12-07 13:06:41">
                                                                                  @@ -1128,7 +1128,7 @@ 
                                                                                  Response

                                                                                  Airport to TTI

                                                                                  Request
                                                                                  -
                                                                                    +
                                                                                    • XML
                                                                                    • @@ -1136,7 +1136,7 @@
                                                                                      Request
                                                                                    -
                                                                                      +
                                                                                      • https:///api.holidayextras.com/v1/transfers/search?ABTANumber=YourABTANumber&Password=YourABTANumber&Initials=YourInitials&key=YourKey&token=YourToken&PickUp=ALC&PickUpType=IATA&DropOffType=TTI&DropOff=10147575&FromDate=2022-03-16&FromTime=1115&ReturnDate=2022-03-23&ReturnTime=1115&Adults=2&OutFlight=U28605&ReturnFlight=U28602
                                                                                        @@ -1155,7 +1155,7 @@ 
                                                                                        Response

                                                                                        NB: This is a shortened example compiled from a full availability response.

                                                                                        -
                                                                                          +
                                                                                          • XML
                                                                                          • @@ -1163,7 +1163,7 @@
                                                                                            Response
                                                                                          -
                                                                                            +
                                                                                            • <API_Reply Product="Transfers" RequestCode="1" Result="OK" cached="1" expires="2021-12-07 13:06:41">
                                                                                              @@ -1400,7 +1400,7 @@ 
                                                                                              Response

                                                                                              Airport to Postal Address

                                                                                              Request
                                                                                              -
                                                                                                +
                                                                                                • XML
                                                                                                • @@ -1408,7 +1408,7 @@
                                                                                                  Request
                                                                                                -
                                                                                                  +
                                                                                                  • https:///api.holidayextras.com/v1/transfers/search?ABTANumber=YourABTANumber&Password=YourABTANumber&Initials=YourInitials&key=YourKey&token=YourToken&PickUp=ALC&PickUpType=IATA&DropOffType=postal-address&DropOffName=Hotel%20Rural%20Castillo%20De%20Biar&DropOffAddress[0]=Carretera%20de%20Banyeres&DropOffAddress[1]=s/n&DropOffTown=%20Biar&DropOffCounty=Alicante&DropOffPostcode=03410&DropOffCountryCode=ES&DropOffLongitude=-0.76832006&DropOffLatitude=38.63852215&Adults=2&FromDate=2022-03-16&FromTime=1115&ReturnDate=2022-03-23&ReturnTime=1115&OutFlight=U28605&ReturnFlight=U28602
                                                                                                    @@ -1427,7 +1427,7 @@ 
                                                                                                    Response

                                                                                                    NB: This is a shortened example compiled from a full availability response.

                                                                                                    -
                                                                                                      +
                                                                                                      • XML
                                                                                                      • @@ -1435,7 +1435,7 @@
                                                                                                        Response
                                                                                                      -
                                                                                                        +
                                                                                                        • <API_Reply Product="Transfers" RequestCode="1" Result="OK" cached="1" expires="2021-12-07 16:31:35">
                                                                                                          diff --git a/docs/hxapi/transfers/cancel/index.html b/docs/hxapi/transfers/cancel/index.html
                                                                                                          index df708beb..9977419a 100644
                                                                                                          --- a/docs/hxapi/transfers/cancel/index.html
                                                                                                          +++ b/docs/hxapi/transfers/cancel/index.html
                                                                                                          @@ -160,7 +160,7 @@ 

                                                                                                          Cancel Booking Response

                                                                                                          Example

                                                                                                          -
                                                                                                            +
                                                                                                            • XML
                                                                                                            • @@ -168,7 +168,7 @@

                                                                                                              Example

                                                                                                            -
                                                                                                              +
                                                                                                              • <Booking>
                                                                                                                diff --git a/docs/hxapi/transfers/cancellation-policy/index.html b/docs/hxapi/transfers/cancellation-policy/index.html
                                                                                                                index 59e791e2..cd29c731 100644
                                                                                                                --- a/docs/hxapi/transfers/cancellation-policy/index.html
                                                                                                                +++ b/docs/hxapi/transfers/cancellation-policy/index.html
                                                                                                                @@ -145,7 +145,7 @@ 

                                                                                                                Cancellation Policy Response

                                                                                                                Example

                                                                                                                -
                                                                                                                  +
                                                                                                                  • XML
                                                                                                                  • @@ -153,7 +153,7 @@

                                                                                                                    Example

                                                                                                                  -
                                                                                                                    +
                                                                                                                    • <BookingRef>TB12345</BookingRef>
                                                                                                                      @@ -179,7 +179,7 @@ 

                                                                                                                      Example

                                                                                                                      Example - Non-Cancellable Booking

                                                                                                                      -
                                                                                                                        +
                                                                                                                        • XML
                                                                                                                        • @@ -187,7 +187,7 @@

                                                                                                                          Example - Non-Cancellable Booking

                                                                                                                          -
                                                                                                                            +
                                                                                                                            • <BookingRef>TB12345</BookingRef>
                                                                                                                              diff --git a/docs/hxapi/transfers/view/index.html b/docs/hxapi/transfers/view/index.html
                                                                                                                              index d4bbde19..e87efd22 100644
                                                                                                                              --- a/docs/hxapi/transfers/view/index.html
                                                                                                                              +++ b/docs/hxapi/transfers/view/index.html
                                                                                                                              @@ -295,7 +295,7 @@ 

                                                                                                                              FlightDetails Fields

                                                                                                                              Example

                                                                                                                              -
                                                                                                                                +
                                                                                                                                • XML
                                                                                                                                • @@ -303,7 +303,7 @@

                                                                                                                                  Example

                                                                                                                                -
                                                                                                                                  +
                                                                                                                                  • <Booking>
                                                                                                                                    diff --git a/docs/hxapi/upgrade/index.html b/docs/hxapi/upgrade/index.html
                                                                                                                                    index 2b564437..4f8da3c8 100644
                                                                                                                                    --- a/docs/hxapi/upgrade/index.html
                                                                                                                                    +++ b/docs/hxapi/upgrade/index.html
                                                                                                                                    @@ -239,7 +239,7 @@ 

                                                                                                                                    Example 1 - Carpark Upgrades

                                                                                                                                    Request

                                                                                                                                    -
                                                                                                                                      +
                                                                                                                                      • XML
                                                                                                                                      • @@ -247,7 +247,7 @@

                                                                                                                                        Request

                                                                                                                                      -
                                                                                                                                        +
                                                                                                                                        • https://api.holidayextras.com/v1/upgrade/STN5?ABTANumber=YourABTANumber&Password=YourPassword&key=YourKey&token=YourToken&ArrivalDate=2020-11-03&ArrivalTime=12:30&DepartDate=2020-11-11&DepartTime=13:45
                                                                                                                                          @@ -265,7 +265,7 @@ 

                                                                                                                                          Request

                                                                                                                                          Response

                                                                                                                                          -
                                                                                                                                            +
                                                                                                                                            • XML
                                                                                                                                            • @@ -273,7 +273,7 @@

                                                                                                                                              Response

                                                                                                                                            -
                                                                                                                                              +
                                                                                                                                              • <?xml version="1.0"?>
                                                                                                                                                @@ -610,7 +610,7 @@ 

                                                                                                                                                Example 1 - Hotel Upgrades

                                                                                                                                                Request

                                                                                                                                                -
                                                                                                                                                  +
                                                                                                                                                  • XML
                                                                                                                                                  • @@ -618,7 +618,7 @@

                                                                                                                                                    Request

                                                                                                                                                  -
                                                                                                                                                    +
                                                                                                                                                    • https://api.holidayextras.com/v1/upgrade/LGWSOF?ABTANumber=YourABTANumber&Password=YourPassword&key=YourKey&token=YourToken&ArrivalDate=2020-11-03&ArrivalTime=12:30&DepartDate=2020-11-11&DepartTime=13:45
                                                                                                                                                      @@ -634,7 +634,7 @@ 

                                                                                                                                                      Request

                                                                                                                                                      Response

                                                                                                                                                      -
                                                                                                                                                        +
                                                                                                                                                        • XML
                                                                                                                                                        • @@ -642,7 +642,7 @@

                                                                                                                                                          Response

                                                                                                                                                        -
                                                                                                                                                          +
                                                                                                                                                          • <?xml version="1.0"?>
                                                                                                                                                            diff --git a/docs/hxapi/viewamendcancel/view/index.html b/docs/hxapi/viewamendcancel/view/index.html
                                                                                                                                                            index 7a456e34..ca2e0fd0 100644
                                                                                                                                                            --- a/docs/hxapi/viewamendcancel/view/index.html
                                                                                                                                                            +++ b/docs/hxapi/viewamendcancel/view/index.html
                                                                                                                                                            @@ -46,7 +46,7 @@ 

                                                                                                                                                            Endpoint

                                                                                                                                                            The endpoint to use is (where YourBookingRef is the Holiday Extras booking reference):

                                                                                                                                                            -
                                                                                                                                                              +
                                                                                                                                                              • XML
                                                                                                                                                              • @@ -54,7 +54,7 @@

                                                                                                                                                                Endpoint

                                                                                                                                                              -
                                                                                                                                                                +
                                                                                                                                                                • https://api.holidayextras.com/v1/booking/YourBookingRef
                                                                                                                                                                  @@ -358,7 +358,7 @@ 

                                                                                                                                                                  UK Products View Booking (for a

                                                                                                                                                                  Request

                                                                                                                                                                  -
                                                                                                                                                                    +
                                                                                                                                                                    • XML
                                                                                                                                                                    • @@ -366,7 +366,7 @@

                                                                                                                                                                      Request

                                                                                                                                                                    -
                                                                                                                                                                      +
                                                                                                                                                                      • https://api.holidayextras.com/v1/booking/YourBookingRef?ABTANumber=YourABTANumber&Password=YourPassword&Initials=YourInitials&key=YourKey&Email=test@test.com
                                                                                                                                                                        @@ -383,7 +383,7 @@ 

                                                                                                                                                                        Request

                                                                                                                                                                        Response

                                                                                                                                                                        -
                                                                                                                                                                          +
                                                                                                                                                                          • XML
                                                                                                                                                                          • @@ -391,7 +391,7 @@

                                                                                                                                                                            Response

                                                                                                                                                                          -
                                                                                                                                                                            +
                                                                                                                                                                            • <?xml version="1.0"?>
                                                                                                                                                                              @@ -917,7 +917,7 @@ 

                                                                                                                                                                              Response

                                                                                                                                                                              UK Products View Booking (for a transfer)

                                                                                                                                                                              Request

                                                                                                                                                                              -
                                                                                                                                                                                +
                                                                                                                                                                                • XML
                                                                                                                                                                                • @@ -925,7 +925,7 @@

                                                                                                                                                                                  Request

                                                                                                                                                                                -
                                                                                                                                                                                  +
                                                                                                                                                                                  • https://api.holidayextras.com/v1/booking/YourBookingRef?ABTANumber=YourABTANumber&Password=YourPassword&Initials=YourInitials&key=YourKey&Email=test@test.com
                                                                                                                                                                                    @@ -942,7 +942,7 @@ 

                                                                                                                                                                                    Request

                                                                                                                                                                                    Response

                                                                                                                                                                                    -
                                                                                                                                                                                      +
                                                                                                                                                                                      • XML
                                                                                                                                                                                      • @@ -950,7 +950,7 @@

                                                                                                                                                                                        Response

                                                                                                                                                                                      -
                                                                                                                                                                                        +
                                                                                                                                                                                        • <?xml version="1.0"?>
                                                                                                                                                                                          diff --git a/docs/partner/v2/api-endpoint-navigation-guide.md b/docs/partner/v2/api-endpoint-navigation-guide.md
                                                                                                                                                                                          index b28641a2..38f62c12 100644
                                                                                                                                                                                          --- a/docs/partner/v2/api-endpoint-navigation-guide.md
                                                                                                                                                                                          +++ b/docs/partner/v2/api-endpoint-navigation-guide.md
                                                                                                                                                                                          @@ -68,7 +68,19 @@ The **Locations** endpoint is the only endpoint that doesn't follow the product-
                                                                                                                                                                                           
                                                                                                                                                                                           ## Core Concepts
                                                                                                                                                                                           
                                                                                                                                                                                          -### 1. Price Guarantee Tokens
                                                                                                                                                                                          +### 1. Date and Time Formats
                                                                                                                                                                                          +
                                                                                                                                                                                          +The API uses two datetime formats:
                                                                                                                                                                                          +
                                                                                                                                                                                          +* **Local datetime** (e.g., `2026-05-20T08:00:00`) -- Times without a timezone offset. These are always in the **airport's local timezone**. When you submit `parking_entry_datetime: "2026-05-20T08:00:00"` for Heathrow, that means 8am London time. The API returns parking and flight times in this same format.
                                                                                                                                                                                          +
                                                                                                                                                                                          +* **UTC datetime** (e.g., `2026-05-20T07:00:00.000Z`) -- Times with a `Z` suffix. Used for token expiry times and policy deadlines. These are always UTC.
                                                                                                                                                                                          +
                                                                                                                                                                                          +### 2. Currency and Pricing
                                                                                                                                                                                          +
                                                                                                                                                                                          +All monetary values in the API are expressed in **minor currency units** (e.g., pence for GBP, cents for EUR). A price of `4599` in GBP means **45.99**. This applies to all price, commission, refund, and cost fields across every endpoint.
                                                                                                                                                                                          +
                                                                                                                                                                                          +### 3. Price Guarantee Tokens
                                                                                                                                                                                           
                                                                                                                                                                                           **What:** A time-limited token that locks in a price **When:** Obtained from the Products endpoint **Why:** Ensures customers aren't charged more than the quoted price **Validity:** 30 minutes **Usage:** Required for Book endpoint
                                                                                                                                                                                           
                                                                                                                                                                                          @@ -82,7 +94,7 @@ The **Locations** endpoint is the only endpoint that doesn't follow the product-
                                                                                                                                                                                           5. API only charges £45.99 (the guaranteed price)
                                                                                                                                                                                           ```
                                                                                                                                                                                           
                                                                                                                                                                                          -### 2. Booking Reference vs Partner Reference
                                                                                                                                                                                          +### 4. Booking Reference vs Partner Reference
                                                                                                                                                                                           
                                                                                                                                                                                           **Booking Reference:**
                                                                                                                                                                                           
                                                                                                                                                                                          @@ -100,7 +112,7 @@ The **Locations** endpoint is the only endpoint that doesn't follow the product-
                                                                                                                                                                                           * **Usage:** Use this for List Bookings endpoint only
                                                                                                                                                                                           * **Why:** Helps you match our bookings to your internal systems
                                                                                                                                                                                           
                                                                                                                                                                                          -### 3. Quote and Confirm Pattern
                                                                                                                                                                                          +### 5. Quote and Confirm Pattern
                                                                                                                                                                                           
                                                                                                                                                                                           For amendments and cancellations, we use a two-step "quote and confirm" pattern:
                                                                                                                                                                                           
                                                                                                                                                                                          @@ -140,7 +152,7 @@ For amendments and cancellations, we use a two-step "quote and confirm" pattern:
                                                                                                                                                                                           **Response includes:**
                                                                                                                                                                                           
                                                                                                                                                                                           * Location types
                                                                                                                                                                                          -* Location codes (IATA / UNLOCODE)
                                                                                                                                                                                          +* Location codes (IATA)
                                                                                                                                                                                           * Location names
                                                                                                                                                                                           * Available product types at each location
                                                                                                                                                                                           
                                                                                                                                                                                          @@ -167,26 +179,36 @@ For parking products, you have flexibility in how you specify timing. You can pr
                                                                                                                                                                                           
                                                                                                                                                                                           **Option 1: Explicit parking times**
                                                                                                                                                                                           
                                                                                                                                                                                          -* `parking_entry_date_time` - When the customer will arrive at the car park
                                                                                                                                                                                          -* `parking_exit_date_time` - When the customer will leave the car park
                                                                                                                                                                                          +* `parking_entry_datetime` - When the customer will arrive at the car park
                                                                                                                                                                                          +* `parking_exit_datetime` - When the customer will leave the car park
                                                                                                                                                                                           
                                                                                                                                                                                           Use this when you know the exact parking duration needed.
                                                                                                                                                                                           
                                                                                                                                                                                           **Option 2: Flight-based calculation**
                                                                                                                                                                                           
                                                                                                                                                                                           * `outbound_flight_number` - Departure flight number
                                                                                                                                                                                          -* `outbound_flight_date_time` - Departure flight time
                                                                                                                                                                                          +* `outbound_departure_datetime` - Departure flight time
                                                                                                                                                                                           * `inbound_flight_number` - Return flight number
                                                                                                                                                                                          -* `inbound_flight_date_time` - Return flight time
                                                                                                                                                                                          +* `inbound_arrival_datetime` - Return flight time
                                                                                                                                                                                           
                                                                                                                                                                                           Use this when you want the API to calculate appropriate parking times based on flight schedules. The API will automatically add buffer time for airport arrival/departure.
                                                                                                                                                                                           
                                                                                                                                                                                           **Important rules:**
                                                                                                                                                                                           
                                                                                                                                                                                           * At least one set of parameters must be provided
                                                                                                                                                                                          -* If both sets are provided, `parking_entry_date_time` and `parking_exit_date_time` take precedence
                                                                                                                                                                                          +* If both sets are provided, `parking_entry_datetime` and `parking_exit_datetime` take precedence
                                                                                                                                                                                           * Flight-based calculation is useful when you're unsure how much time customers need between parking and their flight
                                                                                                                                                                                           
                                                                                                                                                                                          +**How flight-based derivation works:**
                                                                                                                                                                                          +
                                                                                                                                                                                          +When you provide `outbound_departure_datetime` instead of `parking_entry_datetime`, the API derives an appropriate parking start time based on the flight schedule. Similarly, `inbound_arrival_datetime` derives the parking end time. This adds buffer time for airport arrival and departure.
                                                                                                                                                                                          +
                                                                                                                                                                                          +You must provide at least one of each pair:
                                                                                                                                                                                          +* `parking_entry_datetime` OR `outbound_departure_datetime`
                                                                                                                                                                                          +* `parking_exit_datetime` OR `inbound_arrival_datetime`
                                                                                                                                                                                          +
                                                                                                                                                                                          +If both are provided in a pair, the explicit parking time takes precedence.
                                                                                                                                                                                          +
                                                                                                                                                                                           **Response includes:**
                                                                                                                                                                                           
                                                                                                                                                                                           * List of available products
                                                                                                                                                                                          @@ -253,15 +275,13 @@ Examples:
                                                                                                                                                                                             * Hotels: Room requirements, arrival time, guest count
                                                                                                                                                                                             * Lounges: Passenger details, flight info, visit time
                                                                                                                                                                                             * FastTrack: Passenger details, flight info, travel time
                                                                                                                                                                                          -* Your partner reference (optional but recommended)
                                                                                                                                                                                          +* Your partner reference (optional but recommended, max 20 characters)
                                                                                                                                                                                           
                                                                                                                                                                                           **Response includes:**
                                                                                                                                                                                           
                                                                                                                                                                                           * **Booking reference** (e.g., HX123456) - Our booking reference
                                                                                                                                                                                          -* **Booking status** (`pending` or `confirmed`)
                                                                                                                                                                                          -* **Hosted confirmation page URL** - A link to our hosted confirmation page
                                                                                                                                                                                          +* **Booking status** (`Pending` or `Confirmed`)
                                                                                                                                                                                           * **Recommended polling interval** (in seconds) - Suggested frequency for status checks
                                                                                                                                                                                          -* All booking details
                                                                                                                                                                                           
                                                                                                                                                                                           **Important:** Always include an `Idempotency-Key` header to prevent duplicate bookings if there's a network error. Any unique string is accepted; UUID v4 is recommended. Re-use the same key to safely retry a failed request.
                                                                                                                                                                                           
                                                                                                                                                                                          @@ -285,17 +305,17 @@ You have four options for handling pending bookings, depending on how much contr
                                                                                                                                                                                           
                                                                                                                                                                                           **Option 1: Hosted Confirmation Page (Simplest)**
                                                                                                                                                                                           
                                                                                                                                                                                          -* Use the Holiday Extras co-branded hosted confirmation page URL included in the booking response
                                                                                                                                                                                          +* Call `GET /v2/bookings/parking/{booking-reference}` to get the `confirmation_page_link`
                                                                                                                                                                                           * Direct customers to this URL
                                                                                                                                                                                           * We handle all status updates and display logic
                                                                                                                                                                                           * The page automatically updates when the booking confirms
                                                                                                                                                                                           * No polling or webhooks needed on your side
                                                                                                                                                                                           
                                                                                                                                                                                          -**Option 2: Confirmation Endpoint (Simple)**
                                                                                                                                                                                          +**Option 2: GET Booking Endpoint (Simple)**
                                                                                                                                                                                           
                                                                                                                                                                                          -* Use the Confirmation endpoint (Stage 5) to display booking details
                                                                                                                                                                                          +* Use `GET /v2/bookings/parking/{booking-reference}` to display booking details
                                                                                                                                                                                           * The data returned is always relevant to the current status
                                                                                                                                                                                          -* Shows "pending" messaging when pending, "confirmed" details when confirmed
                                                                                                                                                                                          +* Shows pending state when pending, full confirmation details when confirmed
                                                                                                                                                                                           * Make the same call regardless of status - we handle the logic
                                                                                                                                                                                           * No need to track status transitions yourself
                                                                                                                                                                                           
                                                                                                                                                                                          @@ -323,35 +343,20 @@ You have four options for handling pending bookings, depending on how much contr
                                                                                                                                                                                           
                                                                                                                                                                                           ---
                                                                                                                                                                                           
                                                                                                                                                                                          -### Stage 5: Booking Confirmation Details
                                                                                                                                                                                          -
                                                                                                                                                                                          -**Endpoint:** `GET /v2/bookings/parking/{booking-reference}/confirmation-details`
                                                                                                                                                                                          +### Stage 5: Booking Confirmation
                                                                                                                                                                                           
                                                                                                                                                                                          -**Purpose:** Get formatted confirmation details for display
                                                                                                                                                                                          +After creating a booking, you have two options for showing confirmation details to customers:
                                                                                                                                                                                           
                                                                                                                                                                                          -**When to use:**
                                                                                                                                                                                          -
                                                                                                                                                                                          -* Immediately after booking is created
                                                                                                                                                                                          -* Displaying a confirmation page
                                                                                                                                                                                          -
                                                                                                                                                                                          -**Query parameters:**
                                                                                                                                                                                          -
                                                                                                                                                                                          -* `format`: `json` (default), `html`, or `markdown`
                                                                                                                                                                                          -
                                                                                                                                                                                          -**Response includes:**
                                                                                                                                                                                          +**Option 1: Hosted Confirmation Page**
                                                                                                                                                                                           
                                                                                                                                                                                          -* All booking details formatted for display
                                                                                                                                                                                          -* Product-specific instructions (PIN codes, meeting points, etc.)
                                                                                                                                                                                          -* Contact information
                                                                                                                                                                                          -* Important notices
                                                                                                                                                                                          -
                                                                                                                                                                                          -**Format options:**
                                                                                                                                                                                          +* Use the `confirmation_page_link` field from `GET /v2/bookings/parking/{booking-reference}` -- a URL to a Holiday Extras hosted confirmation page
                                                                                                                                                                                          +* Direct customers here and we handle the display
                                                                                                                                                                                          +* The page automatically updates when the booking confirms
                                                                                                                                                                                           
                                                                                                                                                                                          -* `json`: Returns an array of `{ type, value }` pairs (e.g., `{ "type": "booking_reference", "value": "HX123456" }`). Use these fields to build your own confirmation page.
                                                                                                                                                                                          -* `html`: Returns a `{ text }` object containing a ready-to-use HTML snippet for web pages.
                                                                                                                                                                                          -* `markdown`: Returns a `{ text }` object containing text-based format for simpler emails.
                                                                                                                                                                                          +**Option 2: Build Your Own**
                                                                                                                                                                                           
                                                                                                                                                                                          -**Why use this?** The formatted confirmation includes product-specific instructions. It's optimized for customer-facing display.
                                                                                                                                                                                          +* Use the booking details from `GET /v2/bookings/parking/{booking-reference}` (Stage 6) to build your own confirmation page
                                                                                                                                                                                          +* The response includes all booking details, entry methods, and customer information
                                                                                                                                                                                           
                                                                                                                                                                                           
                                                                                                                                                                                           ---
                                                                                                                                                                                          @@ -372,8 +377,20 @@ You have four options for handling pending bookings, depending on how much contr
                                                                                                                                                                                           **Response includes:**
                                                                                                                                                                                           
                                                                                                                                                                                           * Complete booking details
                                                                                                                                                                                          -* Current status (pending, confirmed, cancelled, error)
                                                                                                                                                                                          +* Current status (Pending, Confirmed, Aborted, Error, Received, Accepted)
                                                                                                                                                                                           * Customer details
                                                                                                                                                                                          +* `confirmation_page_link` -- hosted confirmation page URL (or null if not yet available)
                                                                                                                                                                                          +* `entry_method` -- how the customer enters the car park (QR code, barcode, or reference number)
                                                                                                                                                                                          +* `amendable_data` -- the current values of fields that can be amended. If empty, the booking cannot be amended. Use these values to pre-fill an amendment form before calling the amendment quote endpoint.
                                                                                                                                                                                          +* `policies` -- amendment and refund policies for this booking (see below)
                                                                                                                                                                                          +
                                                                                                                                                                                          +**Understanding Policies:**
                                                                                                                                                                                          +
                                                                                                                                                                                          +The `policies` object tells you what changes are available and what refunds apply:
                                                                                                                                                                                          +
                                                                                                                                                                                          +* `amendments.permitted` -- whether the booking can be amended
                                                                                                                                                                                          +* `amendments.until` -- deadline for amendments (UTC), or null if no deadline
                                                                                                                                                                                          +* `refunds` -- an array of refund tiers, ordered by deadline descending. The first tier whose `until` datetime has not yet passed determines the refund amount. An empty array means no refund is available.
                                                                                                                                                                                           
                                                                                                                                                                                           **Important:** Use our **booking reference**, not your partner reference.
                                                                                                                                                                                           
                                                                                                                                                                                          @@ -468,7 +485,7 @@ You have four options for handling pending bookings, depending on how much contr
                                                                                                                                                                                           
                                                                                                                                                                                           #### Step 1: Cancel Quote
                                                                                                                                                                                           
                                                                                                                                                                                          -**Endpoint:** `PATCH /v2/bookings/parking/{booking-reference}/cancellations/quote`
                                                                                                                                                                                          +**Endpoint:** `GET /v2/bookings/parking/{booking-reference}/cancellations/quote`
                                                                                                                                                                                           
                                                                                                                                                                                           **Purpose:** Preview the cancellation without executing it
                                                                                                                                                                                           
                                                                                                                                                                                          @@ -535,9 +552,8 @@ You have four options for handling pending bookings, depending on how much contr
                                                                                                                                                                                           4. POST /v2/bookings/parking
                                                                                                                                                                                              → Include the price_guarantee_token
                                                                                                                                                                                              → Create booking
                                                                                                                                                                                          -5. GET /v2/bookings/parking/{booking-reference}/confirmation-details?format=html
                                                                                                                                                                                          -   → Display confirmation to customer
                                                                                                                                                                                          -   → Send confirmation email
                                                                                                                                                                                          +5. Use confirmation_page_link from booking response
                                                                                                                                                                                          +   → Or build your own confirmation from GET /v2/bookings/parking/{booking-reference}
                                                                                                                                                                                           ```
                                                                                                                                                                                           
                                                                                                                                                                                           ### Workflow 2: Customer Wants to View Their Booking
                                                                                                                                                                                          @@ -575,8 +591,8 @@ You have four options for handling pending bookings, depending on how much contr
                                                                                                                                                                                           5. POST /v2/bookings/parking/{booking-reference}/amendments/confirm
                                                                                                                                                                                              → Include amendment_token
                                                                                                                                                                                              → Booking updated
                                                                                                                                                                                          -6. GET /v2/bookings/parking/{booking-reference}/confirmation-details?format=html
                                                                                                                                                                                          -   → Send updated confirmation email
                                                                                                                                                                                          +6. GET /v2/bookings/parking/{booking-reference}
                                                                                                                                                                                          +   → Send updated confirmation email with latest booking details
                                                                                                                                                                                           ```
                                                                                                                                                                                           
                                                                                                                                                                                           ### Workflow 4: Customer Wants to Cancel
                                                                                                                                                                                          @@ -584,7 +600,7 @@ You have four options for handling pending bookings, depending on how much contr
                                                                                                                                                                                           ```
                                                                                                                                                                                           1. GET /v2/bookings/parking/{booking-reference}
                                                                                                                                                                                              → Get current booking details
                                                                                                                                                                                          -2. PATCH /v2/bookings/parking/{booking-reference}/cancellations/quote
                                                                                                                                                                                          +2. GET /v2/bookings/parking/{booking-reference}/cancellations/quote
                                                                                                                                                                                              → Get cancellation_token and refund amount
                                                                                                                                                                                           3. Show customer: "You'll receive a refund of £40.99"
                                                                                                                                                                                              → Customer confirms
                                                                                                                                                                                          diff --git a/docs/partner/v2/api-endpoint-navigation-guide/index.html b/docs/partner/v2/api-endpoint-navigation-guide/index.html
                                                                                                                                                                                          index e3e2e671..1c84fbc9 100644
                                                                                                                                                                                          --- a/docs/partner/v2/api-endpoint-navigation-guide/index.html
                                                                                                                                                                                          +++ b/docs/partner/v2/api-endpoint-navigation-guide/index.html
                                                                                                                                                                                          @@ -103,7 +103,24 @@ 

                                                                                                                                                                                          The One Exception: Locations

                                                                                                                                                                                          Core Concepts

                                                                                                                                                                                          -

                                                                                                                                                                                          1. Price Guarantee Tokens

                                                                                                                                                                                          +

                                                                                                                                                                                          1. Date and Time Formats

                                                                                                                                                                                          + +

                                                                                                                                                                                          The API uses two datetime formats:

                                                                                                                                                                                          + +
                                                                                                                                                                                            +
                                                                                                                                                                                          • +

                                                                                                                                                                                            Local datetime (e.g., 2026-05-20T08:00:00) – Times without a timezone offset. These are always in the airport’s local timezone. When you submit parking_entry_datetime: "2026-05-20T08:00:00" for Heathrow, that means 8am London time. The API returns parking and flight times in this same format.

                                                                                                                                                                                            +
                                                                                                                                                                                          • +
                                                                                                                                                                                          • +

                                                                                                                                                                                            UTC datetime (e.g., 2026-05-20T07:00:00.000Z) – Times with a Z suffix. Used for token expiry times and policy deadlines. These are always UTC.

                                                                                                                                                                                            +
                                                                                                                                                                                          • +
                                                                                                                                                                                          + +

                                                                                                                                                                                          2. Currency and Pricing

                                                                                                                                                                                          + +

                                                                                                                                                                                          All monetary values in the API are expressed in minor currency units (e.g., pence for GBP, cents for EUR). A price of 4599 in GBP means 45.99. This applies to all price, commission, refund, and cost fields across every endpoint.

                                                                                                                                                                                          + +

                                                                                                                                                                                          3. Price Guarantee Tokens

                                                                                                                                                                                          What: A time-limited token that locks in a price When: Obtained from the Products endpoint Why: Ensures customers aren’t charged more than the quoted price Validity: 30 minutes Usage: Required for Book endpoint

                                                                                                                                                                                          @@ -116,7 +133,7 @@

                                                                                                                                                                                          1. Price Guarantee Tokens

                                                                                                                                                                                          5. API only charges £45.99 (the guaranteed price)
                                                                                                                                                                                          -

                                                                                                                                                                                          2. Booking Reference vs Partner Reference

                                                                                                                                                                                          +

                                                                                                                                                                                          4. Booking Reference vs Partner Reference

                                                                                                                                                                                          Booking Reference:

                                                                                                                                                                                          @@ -138,7 +155,7 @@

                                                                                                                                                                                          2. Booking Reference vs Partne
                                                                                                                                                                                        • Why: Helps you match our bookings to your internal systems
                                                                                                                                                                                        -

                                                                                                                                                                                        3. Quote and Confirm Pattern

                                                                                                                                                                                        +

                                                                                                                                                                                        5. Quote and Confirm Pattern

                                                                                                                                                                                        For amendments and cancellations, we use a two-step “quote and confirm” pattern:

                                                                                                                                                                                        @@ -184,7 +201,7 @@

                                                                                                                                                                                        Stage 1: Discovery

                                                                                                                                                                                        • Location types
                                                                                                                                                                                        • -
                                                                                                                                                                                        • Location codes (IATA / UNLOCODE)
                                                                                                                                                                                        • +
                                                                                                                                                                                        • Location codes (IATA)
                                                                                                                                                                                        • Location names
                                                                                                                                                                                        • Available product types at each location
                                                                                                                                                                                        @@ -214,8 +231,8 @@

                                                                                                                                                                                        Option 1: Explicit parking times

                                                                                                                                                                                          -
                                                                                                                                                                                        • parking_entry_date_time - When the customer will arrive at the car park
                                                                                                                                                                                        • -
                                                                                                                                                                                        • parking_exit_date_time - When the customer will leave the car park
                                                                                                                                                                                        • +
                                                                                                                                                                                        • parking_entry_datetime - When the customer will arrive at the car park
                                                                                                                                                                                        • +
                                                                                                                                                                                        • parking_exit_datetime - When the customer will leave the car park

                                                                                                                                                                                        Use this when you know the exact parking duration needed.

                                                                                                                                                                                        @@ -224,9 +241,9 @@
                                                                                                                                                                                        • outbound_flight_number - Departure flight number
                                                                                                                                                                                        • -
                                                                                                                                                                                        • outbound_flight_date_time - Departure flight time
                                                                                                                                                                                        • +
                                                                                                                                                                                        • outbound_departure_datetime - Departure flight time
                                                                                                                                                                                        • inbound_flight_number - Return flight number
                                                                                                                                                                                        • -
                                                                                                                                                                                        • inbound_flight_date_time - Return flight time
                                                                                                                                                                                        • +
                                                                                                                                                                                        • inbound_arrival_datetime - Return flight time

                                                                                                                                                                                        Use this when you want the API to calculate appropriate parking times based on flight schedules. The API will automatically add buffer time for airport arrival/departure.

                                                                                                                                                                                        @@ -235,10 +252,22 @@
                                                                                                                                                                                        • At least one set of parameters must be provided
                                                                                                                                                                                        • -
                                                                                                                                                                                        • If both sets are provided, parking_entry_date_time and parking_exit_date_time take precedence
                                                                                                                                                                                        • +
                                                                                                                                                                                        • If both sets are provided, parking_entry_datetime and parking_exit_datetime take precedence
                                                                                                                                                                                        • Flight-based calculation is useful when you’re unsure how much time customers need between parking and their flight
                                                                                                                                                                                        +

                                                                                                                                                                                        How flight-based derivation works:

                                                                                                                                                                                        + +

                                                                                                                                                                                        When you provide outbound_departure_datetime instead of parking_entry_datetime, the API derives an appropriate parking start time based on the flight schedule. Similarly, inbound_arrival_datetime derives the parking end time. This adds buffer time for airport arrival and departure.

                                                                                                                                                                                        + +

                                                                                                                                                                                        You must provide at least one of each pair:

                                                                                                                                                                                        +
                                                                                                                                                                                          +
                                                                                                                                                                                        • parking_entry_datetime OR outbound_departure_datetime
                                                                                                                                                                                        • +
                                                                                                                                                                                        • parking_exit_datetime OR inbound_arrival_datetime
                                                                                                                                                                                        • +
                                                                                                                                                                                        + +

                                                                                                                                                                                        If both are provided in a pair, the explicit parking time takes precedence.

                                                                                                                                                                                        +

                                                                                                                                                                                        Response includes:

                                                                                                                                                                                          @@ -317,17 +346,15 @@

                                                                                                                                                                                          Stage 4: Create Booking

                                                                                                                                                                                        • FastTrack: Passenger details, flight info, travel time
                                                                                                                                                                                        -
                                                                                                                                                                                      • Your partner reference (optional but recommended)
                                                                                                                                                                                      • +
                                                                                                                                                                                      • Your partner reference (optional but recommended, max 20 characters)

                                                                                                                                                                                      Response includes:

                                                                                                                                                                                      • Booking reference (e.g., HX123456) - Our booking reference
                                                                                                                                                                                      • -
                                                                                                                                                                                      • Booking status (pending or confirmed)
                                                                                                                                                                                      • -
                                                                                                                                                                                      • Hosted confirmation page URL - A link to our hosted confirmation page
                                                                                                                                                                                      • +
                                                                                                                                                                                      • Booking status (Pending or Confirmed)
                                                                                                                                                                                      • Recommended polling interval (in seconds) - Suggested frequency for status checks
                                                                                                                                                                                      • -
                                                                                                                                                                                      • All booking details

                                                                                                                                                                                      Important: Always include an Idempotency-Key header to prevent duplicate bookings if there’s a network error. Any unique string is accepted; UUID v4 is recommended. Re-use the same key to safely retry a failed request.

                                                                                                                                                                                      @@ -357,19 +384,19 @@

                                                                                                                                                                                      Stage 4: Create Booking

                                                                                                                                                                                      Option 1: Hosted Confirmation Page (Simplest)

                                                                                                                                                                                        -
                                                                                                                                                                                      • Use the Holiday Extras co-branded hosted confirmation page URL included in the booking response
                                                                                                                                                                                      • +
                                                                                                                                                                                      • Call GET /v2/bookings/parking/{booking-reference} to get the confirmation_page_link
                                                                                                                                                                                      • Direct customers to this URL
                                                                                                                                                                                      • We handle all status updates and display logic
                                                                                                                                                                                      • The page automatically updates when the booking confirms
                                                                                                                                                                                      • No polling or webhooks needed on your side
                                                                                                                                                                                      -

                                                                                                                                                                                      Option 2: Confirmation Endpoint (Simple)

                                                                                                                                                                                      +

                                                                                                                                                                                      Option 2: GET Booking Endpoint (Simple)

                                                                                                                                                                                        -
                                                                                                                                                                                      • Use the Confirmation endpoint (Stage 5) to display booking details
                                                                                                                                                                                      • +
                                                                                                                                                                                      • Use GET /v2/bookings/parking/{booking-reference} to display booking details
                                                                                                                                                                                      • The data returned is always relevant to the current status
                                                                                                                                                                                      • -
                                                                                                                                                                                      • Shows “pending” messaging when pending, “confirmed” details when confirmed
                                                                                                                                                                                      • +
                                                                                                                                                                                      • Shows pending state when pending, full confirmation details when confirmed
                                                                                                                                                                                      • Make the same call regardless of status - we handle the logic
                                                                                                                                                                                      • No need to track status transitions yourself
                                                                                                                                                                                      @@ -403,44 +430,25 @@

                                                                                                                                                                                      Stage 4: Create Booking


                                                                                                                                                                                      -

                                                                                                                                                                                      Stage 5: Booking Confirmation Details

                                                                                                                                                                                      +

                                                                                                                                                                                      Stage 5: Booking Confirmation

                                                                                                                                                                                      -

                                                                                                                                                                                      Endpoint: GET /v2/bookings/parking/{booking-reference}/confirmation-details

                                                                                                                                                                                      +

                                                                                                                                                                                      After creating a booking, you have two options for showing confirmation details to customers:

                                                                                                                                                                                      -

                                                                                                                                                                                      Purpose: Get formatted confirmation details for display

                                                                                                                                                                                      - -

                                                                                                                                                                                      When to use:

                                                                                                                                                                                      +

                                                                                                                                                                                      Option 1: Hosted Confirmation Page

                                                                                                                                                                                        -
                                                                                                                                                                                      • Immediately after booking is created
                                                                                                                                                                                      • -
                                                                                                                                                                                      • Displaying a confirmation page
                                                                                                                                                                                      • -
                                                                                                                                                                                      - -

                                                                                                                                                                                      Query parameters:

                                                                                                                                                                                      - -
                                                                                                                                                                                        -
                                                                                                                                                                                      • format: json (default), html, or markdown
                                                                                                                                                                                      • -
                                                                                                                                                                                      - -

                                                                                                                                                                                      Response includes:

                                                                                                                                                                                      - -
                                                                                                                                                                                        -
                                                                                                                                                                                      • All booking details formatted for display
                                                                                                                                                                                      • -
                                                                                                                                                                                      • Product-specific instructions (PIN codes, meeting points, etc.)
                                                                                                                                                                                      • -
                                                                                                                                                                                      • Contact information
                                                                                                                                                                                      • -
                                                                                                                                                                                      • Important notices
                                                                                                                                                                                      • +
                                                                                                                                                                                      • Use the confirmation_page_link field from GET /v2/bookings/parking/{booking-reference} – a URL to a Holiday Extras hosted confirmation page
                                                                                                                                                                                      • +
                                                                                                                                                                                      • Direct customers here and we handle the display
                                                                                                                                                                                      • +
                                                                                                                                                                                      • The page automatically updates when the booking confirms
                                                                                                                                                                                      -

                                                                                                                                                                                      Format options:

                                                                                                                                                                                      +

                                                                                                                                                                                      Option 2: Build Your Own

                                                                                                                                                                                        -
                                                                                                                                                                                      • json: Returns an array of { type, value } pairs (e.g., { "type": "booking_reference", "value": "HX123456" }). Use these fields to build your own confirmation page.
                                                                                                                                                                                      • -
                                                                                                                                                                                      • html: Returns a { text } object containing a ready-to-use HTML snippet for web pages.
                                                                                                                                                                                      • -
                                                                                                                                                                                      • markdown: Returns a { text } object containing text-based format for simpler emails.
                                                                                                                                                                                      • +
                                                                                                                                                                                      • Use the booking details from GET /v2/bookings/parking/{booking-reference} (Stage 6) to build your own confirmation page
                                                                                                                                                                                      • +
                                                                                                                                                                                      • The response includes all booking details, entry methods, and customer information
                                                                                                                                                                                      -

                                                                                                                                                                                      Why use this? The formatted confirmation includes product-specific instructions. It’s optimized for customer-facing display.

                                                                                                                                                                                      -

                                                                                                                                                                                      Stage 6: View Booking

                                                                                                                                                                                      @@ -461,8 +469,22 @@

                                                                                                                                                                                      Stage 6: View Booking

                                                                                                                                                                                      • Complete booking details
                                                                                                                                                                                      • -
                                                                                                                                                                                      • Current status (pending, confirmed, cancelled, error)
                                                                                                                                                                                      • +
                                                                                                                                                                                      • Current status (Pending, Confirmed, Aborted, Error, Received, Accepted)
                                                                                                                                                                                      • Customer details
                                                                                                                                                                                      • +
                                                                                                                                                                                      • confirmation_page_link – hosted confirmation page URL (or null if not yet available)
                                                                                                                                                                                      • +
                                                                                                                                                                                      • entry_method – how the customer enters the car park (QR code, barcode, or reference number)
                                                                                                                                                                                      • +
                                                                                                                                                                                      • amendable_data – the current values of fields that can be amended. If empty, the booking cannot be amended. Use these values to pre-fill an amendment form before calling the amendment quote endpoint.
                                                                                                                                                                                      • +
                                                                                                                                                                                      • policies – amendment and refund policies for this booking (see below)
                                                                                                                                                                                      • +
                                                                                                                                                                                      + +

                                                                                                                                                                                      Understanding Policies:

                                                                                                                                                                                      + +

                                                                                                                                                                                      The policies object tells you what changes are available and what refunds apply:

                                                                                                                                                                                      + +
                                                                                                                                                                                        +
                                                                                                                                                                                      • amendments.permitted – whether the booking can be amended
                                                                                                                                                                                      • +
                                                                                                                                                                                      • amendments.until – deadline for amendments (UTC), or null if no deadline
                                                                                                                                                                                      • +
                                                                                                                                                                                      • refunds – an array of refund tiers, ordered by deadline descending. The first tier whose until datetime has not yet passed determines the refund amount. An empty array means no refund is available.

                                                                                                                                                                                      Important: Use our booking reference, not your partner reference.

                                                                                                                                                                                      @@ -570,7 +592,7 @@

                                                                                                                                                                                      Stage 9: Cancel Booking (Two-St

                                                                                                                                                                                      Step 1: Cancel Quote

                                                                                                                                                                                      -

                                                                                                                                                                                      Endpoint: PATCH /v2/bookings/parking/{booking-reference}/cancellations/quote

                                                                                                                                                                                      +

                                                                                                                                                                                      Endpoint: GET /v2/bookings/parking/{booking-reference}/cancellations/quote

                                                                                                                                                                                      Purpose: Preview the cancellation without executing it

                                                                                                                                                                                      @@ -644,9 +666,8 @@

                                                                                                                                                                                      Workflow 1: Standard Booking Flow

                                                                                                                                                                                      4. POST /v2/bookings/parking → Include the price_guarantee_token → Create booking -5. GET /v2/bookings/parking/{booking-reference}/confirmation-details?format=html - → Display confirmation to customer - → Send confirmation email +5. Use confirmation_page_link from booking response + → Or build your own confirmation from GET /v2/bookings/parking/{booking-reference}

                                                                                                                                                                                    Workflow 2: Customer Wants to View Their Booking

                                                                                                                                                                                    @@ -681,15 +702,15 @@

                                                                                                                                                                                    Workflow 3: Customer 5. POST /v2/bookings/parking/{booking-reference}/amendments/confirm → Include amendment_token → Booking updated -6. GET /v2/bookings/parking/{booking-reference}/confirmation-details?format=html - → Send updated confirmation email +6. GET /v2/bookings/parking/{booking-reference} + → Send updated confirmation email with latest booking details

                                                                                                                                                                              Workflow 4: Customer Wants to Cancel

                                                                                                                                                                              1. GET /v2/bookings/parking/{booking-reference}
                                                                                                                                                                                  → Get current booking details
                                                                                                                                                                              -2. PATCH /v2/bookings/parking/{booking-reference}/cancellations/quote
                                                                                                                                                                              +2. GET /v2/bookings/parking/{booking-reference}/cancellations/quote
                                                                                                                                                                                  → Get cancellation_token and refund amount
                                                                                                                                                                               3. Show customer: "You'll receive a refund of £40.99"
                                                                                                                                                                                  → Customer confirms
                                                                                                                                                                              diff --git a/docs/partner/v2/authentication.md b/docs/partner/v2/authentication.md
                                                                                                                                                                              index 1c0643ea..5bbdc931 100644
                                                                                                                                                                              --- a/docs/partner/v2/authentication.md
                                                                                                                                                                              +++ b/docs/partner/v2/authentication.md
                                                                                                                                                                              @@ -181,8 +181,6 @@ curl -X POST "https://auth.holidayextras.com/oauth2/revoke" \
                                                                                                                                                                                 -d "token=abc123xyz..."
                                                                                                                                                                               ```
                                                                                                                                                                               
                                                                                                                                                                              -## 
                                                                                                                                                                              -
                                                                                                                                                                               ## Error Responses
                                                                                                                                                                               
                                                                                                                                                                               Error responses follow RFC 6749 format:
                                                                                                                                                                              diff --git a/docs/partner/v2/authentication/index.html b/docs/partner/v2/authentication/index.html
                                                                                                                                                                              index a7a877d6..241bf67d 100644
                                                                                                                                                                              --- a/docs/partner/v2/authentication/index.html
                                                                                                                                                                              +++ b/docs/partner/v2/authentication/index.html
                                                                                                                                                                              @@ -291,8 +291,6 @@ 

                                                                                                                                                                              Revoke Example

                                                                                                                                                                              -d "token=abc123xyz..."
                                                                                                                                                                              -

                                                                                                                                                                              ##

                                                                                                                                                                              -

                                                                                                                                                                              Error Responses

                                                                                                                                                                              Error responses follow RFC 6749 format:

                                                                                                                                                                              diff --git a/docs/partner/v2/index.html b/docs/partner/v2/index.html index 6c6e39f4..81ea3c92 100644 --- a/docs/partner/v2/index.html +++ b/docs/partner/v2/index.html @@ -36,11 +36,46 @@

                                                                                                                                                                              Partner API 2026 (APIConnect)

                                                                                                                                                                              This documentation is subject to change. Further features, including a booking list capability to support reconciliation and recovery flows, as well as wider product coverage, will be introduced in later phases.

                                                                                                                                                                              -

                                                                                                                                                                              Documentation:

                                                                                                                                                                              +

                                                                                                                                                                              Environments

                                                                                                                                                                              + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                               ProductionStaging
                                                                                                                                                                              APIhttps://api.holidayextras.comhttps://api-sandbox.holidayextras.com
                                                                                                                                                                              Authhttps://auth.holidayextras.comhttps://auth-staging.holidayextras.com
                                                                                                                                                                              OpenAPI Schemahttps://api.holidayextras.com/partner-api/v2/schema.jsonhttps://api-sandbox.holidayextras.com/partner-api/v2/schema.json
                                                                                                                                                                              + +

                                                                                                                                                                              Use staging for development and testing. Authenticate against the matching auth environment – staging credentials will not work against production and vice versa.

                                                                                                                                                                              + +

                                                                                                                                                                              View the schema in Swagger Editor or import into Postman.

                                                                                                                                                                              + +

                                                                                                                                                                              Documentation

                                                                                                                                                                              +
                                                                                                                                                                        diff --git a/docs/partner/v2/index.md b/docs/partner/v2/index.md index 498a8d62..2f872b60 100644 --- a/docs/partner/v2/index.md +++ b/docs/partner/v2/index.md @@ -4,7 +4,21 @@ Partner API 2026 (APIConnect) is the next step for our platform. It brings UK an This documentation is subject to change. Further features, including a booking list capability to support reconciliation and recovery flows, as well as wider product coverage, will be introduced in later phases. -Documentation: -* [APIConnect (Partner API 2026) - Understanding the OpenAPI Documentation](./api-endpoint-navigation-guide.md) -* [APIConnect (Partner API 2026) - Event Notifications](./webhook-integration-guide.md) -* [Authentication](./authentication.md) +## Environments + +| | Production | Staging | +|---|---|---| +| **API** | `https://api.holidayextras.com` | `https://api-sandbox.holidayextras.com` | +| **Auth** | `https://auth.holidayextras.com` | `https://auth-staging.holidayextras.com` | +| **OpenAPI Schema** | `https://api.holidayextras.com/partner-api/v2/schema.json` | `https://api-sandbox.holidayextras.com/partner-api/v2/schema.json` | + +Use staging for development and testing. Authenticate against the matching auth environment -- staging credentials will not work against production and vice versa. + +View the schema in [Swagger Editor](https://editor.swagger.io/) or import into [Postman](https://www.postman.com/). + +## Documentation + +* [Authentication](./authentication.md) - OAuth 2.0 client credentials flow +* [Understanding the OpenAPI Documentation](./api-endpoint-navigation-guide.md) - Endpoint workflows and integration guide +* [Event Notifications](./webhook-integration-guide.md) - Webhook integration for booking status updates +* [Error Responses](./problems/bad-request.md) - HTTP error codes and resolution guidance diff --git a/docs/partner/v2/webhook-integration-guide.md b/docs/partner/v2/webhook-integration-guide.md index fda933af..a0692ce8 100644 --- a/docs/partner/v2/webhook-integration-guide.md +++ b/docs/partner/v2/webhook-integration-guide.md @@ -79,7 +79,7 @@ The webhook contains **only identifiers**, not full booking details. This is int * No risk of processing stale information * Consistent data structure across all events -**After receiving a webhook, call:** `GET /api/v1/bookings/{booking_reference}` to fetch full booking details. +**After receiving a webhook, call:** `GET /v2/bookings/parking/{booking_reference}` to fetch full booking details. --- diff --git a/docs/partner/v2/webhook-integration-guide/index.html b/docs/partner/v2/webhook-integration-guide/index.html index 18bdca0f..ae765bf8 100644 --- a/docs/partner/v2/webhook-integration-guide/index.html +++ b/docs/partner/v2/webhook-integration-guide/index.html @@ -151,7 +151,7 @@

                                                                                                                                                                        Why Thin Payloads?

                                                                                                                                                                      • Consistent data structure across all events
                                                                                                                                                                      -

                                                                                                                                                                      After receiving a webhook, call: GET /api/v1/bookings/{booking_reference} to fetch full booking details.

                                                                                                                                                                      +

                                                                                                                                                                      After receiving a webhook, call: GET /v2/bookings/parking/{booking_reference} to fetch full booking details.


                                                                                                                                                                      diff --git a/docs/search/index.html b/docs/search/index.html index e1eed401..83f670c2 100644 --- a/docs/search/index.html +++ b/docs/search/index.html @@ -528,21 +528,21 @@ "partner-v2-api-endpoint-navigation-guide": { "title": "APIConnect (Partner API 2026) - Understanding the OpenAPI Documentation", - "content": "# APIConnect (Partner API 2026) - Understanding the OpenAPI DocumentationDocument Version: 0.2 Last Updated: 2026-03-18This document is in Beta---## Purpose of This GuideThis guide helps you navigate the Swagger/OpenAPI documentation by explaining the **context** and **workflow** of the API endpoints. While Swagger shows you *what* each endpoint does, this guide explains *when* and *why* to use each endpoint, and how they work together.## OpenAPI SpecificationThe openapi schema for the API can be found at This is a live document and is expected to be updated.This can be viewed using a tool of your choice. We recommend or importing the schema into [Postman](https://www.postman.com/).---## Table of Contents1. [API Architecture Overview](#api-architecture-overview)2. [Core Concepts](#core-concepts)3. [The Customer Journey](#the-customer-journey)4. [Common Workflows](#common-workflows)---## API Architecture Overview### Product-Centric DesignThe APIConnect API is built around **products**. Each of our products has the same set of endpoints:**Available Products:*** **Parking** - Airport car parking**Coming Soon*** **Transfers** - Airport transfers* **Hotels** - Airport hotel accommodation* **Hotel with Parking** - Integrated packages* **Lounges** - Airport lounge access* **FastTrack** - Priority security lanes**Endpoint Pattern:** When you see endpoints in the OpenAPI schema like:* `GET /v2/products/parking`* `GET /v2/products/hotels`* `GET /v2/products/lounges`These all follow the same pattern - just replace the product type.### The One Exception: LocationsThe **Locations** endpoint is the only endpoint that doesn't follow the product-specific pattern. It's used to discover which locations (airports) have which products available.---## Core Concepts### 1. Price Guarantee Tokens**What:** A time-limited token that locks in a price **When:** Obtained from the Products endpoint **Why:** Ensures customers aren't charged more than the quoted price **Validity:** 30 minutes **Usage:** Required for Book endpoint**Example Flow:**```1. Customer searches → Products endpoint returns price + token2. Customer sees price: £45.993. Customer books → Pass token to Book endpoint4. API validates token → Price has increased to £48.995. API only charges £45.99 (the guaranteed price)```### 2. Booking Reference vs Partner Reference**Booking Reference:*** **Format:** e.g., `HX123456`* **Source:** Generated by APIConnect* **Uniqueness:** Guaranteed unique* **Usage:** Use this for View Booking, Amend, Cancel endpoints* **Why:** This is our internal identifier that pinpoints a single booking**Partner Reference:*** **Format:** Your choice (e.g., `ORDER-12345`)* **Source:** Provided by you* **Uniqueness:** NOT guaranteed unique (up to you to manage)* **Usage:** Use this for List Bookings endpoint only* **Why:** Helps you match our bookings to your internal systems### 3. Quote and Confirm PatternFor amendments and cancellations, we use a two-step \"quote and confirm\" pattern:**Quote Step:*** Preview what will happen* Get costs/refunds calculated* Receive a token* Nothing is actioned yet**Confirm Step:*** Use the token from the quote* Actually execute the change* Booking is modified/cancelled* Customer is charged/refunded**Why this pattern?** It allows customers to see the financial impact before committing to the change.---## The Customer Journey### Stage 1: Discovery**Endpoint:** `GET /v2/locations`**Purpose:** Find out which airports have which products available**When to use:*** User hasn't selected a location yet* Building a location selector* Need to show available products by location**Response includes:*** Location types* Location codes (IATA / UNLOCODE)* Location names* Available product types at each location**Caching:** Safe to cache for 24 hours---### Stage 2: Product Search**Endpoint:** `GET /v2/products/parking`**Purpose:** Search for available products with pricing**When to use:*** Customer has selected location and dates* You need availability and pricing* This is always the first step in the booking flow**Parking-specific parameter options:**For parking products, you have flexibility in how you specify timing. You can provide **either** set of parameters:**Option 1: Explicit parking times*** `parking_entry_date_time` - When the customer will arrive at the car park* `parking_exit_date_time` - When the customer will leave the car parkUse this when you know the exact parking duration needed.**Option 2: Flight-based calculation*** `outbound_flight_number` - Departure flight number* `outbound_flight_date_time` - Departure flight time* `inbound_flight_number` - Return flight number* `inbound_flight_date_time` - Return flight timeUse this when you want the API to calculate appropriate parking times based on flight schedules. The API will automatically add buffer time for airport arrival/departure.**Important rules:*** At least one set of parameters must be provided* If both sets are provided, `parking_entry_date_time` and `parking_exit_date_time` take precedence* Flight-based calculation is useful when you're unsure how much time customers need between parking and their flight**Response includes:*** List of available products* Pricing for each product* **Price guarantee token** (important!)* Product capabilities (modifiable, cancellable, etc.)* Basic product information* Supplier required information**Important:** The price guarantee token will expire — the expiry time is included in the response. Using an expired token will return a `422 Unprocessable Entity` error. If this happens, re-run the search to get a fresh token.**Caching:** DO NOT cache this response - prices and availability change frequently---### Stage 3: Content Enrichment (Optional)**Endpoint:** `GET /v2/content/parking`Examples:* `GET /v2/content/parking`**Purpose:** Get detailed product information, images, descriptions, and features**When to use:*** Customer clicks on a product to see more details* You want to show rich product information* Building a product details page**Response includes:*** Full product descriptions (multi-language)* Images and gallery* Detailed features and amenities* Location details and directions**Caching:** Safe to cache - check response headers for cache duration**Why separate from Products?** Content is large and changes less frequently. Separating it allows the Products endpoint to be fast and efficient, while Content can be cached and only fetched when needed.---### Stage 4: Create Booking**Endpoint:** `POST /v2/bookings/parking`**Purpose:** Create a booking.**When to use:*** Customer has selected a product* Customer is ready to confirm the booking**Request requires:*** **Price guarantee token** (from the search results)* Customer details* Product-specific details (see product-specific integration guide) * Parking: Vehicle details, flight info, entry/exit times * Hotels: Room requirements, arrival time, guest count * Lounges: Passenger details, flight info, visit time * FastTrack: Passenger details, flight info, travel time* Your partner reference (optional but recommended)**Response includes:*** **Booking reference** (e.g., HX123456) - Our booking reference* **Booking status** (`pending` or `confirmed`)* **Hosted confirmation page URL** - A link to our hosted confirmation page* **Recommended polling interval** (in seconds) - Suggested frequency for status checks* All booking details**Important:** Always include an `Idempotency-Key` header to prevent duplicate bookings if there's a network error. Any unique string is accepted; UUID v4 is recommended. Re-use the same key to safely retry a failed request.**Understanding Booking Status:****Confirmed Status:*** The booking is fully confirmed with the supplier* Show confirmation details to the customer immediately* No further action needed**Pending Status:*** We have created the booking on our side* Our supplier is still processing the confirmation on their side* The booking will transition to either `confirmed` or `error`**Handling Pending Bookings - Four Options:**You have four options for handling pending bookings, depending on how much control you want:**Option 1: Hosted Confirmation Page (Simplest)*** Use the Holiday Extras co-branded hosted confirmation page URL included in the booking response* Direct customers to this URL* We handle all status updates and display logic* The page automatically updates when the booking confirms* No polling or webhooks needed on your side**Option 2: Confirmation Endpoint (Simple)*** Use the Confirmation endpoint (Stage 5) to display booking details* The data returned is always relevant to the current status* Shows \"pending\" messaging when pending, \"confirmed\" details when confirmed* Make the same call regardless of status - we handle the logic* No need to track status transitions yourself**Option 3: Polling (More Control)*** Call the GET booking endpoint (`GET /v2/bookings/parking/{booking-reference}`) repeatedly* Use the `recommended_polling_interval` from the booking response* Check the status field in each response* Stop polling when status changes to `confirmed` or `error`* You control the customer experience during the pending period**Option 4: Webhooks (Event-Driven)*** Build an endpoint on your side matching our webhook specification* We call your endpoint when the booking status changes* Your endpoint receives notification of the status update* Then call GET booking to retrieve the latest information* Most efficient for handling status updates**Recommendation:*** Use Option 1 or 2 if you want us to handle the complexity* Use Option 3 or 4 if you need full control over the customer experience---### Stage 5: Booking Confirmation Details**Endpoint:** `GET /v2/bookings/parking/{booking-reference}/confirmation-details`**Purpose:** Get formatted confirmation details for display**When to use:*** Immediately after booking is created* Displaying a confirmation page**Query parameters:*** `format`: `json` (default), `html`, or `markdown`**Response includes:*** All booking details formatted for display* Product-specific instructions (PIN codes, meeting points, etc.)* Contact information* Important notices**Format options:*** `json`: Returns an array of `{ type, value }` pairs (e.g., `{ \"type\": \"booking_reference\", \"value\": \"HX123456\" }`). Use these fields to build your own confirmation page.* `html`: Returns a `{ text }` object containing a ready-to-use HTML snippet for web pages.* `markdown`: Returns a `{ text }` object containing text-based format for simpler emails.**Why use this?** The formatted confirmation includes product-specific instructions. It's optimized for customer-facing display.---### Stage 6: View Booking**Endpoint:** `GET /v2/bookings/parking/{booking-reference}`**Purpose:** Retrieve a specific booking by our booking reference**When to use:*** Customer wants to view their booking* You need to check current booking status* Before allowing amendments or cancellations**Response includes:*** Complete booking details* Current status (pending, confirmed, cancelled, error)* Customer details**Important:** Use our **booking reference**, not your partner reference.---### Stage 7: List Bookings (Alternative Lookup)> This endpoint will be available in a later phase.**Endpoint:** `GET /v2/bookings/parking?partner_reference={your-reference}`**Purpose:** Find bookings using YOUR reference**When to use:*** Customer lost our booking reference* You need to look up by your internal order ID* You need to reconcile your orders with our bookings**Response includes:*** **Array of bookings** (not a single booking)* Each booking has our booking reference* Use our booking reference for subsequent operations**Why an array?** We don't guarantee your partner reference is unique. You might reuse order IDs or have multiple bookings per order. Therefore, we always return an array, even if there's only one result.**Next step:** Display the bookings to the customer and let them select which one they want to manage, then use our booking reference for amendments/cancellations.---### Stage 8: Amend Booking (Two-Step Process)#### Step 1: Amend Quote**Endpoint:** `PATCH /v2/bookings/parking/{booking-reference}/amendments/quote`**Purpose:** Preview the amendment without executing it**When to use:*** Customer wants to change booking details* You need to show pricing impact before confirming**Response includes:*** Amendment fee (if any)* Price difference (if dates/product changed)* Total charge or refund* **Amendment token** (for the confirm step)**Nothing is changed yet** - this is just a quote.#### Step 2: Amend Confirm**Endpoint:** `POST /v2/bookings/parking/{booking-reference}/amendments/confirm`**Purpose:** Actually execute the amendment**When to use:*** Customer has seen the quote and accepted it* You're ready to charge/refund the difference**Request requires:*** **Amendment token** (from the quote response)**Response includes:*** Updated booking details* Confirmation of changes* Receipt of any charges/refunds**Important:** The amendment token is short-lived, like the price guarantee token. Using an expired token will return a `422 Unprocessable Entity` error — re-request the amendment quote to get a fresh token.**Typical workflow:**```1. Customer clicks \"Change flight details\"2. Call Amend Quote → Show \"£5 amendment fee\"3. Customer clicks \"Confirm changes\"4. Call Amend Confirm with token → Booking updated```---### Stage 9: Cancel Booking (Two-Step Process)#### Step 1: Cancel Quote**Endpoint:** `PATCH /v2/bookings/parking/{booking-reference}/cancellations/quote`**Purpose:** Preview the cancellation without executing it**When to use:*** Customer wants to cancel* You need to show refund amount before confirming**Response includes:*** Cancellation fee (if any)* Refund amount* **Cancellation token** (for the confirm step)**Nothing is cancelled yet** - this is just a quote.#### Step 2: Cancel Confirm**Endpoint:** `POST /v2/bookings/parking/{booking-reference}/cancellations/confirm`**Purpose:** Actually cancel the booking**When to use:*** Customer has seen the refund amount and confirmed* You're ready to process the cancellation**Request requires:*** **Cancellation token** (from the quote response)**Response includes:*** Confirmation of cancellation* Final refund amounts**Important:** The cancellation token is short-lived. Using an expired token will return a `422 Unprocessable Entity` error — re-request the cancellation quote to get a fresh token. Cancellations cannot be undone; you would need to create a new booking.**Typical workflow:**```1. Customer clicks \"Cancel booking\"2. Call Cancel Quote → Show \"You'll receive a £40.99 refund\"3. Customer clicks \"Confirm cancellation\"4. Call Cancel Confirm with token → Booking cancelled5. Show confirmation```---## Common Workflows### Workflow 1: Standard Booking Flow```1. GET /v2/locations → Show airport selector2. GET /v2/products/parking?location_code=LHR&... → Show available parking products with prices → Save price_guarantee_token from response3. [Optional] GET /v2/content/parking → Show detailed product information4. POST /v2/bookings/parking → Include the price_guarantee_token → Create booking5. GET /v2/bookings/parking/{booking-reference}/confirmation-details?format=html → Display confirmation to customer → Send confirmation email```### Workflow 2: Customer Wants to View Their Booking**Scenario A: Customer has our booking reference**```1. GET /v2/bookings/parking/{booking-reference} → Show booking details```**Scenario B: Customer only has your order number**```1. GET /v2/bookings/parking?partner_reference={your-ref} → Returns array of bookings2. Display list of bookings to customer3. Customer selects booking → Use our booking_reference4. GET /v2/bookings/parking/{booking-reference} → Show booking details```### Workflow 3: Customer Wants to Change Flight Details```1. GET /v2/bookings/parking/{booking-reference} → Get current booking details → Show to customer2. Customer enters new flight details3. PATCH /v2/bookings/parking/{booking-reference}/amendments/quote → Pass new flight details → Get amendment_token4. Show customer: \"Amendment fee: £5.00\" → Customer confirms5. POST /v2/bookings/parking/{booking-reference}/amendments/confirm → Include amendment_token → Booking updated6. GET /v2/bookings/parking/{booking-reference}/confirmation-details?format=html → Send updated confirmation email```### Workflow 4: Customer Wants to Cancel```1. GET /v2/bookings/parking/{booking-reference} → Get current booking details2. PATCH /v2/bookings/parking/{booking-reference}/cancellations/quote → Get cancellation_token and refund amount3. Show customer: \"You'll receive a refund of £40.99\" → Customer confirms4. POST /v2/bookings/parking/{booking-reference}/cancellations/confirm → Include cancellation_token → Booking cancelled5. Show confirmation: \"Booking cancelled.\"```", + "content": "# APIConnect (Partner API 2026) - Understanding the OpenAPI DocumentationDocument Version: 0.2 Last Updated: 2026-03-18This document is in Beta---## Purpose of This GuideThis guide helps you navigate the Swagger/OpenAPI documentation by explaining the **context** and **workflow** of the API endpoints. While Swagger shows you *what* each endpoint does, this guide explains *when* and *why* to use each endpoint, and how they work together.## OpenAPI SpecificationThe openapi schema for the API can be found at This is a live document and is expected to be updated.This can be viewed using a tool of your choice. We recommend or importing the schema into [Postman](https://www.postman.com/).---## Table of Contents1. [API Architecture Overview](#api-architecture-overview)2. [Core Concepts](#core-concepts)3. [The Customer Journey](#the-customer-journey)4. [Common Workflows](#common-workflows)---## API Architecture Overview### Product-Centric DesignThe APIConnect API is built around **products**. Each of our products has the same set of endpoints:**Available Products:*** **Parking** - Airport car parking**Coming Soon*** **Transfers** - Airport transfers* **Hotels** - Airport hotel accommodation* **Hotel with Parking** - Integrated packages* **Lounges** - Airport lounge access* **FastTrack** - Priority security lanes**Endpoint Pattern:** When you see endpoints in the OpenAPI schema like:* `GET /v2/products/parking`* `GET /v2/products/hotels`* `GET /v2/products/lounges`These all follow the same pattern - just replace the product type.### The One Exception: LocationsThe **Locations** endpoint is the only endpoint that doesn't follow the product-specific pattern. It's used to discover which locations (airports) have which products available.---## Core Concepts### 1. Date and Time FormatsThe API uses two datetime formats:* **Local datetime** (e.g., `2026-05-20T08:00:00`) -- Times without a timezone offset. These are always in the **airport's local timezone**. When you submit `parking_entry_datetime: \"2026-05-20T08:00:00\"` for Heathrow, that means 8am London time. The API returns parking and flight times in this same format.* **UTC datetime** (e.g., `2026-05-20T07:00:00.000Z`) -- Times with a `Z` suffix. Used for token expiry times and policy deadlines. These are always UTC.### 2. Currency and PricingAll monetary values in the API are expressed in **minor currency units** (e.g., pence for GBP, cents for EUR). A price of `4599` in GBP means **45.99**. This applies to all price, commission, refund, and cost fields across every endpoint.### 3. Price Guarantee Tokens**What:** A time-limited token that locks in a price **When:** Obtained from the Products endpoint **Why:** Ensures customers aren't charged more than the quoted price **Validity:** 30 minutes **Usage:** Required for Book endpoint**Example Flow:**```1. Customer searches → Products endpoint returns price + token2. Customer sees price: £45.993. Customer books → Pass token to Book endpoint4. API validates token → Price has increased to £48.995. API only charges £45.99 (the guaranteed price)```### 4. Booking Reference vs Partner Reference**Booking Reference:*** **Format:** e.g., `HX123456`* **Source:** Generated by APIConnect* **Uniqueness:** Guaranteed unique* **Usage:** Use this for View Booking, Amend, Cancel endpoints* **Why:** This is our internal identifier that pinpoints a single booking**Partner Reference:*** **Format:** Your choice (e.g., `ORDER-12345`)* **Source:** Provided by you* **Uniqueness:** NOT guaranteed unique (up to you to manage)* **Usage:** Use this for List Bookings endpoint only* **Why:** Helps you match our bookings to your internal systems### 5. Quote and Confirm PatternFor amendments and cancellations, we use a two-step \"quote and confirm\" pattern:**Quote Step:*** Preview what will happen* Get costs/refunds calculated* Receive a token* Nothing is actioned yet**Confirm Step:*** Use the token from the quote* Actually execute the change* Booking is modified/cancelled* Customer is charged/refunded**Why this pattern?** It allows customers to see the financial impact before committing to the change.---## The Customer Journey### Stage 1: Discovery**Endpoint:** `GET /v2/locations`**Purpose:** Find out which airports have which products available**When to use:*** User hasn't selected a location yet* Building a location selector* Need to show available products by location**Response includes:*** Location types* Location codes (IATA)* Location names* Available product types at each location**Caching:** Safe to cache for 24 hours---### Stage 2: Product Search**Endpoint:** `GET /v2/products/parking`**Purpose:** Search for available products with pricing**When to use:*** Customer has selected location and dates* You need availability and pricing* This is always the first step in the booking flow**Parking-specific parameter options:**For parking products, you have flexibility in how you specify timing. You can provide **either** set of parameters:**Option 1: Explicit parking times*** `parking_entry_datetime` - When the customer will arrive at the car park* `parking_exit_datetime` - When the customer will leave the car parkUse this when you know the exact parking duration needed.**Option 2: Flight-based calculation*** `outbound_flight_number` - Departure flight number* `outbound_departure_datetime` - Departure flight time* `inbound_flight_number` - Return flight number* `inbound_arrival_datetime` - Return flight timeUse this when you want the API to calculate appropriate parking times based on flight schedules. The API will automatically add buffer time for airport arrival/departure.**Important rules:*** At least one set of parameters must be provided* If both sets are provided, `parking_entry_datetime` and `parking_exit_datetime` take precedence* Flight-based calculation is useful when you're unsure how much time customers need between parking and their flight**How flight-based derivation works:**When you provide `outbound_departure_datetime` instead of `parking_entry_datetime`, the API derives an appropriate parking start time based on the flight schedule. Similarly, `inbound_arrival_datetime` derives the parking end time. This adds buffer time for airport arrival and departure.You must provide at least one of each pair:* `parking_entry_datetime` OR `outbound_departure_datetime`* `parking_exit_datetime` OR `inbound_arrival_datetime`If both are provided in a pair, the explicit parking time takes precedence.**Response includes:*** List of available products* Pricing for each product* **Price guarantee token** (important!)* Product capabilities (modifiable, cancellable, etc.)* Basic product information* Supplier required information**Important:** The price guarantee token will expire — the expiry time is included in the response. Using an expired token will return a `422 Unprocessable Entity` error. If this happens, re-run the search to get a fresh token.**Caching:** DO NOT cache this response - prices and availability change frequently---### Stage 3: Content Enrichment (Optional)**Endpoint:** `GET /v2/content/parking`Examples:* `GET /v2/content/parking`**Purpose:** Get detailed product information, images, descriptions, and features**When to use:*** Customer clicks on a product to see more details* You want to show rich product information* Building a product details page**Response includes:*** Full product descriptions (multi-language)* Images and gallery* Detailed features and amenities* Location details and directions**Caching:** Safe to cache - check response headers for cache duration**Why separate from Products?** Content is large and changes less frequently. Separating it allows the Products endpoint to be fast and efficient, while Content can be cached and only fetched when needed.---### Stage 4: Create Booking**Endpoint:** `POST /v2/bookings/parking`**Purpose:** Create a booking.**When to use:*** Customer has selected a product* Customer is ready to confirm the booking**Request requires:*** **Price guarantee token** (from the search results)* Customer details* Product-specific details (see product-specific integration guide) * Parking: Vehicle details, flight info, entry/exit times * Hotels: Room requirements, arrival time, guest count * Lounges: Passenger details, flight info, visit time * FastTrack: Passenger details, flight info, travel time* Your partner reference (optional but recommended, max 20 characters)**Response includes:*** **Booking reference** (e.g., HX123456) - Our booking reference* **Booking status** (`Pending` or `Confirmed`)* **Recommended polling interval** (in seconds) - Suggested frequency for status checks**Important:** Always include an `Idempotency-Key` header to prevent duplicate bookings if there's a network error. Any unique string is accepted; UUID v4 is recommended. Re-use the same key to safely retry a failed request.**Understanding Booking Status:****Confirmed Status:*** The booking is fully confirmed with the supplier* Show confirmation details to the customer immediately* No further action needed**Pending Status:*** We have created the booking on our side* Our supplier is still processing the confirmation on their side* The booking will transition to either `confirmed` or `error`**Handling Pending Bookings - Four Options:**You have four options for handling pending bookings, depending on how much control you want:**Option 1: Hosted Confirmation Page (Simplest)*** Call `GET /v2/bookings/parking/{booking-reference}` to get the `confirmation_page_link`* Direct customers to this URL* We handle all status updates and display logic* The page automatically updates when the booking confirms* No polling or webhooks needed on your side**Option 2: GET Booking Endpoint (Simple)*** Use `GET /v2/bookings/parking/{booking-reference}` to display booking details* The data returned is always relevant to the current status* Shows pending state when pending, full confirmation details when confirmed* Make the same call regardless of status - we handle the logic* No need to track status transitions yourself**Option 3: Polling (More Control)*** Call the GET booking endpoint (`GET /v2/bookings/parking/{booking-reference}`) repeatedly* Use the `recommended_polling_interval` from the booking response* Check the status field in each response* Stop polling when status changes to `confirmed` or `error`* You control the customer experience during the pending period**Option 4: Webhooks (Event-Driven)*** Build an endpoint on your side matching our webhook specification* We call your endpoint when the booking status changes* Your endpoint receives notification of the status update* Then call GET booking to retrieve the latest information* Most efficient for handling status updates**Recommendation:*** Use Option 1 or 2 if you want us to handle the complexity* Use Option 3 or 4 if you need full control over the customer experience---### Stage 5: Booking ConfirmationAfter creating a booking, you have two options for showing confirmation details to customers:**Option 1: Hosted Confirmation Page*** Use the `confirmation_page_link` field from `GET /v2/bookings/parking/{booking-reference}` -- a URL to a Holiday Extras hosted confirmation page* Direct customers here and we handle the display* The page automatically updates when the booking confirms**Option 2: Build Your Own*** Use the booking details from `GET /v2/bookings/parking/{booking-reference}` (Stage 6) to build your own confirmation page* The response includes all booking details, entry methods, and customer information---### Stage 6: View Booking**Endpoint:** `GET /v2/bookings/parking/{booking-reference}`**Purpose:** Retrieve a specific booking by our booking reference**When to use:*** Customer wants to view their booking* You need to check current booking status* Before allowing amendments or cancellations**Response includes:*** Complete booking details* Current status (Pending, Confirmed, Aborted, Error, Received, Accepted)* Customer details* `confirmation_page_link` -- hosted confirmation page URL (or null if not yet available)* `entry_method` -- how the customer enters the car park (QR code, barcode, or reference number)* `amendable_data` -- the current values of fields that can be amended. If empty, the booking cannot be amended. Use these values to pre-fill an amendment form before calling the amendment quote endpoint.* `policies` -- amendment and refund policies for this booking (see below)**Understanding Policies:**The `policies` object tells you what changes are available and what refunds apply:* `amendments.permitted` -- whether the booking can be amended* `amendments.until` -- deadline for amendments (UTC), or null if no deadline* `refunds` -- an array of refund tiers, ordered by deadline descending. The first tier whose `until` datetime has not yet passed determines the refund amount. An empty array means no refund is available.**Important:** Use our **booking reference**, not your partner reference.---### Stage 7: List Bookings (Alternative Lookup)> This endpoint will be available in a later phase.**Endpoint:** `GET /v2/bookings/parking?partner_reference={your-reference}`**Purpose:** Find bookings using YOUR reference**When to use:*** Customer lost our booking reference* You need to look up by your internal order ID* You need to reconcile your orders with our bookings**Response includes:*** **Array of bookings** (not a single booking)* Each booking has our booking reference* Use our booking reference for subsequent operations**Why an array?** We don't guarantee your partner reference is unique. You might reuse order IDs or have multiple bookings per order. Therefore, we always return an array, even if there's only one result.**Next step:** Display the bookings to the customer and let them select which one they want to manage, then use our booking reference for amendments/cancellations.---### Stage 8: Amend Booking (Two-Step Process)#### Step 1: Amend Quote**Endpoint:** `PATCH /v2/bookings/parking/{booking-reference}/amendments/quote`**Purpose:** Preview the amendment without executing it**When to use:*** Customer wants to change booking details* You need to show pricing impact before confirming**Response includes:*** Amendment fee (if any)* Price difference (if dates/product changed)* Total charge or refund* **Amendment token** (for the confirm step)**Nothing is changed yet** - this is just a quote.#### Step 2: Amend Confirm**Endpoint:** `POST /v2/bookings/parking/{booking-reference}/amendments/confirm`**Purpose:** Actually execute the amendment**When to use:*** Customer has seen the quote and accepted it* You're ready to charge/refund the difference**Request requires:*** **Amendment token** (from the quote response)**Response includes:*** Updated booking details* Confirmation of changes* Receipt of any charges/refunds**Important:** The amendment token is short-lived, like the price guarantee token. Using an expired token will return a `422 Unprocessable Entity` error — re-request the amendment quote to get a fresh token.**Typical workflow:**```1. Customer clicks \"Change flight details\"2. Call Amend Quote → Show \"£5 amendment fee\"3. Customer clicks \"Confirm changes\"4. Call Amend Confirm with token → Booking updated```---### Stage 9: Cancel Booking (Two-Step Process)#### Step 1: Cancel Quote**Endpoint:** `GET /v2/bookings/parking/{booking-reference}/cancellations/quote`**Purpose:** Preview the cancellation without executing it**When to use:*** Customer wants to cancel* You need to show refund amount before confirming**Response includes:*** Cancellation fee (if any)* Refund amount* **Cancellation token** (for the confirm step)**Nothing is cancelled yet** - this is just a quote.#### Step 2: Cancel Confirm**Endpoint:** `POST /v2/bookings/parking/{booking-reference}/cancellations/confirm`**Purpose:** Actually cancel the booking**When to use:*** Customer has seen the refund amount and confirmed* You're ready to process the cancellation**Request requires:*** **Cancellation token** (from the quote response)**Response includes:*** Confirmation of cancellation* Final refund amounts**Important:** The cancellation token is short-lived. Using an expired token will return a `422 Unprocessable Entity` error — re-request the cancellation quote to get a fresh token. Cancellations cannot be undone; you would need to create a new booking.**Typical workflow:**```1. Customer clicks \"Cancel booking\"2. Call Cancel Quote → Show \"You'll receive a £40.99 refund\"3. Customer clicks \"Confirm cancellation\"4. Call Cancel Confirm with token → Booking cancelled5. Show confirmation```---## Common Workflows### Workflow 1: Standard Booking Flow```1. GET /v2/locations → Show airport selector2. GET /v2/products/parking?location_code=LHR&... → Show available parking products with prices → Save price_guarantee_token from response3. [Optional] GET /v2/content/parking → Show detailed product information4. POST /v2/bookings/parking → Include the price_guarantee_token → Create booking5. Use confirmation_page_link from booking response → Or build your own confirmation from GET /v2/bookings/parking/{booking-reference}```### Workflow 2: Customer Wants to View Their Booking**Scenario A: Customer has our booking reference**```1. GET /v2/bookings/parking/{booking-reference} → Show booking details```**Scenario B: Customer only has your order number**```1. GET /v2/bookings/parking?partner_reference={your-ref} → Returns array of bookings2. Display list of bookings to customer3. Customer selects booking → Use our booking_reference4. GET /v2/bookings/parking/{booking-reference} → Show booking details```### Workflow 3: Customer Wants to Change Flight Details```1. GET /v2/bookings/parking/{booking-reference} → Get current booking details → Show to customer2. Customer enters new flight details3. PATCH /v2/bookings/parking/{booking-reference}/amendments/quote → Pass new flight details → Get amendment_token4. Show customer: \"Amendment fee: £5.00\" → Customer confirms5. POST /v2/bookings/parking/{booking-reference}/amendments/confirm → Include amendment_token → Booking updated6. GET /v2/bookings/parking/{booking-reference} → Send updated confirmation email with latest booking details```### Workflow 4: Customer Wants to Cancel```1. GET /v2/bookings/parking/{booking-reference} → Get current booking details2. GET /v2/bookings/parking/{booking-reference}/cancellations/quote → Get cancellation_token and refund amount3. Show customer: \"You'll receive a refund of £40.99\" → Customer confirms4. POST /v2/bookings/parking/{booking-reference}/cancellations/confirm → Include cancellation_token → Booking cancelled5. Show confirmation: \"Booking cancelled.\"```", "url": "/partner/v2/api-endpoint-navigation-guide/" } , "partner-v2-authentication": { "title": "Authentication", - "content": "# AuthenticationThis guide explains how to authenticate with our API using OAuth 2.0 client credentials flow.## OverviewOur API uses OAuth 2.0 with the client credentials grant type. This flow is designed for server-to-server authentication where no user interaction is required.## PrerequisitesTo use OAuth authentication, you must first obtain client credentials:* **client_id**: Your unique application identifier* **client_secret**: Your application's secret keyContact us to register your application and receive credentials.## Base URL| Environment | Base URL ||-------------|----------|| Production | `https://auth.holidayextras.com` || Staging | `https://auth-staging.holidayextras.com` |## DiscoveryOAuth server metadata is available at the well-known endpoint:```httpGET /.well-known/oauth-authorization-server```This returns a JSON document describing the OAuth server configuration:```json{ \"issuer\": \"https://auth.holidayextras.com\", \"token_endpoint\": \"https://auth.holidayextras.com/oauth2/token\", \"revocation_endpoint\": \"https://auth.holidayextras.com/oauth2/revoke\", \"token_endpoint_auth_methods_supported\": [\"client_secret_basic\"], \"grant_types_supported\": [\"client_credentials\"], \"response_types_supported\": [], \"scopes_supported\": []}```## Token Generation### Token Endpoint```httpPOST /oauth2/token```### Token AuthenticationUse HTTP Basic authentication with your credentials encoded as base64:```httpAuthorization: Basic {base64(client_id:client_secret)}```### Request| Header | Value ||--------|-------|| Authorization | `Basic {base64_encoded_credentials}` || Content-Type | `application/x-www-form-urlencoded` || Body Parameter | Value ||----------------|-------|| grant_type | `client_credentials` |### ResponseA successful request returns `200 OK` with a JSON body:```json{ \"access_token\": \"abc123xyz...\", \"token_type\": \"Bearer\", \"expires_in\": 3600, \"scope\": \"\", \"status\": \"approved\"}```| Field | Description ||-------|-------------|| access_token | The token to use for API requests || token_type | Always `Bearer` || expires_in | Token lifetime in seconds (3600 = 1 hour) || scope | Granted scopes (if applicable) || status | Token status |### Token Example```bashcurl -X POST \"https://auth.holidayextras.com/oauth2/token\" \\ -H \"Authorization: Basic $(echo -n 'your_client_id:your_client_secret' | base64)\" \\ -H \"Content-Type: application/x-www-form-urlencoded\" \\ -d \"grant_type=client_credentials\"```## Using Access TokensInclude the access token in the `Authorization` header for all API requests:```httpAuthorization: Bearer {access_token}```### Usage Example```bashcurl \"https://api.holidayextras.com/endpoint\" \\ -H \"Authorization: Bearer abc123xyz...\"```### Token ExpiryAccess tokens expire after **1 hour** (3600 seconds / 3600000 milliseconds).The `expires_in` field in the token response indicates the remaining lifetime in seconds. Your application should:1. Store the token and its expiry time2. Request a new token before the current one expires3. Handle 401 responses by requesting a new token## Rate LimitsThe OAuth token endpoints are limited to **100 requests per hour** per client.If you exceed this limit, you will receive a `429 Too Many Requests` response.If you anticipate needing higher rate limits, contact your account representative to discuss your requirements.## Token RevocationTo invalidate an access token before it expires, use the revocation endpoint.### Revoke Endpoint```httpPOST /oauth2/revoke```### Revoke AuthenticationUse HTTP Basic authentication with the **same credentials that generated the token**:```httpAuthorization: Basic {base64(client_id:client_secret)}```### Revoke Request| Header | Value ||--------|-------|| Authorization | `Basic {base64_encoded_credentials}` || Content-Type | `application/x-www-form-urlencoded` || Body Parameter | Value ||----------------|-------|| token | The access token to revoke |### Revoke ResponseA successful revocation returns `200 OK` with no body.Per RFC 7009, the endpoint returns 200 for both valid and invalid tokens to prevent token enumeration.### Revoke Example```bashcurl -X POST \"https://auth.holidayextras.com/oauth2/revoke\" \\ -H \"Authorization: Basic $(echo -n 'your_client_id:your_client_secret' | base64)\" \\ -H \"Content-Type: application/x-www-form-urlencoded\" \\ -d \"token=abc123xyz...\"```## ## Error ResponsesError responses follow RFC 6749 format:```json{ \"error\": \"error_code\"}```### Error Codes| Error Code | HTTP Status | Description ||------------|-------------|-------------|| `invalid_request` | 400 | Missing or invalid request parameters (e.g., missing Authorization header) || `invalid_client` | 401 | Client authentication failed (invalid client_id or client_secret) |### Example Error Response```json{ \"error\": \"invalid_client\"}```", + "content": "# AuthenticationThis guide explains how to authenticate with our API using OAuth 2.0 client credentials flow.## OverviewOur API uses OAuth 2.0 with the client credentials grant type. This flow is designed for server-to-server authentication where no user interaction is required.## PrerequisitesTo use OAuth authentication, you must first obtain client credentials:* **client_id**: Your unique application identifier* **client_secret**: Your application's secret keyContact us to register your application and receive credentials.## Base URL| Environment | Base URL ||-------------|----------|| Production | `https://auth.holidayextras.com` || Staging | `https://auth-staging.holidayextras.com` |## DiscoveryOAuth server metadata is available at the well-known endpoint:```httpGET /.well-known/oauth-authorization-server```This returns a JSON document describing the OAuth server configuration:```json{ \"issuer\": \"https://auth.holidayextras.com\", \"token_endpoint\": \"https://auth.holidayextras.com/oauth2/token\", \"revocation_endpoint\": \"https://auth.holidayextras.com/oauth2/revoke\", \"token_endpoint_auth_methods_supported\": [\"client_secret_basic\"], \"grant_types_supported\": [\"client_credentials\"], \"response_types_supported\": [], \"scopes_supported\": []}```## Token Generation### Token Endpoint```httpPOST /oauth2/token```### Token AuthenticationUse HTTP Basic authentication with your credentials encoded as base64:```httpAuthorization: Basic {base64(client_id:client_secret)}```### Request| Header | Value ||--------|-------|| Authorization | `Basic {base64_encoded_credentials}` || Content-Type | `application/x-www-form-urlencoded` || Body Parameter | Value ||----------------|-------|| grant_type | `client_credentials` |### ResponseA successful request returns `200 OK` with a JSON body:```json{ \"access_token\": \"abc123xyz...\", \"token_type\": \"Bearer\", \"expires_in\": 3600, \"scope\": \"\", \"status\": \"approved\"}```| Field | Description ||-------|-------------|| access_token | The token to use for API requests || token_type | Always `Bearer` || expires_in | Token lifetime in seconds (3600 = 1 hour) || scope | Granted scopes (if applicable) || status | Token status |### Token Example```bashcurl -X POST \"https://auth.holidayextras.com/oauth2/token\" \\ -H \"Authorization: Basic $(echo -n 'your_client_id:your_client_secret' | base64)\" \\ -H \"Content-Type: application/x-www-form-urlencoded\" \\ -d \"grant_type=client_credentials\"```## Using Access TokensInclude the access token in the `Authorization` header for all API requests:```httpAuthorization: Bearer {access_token}```### Usage Example```bashcurl \"https://api.holidayextras.com/endpoint\" \\ -H \"Authorization: Bearer abc123xyz...\"```### Token ExpiryAccess tokens expire after **1 hour** (3600 seconds / 3600000 milliseconds).The `expires_in` field in the token response indicates the remaining lifetime in seconds. Your application should:1. Store the token and its expiry time2. Request a new token before the current one expires3. Handle 401 responses by requesting a new token## Rate LimitsThe OAuth token endpoints are limited to **100 requests per hour** per client.If you exceed this limit, you will receive a `429 Too Many Requests` response.If you anticipate needing higher rate limits, contact your account representative to discuss your requirements.## Token RevocationTo invalidate an access token before it expires, use the revocation endpoint.### Revoke Endpoint```httpPOST /oauth2/revoke```### Revoke AuthenticationUse HTTP Basic authentication with the **same credentials that generated the token**:```httpAuthorization: Basic {base64(client_id:client_secret)}```### Revoke Request| Header | Value ||--------|-------|| Authorization | `Basic {base64_encoded_credentials}` || Content-Type | `application/x-www-form-urlencoded` || Body Parameter | Value ||----------------|-------|| token | The access token to revoke |### Revoke ResponseA successful revocation returns `200 OK` with no body.Per RFC 7009, the endpoint returns 200 for both valid and invalid tokens to prevent token enumeration.### Revoke Example```bashcurl -X POST \"https://auth.holidayextras.com/oauth2/revoke\" \\ -H \"Authorization: Basic $(echo -n 'your_client_id:your_client_secret' | base64)\" \\ -H \"Content-Type: application/x-www-form-urlencoded\" \\ -d \"token=abc123xyz...\"```## Error ResponsesError responses follow RFC 6749 format:```json{ \"error\": \"error_code\"}```### Error Codes| Error Code | HTTP Status | Description ||------------|-------------|-------------|| `invalid_request` | 400 | Missing or invalid request parameters (e.g., missing Authorization header) || `invalid_client` | 401 | Client authentication failed (invalid client_id or client_secret) |### Example Error Response```json{ \"error\": \"invalid_client\"}```", "url": "/partner/v2/authentication/" } , "partner-v2": { "title": "Partner API 2026 (APIConnect)", - "content": "# Partner API 2026 (APIConnect)Partner API 2026 (APIConnect) is the next step for our platform. It brings UK and EU integrations together in one place, with OAuth 2.0 authentication and standardised contracts defined using an OpenAPI schema. The platform is built to scale as we expand into more markets.This documentation is subject to change. Further features, including a booking list capability to support reconciliation and recovery flows, as well as wider product coverage, will be introduced in later phases.Documentation:* [APIConnect (Partner API 2026) - Understanding the OpenAPI Documentation](/partner/v2/api-endpoint-navigation-guide/)* [APIConnect (Partner API 2026) - Event Notifications](/partner/v2/webhook-integration-guide/)* [Authentication](/partner/v2/authentication/)", + "content": "# Partner API 2026 (APIConnect)Partner API 2026 (APIConnect) is the next step for our platform. It brings UK and EU integrations together in one place, with OAuth 2.0 authentication and standardised contracts defined using an OpenAPI schema. The platform is built to scale as we expand into more markets.This documentation is subject to change. Further features, including a booking list capability to support reconciliation and recovery flows, as well as wider product coverage, will be introduced in later phases.## Environments| | Production | Staging ||---|---|---|| **API** | `https://api.holidayextras.com` | `https://api-sandbox.holidayextras.com` || **Auth** | `https://auth.holidayextras.com` | `https://auth-staging.holidayextras.com` || **OpenAPI Schema** | `https://api.holidayextras.com/partner-api/v2/schema.json` | `https://api-sandbox.holidayextras.com/partner-api/v2/schema.json` |Use staging for development and testing. Authenticate against the matching auth environment -- staging credentials will not work against production and vice versa.View the schema in [Swagger Editor](https://editor.swagger.io/) or import into [Postman](https://www.postman.com/).## Documentation* [Authentication](/partner/v2/authentication/) - OAuth 2.0 client credentials flow* [Understanding the OpenAPI Documentation](/partner/v2/api-endpoint-navigation-guide/) - Endpoint workflows and integration guide* [Event Notifications](/partner/v2/webhook-integration-guide/) - Webhook integration for booking status updates* [Error Responses](/partner/v2/problems/bad-request/) - HTTP error codes and resolution guidance", "url": "/partner/v2/" } , @@ -619,7 +619,7 @@ "partner-v2-webhook-integration-guide": { "title": "APIConnect (Partner API 2026) - Event Notifications", - "content": "# APIConnect (Partner API 2026) - Event NotificationsVersion: 1.0 Last Updated: 2026-01-29---## OverviewWebhooks allow you to receive real-time notifications when booking events occur. We'll send HTTP POST requests to your endpoint when booking states change.### When to Use WebhooksUse webhooks when you want to be notified about booking status changes, particularly for pending bookings that need confirmation.**Note:** If you use our hosted confirmation page or the confirmation endpoint (which handles status automatically), you may not need webhooks. See the [API Endpoint Navigation Guide](/partner/v2/api-endpoint-navigation-guide/#stage-4-create-booking) for alternatives.---## Configuration### Step 1: Create Your EndpointYour webhook endpoint must:* Accept HTTP POST requests* Be publicly accessible via HTTPS (valid SSL certificate required)* Respond with HTTP 200 within 10 seconds* Verify the signature we send (security requirement)### Step 2: Speak With Your Partnerships ManagerLet your partnerships manager know your endpoint and they will configure it within the Holiday Extras APIConnect platform**Important:** Store your webhook secret securely (environment variable or vault).---## Event Payload StructureAll webhook events follow this structure:```json{ \"collection_id\": \"550e8400-e29b-41d4-a716-446655440000\", \"event_type\": \"booking.confirmed\", \"timestamp\": \"2026-01-29T10:30:45.123Z\", \"correlation_id\": \"c7f8e3d2-a1b4-4c5d-9e8f-7a6b5c4d3e2f\", \"trace_id\": \"trace_abc123xyz789\", \"source\": \"APIConnect\", \"data\": { \"booking_reference\": \"HX123456\", \"partner_reference\": \"ORDER-12345\" }}```### Envelope Fields| Field | Purpose | How to Use ||-------|---------|------------|| `collection_id` | Unique event identifier | Use for deduplication - store this to prevent processing the same event twice || `event_type` | Type of event | Describes what has occurred || `timestamp` | When event occurred | For ordering events and auditing || `correlation_id` | Groups related events | For tracking the entire booking lifecycle || `trace_id` | Debug identifier | Include in support requests || `source` | Who sent this webhook | Verification purposes || `data.booking_reference` | Our booking reference | Use to fetch full booking details via API || `data.partner_reference` | Your reference | Match to your internal order/transaction |### Why Thin Payloads?The webhook contains **only identifiers**, not full booking details. This is intentional:* You always get fresh data by calling the API* No risk of processing stale information* Consistent data structure across all events**After receiving a webhook, call:** `GET /api/v1/bookings/{booking_reference}` to fetch full booking details.---## Event Types| Event Type | When Sent | Typical Action ||------------|-----------|----------------|| `booking.confirmed` | Supplier confirms | Fetch booking details, update database, send confirmation email || `booking.failed` | Supplier rejects | Fetch failure reason, process refund, notify customer |## Security: Signature VerificationEvery webhook includes an HMAC-SHA256 signature in the `X-HX-Signature` header. You **must** verify this signature to ensure the webhook came from us.### Request Headers```httpPOST /webhooks/apiconnect HTTP/1.1Host: api.yourcompany.comContent-Type: application/jsonX-HX-Signature: sha256=a1b2c3d4e5f6...X-HX-Timestamp: 1738152645X-HX-Collection-Id: 550e8400-e29b-41d4-a716-446655440000{...webhook payload...}```---## Handling DuplicatesWebhooks use **at-least-once delivery**, meaning the same event may be delivered multiple times.---", + "content": "# APIConnect (Partner API 2026) - Event NotificationsVersion: 1.0 Last Updated: 2026-01-29---## OverviewWebhooks allow you to receive real-time notifications when booking events occur. We'll send HTTP POST requests to your endpoint when booking states change.### When to Use WebhooksUse webhooks when you want to be notified about booking status changes, particularly for pending bookings that need confirmation.**Note:** If you use our hosted confirmation page or the confirmation endpoint (which handles status automatically), you may not need webhooks. See the [API Endpoint Navigation Guide](/partner/v2/api-endpoint-navigation-guide/#stage-4-create-booking) for alternatives.---## Configuration### Step 1: Create Your EndpointYour webhook endpoint must:* Accept HTTP POST requests* Be publicly accessible via HTTPS (valid SSL certificate required)* Respond with HTTP 200 within 10 seconds* Verify the signature we send (security requirement)### Step 2: Speak With Your Partnerships ManagerLet your partnerships manager know your endpoint and they will configure it within the Holiday Extras APIConnect platform**Important:** Store your webhook secret securely (environment variable or vault).---## Event Payload StructureAll webhook events follow this structure:```json{ \"collection_id\": \"550e8400-e29b-41d4-a716-446655440000\", \"event_type\": \"booking.confirmed\", \"timestamp\": \"2026-01-29T10:30:45.123Z\", \"correlation_id\": \"c7f8e3d2-a1b4-4c5d-9e8f-7a6b5c4d3e2f\", \"trace_id\": \"trace_abc123xyz789\", \"source\": \"APIConnect\", \"data\": { \"booking_reference\": \"HX123456\", \"partner_reference\": \"ORDER-12345\" }}```### Envelope Fields| Field | Purpose | How to Use ||-------|---------|------------|| `collection_id` | Unique event identifier | Use for deduplication - store this to prevent processing the same event twice || `event_type` | Type of event | Describes what has occurred || `timestamp` | When event occurred | For ordering events and auditing || `correlation_id` | Groups related events | For tracking the entire booking lifecycle || `trace_id` | Debug identifier | Include in support requests || `source` | Who sent this webhook | Verification purposes || `data.booking_reference` | Our booking reference | Use to fetch full booking details via API || `data.partner_reference` | Your reference | Match to your internal order/transaction |### Why Thin Payloads?The webhook contains **only identifiers**, not full booking details. This is intentional:* You always get fresh data by calling the API* No risk of processing stale information* Consistent data structure across all events**After receiving a webhook, call:** `GET /v2/bookings/parking/{booking_reference}` to fetch full booking details.---## Event Types| Event Type | When Sent | Typical Action ||------------|-----------|----------------|| `booking.confirmed` | Supplier confirms | Fetch booking details, update database, send confirmation email || `booking.failed` | Supplier rejects | Fetch failure reason, process refund, notify customer |## Security: Signature VerificationEvery webhook includes an HMAC-SHA256 signature in the `X-HX-Signature` header. You **must** verify this signature to ensure the webhook came from us.### Request Headers```httpPOST /webhooks/apiconnect HTTP/1.1Host: api.yourcompany.comContent-Type: application/jsonX-HX-Signature: sha256=a1b2c3d4e5f6...X-HX-Timestamp: 1738152645X-HX-Collection-Id: 550e8400-e29b-41d4-a716-446655440000{...webhook payload...}```---## Handling DuplicatesWebhooks use **at-least-once delivery**, meaning the same event may be delivered multiple times.---", "url": "/partner/v2/webhook-integration-guide/" } ,