{
  "openapi": "3.1.0",
  "info": {
    "title": "Booking.com Demand API Beta",
    "version": "beta",
    "summary": "Explore and test Beta endpoints before their release in a stable Demand API version.",
    "description": "The Demand API Beta collection provides early access to selected API capabilities that are not yet available in a stable version.\n\n**What to expect from Beta:**\n- **Separate API paths:** Beta endpoints use the `/beta` path and are independent of numbered stable API versions.\n- **Limited availability:** This collection contains only endpoints with Beta capabilities. Stable endpoints without Beta capabilities are not included.\n- **Evolving contracts:** Beta endpoints may introduce breaking changes, including changes to request and response structures, without a new version number.\n- **Promotion to stable:** Selected Beta capabilities may be introduced into a stable API version. Once announced in the monthly changelog, the corresponding Beta capabilities are retired after three months.\n\n> ⚠️ Before integrating: Beta contracts are subject to change. Review the API documentation and [changelog](/demand/docs/whats-new/changelog) regularly and prepare your integration for potential updates.\n\nRequests use JSON over HTTPS and require an Affiliate ID and API token. For authentication details, see the [Authentication guide](/demand/docs/development-guide/authentication)."
  },
  "servers": [
    {
      "url": "https://demandapi.booking.com/beta",
      "description": "Production environment."
    },
    {
      "url": "https://demandapi-sandbox.booking.com/beta",
      "description": "Sandbox environment."
    }
  ],
  "security": [
    {
      "BearerAuth": []
    }
  ],
  "tags": [
    {
      "name": "Accommodations",
      "x-displayName": "Accommodation",
      "description": "Search for accommodations using natural language queries combined with structured travel criteria."
    },
    {
      "name": "Transfers",
      "x-displayName": "Transfers",
      "description": "Search for transfer options, including prices, vehicle details, and booking links."
    }
  ],
  "paths": {
    "/accommodations/smart-search": {
      "post": {
        "summary": "Smart search",
        "description": "Use this endpoint to search for accommodations using a natural language query combined with structured travel criteria such as dates, guests, location, and sorting preferences. The `search_query` field accepts free-text input describing the traveller’s intent, preferences, or desired accommodation features. Structured parameters such as `checkin`, `checkout`, `guests`, and location filters are used to refine and constrain the search results.",
        "operationId": "/accommodations/smart-search",
        "parameters": [
          {
            "$ref": "#/components/parameters/AffiliateIdHeader"
          }
        ],
        "tags": [
          "Accommodations"
        ],
        "x-badges": [
          {
            "name": "Beta",
            "color": "orange",
            "position": "before"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/smartSearchInput"
              },
              "example": {
                "booker": {
                  "country": "nl",
                  "platform": "desktop"
                },
                "checkin": "!START_DATE!",
                "checkout": "!END_DATE!",
                "city": -2140479,
                "guests": {
                  "number_of_adults": 2,
                  "number_of_rooms": 1
                },
                "search_query": "hotel with pool near the beach"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/smartSearchOutput"
                },
                "example": {
                  "request_id": "01fr9ez700exycb98w90w5r9sh",
                  "data": [
                    {
                      "id": 10004,
                      "currency": {
                        "accommodation": "EUR",
                        "booker": "EUR"
                      },
                      "deep_link_url": "booking://hotel/10004?affiliate_id=!AFFILIATE_ID!&checkin=!START_DATE!&checkout=!END_DATE!&mcid=10",
                      "price": {
                        "base": {
                          "accommodation_currency": 1081.49,
                          "booker_currency": 1081.49
                        },
                        "charges": [
                          {
                            "charge": 21,
                            "condition": null,
                            "included_in": {
                              "display": true
                            },
                            "total_amount": {
                              "accommodation_currency": 97.34,
                              "booker_currency": 97.34
                            }
                          }
                        ],
                        "display": {
                          "accommodation_currency": 1260.52,
                          "booker_currency": 1260.52
                        },
                        "total": {
                          "accommodation_currency": 1260.52,
                          "booker_currency": 1260.52
                        }
                      },
                      "products": [
                        {
                          "id": "1000420_95127794_2_0_0",
                          "bundle": null,
                          "children": [],
                          "deal": null,
                          "inventory": {
                            "third_party": false,
                            "type": "sell"
                          },
                          "number_of_adults": 2,
                          "policies": {
                            "cancellation": {
                              "free_cancellation_until": null,
                              "type": "non_refundable"
                            },
                            "meal_plan": {
                              "meals": [],
                              "plan": "no_plan"
                            },
                            "payment": {
                              "timings": [
                                "pay_at_the_property"
                              ]
                            }
                          },
                          "price": {
                            "base": {
                              "accommodation_currency": 1081.49,
                              "booker_currency": 1081.49
                            },
                            "charges": [
                              {
                                "charge": 21,
                                "condition": null,
                                "included_in": {
                                  "display": true,
                                  "chargeable_online": true
                                },
                                "mode": "percentage",
                                "percentage": 9,
                                "total_amount": {
                                  "accommodation_currency": 107.07,
                                  "booker_currency": 107.07
                                },
                                "unit_amount": null
                              }
                            ],
                            "display": {
                              "accommodation_currency": 1260.52,
                              "booker_currency": 1260.52
                            },
                            "total": {
                              "accommodation_currency": 1260.52,
                              "booker_currency": 1260.52
                            }
                          },
                          "room": "1000425"
                        }
                      ],
                      "url": "https://www.booking.com/hotel/nl/conscious-the-tire-station.html?affiliate_id=!AFFILIATE_ID!&checkin=!START_DATE!&checkout=!END_DATE!&group_adults=2&no_rooms=1"
                    }
                  ],
                  "metadata": {
                    "next_page": "123456789569"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/transfers/search": {
      "post": {
        "description": "Search for transfer options that match the specified route, pick-up date and time, and number of passengers.\n\nThe response includes vehicle options, estimated prices, cancellation policies, and Booking.com redirect URLs for completing the booking.\n\n**Availability and pricing:** Search results are based on predicted availability and pricing. The actual options and prices may differ when the traveller follows the redirect URL. In some cases, no options may be available on Booking.com.\n\n**Beta endpoint:** This endpoint is part of the Demand API Beta collection. Its request and response structures may change, including breaking changes. See the [Changelog](/demand/docs/whats-new/changelog) for the latest enhancements.",
        "summary": "Search for transfers",
        "operationId": "searchTransfers",
        "parameters": [
          {
            "$ref": "#/components/parameters/AffiliateIdHeader"
          }
        ],
        "tags": [
          "Transfers"
        ],
        "x-badges": [
          {
            "name": "Beta",
            "color": "orange",
            "position": "before"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/transfers_search_input"
              },
              "examples": {
                "oneWayAirportToCoordinates": {
                  "$ref": "#/components/examples/oneWayAirportToCoordinates"
                },
                "roundTripAirportToGooglePlace": {
                  "$ref": "#/components/examples/roundTripAirportToGooglePlace"
                },
                "oneWayCoordinatesToAirport": {
                  "$ref": "#/components/examples/oneWayCoordinatesToAirport"
                },
                "oneWayGooglePlaceToGooglePlace": {
                  "$ref": "#/components/examples/oneWayGooglePlaceToGooglePlace"
                },
                "roundTripCoordinatesToCoordinates": {
                  "$ref": "#/components/examples/roundTripCoordinatesToCoordinates"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/transfers_search_output"
                },
                "examples": {
                  "oneWayResponse": {
                    "$ref": "#/components/examples/oneWayResponse"
                  },
                  "roundTripResponse": {
                    "$ref": "#/components/examples/roundTripResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "The request is invalid or missing required parameters. Refer to the [Error handling section](/demand/docs/support/error-handling/about-errors) for more details.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error_response"
                },
                "examples": {
                  "missing_parameter": {
                    "summary": "Missing parameter",
                    "value": {
                      "request_id": "01kjan7r7yvff5yg95gxy1cjhy",
                      "errors": [
                        {
                          "id": "missing_parameter",
                          "message": "Parameter 'passengers' is missing."
                        }
                      ]
                    }
                  },
                  "invalid_parameter": {
                    "summary": "Malformed request",
                    "value": {
                      "request_id": "01kjan7r7yvff5yg95gxy1cjhy",
                      "errors": [
                        {
                          "id": "invalid_parameter",
                          "message": "Parameter 'route.legs[0].pickup.datetime' is invalid. 'route.legs[0].pickup.datetime' must match the format yyyy-MM-dd'T'HH:mm:ss."
                        }
                      ]
                    }
                  },
                  "datetime_in_past": {
                    "summary": "Pick-up date and time in the past",
                    "value": {
                      "request_id": "01kjan7r7yvff5yg95gxy1cjhy",
                      "errors": [
                        {
                          "id": "invalid_parameter",
                          "message": "Parameter 'route.legs[0].pickup.datetime' is invalid. The pick-up date and time must not be in the past."
                        }
                      ]
                    }
                  },
                  "location_not_resolvable": {
                    "summary": "Location could not be resolved",
                    "value": {
                      "request_id": "01kjan7r7yvff5yg95gxy1cjhy",
                      "errors": [
                        {
                          "id": "invalid_parameter",
                          "message": "Parameter 'route.legs[0].pickup.location' is invalid. The location could not be resolved."
                        }
                      ]
                    }
                  },
                  "return_pickup_too_soon": {
                    "summary": "Return pick-up too soon after the outbound pick-up",
                    "value": {
                      "request_id": "01kjan7r7yvff5yg95gxy1cjhy",
                      "errors": [
                        {
                          "id": "invalid_parameter",
                          "message": "Parameter 'route.legs[1].pickup.datetime' is invalid. The return pick-up is too soon after the outbound pick-up."
                        }
                      ]
                    }
                  },
                  "region_not_supported": {
                    "summary": "Pick-up or drop-off location not covered by transfer services",
                    "value": {
                      "request_id": "01kjan7r7yvff5yg95gxy1cjhy",
                      "errors": [
                        {
                          "id": "invalid_parameter",
                          "message": "Parameter 'route' is invalid. The pick-up or drop-off location is not supported."
                        }
                      ]
                    }
                  },
                  "currency_not_supported": {
                    "summary": "Currency not supported for transfer searches",
                    "value": {
                      "request_id": "01kjan7r7yvff5yg95gxy1cjhy",
                      "errors": [
                        {
                          "id": "invalid_parameter",
                          "message": "Parameter 'currency' is invalid. The currency is not supported for transfer searches."
                        }
                      ]
                    }
                  },
                  "return_leg_missing_pickup_location": {
                    "summary": "Return leg without a pick-up location",
                    "value": {
                      "request_id": "01kjan7r7yvff5yg95gxy1cjhy",
                      "errors": [
                        {
                          "id": "missing_parameter",
                          "message": "Parameter 'route.legs[1].pickup.location' is missing."
                        }
                      ]
                    }
                  },
                  "return_leg_missing_dropoff": {
                    "summary": "Return leg without a drop-off",
                    "value": {
                      "request_id": "01kjan7r7yvff5yg95gxy1cjhy",
                      "errors": [
                        {
                          "id": "missing_parameter",
                          "message": "Parameter 'route.legs[1].dropoff' is missing."
                        }
                      ]
                    }
                  },
                  "return_leg_not_reversed": {
                    "summary": "Return leg locations do not mirror the outbound leg",
                    "value": {
                      "request_id": "01kjan7r7yvff5yg95gxy1cjhy",
                      "errors": [
                        {
                          "id": "invalid_parameter",
                          "message": "Parameter 'route.legs[1].pickup.location' is invalid. must match the outbound drop-off location"
                        }
                      ]
                    }
                  },
                  "return_pickup_before_outbound": {
                    "summary": "Return pick-up not later than the outbound pick-up",
                    "value": {
                      "request_id": "01kjan7r7yvff5yg95gxy1cjhy",
                      "errors": [
                        {
                          "id": "invalid_parameter",
                          "message": "Parameter 'route.legs[1].pickup.datetime' is invalid. The return pick-up must be later than the outbound pick-up."
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal server error. Try again later or contact support.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error_response"
                },
                "examples": {
                  "internal_error": {
                    "summary": "Generic server error",
                    "value": {
                      "request_id": "01kjan66dedrpbwv4m1966dzw3",
                      "errors": [
                        {
                          "id": "500",
                          "message": "Internal server error. Try again later or contact support."
                        }
                      ]
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "string"
      }
    },
    "parameters": {
      "AffiliateIdHeader": {
        "in": "header",
        "name": "X-Affiliate-Id",
        "schema": {
          "type": "integer"
        },
        "required": true,
        "description": "Include here your Affiliate identifier number"
      }
    },
    "schemas": {
      "airportId": {
        "description": "A three-letter code that uniquely identifies an airport as defined by the International Air Transport Association (IATA). The full list can be obtained by calling  <a href=\"/demand/docs/open-api/demand-api/commonlocations/common/locations/airports\" target=\"_blank\">common/locations/airports</a>.",
        "type": "string",
        "pattern": "^[A-Z]{3}$",
        "example": "AMS"
      },
      "booker": {
        "title": "Booker",
        "description": "The booker's information.",
        "type": "object",
        "properties": {
          "country": {
            "description": "The booker country for showing the best price for that user and obeying laws regarding the display of taxes and fees.",
            "type": "string",
            "pattern": "^[a-z]{2}$"
          },
          "platform": {
            "description": "The booker platform for showing the platform based deals and prices.",
            "type": "string",
            "enum": [
              "android",
              "desktop",
              "ios",
              "mobile",
              "tablet"
            ]
          },
          "state": {
            "description": "The booker state for showing the best price for that user and obeying laws regarding the display of taxes and fees. Currently applicable only for country US.",
            "type": "string",
            "pattern": "^[a-z]{2}$"
          },
          "travel_purpose": {
            "description": "The travel purpose of the booker.",
            "type": "string",
            "enum": [
              "business",
              "leisure"
            ]
          },
          "user_groups": {
            "description": "The user groups that the booker is a member of.",
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "authenticated"
              ]
            }
          }
        },
        "required": [
          "country",
          "platform"
        ]
      },
      "checkin": {
        "description": "The checkin date. Must be within 500 days in the future and in the format yyyy-mm-dd.",
        "type": "string",
        "format": "date"
      },
      "checkout": {
        "description": "The checkout date. Must be later than {checkin}. Must be between 1 and 90 days after {checkin}. Must be within 500 days in the future and in the format yyyy-mm-dd.",
        "type": "string",
        "format": "date"
      },
      "cityId": {
        "description": "A signed integer number that uniquely identifies a city. The full list can be obtained by calling <a href=\"/demand/docs/open-api/demand-api/commonlocations/common/locations/cities\" target=\"_blank\">common/locations/cities</a>.",
        "type": "integer"
      },
      "coordinates": {
        "title": "AccommodationsSearchCoordinatesOutput",
        "description": "Limit the result list to the specified coordinates.",
        "type": "object",
        "properties": {
          "latitude": {
            "description": "Specify a latitude (as well as a longitude and radius) to do searches around a specific location.",
            "type": "number",
            "format": "double"
          },
          "longitude": {
            "description": "Specify a longitude (as well as a latitude and radius) to do searches around a specific location.",
            "type": "number",
            "format": "double"
          },
          "radius": {
            "description": "The radius is km to search around the specified latitude and longitude.",
            "type": "number",
            "format": "double"
          }
        }
      },
      "countryId": {
        "description": "A two-letter code that uniquely identifies a country. This code is defined by the ISO 3166-1 alpha-2 standard (ISO2) as described here: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2. The full list can be obtained by calling the /common/locations/countries endpoint.",
        "type": "string",
        "pattern": "^[a-z]{2}$",
        "example": "nl"
      },
      "currencyId": {
        "description": "A three-letter code that uniquely identifies a monetary currency as defined by the ISO 4217 standard. The full list can be obtained by calling <a href=\"/demand/docs/open-api/3.2/demand-api/commonpayments/common/payments/currencies\" target=\"_blank\">common/payments/currencies</a>.",
        "type": [
          "string",
          "null"
        ],
        "pattern": "^[A-Z]{3}$",
        "example": "EUR"
      },
      "districtId": {
        "description": "A signed integer number that uniquely identifies a district. Typically, districts define known areas within a city. The full list can be obtained by calling <a href=\"/demand/docs/open-api/demand-api/commonlocations/common/locations/districts\" target=\"_blank\">common/locations/districts</a>.",
        "type": "integer",
        "minimum": 1
      },
      "extras": {
        "description": "Input parameter to request for additional information about the products.",
        "type": "array",
        "items": {
          "type": "string",
          "enum": [
            "extra_charges",
            "products"
          ]
        }
      },
      "allocation": {
        "description": "The exact allocation of guests to rooms.",
        "type": "array",
        "items": {
          "properties": {
            "children": {
              "description": "The children ages for this room.",
              "type": "array",
              "items": {
                "type": "integer",
                "minimum": 0,
                "maximum": 17
              }
            },
            "number_of_adults": {
              "description": "The number of adults for this room.",
              "type": "integer",
              "minimum": 1
            }
          },
          "required": [
            "number_of_adults"
          ]
        }
      },
      "guests": {
        "title": "AccommodationsGuests",
        "description": "The guest details for the request.",
        "type": "object",
        "properties": {
          "allocation": {
            "$ref": "#/components/schemas/allocation"
          },
          "children": {
            "description": "Array with the children ages.",
            "type": "array",
            "items": {
              "type": "integer",
              "minimum": 0,
              "maximum": 17
            }
          },
          "number_of_adults": {
            "description": "The number of adults for the search.",
            "type": "integer",
            "minimum": 1
          },
          "number_of_rooms": {
            "description": "The number of rooms needed.",
            "type": "integer",
            "minimum": 1
          }
        },
        "required": [
          "number_of_adults",
          "number_of_rooms"
        ]
      },
      "landmarkId": {
        "description": "A signed integer number that uniquely identifies a relevant geographical landmark, like a monument or a natural attraction. The full list can be obtained by calling <a href=\"/demand/docs/open-api/demand-api/commonlocations/common/locations/landmarks\" target=\"_blank\">common/locations/landmarks</a>.",
        "type": "integer",
        "minimum": 1
      },
      "page": {
        "description": "Pagination token used to retrieve the next page of results. Obtained from `next_page`.",
        "type": "string"
      },
      "regionId": {
        "description": "A signed integer number that uniquely identifies a geographical region. Regions usually define official administrative areas within a country, but may also include multiple countries and in some cases un-official but popular designations for geographical areas. An example of a region that crosses multiple countries is the Alps in Europe. The full list can be obtained by calling <a href=\"/demand/docs/open-api/demand-api/commonlocations/common/locations/regions\" target=\"_blank\">common/locations/regions</a>.",
        "type": "integer",
        "minimum": 1
      },
      "maximumResults": {
        "description": "The maximum number of results to return.",
        "type": "integer",
        "multipleOf": 10,
        "minimum": 10,
        "maximum": 100,
        "default": 100
      },
      "smartSearchInput": {
        "title": "AccommodationsSmartSearchInput",
        "type": "object",
        "properties": {
          "airport": {
            "$ref": "#/components/schemas/airportId"
          },
          "booker": {
            "$ref": "#/components/schemas/booker"
          },
          "checkin": {
            "$ref": "#/components/schemas/checkin"
          },
          "checkout": {
            "$ref": "#/components/schemas/checkout"
          },
          "city": {
            "$ref": "#/components/schemas/cityId"
          },
          "coordinates": {
            "$ref": "#/components/schemas/coordinates"
          },
          "country": {
            "$ref": "#/components/schemas/countryId"
          },
          "currency": {
            "$ref": "#/components/schemas/currencyId"
          },
          "district": {
            "$ref": "#/components/schemas/districtId"
          },
          "extras": {
            "$ref": "#/components/schemas/extras"
          },
          "guests": {
            "$ref": "#/components/schemas/guests"
          },
          "landmark": {
            "$ref": "#/components/schemas/landmarkId"
          },
          "page": {
            "$ref": "#/components/schemas/page"
          },
          "region": {
            "$ref": "#/components/schemas/regionId"
          },
          "rows": {
            "$ref": "#/components/schemas/maximumResults"
          },
          "search_query": {
            "description": "Natural language query describing the traveller’s accommodation preferences, intent, or desired experience. The query is interpreted semantically and may match accommodation features, amenities, location context, property types, traveller intent, or ranking signals.",
            "type": "string",
            "minLength": 3,
            "maxLength": 300
          },
          "sort": {
            "description": "Controls how accommodation results are ordered in the response.",
            "type": "object",
            "properties": {
              "by": {
                "description": "Primary sorting strategy applied to the search results. Use `distance` together with `coordinates` to rank accommodations by proximity.",
                "type": "string",
                "enum": [
                  "distance",
                  "price",
                  "review_score",
                  "stars"
                ]
              },
              "direction": {
                "description": "Sort direction applied to the selected sorting strategy. Descending order is not supported when sorting by `distance`.",
                "type": "string",
                "enum": [
                  "ascending",
                  "descending"
                ]
              }
            }
          }
        },
        "required": [
          "booker",
          "checkin",
          "checkout",
          "guests",
          "search_query"
        ]
      },
      "requestId": {
        "description": "Uniquely identifies the request. Please provide this identifier when contacting support.",
        "type": "string"
      },
      "accommodationId": {
        "description": "A signed integer number that uniquely identifies an accommodation property. The full list can be obtained by calling [accommodations/details](/demand/docs/open-api/demand-api/accommodations/accommodations/details).",
        "type": "integer",
        "minimum": 1
      },
      "commission": {
        "title": "AccommodationsCommission",
        "description": "Commission details for the partner for a given accommodation",
        "type": "object",
        "properties": {
          "amount": {
            "description": "The actual commission amount for the partner.",
            "type": "number",
            "format": "double",
            "minimum": 0
          },
          "percentage": {
            "description": "Percentage of the fee that will be received as commission.",
            "type": "number",
            "format": "double",
            "minimum": 0
          }
        }
      },
      "currency": {
        "type": "object",
        "properties": {
          "accommodation": {
            "$ref": "#/components/schemas/currencyId"
          },
          "booker": {
            "$ref": "#/components/schemas/currencyId"
          }
        }
      },
      "deepLinkUrl": {
        "description": "A mobile app URL that directs the user to a specific page or content within the Booking.com app. The link can only be used on a device with the Booking.com app installed. It typically includes an Affiliate ID (AID) to attribute bookings to the affiliate partner when users are redirected",
        "type": "string",
        "format": "url"
      },
      "monetaryAmount": {
        "type": "number",
        "format": "double",
        "multipleOf": 0.01,
        "exclusiveMinimum": 0
      },
      "priceMultiCurrencyOutput": {
        "title": "AccommodationsPriceMultiCurrency",
        "type": "object",
        "properties": {
          "accommodation_currency": {
            "$ref": "#/components/schemas/monetaryAmount"
          },
          "booker_currency": {
            "$ref": "#/components/schemas/monetaryAmount"
          }
        }
      },
      "chargeTypeId": {
        "description": "A signed integer number that uniquely identifies an accommodation charge type. Examples of charges are: VAT, City Tax, etc. The full list can be obtained by calling <a href=\"/demand/docs/open-api/demand-api/accommodations/accommodations/constants\" target=\"_blank\">accommodations/constants</a>.",
        "type": "integer",
        "minimum": 0
      },
      "conditionId": {
        "description": "A signed integer number that uniquely identifies the condition ID. Find the full list in the <a href=\"/demand/docs/accommodations/prices-accommodations\" target=\"_blank\">Pricing guidelines</a>.",
        "type": [
          "integer",
          "null"
        ],
        "minimum": 0
      },
      "display": {
        "description": "Indicates if this charge is included in the display price.",
        "type": "boolean"
      },
      "totalAmountV32": {
        "description": "The total price for this charge.",
        "type": "object",
        "properties": {
          "accommodation_currency": {
            "$ref": "#/components/schemas/monetaryAmount"
          },
          "booker_currency": {
            "$ref": "#/components/schemas/monetaryAmount"
          }
        }
      },
      "chargeSummarySearchV32": {
        "title": "AccommodationsSearchChargeSummary",
        "description": "A charge summed across multiple products.",
        "type": "object",
        "properties": {
          "charge": {
            "$ref": "#/components/schemas/chargeTypeId"
          },
          "condition": {
            "$ref": "#/components/schemas/conditionId"
          },
          "included_in": {
            "title": "ChargeIncludedIn",
            "description": "Indicates where this charge is included",
            "type": "object",
            "properties": {
              "display": {
                "$ref": "#/components/schemas/display"
              }
            }
          },
          "total_amount": {
            "$ref": "#/components/schemas/totalAmountV32"
          }
        }
      },
      "PriceSummarySearchV32": {
        "title": "OrdersPreviewProductSumPriceOutput",
        "description": "The price components of all the products selected summed.",
        "type": "object",
        "properties": {
          "base": {
            "description": "The sum base price of all products selected. Does not include any extra charges.",
            "$ref": "#/components/schemas/priceMultiCurrencyOutput"
          },
          "charges": {
            "description": "The sum of charges for all products selected, grouped by charge type.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/chargeSummarySearchV32"
            }
          },
          "display": {
            "description": "The display price that must be shown to the traveller. Equivalent to base + charges where included_in.display=true.",
            "$ref": "#/components/schemas/priceMultiCurrencyOutput"
          },
          "total": {
            "description": "The total sum price. Includes all extra charges of all products.",
            "$ref": "#/components/schemas/priceMultiCurrencyOutput"
          }
        }
      },
      "productId": {
        "description": "Unique ID of the product.",
        "type": "string"
      },
      "bundleId": {
        "description": "The bundle ID of the product comprising of value added products.",
        "type": "integer"
      },
      "dealV32": {
        "title": "Deal",
        "description": "This specifies the deal tagging for the product.",
        "type": [
          "object",
          "null"
        ],
        "properties": {
          "discount_percentage": {
            "description": "Discount percentage of the applied deal.",
            "type": "integer",
            "minimum": 1
          },
          "public_price": {
            "description": "Original price of this product, before applying any discounts.",
            "$ref": "#/components/schemas/priceMultiCurrencyOutput"
          },
          "tags": {
            "description": "The tags of all the applied deals.",
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "black_friday",
                "early_year_deal",
                "flash_deal",
                "getaway_deal",
                "late_escape_deal",
                "limited_time_deal",
                "logged_in_deal",
                "mobile_rate"
              ]
            }
          }
        }
      },
      "inventoryOutputType": {
        "description": "Type of inventory - either net or sell rates.",
        "type": "string",
        "enum": [
          "net",
          "sell"
        ]
      },
      "inventoryOutput": {
        "title": "InventoryOutput",
        "type": "object",
        "properties": {
          "third_party": {
            "type": "boolean",
            "description": "Indicates whether the product is facilitated by a third-party supplier."
          },
          "type": {
            "$ref": "#/components/schemas/inventoryOutputType"
          }
        }
      },
      "productCancellationTypeSearch": {
        "description": "The cancellation policy applicable to this product: \"free_cancellation\" allows a period for free cancellation, \"non_refundable\" means immediate loss of total amount, \"partially_refundable\" means a portion of the amount may be refunded if the booking is cancelled.",
        "type": "string",
        "enum": [
          "free_cancellation",
          "non_refundable",
          "partially_refundable"
        ]
      },
      "productCancellationPolicySearch": {
        "title": "AccommodationsProductCancellationPolicy",
        "description": "The cancellation policy for this product.",
        "type": "object",
        "properties": {
          "free_cancellation_until": {
            "description": "Until when the order for this product can be cancelled for free.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "type": {
            "$ref": "#/components/schemas/productCancellationTypeSearch"
          }
        }
      },
      "productMealPlanPolicy": {
        "title": "AccommodationsProductMealPlanPolicy",
        "description": "The meal plan policy for this product.",
        "type": "object",
        "properties": {
          "meals": {
            "description": "The meals included in the meal plan.",
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "breakfast",
                "dinner",
                "lunch"
              ]
            }
          },
          "plan": {
            "description": "The meal plan included in this product.",
            "type": "string",
            "enum": [
              "all_inclusive",
              "breakfast_included",
              "full_board",
              "half_board",
              "no_plan"
            ]
          }
        }
      },
      "productPaymentTimings": {
        "description": "The payment timings supported by this product.",
        "type": "array",
        "items": {
          "type": "string",
          "enum": [
            "pay_at_the_property",
            "pay_online_later",
            "pay_online_now"
          ]
        }
      },
      "productPaymentPolicyNew": {
        "title": "AccommodationsProductPaymentPolicyNew",
        "description": "Payment terms and conditions for this product.",
        "type": "object",
        "properties": {
          "prepayment_required": {
            "description": "Whether prepayment is required for this product.",
            "type": "boolean"
          },
          "timings": {
            "$ref": "#/components/schemas/productPaymentTimings"
          }
        }
      },
      "productPoliciesSearch": {
        "title": "AccommodationsProductPolicies",
        "description": "The policies for this product.",
        "type": "object",
        "properties": {
          "cancellation": {
            "$ref": "#/components/schemas/productCancellationPolicySearch"
          },
          "meal_plan": {
            "$ref": "#/components/schemas/productMealPlanPolicy"
          },
          "payment": {
            "$ref": "#/components/schemas/productPaymentPolicyNew"
          }
        }
      },
      "basePriceV32": {
        "description": "The base price. It does not include any extra charges.",
        "type": "object",
        "properties": {
          "accommodation_currency": {
            "$ref": "#/components/schemas/monetaryAmount"
          },
          "booker_currency": {
            "$ref": "#/components/schemas/monetaryAmount"
          }
        }
      },
      "chargeMode": {
        "description": "The mode of this charge. Determines how the price is calculated.",
        "type": "string",
        "enum": [
          "calculated_amount",
          "incalculable",
          "percentage",
          "per_day",
          "per_night",
          "per_person_per_day",
          "per_person_per_night",
          "per_person_per_stay",
          "per_stay"
        ]
      },
      "chargePercentage": {
        "description": "The percentage of 'base' that this charge amounts to. Only applicable when 'mode' is 'percentage'.",
        "type": "number",
        "multipleOf": 0.01,
        "exclusiveMinimum": 0,
        "nullable": true
      },
      "unitAmountV32": {
        "description": "The price per unit for this charge. Only applicable when 'mode' is 'per_day', 'per_night', 'per_person_per_day', 'per_person_per_night', or 'per_person_per_stay'.",
        "type": "object",
        "properties": {
          "accommodation_currency": {
            "$ref": "#/components/schemas/monetaryAmount"
          },
          "booker_currency": {
            "$ref": "#/components/schemas/monetaryAmount"
          }
        },
        "nullable": true
      },
      "chargeBreakdownSearchV32": {
        "description": "The charge breakdown. Includes taxes and fees.",
        "type": "array",
        "items": {
          "title": "AccommodationsCharge",
          "description": "Detailed information about an individual charge, including where it is applied.",
          "type": "object",
          "properties": {
            "charge": {
              "$ref": "#/components/schemas/chargeTypeId"
            },
            "condition": {
              "$ref": "#/components/schemas/conditionId"
            },
            "included_in": {
              "title": "ChargeIncludedIn",
              "description": "Indicates where this charge is included",
              "type": "object",
              "properties": {
                "display": {
                  "$ref": "#/components/schemas/display"
                }
              }
            },
            "mode": {
              "$ref": "#/components/schemas/chargeMode"
            },
            "percentage": {
              "$ref": "#/components/schemas/chargePercentage"
            },
            "total_amount": {
              "$ref": "#/components/schemas/totalAmountV32"
            },
            "unit_amount": {
              "$ref": "#/components/schemas/unitAmountV32"
            }
          }
        }
      },
      "displayPriceV32": {
        "description": "The display price that must be shown to the traveller in accordance with local booker protection laws. This price includes the base accommodation cost and all charges that are legally required to be part of the displayed amount. Equivalent to base + charges where included_in.display=true.",
        "type": "object",
        "properties": {
          "accommodation_currency": {
            "$ref": "#/components/schemas/monetaryAmount"
          },
          "booker_currency": {
            "$ref": "#/components/schemas/monetaryAmount"
          }
        }
      },
      "totalPriceV32": {
        "description": "The total price. Includes all extra charges.",
        "type": "object",
        "properties": {
          "accommodation_currency": {
            "$ref": "#/components/schemas/monetaryAmount"
          },
          "booker_currency": {
            "$ref": "#/components/schemas/monetaryAmount"
          }
        }
      },
      "priceSearchV32": {
        "title": "AccommodationsSearchProductPrice",
        "description": "Contains the price components of an accommodation product. The 'base', 'display', 'chargeable_online' prices, and 'charges' are returned only when explicitly requested using extras=extra_charges.",
        "type": "object",
        "properties": {
          "base": {
            "$ref": "#/components/schemas/basePriceV32"
          },
          "charges": {
            "$ref": "#/components/schemas/chargeBreakdownSearchV32"
          },
          "display": {
            "$ref": "#/components/schemas/displayPriceV32"
          },
          "total": {
            "$ref": "#/components/schemas/totalPriceV32"
          }
        }
      },
      "roomIdString": {
        "description": "A unique identifier for a specific room within an accommodation property. You can retrieve the full list of available room IDs by calling [accommodations/details](/demand/docs/open-api/demand-api/accommodations/accommodations/details).",
        "type": "string"
      },
      "product": {
        "title": "AccommodationsSearchProductOutput",
        "description": "Details product information. It requires `{\"extras\":[\"products\"]}`.",
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/productId"
          },
          "bundle": {
            "$ref": "#/components/schemas/bundleId"
          },
          "children": {
            "description": "The ages of the children allocated to this product.",
            "type": "array",
            "items": {
              "type": "integer",
              "minimum": 0,
              "maximum": 17
            }
          },
          "deal": {
            "$ref": "#/components/schemas/dealV32"
          },
          "inventory": {
            "$ref": "#/components/schemas/inventoryOutput"
          },
          "number_available": {
            "description": "Number of rooms available at this price.",
            "type": "integer",
            "minimum": 1,
            "nullable": true
          },
          "number_of_adults": {
            "description": "The number of adults allocated to this product.",
            "type": "integer",
            "minimum": 1
          },
          "policies": {
            "$ref": "#/components/schemas/productPoliciesSearch"
          },
          "price": {
            "$ref": "#/components/schemas/priceSearchV32"
          },
          "room": {
            "$ref": "#/components/schemas/roomIdString"
          }
        }
      },
      "url": {
        "description": "Internet address for the property page on Booking.com.",
        "type": "string",
        "format": "url"
      },
      "accommodationSearch": {
        "title": "AccommodationsSearchDataOutput",
        "description": "",
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/accommodationId"
          },
          "commission": {
            "$ref": "#/components/schemas/commission"
          },
          "currency": {
            "$ref": "#/components/schemas/currency"
          },
          "deep_link_url": {
            "$ref": "#/components/schemas/deepLinkUrl"
          },
          "price": {
            "$ref": "#/components/schemas/PriceSummarySearchV32"
          },
          "products": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/product"
            }
          },
          "url": {
            "$ref": "#/components/schemas/url"
          }
        }
      },
      "smartSearchOutput": {
        "title": "AccommodationsSmartSearchOutput",
        "description": "Search results matching the traveller query and structured search criteria.",
        "type": "object",
        "properties": {
          "request_id": {
            "$ref": "#/components/schemas/requestId"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/accommodationSearch"
            }
          },
          "metadata": {
            "title": "MetadataOutput",
            "type": "object",
            "properties": {
              "next_page": {
                "description": "Indicates that more results are available. Use this pagination token to retrieve the next page of results (via parameter `page`).",
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          }
        }
      },
      "googlePlaceId": {
        "description": "A Google Place ID that uniquely identifies a place.",
        "type": "string",
        "example": "ChIJ61zLckBTekgR9ZGwIGR3kas"
      },
      "coordinates-2": {
        "title": "Coordinates",
        "type": "object",
        "properties": {
          "latitude": {
            "type": "number",
            "format": "double"
          },
          "longitude": {
            "type": "number",
            "format": "double"
          }
        }
      },
      "locationInput": {
        "title": "TransfersLocationInput",
        "description": "The pick-up or drop-off location. Specify exactly one of `airport`, `google_place_id` or `coordinates`.",
        "type": "object",
        "properties": {
          "airport": {
            "description": "The IATA airport code identifying the airport. Specifying a location by airport code is the only way to receive its `iata` code back in the response.",
            "$ref": "#/components/schemas/airportId"
          },
          "google_place_id": {
            "description": "The Google Place ID identifying the pick-up or drop-off location.",
            "$ref": "#/components/schemas/googlePlaceId"
          },
          "coordinates": {
            "description": "The geographic coordinates of the pick-up or drop-off location.",
            "$ref": "#/components/schemas/coordinates-2"
          }
        },
        "minProperties": 1,
        "maxProperties": 1,
        "additionalProperties": false
      },
      "datetimeInput": {
        "description": "The local pick-up date and time, in YYYY-MM-DDTHH:mm:ss format. Do not include a time zone or UTC offset. The API interprets the value using the local time zone of the pick-up location. The date and time must not be in the past. For a return journey, the return pick-up must be later than the outbound pick-up.",
        "type": "string",
        "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$",
        "example": "2026-11-12T10:00:00"
      },
      "pickupPointInput": {
        "title": "TransfersPickupPointInput",
        "description": "The pick-up location, date and time for a journey leg.",
        "type": "object",
        "properties": {
          "location": {
            "description": "The pick-up location.",
            "$ref": "#/components/schemas/locationInput"
          },
          "datetime": {
            "$ref": "#/components/schemas/datetimeInput"
          }
        },
        "required": [
          "location",
          "datetime"
        ]
      },
      "dropOffPointInput": {
        "title": "TransfersDropOffPointInput",
        "description": "The drop-off location for a journey leg.",
        "type": "object",
        "properties": {
          "location": {
            "description": "The drop-off location.",
            "$ref": "#/components/schemas/locationInput"
          }
        },
        "required": [
          "location"
        ]
      },
      "legInput": {
        "title": "TransfersLegInput",
        "description": "A single journey leg. Each leg must include its own pick-up location, pick-up date and time, and drop-off location.",
        "type": "object",
        "properties": {
          "pickup": {
            "description": "The pick-up details for this leg.",
            "$ref": "#/components/schemas/pickupPointInput"
          },
          "dropoff": {
            "description": "The drop-off details for this leg.",
            "$ref": "#/components/schemas/dropOffPointInput"
          }
        },
        "required": [
          "pickup",
          "dropoff"
        ]
      },
      "routeInput": {
        "title": "TransfersRouteInput",
        "description": "The route for the transfer journey. A route contains one leg for a one-way journey or two legs for a return journey. Every leg must fully specify its own pick-up and drop-off locations, including the return leg. For a return journey, the second leg normally uses the outbound locations in reverse.",
        "type": "object",
        "properties": {
          "legs": {
            "description": "The journey legs in travel order. The first leg is the outbound journey. For a return journey, add a second leg whose pick-up location must match the outbound drop-off location, and whose drop-off location must match the outbound pick-up location.",
            "type": "array",
            "minItems": 1,
            "maxItems": 2,
            "items": {
              "$ref": "#/components/schemas/legInput"
            }
          }
        },
        "required": [
          "legs"
        ]
      },
      "languageId": {
        "description": "A [IETF language tag code](https://en.wikipedia.org/wiki/IETF_language_tag) that uniquely identifies a supported human language or dialect. **Note:** Demand API only accepts lowercase for the language codes. Examples: \"nl\" for Dutch/Nederlands or \"en-us\" for English (US). To retrieve the full list of supported languages, call the `/common/languages` endpoint.",
        "type": "string",
        "pattern": "^[a-z]{2}(-[a-z]{2})?$",
        "example": "en-us"
      },
      "booker-2": {
        "description": "Defines the booker context.",
        "type": "object",
        "properties": {
          "country": {
            "description": "The booker's country. This is used to determine the most relevant price and to comply with applicable requirements for displaying taxes and fees.",
            "$ref": "#/components/schemas/countryId"
          }
        },
        "required": [
          "country"
        ]
      },
      "transfers_search_input": {
        "title": "TransfersSearchInput",
        "description": "The criteria used to search for available transfers.",
        "type": "object",
        "properties": {
          "route": {
            "$ref": "#/components/schemas/routeInput"
          },
          "passengers": {
            "description": "The number of passengers travelling, from 1 to 8. The response only includes vehicles with sufficient passenger capacity.",
            "type": "integer",
            "minimum": 1,
            "maximum": 8,
            "example": 3
          },
          "currency": {
            "description": "The currency used for prices in the response. The Transfers service API currently supports the following ISO 4217 currency codes: AED, AUD, CAD, CHF, CLP, CNY, CZK, DKK, EGP, EUR, GBP, HKD, HUF, IDR, ILS, INR, ISK, JPY, KRW, MAD, MXN, NOK, NZD, PLN, QAR, RON, RSD, SAR, SEK, SGD, THB, TRY, TWD, UAH, USD and ZAR. If you provide an unsupported currency, the API returns a 400 Bad Request response with an invalid_parameter error. The supported currencies may change over time, so do not hardcode this list in your integration.",
            "$ref": "#/components/schemas/currencyId"
          },
          "language": {
            "description": "The language used for the results and Booking.com redirect URL.",
            "$ref": "#/components/schemas/languageId",
            "default": "en-gb"
          },
          "booker": {
            "$ref": "#/components/schemas/booker-2"
          }
        },
        "required": [
          "route",
          "passengers",
          "currency",
          "booker"
        ]
      },
      "transfersLocationOutput": {
        "title": "TransfersLocationOutput",
        "description": "Details of a resolved pick-up or drop-off location, including its address and geographic coordinates.",
        "type": "object",
        "required": [
          "name",
          "address",
          "country",
          "coordinates"
        ],
        "properties": {
          "name": {
            "description": "The display name of the location.",
            "type": "string",
            "example": "Amsterdam Airport Schiphol (AMS)"
          },
          "address": {
            "description": "Full street address of the location, suitable for display.",
            "type": "string",
            "example": "Evert van de Beekstraat 202, 1118 CP Schiphol, Netherlands"
          },
          "city": {
            "description": "City where the location is situated. `null` when the resolved location carries no city, which happens for some airports.",
            "type": [
              "string",
              "null"
            ],
            "example": "Amsterdam"
          },
          "country": {
            "description": "Two-letter ISO 3166-1 alpha-2 country code.",
            "$ref": "#/components/schemas/countryId"
          },
          "coordinates": {
            "description": "Geographic coordinates of the location, for plotting on a map.",
            "$ref": "#/components/schemas/coordinates-2"
          },
          "iata": {
            "description": "IATA airport code of the location. Returned only when the request specified this location by airport code (`airport`). `null` when the location was specified by `google_place_id` or `coordinates`, even if it resolves to an airport.",
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[A-Z]{3}$",
            "example": "AMS"
          }
        }
      },
      "transfersPickupPointOutput": {
        "title": "TransfersPickupPointOutput",
        "description": "The pick-up location and scheduled date and time for a journey leg.",
        "type": "object",
        "required": [
          "datetime",
          "location"
        ],
        "properties": {
          "datetime": {
            "description": "The local pick-up date and time, in YYYY-MM-DDTHH:mm:ss format. The value does not include a time zone or UTC offset and is interpreted using the local time zone of the pick-up location.",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$",
            "example": "2026-11-12T10:00:00"
          },
          "location": {
            "description": "The pick-up location for this leg.",
            "$ref": "#/components/schemas/transfersLocationOutput"
          }
        }
      },
      "transfersDropoffPointOutput": {
        "title": "TransfersDropoffPointOutput",
        "description": "The drop-off location for a journey leg. The estimated drop-off time can be derived from the pick-up time and journey duration.",
        "type": "object",
        "required": [
          "location"
        ],
        "properties": {
          "location": {
            "description": "The drop-off location for this leg.",
            "$ref": "#/components/schemas/transfersLocationOutput"
          }
        }
      },
      "transfersLegOutput": {
        "title": "TransfersLegOutput",
        "description": "Describes a single leg of the journey, including pick-up and drop-off details, estimated duration, and distance.",
        "type": "object",
        "required": [
          "pickup",
          "dropoff"
        ],
        "properties": {
          "pickup": {
            "description": "The pick-up location and scheduled date and time for a journey leg.",
            "$ref": "#/components/schemas/transfersPickupPointOutput"
          },
          "dropoff": {
            "description": "The drop-off point for this leg.",
            "$ref": "#/components/schemas/transfersDropoffPointOutput"
          },
          "duration_minutes": {
            "description": "Estimated travel time for this leg, in minutes. Returns `null` when the transfer search does not provide a time estimate.",
            "type": [
              "integer",
              "null"
            ],
            "minimum": 1
          },
          "distance_km": {
            "description": "Estimated distance for this leg, in kilometres. Returns `null` when the transfer search does not provide a distance estimate.",
            "type": [
              "number",
              "null"
            ],
            "format": "double",
            "minimum": 0
          }
        }
      },
      "transfersRouteOutput": {
        "title": "TransfersRouteOutput",
        "description": "The route of the journey, containing its journey legs.",
        "type": "object",
        "required": [
          "legs"
        ],
        "properties": {
          "legs": {
            "description": "The journey legs in travel order. A one-way journey has one leg; a return journey has an outbound and return leg.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/transfersLegOutput"
            },
            "minItems": 1,
            "maxItems": 2
          }
        }
      },
      "transfersVehicleOption": {
        "title": "TransfersVehicleOption",
        "description": "An available vehicle option, including its capacity, price and Booking.com redirect URL. For a return journey, the price covers both legs.",
        "type": "object",
        "required": [
          "name",
          "max_passengers",
          "max_luggage",
          "price",
          "url"
        ],
        "properties": {
          "name": {
            "description": "The display name of the vehicle option.",
            "type": "string",
            "example": "Standard"
          },
          "max_passengers": {
            "description": "Maximum number of passengers this vehicle can accommodate.",
            "type": "integer",
            "minimum": 1
          },
          "max_luggage": {
            "description": "Maximum number of standard suitcases this vehicle can accommodate.",
            "type": "integer",
            "minimum": 0
          },
          "price": {
            "description": "The total price in the requested currency. For a return journey, the price covers both legs.",
            "$ref": "#/components/schemas/monetaryAmount",
            "example": 45.5
          },
          "url": {
            "description": "The Booking.com URL for this vehicle option. Redirect the traveller to this URL to complete the booking.",
            "type": "string",
            "format": "uri"
          }
        }
      },
      "transfersCancellationPolicy": {
        "title": "TransfersCancellationPolicy",
        "description": "The cancellation policy that applies to the available vehicle options. For a return journey, the policy applies to both legs.",
        "type": "object",
        "required": [
          "details",
          "type"
        ],
        "properties": {
          "details": {
            "description": "The free-cancellation conditions. For example: `duration='PT48H'` and `context=before_pickup` means: free cancellation is available up to 48 hrs before pick up. `null` when free cancellation is not available.",
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "context": {
                "description": "The context in which the cancellation policy applies.",
                "type": "string",
                "enum": [
                  "before_pickup"
                ]
              },
              "duration": {
                "description": "The free-cancellation window before pick-up, in ISO 8601 duration format. For example, `PT48H` means 48 hours before pick-up.",
                "type": "string",
                "pattern": "^P(?:\\d+Y)?(?:\\d+M)?(?:\\d+D)?(?:T(?:\\d+H)?(?:\\d+M)?(?:\\d+S)?)?$"
              }
            }
          },
          "type": {
            "description": "The cancellation policy type.",
            "type": "string",
            "enum": [
              "free_cancellation",
              "non_refundable"
            ]
          }
        }
      },
      "tripOffer": {
        "title": "TransfersTripOffer",
        "description": "The transfer details, including the route, available vehicle options, prices and cancellation policy.",
        "type": "object",
        "required": [
          "currency",
          "expires_at",
          "route",
          "vehicle_options",
          "cancellation_policy"
        ],
        "properties": {
          "currency": {
            "$ref": "#/components/schemas/currencyId"
          },
          "expires_at": {
            "description": "The date and time when the search results expire. After this time, prices and availability may change.",
            "type": "string",
            "format": "date-time",
            "example": "2026-11-11T10:30:00Z"
          },
          "route": {
            "description": "The route of the journey, including each journey leg.",
            "$ref": "#/components/schemas/transfersRouteOutput"
          },
          "vehicle_options": {
            "description": "Available vehicle types for the trip, each with pricing and a redirect URL. For round trips, the price is the total for both legs combined. Options are sorted by price, cheapest first.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/transfersVehicleOption"
            }
          },
          "cancellation_policy": {
            "$ref": "#/components/schemas/transfersCancellationPolicy"
          }
        }
      },
      "transfers_search_output": {
        "title": "TransfersSearchOutput",
        "description": "The available transfers for the requested route.",
        "type": "object",
        "required": [
          "request_id",
          "data"
        ],
        "properties": {
          "request_id": {
            "$ref": "#/components/schemas/requestId"
          },
          "data": {
            "$ref": "#/components/schemas/tripOffer"
          }
        }
      },
      "error_response": {
        "title": "ErrorResponse",
        "type": "object",
        "properties": {
          "request_id": {
            "$ref": "#/components/schemas/requestId"
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "message": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "message"
              ]
            }
          }
        },
        "required": [
          "request_id",
          "errors"
        ]
      }
    },
    "examples": {
      "oneWayAirportToCoordinates": {
        "summary": "One-way journey from an airport to coordinates",
        "value": {
          "route": {
            "legs": [
              {
                "pickup": {
                  "location": {
                    "airport": "AMS"
                  },
                  "datetime": "2026-11-12T10:00:00"
                },
                "dropoff": {
                  "location": {
                    "coordinates": {
                      "latitude": 52.3676,
                      "longitude": 4.9041
                    }
                  }
                }
              }
            ]
          },
          "passengers": 3,
          "currency": "EUR",
          "language": "en-gb",
          "booker": {
            "country": "ro"
          }
        }
      },
      "roundTripAirportToGooglePlace": {
        "summary": "Return journey between an airport and a Google Place (airport hotel)",
        "value": {
          "route": {
            "legs": [
              {
                "pickup": {
                  "location": {
                    "airport": "MAN"
                  },
                  "datetime": "2026-11-12T10:00:00"
                },
                "dropoff": {
                  "location": {
                    "google_place_id": "ChIJ61zLckBTekgR9ZGwIGR3kas"
                  }
                }
              },
              {
                "pickup": {
                  "location": {
                    "google_place_id": "ChIJ61zLckBTekgR9ZGwIGR3kas"
                  },
                  "datetime": "2026-11-16T16:15:00"
                },
                "dropoff": {
                  "location": {
                    "airport": "MAN"
                  }
                }
              }
            ]
          },
          "passengers": 2,
          "currency": "GBP",
          "language": "en-gb",
          "booker": {
            "country": "ro"
          }
        }
      },
      "oneWayCoordinatesToAirport": {
        "summary": "One-way journey from coordinates to an airport",
        "value": {
          "route": {
            "legs": [
              {
                "pickup": {
                  "location": {
                    "coordinates": {
                      "latitude": 53.4749,
                      "longitude": -2.2506
                    }
                  },
                  "datetime": "2026-11-02T05:45:00"
                },
                "dropoff": {
                  "location": {
                    "airport": "MAN"
                  }
                }
              }
            ]
          },
          "passengers": 1,
          "currency": "GBP",
          "language": "en-gb",
          "booker": {
            "country": "ro"
          }
        }
      },
      "oneWayGooglePlaceToGooglePlace": {
        "summary": "One-way journey between two Google Places",
        "value": {
          "route": {
            "legs": [
              {
                "pickup": {
                  "location": {
                    "google_place_id": "ChIJxZPY38BSekgR4KXk5UeCC4s"
                  },
                  "datetime": "2026-11-20T12:00:00"
                },
                "dropoff": {
                  "location": {
                    "google_place_id": "ChIJ61zLckBTekgR9ZGwIGR3kas"
                  }
                }
              }
            ]
          },
          "passengers": 4,
          "currency": "USD",
          "language": "en-us",
          "booker": {
            "country": "ro"
          }
        }
      },
      "roundTripCoordinatesToCoordinates": {
        "summary": "Return journey between coordinates",
        "value": {
          "route": {
            "legs": [
              {
                "pickup": {
                  "location": {
                    "coordinates": {
                      "latitude": 41.2974,
                      "longitude": 2.0833
                    }
                  },
                  "datetime": "2026-12-20T09:00:00"
                },
                "dropoff": {
                  "location": {
                    "coordinates": {
                      "latitude": 41.3874,
                      "longitude": 2.1686
                    }
                  }
                }
              },
              {
                "pickup": {
                  "location": {
                    "coordinates": {
                      "latitude": 41.3874,
                      "longitude": 2.1686
                    }
                  },
                  "datetime": "2026-12-27T11:30:00"
                },
                "dropoff": {
                  "location": {
                    "coordinates": {
                      "latitude": 41.2974,
                      "longitude": 2.0833
                    }
                  }
                }
              }
            ]
          },
          "passengers": 6,
          "currency": "EUR",
          "language": "es",
          "booker": {
            "country": "ro"
          }
        }
      },
      "oneWayResponse": {
        "summary": "One-way journey",
        "value": {
          "request_id": "01m2jeexpm1m2df7992n4xphwh",
          "data": {
            "currency": "EUR",
            "expires_at": "2026-11-11T12:50:29Z",
            "route": {
              "legs": [
                {
                  "pickup": {
                    "datetime": "2026-11-12T10:00:00",
                    "location": {
                      "name": "Schiphol Airport (AMS)",
                      "address": "Schiphol Airport (AMS), Evert van de Beekstraat 202, 1118 CP Schiphol, Netherlands",
                      "city": "Schiphol",
                      "country": "nl",
                      "coordinates": {
                        "latitude": 52.3064,
                        "longitude": 4.758056
                      },
                      "iata": "AMS"
                    }
                  },
                  "dropoff": {
                    "location": {
                      "name": "Mr. Visserplein",
                      "address": "Mr. Visserplein, 1011 MV Amsterdam, Netherlands",
                      "city": "Amsterdam",
                      "country": "nl",
                      "coordinates": {
                        "latitude": 52.367896,
                        "longitude": 4.905654
                      },
                      "iata": null
                    }
                  },
                  "duration_minutes": 25,
                  "distance_km": 17.5
                }
              ]
            },
            "vehicle_options": [
              {
                "name": "Standard",
                "max_passengers": 4,
                "max_luggage": 2,
                "price": 48.39,
                "url": "https://taxis.booking.com/search/?pickup=AMS&pickupType=airport&dropoff=52.3676,4.9041&dropoffType=address&date=2026-11-12&time=10%3A00&passengers=3&offerId=e3197739-6f49-4e58-a2b1-78047f7a6c64&currency=EUR&lang=en-gb&aid=111111&preSelectedResultReference=1"
              },
              {
                "name": "Executive",
                "max_passengers": 4,
                "max_luggage": 2,
                "price": 52.81,
                "url": "https://taxis.booking.com/search/?pickup=AMS&pickupType=airport&dropoff=52.3676,4.9041&dropoffType=address&date=2026-11-12&time=10%3A00&passengers=3&offerId=e3197739-6f49-4e58-a2b1-78047f7a6c64&currency=EUR&lang=en-gb&aid=111111&preSelectedResultReference=2"
              },
              {
                "name": "People Carrier",
                "max_passengers": 6,
                "max_luggage": 4,
                "price": 54.11,
                "url": "https://taxis.booking.com/search/?pickup=AMS&pickupType=airport&dropoff=52.3676,4.9041&dropoffType=address&date=2026-11-12&time=10%3A00&passengers=3&offerId=e3197739-6f49-4e58-a2b1-78047f7a6c64&currency=EUR&lang=en-gb&aid=111111&preSelectedResultReference=5"
              }
            ],
            "cancellation_policy": {
              "details": {
                "context": "before_pickup",
                "duration": "PT24H"
              },
              "type": "free_cancellation"
            }
          }
        }
      },
      "roundTripResponse": {
        "summary": "Return journey",
        "value": {
          "request_id": "01m2jekzc1y1nf2b37q3mg9tah",
          "data": {
            "currency": "GBP",
            "expires_at": "2026-11-11T12:53:13Z",
            "route": {
              "legs": [
                {
                  "pickup": {
                    "datetime": "2026-11-12T10:00:00",
                    "location": {
                      "name": "Manchester Airport (MAN)",
                      "address": "Manchester Airport (MAN), Manchester M90 1QX, UK",
                      "city": null,
                      "country": "gb",
                      "coordinates": {
                        "latitude": 53.3676,
                        "longitude": -2.27906
                      },
                      "iata": "MAN"
                    }
                  },
                  "dropoff": {
                    "location": {
                      "name": "DoubleTree by Hilton Manchester Airport",
                      "address": "DoubleTree by Hilton Manchester Airport, Outwood Ln, Manchester M90 4WP, UK",
                      "city": null,
                      "country": "gb",
                      "coordinates": {
                        "latitude": 53.366218,
                        "longitude": -2.270456
                      },
                      "iata": null
                    }
                  },
                  "duration_minutes": 9,
                  "distance_km": 3.2
                },
                {
                  "pickup": {
                    "datetime": "2026-11-16T16:15:00",
                    "location": {
                      "name": "DoubleTree by Hilton Manchester Airport",
                      "address": "DoubleTree by Hilton Manchester Airport, Outwood Ln, Manchester M90 4WP, UK",
                      "city": null,
                      "country": "gb",
                      "coordinates": {
                        "latitude": 53.366218,
                        "longitude": -2.270456
                      },
                      "iata": null
                    }
                  },
                  "dropoff": {
                    "location": {
                      "name": "Manchester Airport (MAN)",
                      "address": "Manchester Airport (MAN), Manchester M90 1QX, UK",
                      "city": null,
                      "country": "gb",
                      "coordinates": {
                        "latitude": 53.3676,
                        "longitude": -2.27906
                      },
                      "iata": "MAN"
                    }
                  },
                  "duration_minutes": 10,
                  "distance_km": 3.2
                }
              ]
            },
            "vehicle_options": [
              {
                "name": "Standard",
                "max_passengers": 4,
                "max_luggage": 2,
                "price": 60.14,
                "url": "https://taxis.booking.com/search/?pickup=MAN&pickupType=airport&dropoff=ChIJ61zLckBTekgR9ZGwIGR3kas&dropoffType=address&date=2026-11-12&time=10%3A00&returnDate=2026-11-16&returnTime=16%3A15&passengers=2&offerId=91eac5f2-ea2b-4e21-bd56-20d0a1492502&currency=GBP&lang=en-gb&aid=111111&preSelectedResultReference=1"
              },
              {
                "name": "Executive People Carrier",
                "max_passengers": 6,
                "max_luggage": 4,
                "price": 104.04,
                "url": "https://taxis.booking.com/search/?pickup=MAN&pickupType=airport&dropoff=ChIJ61zLckBTekgR9ZGwIGR3kas&dropoffType=address&date=2026-11-12&time=10%3A00&returnDate=2026-11-16&returnTime=16%3A15&passengers=2&offerId=91eac5f2-ea2b-4e21-bd56-20d0a1492502&currency=GBP&lang=en-gb&aid=111111&preSelectedResultReference=3"
              },
              {
                "name": "Large People Carrier",
                "max_passengers": 8,
                "max_luggage": 6,
                "price": 104.69,
                "url": "https://taxis.booking.com/search/?pickup=MAN&pickupType=airport&dropoff=ChIJ61zLckBTekgR9ZGwIGR3kas&dropoffType=address&date=2026-11-12&time=10%3A00&returnDate=2026-11-16&returnTime=16%3A15&passengers=2&offerId=91eac5f2-ea2b-4e21-bd56-20d0a1492502&currency=GBP&lang=en-gb&aid=111111&preSelectedResultReference=6"
              }
            ],
            "cancellation_policy": {
              "details": {
                "context": "before_pickup",
                "duration": "PT24H"
              },
              "type": "free_cancellation"
            }
          }
        }
      }
    }
  }
}