openapi: 3.1.0
info:
  title: Holiday Taxis Web Services 2.0
  version: 2.0-base
  summary: 'Primary Holiday Taxis API for searching products, and creating and managing bookings'
  contact:
    name: Holiday Taxis Group
    email: salessupport@holidaytaxis.com
  description: |-
    This document gives a detailed description of the Holiday Taxis Web Services 2.0 API.
    It is aimed at developers and technical personnel who will be integrating the API.
    
    Holiday Taxis Web Services 2.0 is a JSON and XML API for travel agents and partners to
    search for products, and create and manage bookings.
    
    The latest version of this documentation is available from [the Holiday Taxis Developer Portal](https://developer.holidaytaxis.com/)
    which also includes [additional guidance on using the API](https://developer.holidaytaxis.com/ws2/overview.html).
    
    For support enquiries, and information on how to set up a test account, please email us on
    [salessupport@holidaytaxis.com](mailto:salessupport@holidaytaxis.com)
security:
  - "API_KEY": []
tags:
  - name: search
  - name: bookings
  - name: metadata
servers:
  - url: 'https://connect.holidaytaxis.com'
    description: Production
  - url: 'https://connect.htxstaging.com'
    description: Staging (Integration Testing)
paths:
  '/products/search/from/{fromCodeType}/{fromCode}/to/{toCodeType}/{toCode}/travelling/{outboundDate}/adults/{adults}/children/{children}/infants/{infants}':
    parameters:
      - $ref: '#/components/parameters/api-key-header'
      - $ref: '#/components/parameters/format-header'
      - $ref: '#/components/parameters/language-header'
      - $ref: '#/components/parameters/number-formatting-header'
      - in: path
        name: fromCodeType
        required: true
        schema:
          $ref: '#/components/schemas/location-code-type'
        description: The type of code being used to describe the journey start point
      - in: path
        name: fromCode
        required: true
        schema:
          $ref: '#/components/schemas/location-code'
        description: The code identifying the journey start point
      - in: path
        name: toCodeType
        required: true
        schema:
          $ref: '#/components/schemas/location-code-type'
        description: The type of code being used to describe the journey end point
      - in: path
        name: toCode
        required: true
        schema:
          $ref: '#/components/schemas/location-code'
        description: The code identifying the journey end point
      - in: path
        name: outboundDate
        required: true
        schema:
          $ref: '#/components/schemas/local-date-time'
          type: string
        description: |-
          The date/time the passenger is travelling

          For outbound transfers (from codes IATA, AIR, PRT, STN, BUS), the travelling time passed must be the arrival time of the flight (or ship, train or bus) at the passenger's pick-up location.

          For inbound transfers (from codes GIATA, GEO, TTI, IFF, ATLAS) the travelling time passed must be the departure time of the flight (or ship, train or bus) at the passenger's drop-off location.
      - in: path
        name: adults
        required: true
        schema:
          type: integer
          minimum: 1
        description: The number of adult passengers (age 12+) travelling
      - in: path
        name: children
        required: true
        schema:
          type: integer
          minimum: 0
        description: The number of child passengers (age 3 to 11) travelling
      - in: path
        name: infants
        required: true
        schema:
          type: integer
          minimum: 0
        description: The number of infant passengers (age 0 to 2) travelling
    get:
      operationId: OneWaySearch
      summary: Search for products in a single direction
      tags:
        - search
      responses:
        '200':
          $ref: '#/components/responses/successful-search-response'
        '207':
          $ref: '#/components/responses/partial-search-response'
        '400':
          $ref: '#/components/responses/error-response'
        '401':
          $ref: '#/components/responses/error-response'
        '500':
          $ref: '#/components/responses/error-response'
      description: |-
        The product search endpoint is the starting point for most integrations. A search is performed using a GET request, with the search parameters in the URL.

        By specifying only a "travelling" date, search results for a single direction will be returned; if a two-way journey is required, include the "returning" date (documented as a separate operation below).

        If successful, the response will include the product availability and prices.

        *Important:* ProductIDs are unique for each product, supplier & travel date combination. They are related to the contracts we have with the supplier and change from one supplier to the next. This means the same vehicle may have two different ProductIDs for the outbound and inbound transfer.

        Examples:

        * Pick up from airport, specified by IATA code, drop off calculated from longitude and latitude: `GET /products/search/from/IATA/ALC/to/GEO/38.536912,-0.119716/travelling/2020-08-20T14:00:00/adults/2/children/0/infants/0`
        * If "children" or "infants" is not specified, 0 is assumed: `GET /products/search/from/IATA/ALC/to/GEO/38.536912,-0.119716/travelling/2020-08-20T14:00:00/adults/2`
        * Pick up from hotel, specified by GIATA identifier, drop off at airport: `GET /products/search/from/GIATA/263931/to/IATA/BOS/travelling/2020-06-07T12:00:00/adults/2`
        * Pick up from airport, drop off at cruise port, specified by Holiday Taxis ID: `GET /products/search/from/IATA/BCN/to/PRT/353/travelling/2020-06-24T12:00:00/adults/2`
  '/products/search/from/{fromCodeType}/{fromCode}/to/{toCodeType}/{toCode}/travelling/{outboundDate}/returning/{inboundDate}/adults/{adults}/children/{children}/infants/{infants}':
    parameters:
      - $ref: '#/components/parameters/api-key-header'
      - $ref: '#/components/parameters/format-header'
      - $ref: '#/components/parameters/language-header'
      - $ref: '#/components/parameters/number-formatting-header'
      - in: path
        name: fromCodeType
        required: true
        schema:
          $ref: '#/components/schemas/location-code-type'
        description: The type of code being used to describe the first journey start point and second journey end point
      - in: path
        name: fromCode
        required: true
        schema:
          $ref: '#/components/schemas/location-code'
        description: The code identifying the first journey start point and second journey end point
      - in: path
        name: toCodeType
        required: true
        schema:
          $ref: '#/components/schemas/location-code-type'
        description: The type of code being used to describe the first journey end point and second journey start point
      - in: path
        name: toCode
        required: true
        schema:
          $ref: '#/components/schemas/location-code'
        description: The code identifying the first journey end point and second journey start point
      - in: path
        name: outboundDate
        required: true
        schema:
          $ref: '#/components/schemas/local-date-time'
        description: |-
          The date/time the passenger is travelling for the first journey

          For outbound transfers (from codes IATA, AIR, PRT, STN, BUS), the travelling time passed must be the arrival time of the flight (or ship, train or bus) at the passenger's pick-up location.

          For inbound transfers (from codes GIATA, GEO, TTI, IFF, ATLAS) the travelling time passed must be the departure time of the flight (or ship, train or bus) at the passenger's drop-off location.
      - in: path
        name: inboundDate
        required: true
        schema:
          $ref: '#/components/schemas/local-date-time'
        description: |-
          The date/time the passenger is travelling for the second journey

          For outbound transfers (to codes IATA, AIR, PRT, STN, BUS), the travelling time passed must be the arrival time of the flight (or ship, train or bus) at the passenger's pick-up location.
                  
          For inbound transfers (to codes GIATA, GEO, TTI, IFF, ATLAS) the travelling time passed must be the departure time of the flight (or ship, train or bus) at the passenger's drop-off location.
      - in: path
        name: adults
        required: true
        schema:
          type: integer
          minimum: 1
        description: The number of adult passengers (age 12+) travelling
      - in: path
        name: children
        required: true
        schema:
          type: integer
          minimum: 0
        description: The number of child passengers (age 3 to 11) travelling
      - in: path
        name: infants
        required: true
        schema:
          type: integer
          minimum: 0
        description: The number of infant passengers (age 0 to 2) travelling
    get:
      operationId: ReturnSearch
      summary: Search for products for a return booking
      tags:
        - search
      responses:
        '200':
          $ref: '#/components/responses/successful-search-response'
        '207':
          $ref: '#/components/responses/partial-search-response'
        '400':
          $ref: '#/components/responses/error-response'
        '401':
          $ref: '#/components/responses/error-response'
        '500':
          $ref: '#/components/responses/error-response'
      description: |-
        The product search endpoint is the starting point for most integrations. A search is performed using a GET request, with the search parameters in the URL.

        By specifying both "travelling" and "returning" dates, two sets of results will be returned, for the same route but in opposite directions. To search for just a single transfer, omit the "travelling" date (documented as a separate operation above).

        If successful, the response will include the product availability and prices.

        *Important:* ProductIDs are unique for each product, supplier & travel date combination. They are related to the contracts we have with the supplier and change from one supplier to the next. This means the same vehicle may have two different ProductIDs for the outbound and inbound transfer.

        Examples:

        * Pick up from airport, specified by IATA code, drop off calculated from longitude and latitude; then the reverse journey 1 week later: `GET /products/search/from/IATA/ALC/to/GEO/38.536912,-0.119716/travelling/2020-08-20T14:00:00/returning/2020-08-27T14:00:00/adults/2/children/0/infants/0`
        * If "children" or "infants" is not specified, 0 is assumed: `GET /products/search/from/IATA/ALC/to/GEO/38.536912,-0.119716/travelling/2020-08-20T14:00:00/returning/2020-08-27T14:00:00/adults/2`
        * Pick up from hotel, specified by GIATA identifier, drop off at airport: `GET /products/search/from/GIATA/263931/to/IATA/BOS/travelling/2020-08-20T14:00:00/returning/2020-08-27T14:00:00/adults/2`
        * Pick up from airport, drop off at cruise port, specified by Holiday Taxis ID: `GET /products/search/from/IATA/BCN/to/PRT/353/travelling/2020-08-20T14:00:00/returning/2020-08-27T14:00:00/adults/2`
  /bookings/create:
    parameters:
      - $ref: '#/components/parameters/api-key-header'
      - $ref: '#/components/parameters/agent-ref-header'
      - $ref: '#/components/parameters/format-header'
      - $ref: '#/components/parameters/language-header'
      - $ref: '#/components/parameters/number-formatting-header'
    post:
      operationId: CreateBooking
      summary: Create a new booking
      description: |-
        Create a new booking in the Holiday Taxis system.

        The request includes blocks relating to customer / passenger contact details; pricing; type of transfer; 
        start and endpoints of the transfer; specifics of the customer's flight, cruise, train, bus, and accommodation; 
        any required optional extras; and payment details if applicable.

        The Create Booking operation returns the same response format as the Get Booking operation.
      tags:
        - bookings
      responses:
        '200':
          $ref: '#/components/responses/booking-details-response'
        '400':
          $ref: '#/components/responses/error-response'
        '401':
          $ref: '#/components/responses/error-response'
        '500':
          $ref: '#/components/responses/error-response'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                request:
                  type: object
                  required:
                    - general
                    - contact
                    - pricing
                    - transfers
                  properties:
                    general:
                      $ref: '#/components/schemas/booking-request-general'
                    contact:
                      $ref: '#/components/schemas/booking-contact'
                    pricing:
                      type: object
                      required:
                        - saleprice
                        - currency
                      description: |-
                        The pricing block contains overall pricing for the booking. This is the sum of the pricing for each individual transfer in the 'transfers'
                        block.
                      properties:
                        saleprice:
                          $ref: '#/components/schemas/fixed-precision-price'
                          description: The final sale price for the entire booking - used to confirm the agent/affiliate is expecting to pay the correct amount.
                        currency:
                          type: string
                          minLength: 3
                          maxLength: 3
                          description: 'The currency of all prices in this request. This is the currency the booking will be charged in, as an ISO 4217 currency code. The available options should be agreed in advance with Holiday Taxis.'
                          example: GBP
                    transfers:
                      type: array
                      description: 'Contains details of each transfer required - normally one object for a one-way booking, or two for a return.'
                      minItems: 1
                      items:
                        type: object
                        additionalProperties: false
                        properties:
                          productid:
                            description: The unique identifier for this product. This is used to identify the route and vehicle provided by a supplier.
                            type: integer
                          bookingtypeid:
                            type: integer
                            description: 'The direction of travel. As our products can travel in either direction, this field dictates which direction the transfer is travelling. Booking types 2 and 7 are outbound (e.g. airport to hotel); booking types 3 and 8 are inbound (e.g. hotel to airport).'
                            enum:
                              - 2
                              - 3
                              - 7
                              - 8
                          saleprice:
                            $ref: '#/components/schemas/fixed-precision-price'
                            description: The total price of the transfer including extras.
                          noadults:
                            type: integer
                            description: The number of adult passengers (age 12+) travelling
                            minimum: 1
                          nochildren:
                            type: integer
                            description: The number of child passengers (age 3 to 11) travelling
                            minimum: 0
                          noinfants:
                            type: integer
                            description: The number of infant passengers (age 0 to 2) travelling
                            minimum: 0
                          novehicles:
                            type: integer
                            minimum: 1
                            description: The number of vehicles required. This field is required for private transfers, but should be omitted for shuttle (per person) transfers.
                          fromdetails:
                            $ref: '#/components/schemas/pickup-location-details'
                          todetails:
                            $ref: '#/components/schemas/dropoff-location-details'
                          extras:
                            $ref: '#/components/schemas/booking-request-extra-list'
                        required:
                          - productid
                          - bookingtypeid
                          - saleprice
                          - noadults
                          - nochildren
                          - noinfants
                          - fromdetails
                          - todetails
                    payment:
                      $ref: "#/components/schemas/booking-request-payment"
              required:
                - request
            examples:
              'Airport to Hotel (GEO), Return':
                value:
                  request:
                    general:
                      orderreference: null
                      paymenttype: CARD
                    contact:
                      email: john.smith@example.com
                      title: Mr
                      firstname: John
                      lastname: Smith
                      telephone: +44 123456789
                    pricing:
                      saleprice: '88.36'
                      currency: GBP
                    transfers:
                      - productid: 480735
                        bookingtypeid: 2
                        saleprice: '44.18'
                        noadults: 2
                        nochildren: 1
                        noinfants: 0
                        fromdetails:
                          flight:
                            arrivaldatetime: '2015-09-21T05:00:00'
                            flightnumber: ABC123
                            terminal: Terminal 1
                            originairport: LGW
                        todetails:
                          accommodation:
                            name: My Hotel
                            addressline1: Address Line 1
                            addressline2: Address Line 2
                            addressline3: Address Line 3
                            tel: null
                        extras:
                          - typecode: CHS
                            units: 1
                      - productid: 480735
                        bookingtypeid: 3
                        saleprice: '44.18'
                        noadults: 2
                        nochildren: 1
                        noinfants: 0
                        fromdetails:
                          accommodation:
                            name: My Hotel
                            addressline1: Address Line 1
                            addressline2: Address Line 2
                            addressline3: Address Line 3
                            tel: null
                        todetails:
                          flight:
                            departuredatetime: '2015-09-28T15:00:00'
                            flightnumber: ABC123
                            terminal: Terminal 1
                            destinationairport: LGW
                        extras:
                          - typecode: CHS
                            units: 1
                    payment:
                      title: Mr
                      forename: John
                      surname: Smith
                      addressline1: 20 North Rd
                      addressline2: 'Brighton, East Sussex'
                      postcode: BN1 3B1
                      card:
                        cardtype: visa
                        cardnumber: '4594356312598163'
                        cv2: '000'
                        nameoncard: Mr J Smith
                        expirydate: 01-2025
                      auth3ds:
                        version: 2.1.0
                        eci: '05'
                        ucaf: QWxsVXIzZHNSQmVsb25nVG9Vcwo=
                        transactionid: 97daed6f-6cee-4548-8401-132505e4d37b
              'Hotel (GIATA) to Port, Single, custom pickup time at passenger''s risk':
                value:
                  request:
                    general:
                      orderreference: null
                      paymenttype: INV
                    contact:
                      email: john.smith@example.com
                      title: Mr
                      firstname: John
                      lastname: Smith
                      telephone: +44 123456789
                    pricing:
                      saleprice: '44.40'
                      currency: GBP
                    transfers:
                      - productid: 664720
                        bookingtypeid: 3
                        saleprice: '44.40'
                        noadults: 1
                        nochildren: 1
                        noinfants: 1
                        fromdetails:
                          accommodation:
                            pickupdatetime: '2018-08-25T08:00:00'
                            codetype: GIATA
                            code: 267097
                        todetails:
                          cruise:
                            departuredatetime: '2018-08-25T12:00:00'
                            shipname: Ship Name
                            cruiseline: Cruise Line Test
                            cruiseterminal: Terminal Test
              'Airport (IATA) to Port, Return':
                value:
                  request:
                    general:
                      orderreference: null
                      paymenttype: INV
                    contact:
                      email: john.smith@example.com
                      title: Mr
                      firstname: John
                      lastname: Smith
                      telephone: +44 123456789
                    pricing:
                      saleprice: '44.40'
                      currency: GBP
                    transfers:
                      - productid: 664720
                        bookingtypeid: 2
                        saleprice: '44.40'
                        noadults: 1
                        nochildren: 1
                        noinfants: 1
                        fromdetails:
                          flight:
                            arrivaldatetime: '2021-08-24T22:00:00'
                            flightnumber: ABC123
                            terminal: Terminal 1
                            originairport: LGW
                        todetails:
                          cruise:
                            departuredatetime: '2021-08-25T12:00:00'
                            shipname: Ship Name
                            cruiseline: Cruise Line Test
                            cruiseterminal: Terminal Test
                      - productid: 664720
                        bookingtypeid: 3
                        saleprice: '44.40'
                        noadults: 1
                        nochildren: 1
                        noinfants: 1
                        fromdetails:
                          cruise:
                            arrivaldatetime: '2021-08-28T12:00:00'
                            shipname: Ship Name
                            cruiseline: Cruise Line Test
                            cruiseterminal: Terminal Test
                        todetails:
                          flight:
                            departuredatetime: '2021-08-28T22:00:00'
                            flightnumber: ABC123
                            terminal: Terminal 1
                            destinationairport: LGW
  '/bookings/{bookingRef}':
    parameters:
      - $ref: '#/components/parameters/api-key-header'
      - $ref: '#/components/parameters/format-header'
      - $ref: '#/components/parameters/language-header'
      - $ref: '#/components/parameters/number-formatting-header'
      - in: path
        name: bookingRef
        required: true
        schema:
          type: string
    get:
      operationId: GetBooking
      summary: Retrieve a single booking by Booking Reference
      tags:
        - bookings
      responses:
        '200':
          $ref: '#/components/responses/booking-details-response'
        '400':
          $ref: '#/components/responses/error-response'
        '401':
          $ref: '#/components/responses/error-response'
        '500':
          $ref: '#/components/responses/error-response'
      description: |-
        Retrieve an existing booking from the Holiday Taxis system.

        This includes details of the payment, passenger details, pricing, product type, 
        and the start &amp; end points of each transfer journey on this booking.
  '/bookings/amend/{bookingRef}':
    parameters:
      - $ref: '#/components/parameters/api-key-header'
      - $ref: '#/components/parameters/format-header'
      - $ref: '#/components/parameters/language-header'
      - $ref: '#/components/parameters/number-formatting-header'
      - in: path
        name: bookingRef
        required: true
        schema:
          type: string
    post:
      operationId: AmendBooking
      summary: Request amendments to an existing booking
      tags:
        - bookings
      responses:
        '200':
          $ref: '#/components/responses/booking-details-response'
        '400':
          $ref: '#/components/responses/error-response'
        '401':
          $ref: '#/components/responses/error-response'
        '500':
          $ref: '#/components/responses/error-response'
      requestBody:
        content:
          application/json; charset=utf-8:
            schema:
              type: object
              properties:
                request:
                  type: object
                  required:
                    - note
                  properties:
                    contact:
                      type: object
                      description: The contact details for the lead passenger to be updated.
                      additionalProperties: false
                      minProperties: 1
                      properties:
                        title:
                          type: string
                          description: The title or salutation of the lead passenger.
                        firstname:
                          type: string
                          description: The forename of the lead passenger.
                        lastname:
                          type: string
                          description: The last name of the lead passenger.
                        email:
                          type: string
                          description: The email address of the lead passenger.
                        telephone:
                          type: string
                          description: The telephone number of the lead passenger.
                    transfers:
                      type: array
                      description: A list containing details for each transfer (journey) on the booking which you want to modify.
                      items:
                        type: object
                        properties:
                          transferid:
                            type: string
                            description: The Holiday Taxis internal identifier for the journey within the booking. This can be found in the Create Booking or Get Booking response.
                          fromdetails:
                            type: object
                            description: Information regarding the start point (pickup) of the transfer. The details to include depend on the type of pick-up location.
                            properties:
                              flight:
                                type: object
                                description: Flight details - required when journey starts at an airport
                                properties:
                                  flightnumber:
                                    type: string
                                    description: The flight number relating to the flight the passenger is arriving on.
                                  terminal:
                                    type:
                                      - string
                                      - 'null'
                                    description: The terminal in which the passengers flight is arriving.
                                  arrivaldatetime:
                                    $ref: '#/components/schemas/local-date-time'
                                    description: The time at which the flight is arriving. (See 'local-date-time' type.)
                                  originairport:
                                    type: string
                                    description: The airport from which the flight is leaving (3-letter IATA code).
                                    minLength: 3
                                    maxLength: 3
                              accommodation:
                                type: object
                                description: Accommodation / address details - required when journey starts at a hotel or address
                                properties:
                                  name:
                                    type: string
                                    description: The name of the passenger's location (typically their accommodation)
                                  addressline1:
                                    type: string
                                    description: The 1st line of the address for the passenger's location (typically their accommodation)
                                  addressline2:
                                    type: string
                                    description: The 2nd line of the address for the passenger's location (typically their accommodation)
                                  addressline3:
                                    type: string
                                    description: The 3rd line of the address for the passenger's location (typically their accommodation)
                                  tel:
                                    type:
                                      - string
                                      - 'null'
                                    description: The telephone number for the passenger's location (typically their accommodation)
                                  recalculatepickupdatetime:
                                    type: integer
                                    enum:
                                      - 0
                                      - 1
                                    description: Set this to 1 when amending the 'departuredatetime' to acknowledge that the system should automatically calculate an appropriate new pick-up time, discarding any custom pickupdatetime requested previously.
                                  pickupdatetime:
                                    $ref: '#/components/schemas/local-date-time'
                                    description: 'A custom time at which the passenger wishes to be picked up. See [Pickup Date/Time Calculation](https://developer.holidaytaxis.com/ws2/overview.html#pickup-times) for important information.'
                              cruise:
                                type: object
                                description: Cruise ship details - required when journey starts at a port
                                properties:
                                  shipname:
                                    type: string
                                    description: The name of the ship the passenger is arriving on.
                                  cruiseline:
                                    type: string
                                    description: The cruise line of the ship the passenger is arriving on.
                                  cruiseterminal:
                                    type: string
                                    description: The terminal at the cruise port from which the ship is arriving.
                                  arrivaldatetime:
                                    $ref: '#/components/schemas/local-date-time'
                                    description: The time at which the cruise ship is arriving. (See 'local-date-time' type.)
                              train:
                                type: object
                                description: Train details - required when journey starts at a train station
                                properties:
                                  trainnumber:
                                    type: string
                                    description: The number of the train the passenger is arriving on.
                                  arrivaldatetime:
                                    $ref: '#/components/schemas/local-date-time'
                                    description: The time at which the train is arriving. (See 'local-date-time' type.)
                              bus:
                                type: object
                                description: Bus details - required when journey starts at a bus station
                                properties:
                                  trainnumber:
                                    type: string
                                    description: The number of the bus the passenger is arriving on.
                                  arrivaldatetime:
                                    $ref: '#/components/schemas/local-date-time'
                                    description: The time at which the bus is arriving. (See 'local-date-time' type.)
                          todetails:
                            type: object
                            description: Information regarding end point (drop off) of the transfer. The details to include depend on the type of drop-off location.
                            properties:
                              flight:
                                type: object
                                description: Flight details - required when journey ends at an airport
                                properties:
                                  flightnumber:
                                    type: string
                                    description: The flight number relating to the flight the passenger is arriving on.
                                  terminal:
                                    type:
                                      - string
                                      - 'null'
                                    description: The terminal in which the passengers flight is arriving.
                                  departuredatetime:
                                    $ref: '#/components/schemas/local-date-time'
                                    description: The time at which the flight is leaving. (See 'local-date-time' type.)
                                  destinationairport:
                                    type: string
                                    description: The airport at which the flight is arriving (3-letter IATA code).
                                    minLength: 3
                                    maxLength: 3
                              accommodation:
                                type: object
                                description: 'Accommodation / address details - required when journey ends at a hotel or address'
                                properties:
                                  name:
                                    type: string
                                    description: The name of the passenger's location (typically their accommodation)
                                  addressline1:
                                    type: string
                                    description: The 1st line of the address for the passenger's location (typically their accommodation)
                                  addressline2:
                                    type: string
                                    description: The 2nd line of the address for the passenger's location (typically their accommodation)
                                  addressline3:
                                    type: string
                                    description: The 3rd line of the address for the passenger's location (typically their accommodation)
                                  tel:
                                    type:
                                      - string
                                      - 'null'
                                    description: The telephone number for the passenger's location (typically their accommodation)
                                  departuredatetime:
                                    $ref: '#/components/schemas/local-date-time'
                                    description: The time at which the cruise ship is leaving. (See 'local-date-time' type.)
                              cruise:
                                type: object
                                description: Cruise ship details - required when journey ends at a port
                                properties:
                                  shipname:
                                    type: string
                                    description: The name of the ship the passenger is arriving on.
                                  cruiseline:
                                    type: string
                                    description: The cruise line of the ship the passenger is arriving on.
                                  cruiseterminal:
                                    type: string
                                    description: The terminal at the cruise port from which the ship is arriving.
                                  departuredatetime:
                                    $ref: '#/components/schemas/local-date-time'
                                    description: The time at which the cruise ship is leaving. (See 'local-date-time' type.)
                              train:
                                type: object
                                description: Train details - required when journey ends at a train station
                                properties:
                                  trainnumber:
                                    type: string
                                    description: The number of the train the passenger is arriving on.
                                  departuredatetime:
                                    $ref: '#/components/schemas/local-date-time'
                                    description: The time at which the train is leaving. (See 'local-date-time' type.)
                              bus:
                                type: object
                                description: Bus details - required when journey ends at a bus station
                                properties:
                                  trainnumber:
                                    type: string
                                    description: The number of the bus the passenger is arriving on.
                                  departuredatetime:
                                    $ref: '#/components/schemas/local-date-time'
                                    description: The time at which the bus is leaving. (See 'local-date-time' type.)
                          note:
                            type: string
                            description: |-
                              A note to be added to the booking to inform Holiday Taxis of the amendment. 
                              This should detail the exact changes being made to this journey.
                        required:
                          - transferid
                          - note
                    note:
                      type: string
                      description: |-
                        A note to be added to the booking to inform Holiday Taxis of the amendment. 
                        This should detail the exact changes being made.
              required:
                - request
            examples:
              Updating All Details on Return Booking:
                value:
                  request:
                    note: Updating Passenger Details
                    contact:
                      title: Mr.
                      firstname: John
                      lastname: Smith
                      email: john.smith@example.com
                      telephone: +44 123456789
                    transfers:
                      - transferid: '8253699'
                        fromdetails:
                          flight:
                            flightnumber: HTX123
                            originairport: LGW
                            arrivaldatetime: '2022-05-05T12:10:00'
                        todetails:
                          accommodation:
                            name: HTX Hotel
                        note: Updating Flight and Accommodation Details
                      - transferid: '8253700'
                        fromdetails:
                          accommodation:
                            name: HTX Hotel
                            pickupdatetime: '2022-05-10T09:40:00'
                        todetails:
                          flight:
                            flightnumber: HTX123
                            destinationairport: LGW
                            departuredatetime: '2022-05-10T12:40:00'
                        note: Updating Flight and Accommodation Details
      description: |-
        Amend an existing booking in the Holiday Taxis system.

        Booking amendments are restricted to elements which will not affect the product or price of the booking, therefore changes to passenger/vehicle numbers and vehicle types cannot be amended. You will be able to update the passenger's name and contact details, and details of inbound and onward travel (such as flight numbers and travel dates). However, if the new flight date/time for either leg of the transfer has a different price to the original then the amendment will not be possible.

        The request structure is mostly the same as the Create Booking request, except that most details can be omitted if you do not wish to modify them, with certain limitations:

         - The request must include either a 'contact' block, or a 'transfers' block with at least one transfer, or both
         - If present, the 'contact' block must have at least one field populated
         - If present, each object in the 'transfers' array must have one or both of 'fromdetails' and 'todetails'
         - If you provide a 'departuredatetime', you must also indicate that you are OK for the pick-up time to be recalculated using the 'recalculatepickupdatetime' field,
           unless you also provide a custom 'pickupdatetime'. See [Pickup Date/Time Calculation](https://developer.holidaytaxis.com/ws2/overview.html#pickup-times) for important information.
         
        The Amend Booking operation returns the same response format as the Get Booking operation, representing the new details of the booking after the amendment was applied.
  '/bookings/cancel/{bookingRef}':
    parameters:
      - $ref: '#/components/parameters/api-key-header'
      - $ref: '#/components/parameters/format-header'
      - $ref: '#/components/parameters/language-header'
      - $ref: '#/components/parameters/number-formatting-header'
      - in: path
        name: bookingRef
        required: true
        schema:
          type: string
        description: The Holiday Taxis booking reference of the booking to be cancelled.
    delete:
      operationId: CancelBooking
      summary: Cancel all legs of a booking
      tags:
        - bookings
      responses:
        '200':
          $ref: '#/components/responses/booking-details-response'
        '207':
          description: Partial success - not all journeys were cancelled successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  errors:
                    type: object
                    description: Error messages describing which journeys on the booking failed to cancel
                    additionalProperties:
                      $ref: '#/components/schemas/error-message'
                  booking:
                    $ref: '#/components/schemas/booking-details'
                required:
                  - errors
                  - booking
        '400':
          $ref: '#/components/responses/error-response'
        '401':
          $ref: '#/components/responses/error-response'
        '500':
          $ref: '#/components/responses/error-response'
      description: |-
        Cancel a complete booking in the Holiday Taxis system.

        This path format will cancel all journeys on the booking; if you wish to cancel a single journey, 
        use the path format which also includes "transferId".
  '/bookings/cancel/{bookingRef}/{transferId}':
    parameters:
      - $ref: '#/components/parameters/api-key-header'
      - $ref: '#/components/parameters/format-header'
      - $ref: '#/components/parameters/language-header'
      - $ref: '#/components/parameters/number-formatting-header'
      - in: path
        name: bookingRef
        required: true
        schema:
          type: string
        description: The Holiday Taxis booking reference of the booking to be cancelled.
      - name: transferId
        in: path
        required: true
        schema:
          type: string
        description: 'The Holiday Taxis internal identifier for the journey to be cancelled. This can be found in the response when the booking was created, or by making a Get Booking request.'
    delete:
      operationId: CancelBookingLeg
      summary: Cancel a single leg of a booking
      tags:
        - bookings
      responses:
        '200':
          $ref: '#/components/responses/booking-details-response'
        '400':
          $ref: '#/components/responses/error-response'
        '401':
          $ref: '#/components/responses/error-response'
        '500':
          $ref: '#/components/responses/error-response'
      description: |-
        Cancel a single journey within a booking in the Holiday Taxis system.

        If you wish to cancel the entire booking, use the path format without "transferId".

        This method may also include an errors block if one or more of the requested cancellations fail. 
        In this case, the HTTP Status Code will be `207` (Multi-Status)
  /products/getproducttypes:
    parameters:
      - $ref: '#/components/parameters/api-key-header'
      - $ref: '#/components/parameters/format-header'
      - $ref: '#/components/parameters/language-header'
      - $ref: '#/components/parameters/number-formatting-header'
    get:
      operationId: GetProductTypes
      summary: List all available Product Types
      tags:
        - metadata
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                patternProperties:
                  '^\d+$':
                    type: object
                    description: Objects describing each Product Type; keys are numbers matching "producttypeid" for quick lookup.
                    properties:
                      producttypeid:
                        type: integer
                        description: The Holiday Taxis identifier for this product type.
                      name:
                        type: string
                        description: The name of the product type.
                      description:
                        type: string
                        description: A short plain-text description of the product type.
                      imageurl:
                        type:
                          - string
                          - 'null'
                        format: uri
                        description: Absolute URL of a representative image for the product type (if available).
                    required:
                      - producttypeid
                      - name
                      - description
                      - imageurl
              examples:
                Format Sample:
                  value:
                    '1':
                      name: Private Standard Taxi
                      producttypeid: 1
                      description: Your professional door to door private transfers.
                      imageurl: 'https://assets.holidaytaxis.com/private.jpg'
                    '2':
                      name: Minibus
                      producttypeid: 2
                      description: Your professional door to door Minibus transfer is perfect for a larger group of people.
                      imageurl: 'https://assets.holidaytaxis.com/minibus.jpg'
        '400':
          $ref: '#/components/responses/error-response'
        '401':
          $ref: '#/components/responses/error-response'
        '500':
          $ref: '#/components/responses/error-response'
      description: |-
        Fetch details of every product type offered by Holiday Taxis. 

        The names and descriptions returned will be translated to the language supplied 
        in the `Accept-Language` header, that language is available, or English if not.
  '/products/getallroutes/{fromTypeCode}/{fromCode}':
    parameters:
      - $ref: '#/components/parameters/api-key-header'
      - $ref: '#/components/parameters/format-header'
      - $ref: '#/components/parameters/language-header'
      - $ref: '#/components/parameters/number-formatting-header'
      - name: fromTypeCode
        in: path
        required: true
        description: The code type of the destination to look up (see 'location-code-type' type)
        schema:
          $ref: '#/components/schemas/location-code-type'
      - name: fromCode
        in: path
        required: true
        description: The code of the destination to look up (see 'location-code' type)
        schema:
          $ref: '#/components/schemas/location-code'
    get:
      operationId: GetAllRoutes
      summary: List all routes available from a particular destination
      tags:
        - metadata
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  destinations:
                    type: array
                    minItems: 1
                    items:
                      type: object
                      properties:
                        type:
                          $ref: '#/components/schemas/location-code-type'
                        code:
                          $ref: '#/components/schemas/location-code'
                        name:
                          type: string
                          description: The name of the gateway or resort identified.
                        routes:
                          type: array
                          minItems: 1
                          items:
                            type: object
                            properties:
                              airportid:
                                type: integer
                                description: Holiday Taxis internal identifier for the airport.
                              airportname:
                                type: string
                                description: The name of the airport.
                              resortid:
                                type: integer
                                description: Holiday Taxis internal identifier for the resort.
                              resortname:
                                type: string
                                description: The name of the resort.
                            required:
                              - airportid
                              - airportname
                              - resortid
                              - resortname
                      required:
                        - type
                        - code
                        - name
                        - routes
                required:
                  - destinations
              examples:
                Format Sample:
                  value:
                    destinations:
                      - type: IATA
                        code: ALC
                        name: Alicante Airport
                        routes:
                          - airportid: 3
                            resortid: 11
                            airportname: Alicante Airport
                            resortname: Albir
                          - airportid: 3
                            resortid: 12
                            airportname: Alicante Airport
                            resortname: Altea
                          - airportid: 3
                            resortid: 13
                            airportname: Alicante Airport
                            resortname: Benidorm
        '400':
          $ref: '#/components/responses/error-response'
        '401':
          $ref: '#/components/responses/error-response'
        '500':
          $ref: '#/components/responses/error-response'
      description: |-
        Search for routes served by Holiday Taxis starting or ending at a specified destination.

        Each route is indicated as between a gateway (airport, port, train or bus station) and a named resort, and is valid in either direction.

        If a hotel code (e.g. GIATA) or latitude and longitude (codetype GEO) is provided, it will be looked up to an appropriate Holiday Taxis resort, and the details returned will be for that resort. We recommend that when searching you send the hotel code or co-ordinates directly, as this ensures the correct route is selected.
  /products/getalldestinations:
    parameters:
      - $ref: '#/components/parameters/api-key-header'
      - $ref: '#/components/parameters/format-header'
      - $ref: '#/components/parameters/language-header'
      - $ref: '#/components/parameters/number-formatting-header'
    get:
      operationId: GetAllDestinations
      summary: List all destinations
      tags:
        - metadata
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  destinations:
                    type: array
                    description: 'Each block in the response represents a particular destination, with one or more codes which can be used to search for products to/from that destination.'
                    items:
                      type: object
                      properties:
                        destinationtype:
                          type: string
                          description: |-
                            The type of destination:

                            - 'Airport' is returned for all gateways, including ports, train and bus stations as well as airports.
                            - 'Resort' is returned for a named resort defined by Holiday Taxis.
                          enum:
                            - Airport
                            - Resort
                        destinationname:
                          type: string
                          description: The name of the destination.
                        destinationcodes:
                          type: array
                          minItems: 1
                          uniqueItems: true
                          description: One or more codes which can be used to search for products to/from this destination.
                          items:
                            type: object
                            properties:
                              destinationtypecode:
                                $ref: '#/components/schemas/location-code-type'
                              destinationcode:
                                $ref: '#/components/schemas/location-code'
                            required:
                              - destinationtypecode
                              - destinationcode
                      required:
                        - destinationtype
                        - destinationname
                        - destinationcodes
                required:
                  - destinations
              examples:
                Format Sample:
                  value:
                    destinations:
                      - destinationtype: Airport
                        destinationcodes:
                          - destinationtypecode: AIR
                            destinationcode: '946'
                          - destinationtypecode: IATA
                            destinationcode: AAL
                        destinationname: Aalborg Airport
                      - destinationtype: Airport
                        destinationcodes:
                          - destinationtypecode: AIR
                            destinationcode: '10470'
                          - destinationtypecode: IATA
                            destinationcode: MLG
                        destinationname: 'Abdul Saleh Airport '
                      - destinationtype: Airport
                        destinationcodes:
                          - destinationtypecode: AIR
                            destinationcode: '1174'
                          - destinationtypecode: IATA
                            destinationcode: ABJ
                        destinationname: Abidjan International Airport
        '400':
          $ref: '#/components/responses/error-response'
        '401':
          $ref: '#/components/responses/error-response'
        '500':
          $ref: '#/components/responses/error-response'
      description: |-
        Fetch a comprehensive list of gateways and resorts that Holiday Taxis offers transfers between. These can be used to
        build requests for the Product Search method.

        Note that the response does not list individual hotels, which can also be used as search destinations (see the documentation of "location-code-type" and "location-code" for details).

        **Note:** We strongly advise caching the results of this endpoint in your own system and not calling this endpoint more than twice a day.
  /products/resorts/areas:
    parameters:
      - $ref: '#/components/parameters/api-key-header'
      - $ref: '#/components/parameters/format-header'
      - $ref: '#/components/parameters/language-header'
      - $ref: '#/components/parameters/number-formatting-header'
      - schema:
          type: integer
          default: 1
          example: 19928
          minimum: 1
          maximum: 100000
        in: query
        name: startAt
        description: First ResortId to be returned in batch
    get:
      summary: List resorts with related geographical area data
      tags:
        - metadata
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  metadata:
                    type: object
                    properties:
                      links:
                        type: object
                        properties:
                          next:
                            type:
                              - string
                              - 'null'
                            pattern: '^\/products\/resorts\/areas\?startAt=[1-9]\d*$'
                            description: URI for next batch of 500 resorts
                          previous:
                            type:
                              - string
                              - 'null'
                            pattern: '^\/products\/resorts\/areas\?startAt=[1-9]\d*$'
                            description: URI for previous batch of 500 resorts
                  resorts:
                    type: array
                    xml:
                      wrapped: true
                    minItems: 0
                    items:
                      type: object
                      xml:
                        name: resort
                      properties:
                        resortid:
                          type: integer
                          minimum: 1
                          description: Unique ID for HolidayTaxis resort
                        areas:
                          type: array
                          xml:
                            wrapped: true
                          description: 'Array of strings in WKT (well-known text) format. See https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry. Includes Polygon and MultiPolygon types.'
                          items:
                            type: string
                            xml:
                              name: area
              examples:
                Example 1:
                  value:
                    metadata:
                      links:
                        next: /products/resorts/areas?startAt=963
                        previous: /products/resorts/areas?startAt=1
                    resorts:
                      - resortid: 421
                        areas:
                          - 'POLYGON ((41.072 1.11315, 41.0739 1.12015, 41.075 1.11991, 41.0755 1.11974, 41.0749 1.1158, 41.0708 1.09257, 41.0691 1.08765, 41.0681 1.08812, 41.0657 1.08973, 41.072 1.11315))'
                          - 'POLYGON ((41.0697 1.0648200000000003, 41.0701 1.0648200000000003, 41.0718 1.07437, 41.0722 1.07707, 41.0723 1.07821, 41.0727 1.0857, 41.0658 1.0896, 41.0653 1.08988, 41.0651 1.08946, 41.0631 1.08452, 41.066829111697452 1.0864653532688384, 41.0681 1.08812, 41.0691 1.08765, 41.066829111697452 1.0864653532688384, 41.063 1.08148, 41.0647 1.0658600000000003, 41.0662 1.06543, 41.0697 1.0648200000000003))'
                      - resortid: 422
                        areas:
                          - 'POLYGON ((41.0676 1.17549, 41.0679 1.17682, 41.0681 1.1777, 41.0684 1.17866, 41.0831 1.18833, 41.0859 1.1897, 41.0884 1.18678, 41.0863 1.18421, 41.081 1.17803, 41.0741 1.17331, 41.0722 1.17348, 41.0676 1.17459, 41.0675 1.17471, 41.0676 1.17549))'
                      - resortid: 423
                        areas:
                          - 'MULTIPOLYGON (((41.080176970500716 1.1501370460302467, 41.08069932 1.15083, 41.07979999 1.15202306, 41.079434379360855 1.1515380265530977, 41.080176970500716 1.1501370460302467)), ((41.0854 1.1199900000000003, 41.0874 1.1365100000000001, 41.080176970500716 1.1501370460302467, 41.07979999 1.1496369400000002, 41.07890068 1.15083, 41.079434379360855 1.1515380265530977, 41.0635 1.1816, 41.062 1.1807, 41.0537 1.17408, 41.0535 1.16678, 41.0551 1.16116, 41.0693 1.1287500000000001, 41.0749 1.1201600000000003, 41.0854 1.1199900000000003)))'
                          - 'POLYGON ((41.0644 1.18174, 41.0655 1.1819, 41.0669 1.18081, 41.0677 1.17878, 41.0676 1.1763, 41.0675 1.17485, 41.0672 1.17529, 41.066 1.17731, 41.0639 1.18095, 41.0644 1.18174))'
      operationId: get-products-resorts-areas
      description: |-
        Describes the geographic areas which can be searched in the Holiday Taxis system.
        For each "resort" in the Holiday Taxis system, lists one or more shapes in WKT format
        which describe the geographic areas which are included in that resort.

        Results are returned in batches of 500 and ordered by ResortId (unique ID for a HolidayTaxis resort).

        If a startAt value is provided, results will be returned starting at this ResortId.
        Use the next and previous links in the response to navigate through batches.
components:
  responses:
    booking-details-response:
      description: 'The response contains details of the full booking, including pricing, and the individual routes and products requested.'
      content:
        application/json:
          schema:
            type: object
            properties:
              booking:
                $ref: '#/components/schemas/booking-details'
            required:
              - booking
          examples:
            Single Leg Private Transfer:
              value:
                booking:
                  general:
                    affiliatecode: HTX
                    bookingreference: A1B2C3
                    bookingstatusid: 1
                    orderreference: null
                    notransfers: 1
                    paymenttype: Card
                    dateentered: '2018-03-16T12:40:00'
                    consumerid: null
                    pdf_voucher: 'https://documents.holidaytaxis.com/voucher/redirect/tsVzkK2Ls8OAr61f1eKZyNanntuej5Sj1tw='
                    html_voucher: 'https://documents.holidaytaxis.com/voucher/redirect/tsVzkK2Ls8OAr61f1eKZyNanntuej5Sj1tw='
                    agency: null
                    clerk: null
                  contact:
                    telephone: +44 123456
                    title: Mr
                    firstname: Test
                    lastname: Tester
                    email: a.b@example.com
                  pricing:
                    netprice: '53.00'
                    totalprice: '54.06'
                    transactionfee: '0.00'
                    carbonoffset: '0.00'
                    optionalextras: '26.12'
                    creditamount: '0.00'
                    saleprice: '80.18'
                    currency: GBP
                  transfers:
                    - transferorder: 1
                      transferid: 8253504
                      transferstatus: PCON
                      datebooked: '2018-03-16T12:40:00'
                      dateamended: null
                      datecancelled: null
                      bookingtypeid: 2
                      productid: 795064
                      producttype: Private Transfer
                      transferimage: private_sedan.jpg
                      productcategory: Taxi
                      producttypeid: 43
                      productdescription: Your professional door to door private transfers.
                      transportprovider: Taxi Company ltd.
                      transfertime: 60
                      minpax: 1
                      maxpax: 4
                      luggage: 4
                      novehicles: 1
                      noadults: 2
                      nochildren: 1
                      noinfants: 1
                      fromdetails:
                        codetype: IATA
                        code: ALC
                        name: Alicante Airport
                        flight:
                          flightnumber: '123'
                          terminal: null
                          arrivaldatetime: '2018-03-23T12:00:00'
                          originairport: 'LTN'
                      todetails:
                        codetype: GEO
                        code: '38.3460,0.4907'
                        name: Benidorm
                        accommodation:
                          tel: null
                          name: Apartamentos Benibeach
                          addressline1: Avenida Armada Española
                          addressline2: Benidorm
                          addressline3: Spain
                      instructions:
                        reconfirmationtel: 0034 96 688 9186
                        emergencytel: 0034 965 88 90 94 / 0034 663 821 404
                        hoursmonfri: '08:00 - 17:00'
                        hoursat: '09:30 - 14:30'
                        hourssun: closed
                        ukemergencytel: +44 1273 828 200
                        airportmap: null
                        instruction: '<br><b>LOCATING YOUR DRIVER</b><br>After collecting your luggage exit the airport and proceed to the small bus area directly to your right and look for the bus with a sign that says <i>Airport Shuttle</i>.<br><br>Identify yourself by showing this confirmation to your Supplier, for whom we act as a booking agent.<br><br><br><strong>DIFFICULTY IN LOCATING YOUR DRIVER</strong><br>Contact your supplier for assistance. Do not leave without having contacted your supplier on &#43;30 6972196310 first.<br><br>In event you are delayed during the arrival process you must contact the supplier.'
                        instructionnomarkup: |-
                          LOCATING YOUR DRIVER
                          After collecting your luggage exit the airport and proceed to the small bus area directly to your right and look for the bus with a sign that says Airport Shuttle.

                          Identify yourself by showing this confirmation to your Supplier, for whom we act as a booking agent.


                          DIFFICULTY IN LOCATING YOUR DRIVER
                          Contact your supplier for assistance. Do not leave without having contacted your supplier on +30 6972196310 first.

                          In event you are delayed during the arrival process you must contact the supplier.
                      pricing:
                        netprice: '53.00'
                        totalprice: '54.06'
                        transactionfee: '0.00'
                        carbonoffset: '0.00'
                        optionalextras: '26.12'
                        creditamount: '0.00'
                        prices:
                          - typecode: VEH
                            type: Vehicle
                            description: Vehicle
                            units: 1
                            netprice: '53.00'
                            totalprice: '54.06'
                          - typecode: CHS
                            type: Child seat (9 - 18kg, 20 - 40lb, 9mths - 4yr)
                            units: 2
                            netprice: '13.06'
                            totalprice: '13.06'
    successful-search-response:
      description: Response indicating products available for each journey requested
      content:
        application/json:
          schema:
            type: object
            properties:
              search:
                $ref: '#/components/schemas/search-summary'
              travelling:
                $ref: '#/components/schemas/search-results'
              returning:
                $ref: '#/components/schemas/search-results'
            required:
              - search
              - travelling
          examples:
            'Airport to Hotel (GIATA), Return':
              value:
                search:
                  fromtype: IATA
                  fromcode: BOS
                  fromproperty: null
                  fromdetails: flight
                  fromname: Boston Logan Airport
                  totype: GIATA
                  tocode: '263931'
                  toname: Ramada Inn Logan Apt
                  toproperty: null
                  todetails: accommodation
                  travelling: '2022-06-07T12:00:00'
                  adults: '2'
                  children: '0'
                  infants: '0'
                travelling:
                  products:
                    - general:
                        productid: 1189035
                        bookingtypeid: 2
                        transfertime: 25
                        producttypeid: 43
                        minpax: 1
                        maxpax: 3
                        perperson: 0
                        luggage: 3
                        producttype: Private Standard Car
                        description: "Private Standard Cars operate a door to door service across our destinations around the world.\r\n\r\nThe driver will meet you via a ‘Meet & Greet’ service either at the arrivals hall or at our partner’s desk, and you will enjoy the relaxed journey that your private transfer gives you.\r\n\r\nVehicle types vary and whilst in the majority of locations you will be transported in a saloon vehicle in some, you may be transported in a larger vehicle. In all cases, you will be the only passengers in your vehicle, giving you a peaceful journey to and from your destination.\r\n\r\nFurther Arrival and Departure information will be provided on your booking voucher.\r\n"
                      pricing:
                        oldprice: null
                        price: '105.64'
                        currency: GBP
                        carbonoffset: '0.50'
                        transactionfees:
                          visa: 0
                          mastercard: 0
                          maestro: 0
                          visadebit: 0
                          mastercarddebit: 0
                          amex: 0
                          paypal: 0
                        prices:
                          price:
                            type: Vehicle
                            typecode: VEH
                            description: Vehicle
                            units: 1
                            oldprice: '105.64'
                            price: '105.64'
                returning:
                  products:
                    - general:
                        productid: 1189035
                        bookingtypeid: 3
                        transfertime: 25
                        producttypeid: 43
                        minpax: 1
                        maxpax: 3
                        perperson: 0
                        luggage: 3
                        producttype: Private Standard Car
                        description: "Private Standard Cars operate a door to door service across our destinations around the world.\r\n\r\nThe driver will meet you via a ‘Meet & Greet’ service either at the arrivals hall or at our partner’s desk, and you will enjoy the relaxed journey that your private transfer gives you.\r\n\r\nVehicle types vary and whilst in the majority of locations you will be transported in a saloon vehicle in some, you may be transported in a larger vehicle. In all cases, you will be the only passengers in your vehicle, giving you a peaceful journey to and from your destination.\r\n\r\nFurther Arrival and Departure information will be provided on your booking voucher.\r\n"
                      pricing:
                        oldprice: null
                        price: '105.64'
                        currency: GBP
                        carbonoffset: '0.50'
                        transactionfees:
                          visa: 0
                          mastercard: 0
                          maestro: 0
                          visadebit: 0
                          mastercarddebit: 0
                          amex: 0
                          paypal: 0
                        prices:
                          price:
                            type: Vehicle
                            typecode: VEH
                            description: Vehicle
                            units: 1
                            oldprice: '105.64'
                            price: '105.64'
            'Airport to Hotel (GEO), Single':
              value:
                search:
                  fromtype: IATA
                  fromcode: CDG
                  fromname: Paris Charles de Gaulle (CDG) Airport
                  fromproperty: null
                  fromdetails: flight
                  totype: GEO
                  tocode: '48.867374,2.784018'
                  toproperty: null
                  todetails: accommodation
                  toname: Disneyland Paris
                  travelling: '2018-08-20T14:00:00'
                  adults: '2'
                  children: '1'
                  infants: '1'
                travelling:
                  products:
                    - general:
                        productid: 657599
                        bookingtypeid: 2
                        transfertime: 120
                        producttypeid: 39
                        minpax: null
                        maxpax: null
                        luggage: 3
                        perperson: 1
                        producttype: Shuttle Transfer
                        description: This is a cost effective shared service with other passengers.
                      pricing:
                        oldprice: null
                        price: '55.08'
                        currency: GBP
                        carbonoffset: '0.50'
                        transactionfees:
                          visa: 0
                          mastercard: 0
                          maestro: 0
                          visadebit: 0
                          mastercarddebit: 0
                          amex: 0
                          paypal: 0
                        prices:
                          - type: Adult
                            typecode: AD
                            description: Adult
                            units: '2'
                            oldprice: '19.78'
                            price: '19.78'
                          - type: Child
                            typecode: CH
                            description: Child
                            units: '1'
                            oldprice: '15.54'
                            price: '15.54'
                          - type: Infants
                            typecode: IN
                            description: Infants
                            units: '1'
                            oldprice: '0.00'
                            price: '0.00'
                    - general:
                        productid: 656992
                        bookingtypeid: 2
                        transfertime: 90
                        producttypeid: 43
                        minpax: 1
                        maxpax: 4
                        luggage: 4
                        perperson: 0
                        producttype: Private Transfer
                        description: Your professional door to door private transfers.
                      pricing:
                        oldprice: null
                        price: '66.75'
                        currency: GBP
                        carbonoffset: '0.50'
                        transactionfees:
                          visa: 0
                          mastercard: 0
                          maestro: 0
                          visadebit: 0
                          mastercarddebit: 0
                          amex: 0
                          paypal: 0
                        prices:
                          price:
                            type: Vehicle
                            typecode: VEH
                            description: Vehicle
                            units: 1
                            oldprice: '66.75'
                            price: '66.75'
                    - general:
                        productid: 916278
                        bookingtypeid: 2
                        transfertime: 90
                        producttypeid: 77
                        minpax: 4
                        maxpax: 7
                        luggage: 7
                        perperson: 0
                        producttype: Private Minivan
                        description: Your professional door to door Minivan transfer is perfect for a larger group.
                      pricing:
                        oldprice: null
                        price: '98.85'
                        currency: GBP
                        carbonoffset: '0.50'
                        transactionfees:
                          visa: 0
                          mastercard: 0
                          maestro: 0
                          visadebit: 0
                          mastercarddebit: 0
                          amex: 0
                          paypal: 0
                        prices:
                          price:
                            type: Vehicle
                            typecode: VEH
                            description: Vehicle
                            units: 1
                            oldprice: '98.85'
                            price: '98.85'
                        extras:
                          - type: Child Seat (9 - 18kg, 20 - 40lb, 9mths - 4yr)
                            typecode: CHS
                            price: '0.00'
                          - type: Booster Seat (15 - 25kg, 33lb - 3st 13lb, 4 - 7yr)
                            typecode: BAS
                            price: '0.00'
                          - type: Booster Seat (22 - 36kg, 3st 7lb - 5st 9lb, 7 - 12yr)
                            typecode: BAS2
                            price: '0.00'
    partial-search-response:
      description: Response indicating that results were found for only one of the two journeys requested
      content:
        application/json:
          schema:
            type: object
            properties:
              errors:
                type: object
                properties:
                  travelling:
                    $ref: '#/components/schemas/error-message'
                    description: Error message relating to the first journey date requested.
                  returning:
                    $ref: '#/components/schemas/error-message'
                    description: Error message relating to the second journey date requested.
                required: []
              search:
                $ref: '#/components/schemas/search-summary'
              travelling:
                $ref: '#/components/schemas/search-results'
              returning:
                $ref: '#/components/schemas/search-results'
            required:
              - errors
              - search
    error-response:
      description: Standard format for all errors and unsuccessful responses.
      content:
        application/json:
          schema:
            type: object
            description: One or more error messages
            properties:
              errors:
                type: object
                description: 'Object containing one or more error messages, each with a distinct key'
                minProperties: 1
                additionalProperties:
                  $ref: '#/components/schemas/error-message'
            required:
              - errors
  schemas:
    error-message:
      type: object
      description: 'Details of an error. The key for each error is a code indicating its category, or the field to which it applies'
      properties:
        message:
          type: string
          description: 'A technical error message for use by the developer integrating the API. This will contain information such as which field was invalid/missing, validation errors and other technical issues with the request.'
        title:
          type: string
          description: 'A brief, user-friendly description of the error. Suggested use would be as the title to an error ''alert'' box.'
        display:
          type: string
          description: A more detailed user-friendly error message. Suggested use would be the error message displayed to the end user.
      required:
        - message
    search-summary:
      type: object
      description: The search block summarises the parameters that were sent in the request
      properties:
        fromtype:
          $ref: '#/components/schemas/location-code-type'
          description: The type of code being used to describe the journey start point
        fromcode:
          $ref: '#/components/schemas/location-code'
          description: The code identifying the journey start point
        fromname:
          type: string
          description: The name of the airport/resort/property where the customer will be picked up
        fromproperty:
          type: 'null'
          description: No longer used
        fromdetails:
          type: string
          enum:
            - flight
            - accommodation
            - cruise
            - train
            - bus
          description: Block type used to describe start point - expected in booking request fromdetails
        totype:
          $ref: '#/components/schemas/location-code-type'
          description: The type of code being used to describe the journey end point
        tocode:
          $ref: '#/components/schemas/location-code'
          description: The code identifying the journey end point
        toname:
          type: string
          description: The name of the airport/resort/property where the customer will be dropped off
        toproperty:
          type: 'null'
          description: No longer used
        todetails:
          type: string
          enum:
            - flight
            - accommodation
            - cruise
            - train
            - bus
          description: Block type used to describe endpoint - expected in booking request todetails
        travelling:
          $ref: '#/components/schemas/local-date-time'
          description: The date/time the passenger is travelling
        adults:
          type: string
          description: The number of adult passengers (age 12+) travelling
          pattern: '^[0-9]+$'
        children:
          type:
            - string
            - 'null'
          description: The number of child passengers (age 3 to 11) travelling
          pattern: '^[0-9]+$'
        infants:
          type:
            - string
            - 'null'
          description: The number of infant passengers (age 0 to 2) travelling
          pattern: '^[0-9]+$'
      required:
        - fromtype
        - fromcode
        - fromname
        - fromproperty
        - fromdetails
        - totype
        - tocode
        - toname
        - toproperty
        - todetails
        - travelling
        - adults
        - children
        - infants
    search-results:
      type: object
      properties:
        products:
          type: array
          description: 'The products block contains an array of search results, arranged in ascending order price order (cheapest first)'
          items:
            type: object
            properties:
              general:
                type: object
                required:
                  - productid
                  - bookingtypeid
                  - description
                  - producttype
                  - producttypeid
                  - transfertime
                  - minpax
                  - maxpax
                  - perperson
                properties:
                  productid:
                    type: integer
                    description: The unique identifier for this product. This is used to identify the route and vehicle. Note that this may be different for matching products on different dates.
                  bookingtypeid:
                    type: integer
                    description: 'The direction of travel. As our products can travel in either direction, this field must be combined with the productid to get an accurate price. 2 or 7 = outbound (pick up at airport or other gateway), 3 or 8 = inbound (pick up at hotel or other address).'
                  description:
                    type: string
                    description: Information on the product; this will often include important information
                  producttype:
                    type: string
                    description: The type of vehicle being provided
                  producttypeid:
                    description: 'Identifier for the product type, which can be used to look up additional information'
                    type: integer
                  transfertime:
                    type: integer
                    description: The estimated time, in minutes, that the journey will take
                  minpax:
                    type:
                      - integer
                      - 'null'
                    description: The minimum number passengers the vehicle can hold (null for shuttles)
                  maxpax:
                    type:
                      - integer
                      - 'null'
                    description: The maximum number passengers the vehicle can hold (null for shuttles)
                  perperson:
                    type: integer
                    description: 'Indicator of "whole vehicle" booking or individual seat: 1 = shuttle (price per seat), 0 = private transfer (price per vehicle)'
                    enum:
                      - 0
                      - 1
                  luggage:
                    type: integer
                    description: Maximum number of suitcases or bags the vehicle can hold (not specified for shuttles which are always 1 suitcase per person)
              pricing:
                type: object
                required:
                  - currency
                  - oldprice
                  - price
                  - carbonoffset
                  - prices
                  - transactionfees
                properties:
                  currency:
                    type: string
                    description: 'The currency in which the prices are returned, as an ISO 4217 currency code'
                    minLength: 3
                    maxLength: 3
                    example: GBP
                  oldprice:
                    oneOf:
                      - $ref: '#/components/schemas/fixed-precision-price'
                      - type: 'null'
                    description: The price (to 2 decimal places) of the product before any discounts were applied
                  price:
                    $ref: '#/components/schemas/fixed-precision-price'
                    description: The final sale price of the product after all discounts have been applied. This is the total of all individual 'price' fields.
                  carbonoffset:
                    $ref: '#/components/schemas/fixed-precision-price'
                    description: An optional amount that can be paid at time of booking to offset carbon emissions
                  lockedunits:
                    description: 'When set to true, this indicates the booking must be made with the same no. of units as used for the search.'
                    type: boolean
                  prices:
                    oneOf:
                      - type: object
                        properties:
                          price:
                            $ref: '#/components/schemas/pricing-unit'
                        required:
                          - price
                      - type: array
                        items:
                          $ref: '#/components/schemas/pricing-unit'
                    description: 'An array of pricing units breaking down the price of this product. If there is only one pricing unit, this will be an object with the single key ''price''.'
                  extras:
                    type: array
                    description: Array of available optional extras which can be added to this product.
                    items:
                      type: object
                      properties:
                        type:
                          type: string
                          description: The type of extra
                          examples:
                            - Child Seat  (9 - 18kg, 20 - 40lb, 9mths - 4yr)
                            - Extra Suitcase
                        typecode:
                          type: string
                          description: Code identifying the type of extra; see [Pricing & Optional Extra Types](https://developer.holidaytaxis.com/ws2/overview.html#dictionary-pricing-types) for a list of currently used codes
                          examples:
                            - CHS
                            - EXS
                        price:
                          type: string
                          description: The final sale price of this optional extra
                      required:
                        - type
                        - typecode
                        - price
                  transactionfees:
                    type: object
                    description: The fees charged for card payments (these are currently always zero)
                    required:
                      - visa
                      - mastercard
                      - maestro
                      - visadebit
                      - mastercarddebit
                      - amex
                      - paypal
                    properties:
                      visa:
                        type: integer
                        enum:
                          - 0
                      mastercard:
                        type: integer
                        enum:
                          - 0
                      maestro:
                        type: integer
                        enum:
                          - 0
                      visadebit:
                        type: integer
                        enum:
                          - 0
                      mastercarddebit:
                        type: integer
                        enum:
                          - 0
                      amex:
                        type: integer
                        enum:
                          - 0
                      paypal:
                        type: integer
                        enum:
                          - 0
            required:
              - general
              - pricing
      required:
        - products
    pricing-unit:
      type: object
      properties:
        type:
          type: string
          description: The pricing unit type
          enum:
            - Adult
            - Child
            - Infants
            - Vehicle
        typecode:
          type: string
          description: The code relating to the pricing unit type
          enum:
            - AD
            - CH
            - IN
            - VEH
        description:
          type: string
          description: A brief description of the pricing unit
          enum:
            - Adult
            - Child
            - Infants
            - Vehicle
        units:
          type:
            - integer
            - string
          description: The number of passengers/vehicles included in the total price
          minimum: 0
          pattern: '^[1-9][0-9]*$'
        oldprice:
          type: string
          description: The price (to 2 decimal places) per pricing unit before any discounts were applied
        price:
          type: string
          description: The final sale price per pricing unit after all discounts have been applied
      required:
        - type
        - typecode
        - description
        - units
        - price
    local-date-time:
      type: string
      pattern: '^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$'
      example: '2020-08-20T14:15:00'
      description: Date and Time specified without a time zone. The date should be interpreted according to the local time zone of the transfer.
    location-code-type:
      type: string
      enum:
        - IATA
        - GIATA
        - GEO
        - TTI
        - IFF
        - ATLAS
        - AIR
        - PRT
        - STN
        - BUS
        - RST
      description: |-
        The pickup and dropoff locations for transfers can be specified in multiple ways, identified by the following "code types":

        * IATA: International airport identifier codes (3 letter code)
        * GIATA: Hotel identifier issued by GIATA (integer)
        * GEO: Geographic location in the format 'latitude,longitude', e.g. 50.821066,-0.141306
        * IFF: Hotel identifier issued by IFF (integer)
        * TTI: Hotel identifier issued by TTI (integer)
        * ATLAS: HotelBeds hotel identifier (integer)
        * AIR: Holiday Taxis internal identifier for an airport (integer)
        * PRT: Holiday Taxis internal identifier for a port (integer)
        * STN: Holiday Taxis internal identifier for a train station (integer)
        * BUS: Holiday Taxis internal identifier for a bus station (integer)
        * RST: Holiday Taxis internal identifier for a resort (integer). If you are unable to provide a hotel code or exact co-ordinates for a destination, a RST code can be used instead. You will still need to provide an address for RST bookings, and it may cause later issues if the address is outside the resort area.
    location-code:
      type:
        - string
        - integer
      examples:
        - LHR
        - '50.821066,-0.141306'
        - 263931
      description: |-
        The code for a pickup and dropoff location; format depends on the accompanying "code type":

        * IATA: 3 letter string
        * GIATA: integer
        * GEO: string in the format 'latitude,longitude', e.g. 50.821066,-0.141306
        * IFF: integer
        * TTI: integer
        * ATLAS: integer
        * AIR: integer
        * PRT: integer
        * STN: integer
        * BUS: integer
        * RST: integer
    fixed-precision-price:
      type: string
      pattern: ^\d+\.\d+
      description: Price formatted as a string to allow a fixed precision (usually two decimal places)
    pickup-location-details:
      type: object
      description: Information regarding the start point (pickup) of the transfer. The details to include depend on the type of pick-up location.
      properties:
        codetype:
          $ref: '#/components/schemas/location-code-type'
          description: 'The location type of the start point of the transfer. Ignored in requests, but included in responses.'
          readOnly: true
        code:
          type:
            - string
            - integer
            - 'null'
          description: 'Code representing the start point of the transfer. Ignored in requests, and may be null is some responses.'
          readOnly: true
        name:
          type: string
          readOnly: true
          description: 'The name of the start point of the transfer. Ignored in requests, but included in responses.'
        id:
          type:
            - integer
            - 'null'
          readOnly: true
          description: 'The Holiday Taxis internal identifier for the start point of the transfer. Ignored in requests, and may be null is some responses.'
        flight:
          allOf:
            - $ref: '#/components/schemas/flight-details'
            - type: object
              properties:
                arrivaldatetime:
                  $ref: '#/components/schemas/local-date-time'
                  description: The time at which the flight is arriving. (See 'local-date-time' type.)
                originairport:
                  type: string
                  description: The airport from which the flight is leaving (3-letter IATA code).
                  minLength: 3
                  maxLength: 3
              required:
                - arrivaldatetime
            - type: object
              description: Flight details - required when journey starts at an airport
        accommodation:
          allOf:
            - $ref: '#/components/schemas/accommodation-details'
            - type: object
              properties:
                pickupdatetime:
                  $ref: '#/components/schemas/local-date-time'
                  description: 'A custom time at which the passenger wishes to be picked up. See [Pickup Date/Time Calculation](https://developer.holidaytaxis.com/ws2/overview.html#pickup-times) for important information.'
                supplierpickupdatetime:
                  readOnly: true
                  type:
                    - string
                    - 'null'
                  description: The time the supplier has confirmed they will be pick up the passenger. Ignored in requests.
                suppliername:
                  readOnly: true
                  type:
                    - string
                    - 'null'
                  description: The name of the location the supplier has confirmed they will pick the passenger up from. Ignored in requests.
                supplieraddressline1:
                  readOnly: true
                  type:
                    - string
                    - 'null'
                  description: The 1st line of the address of the location the supplier has confirmed they will pick the passenger up from. Ignored in requests.
                supplieraddressline2:
                  readOnly: true
                  type:
                    - string
                    - 'null'
                  description: The 2nd line of the address of the location the supplier has confirmed they will pick the passenger up from. Ignored in requests.
                supplieraddressline3:
                  readOnly: true
                  type:
                    - string
                    - 'null'
                  description: The 3rd line of the address of the location the supplier has confirmed they will pick the passenger up from. Ignored in requests.
                pickuptimeviewed:
                  readOnly: true
                  type: 'null'
                  description: Whether or not the passenger has viewed the pickup details agreed by the supplier. Not currently used.
                reconfirmationrequired:
                  readOnly: true
                  type:
                    - integer
                    - 'null'
                  enum:
                    - null
                    - 0
                    - 1
                  description: 'If set to 1, the passenger is required to view/confirm the pickup details agreed by the supplier. Ignored in requests.'
            - type: object
              description: Hotel or address details - required when journey starts at a hotel or address
        cruise:
          allOf:
            - description: Cruise ship details - required when journey starts at a port
            - $ref: '#/components/schemas/cruise-details'
            - type: object
              properties:
                arrivaldatetime:
                  $ref: '#/components/schemas/local-date-time'
                  description: The time at which the cruise ship is arriving. (See 'local-date-time' type.)
              required:
                - arrivaldatetime
        train:
          allOf:
            - $ref: '#/components/schemas/train-details'
            - type: object
              properties:
                arrivaldatetime:
                  $ref: '#/components/schemas/local-date-time'
                  description: The time at which the train is arriving. (See 'local-date-time' type.)
              required:
                - arrivaldatetime
            - type: object
              description: Train details - required when journey starts at a train station
        bus:
          allOf:
            - $ref: '#/components/schemas/bus-details'
            - type: object
              properties:
                arrivaldatetime:
                  $ref: '#/components/schemas/local-date-time'
                  description: The time at which the bus is arriving. (See 'local-date-time' type.)
              required:
                - arrivaldatetime
            - type: object
              description: Bus details - required when journey starts at a bus station
    dropoff-location-details:
      type: object
      description: Information regarding end point (drop off) of the transfer. The details to include depend on the type of drop-off location.
      properties:
        codetype:
          $ref: '#/components/schemas/location-code-type'
          description: 'The location type of the end point of the transfer. Ignored in requests, but included in responses.'
          readOnly: true
        code:
          type:
            - string
            - integer
            - 'null'
          description: 'Code representing the end point of the transfer. Ignored in requests, and may be null is some responses.'
          readOnly: true
        name:
          type: string
          description: 'The name of the end point of the transfer. Ignored in requests, but included in responses.'
          readOnly: true
        id:
          type:
            - integer
            - 'null'
          readOnly: true
          description: 'The Holiday Taxis internal identifier for the start point of the transfer. Ignored in requests, and may be null is some responses.'
        flight:
          allOf:
            - $ref: '#/components/schemas/flight-details'
            - type: object
              properties:
                departuredatetime:
                  $ref: '#/components/schemas/local-date-time'
                  description: The time at which the flight is leaving. (See 'local-date-time' type.)
                destinationairport:
                  type: string
                  description: The airport at which the flight is arriving (3-letter IATA code).
                  minLength: 3
                  maxLength: 3
              required:
                - departuredatetime
            - type: object
              description: Flight details - required when journey ends at an airport
        accommodation:
          allOf:
            - $ref: '#/components/schemas/accommodation-details'
            - type: object
              description: Hotel or address details - required when journey ends at a hotel or address
        cruise:
          allOf:
            - $ref: '#/components/schemas/cruise-details'
            - type: object
              properties:
                departuredatetime:
                  $ref: '#/components/schemas/local-date-time'
                  description: The time at which the cruise ship is leaving. (See 'local-date-time' type.)
              required:
                - departuredatetime
            - type: object
              description: Cruise ship details - required when journey ends at a port
        train:
          allOf:
            - $ref: '#/components/schemas/train-details'
            - type: object
              properties:
                departuredatetime:
                  $ref: '#/components/schemas/local-date-time'
                  description: The time at which the train is leaving. (See 'local-date-time' type.)
              required:
                - departuredatetime
            - type: object
              description: Train details - required when journey ends at a train station
        bus:
          allOf:
            - $ref: '#/components/schemas/bus-details'
            - type: object
              properties:
                departuredatetime:
                  $ref: '#/components/schemas/local-date-time'
                  description: The time at which the bus is leaving. (See 'local-date-time' type.)
              required:
                - departuredatetime
            - type: object
              description: Bus details - required when journey ends at a bus station
    flight-details:
      type: object
      properties:
        flightnumber:
          type: string
          description: The flight number relating to the flight the passenger is arriving/leaving on.
        terminal:
          type:
            - string
            - 'null'
          description: The terminal in which the passengers flight is arriving/leaving.
      required:
        - flightnumber
    accommodation-details:
      oneOf:
        - type: object
          description: Address details. Use this in requests only if you are unable to supply a hotel code.
          properties:
            name:
              type:
                - string
              description: The name of the passenger's location (typically their accommodation)
            addressline1:
              type:
                - string
              description: The 1st line of the address for the passenger's location (typically their accommodation)
            addressline2:
              type:
                - string
                - 'null'
              description: The 2nd line of the address for the passenger's location (typically their accommodation)
            addressline3:
              type:
                - string
                - 'null'
              description: The 3rd line of the address for the passenger's location (typically their accommodation)
            tel:
              type:
                - string
                - 'null'
              description: The telephone number for the passenger's location (typically their accommodation)
          required:
            - name
            - addressline1
        - type: object
          description: The code for a hotel or accommodation being booked.
          properties:
            codetype:
              $ref: '#/components/schemas/location-code-type'
              description: 'If the ''codetype'' for this ''fromdetails'' or ''todetails'' block is GIATA, TTI, IFF, or ATLAS, repeat it here.'
            code:
              $ref: '#/components/schemas/location-code'
              description: 'If the ''codetype'' for this ''fromdetails'' or ''todetails'' block is GIATA, TTI, IFF, or ATLAS, repeat the accompanying ''code'' here.'
          required:
            - codetype
            - code
    cruise-details:
      title: cruise-details
      type: object
      properties:
        shipname:
          type: string
          description: The name of the ship the passenger is arriving/leaving on.
        cruiseline:
          type: string
          description: The cruise line of the ship the passenger is arriving/leaving on.
        cruiseterminal:
          type: string
          description: The terminal at the cruise port from which the ship is arriving/leaving.
      required:
        - shipname
        - cruiseline
    train-details:
      title: train-details
      type: object
      properties:
        trainnumber:
          type: string
          description: The number of the train the passenger is arriving/leaving on.
      required:
        - trainnumber
    bus-details:
      title: bus-details
      type: object
      properties:
        busnumber:
          type: string
          description: The number of the bus the passenger is arriving/leaving on.
      required:
        - busnumber
    booking-details:
      type: object
      required:
        - general
        - contact
        - pricing
        - transfers
      properties:
        general:
          type: object
          description: General information about the whole booking
          required:
            - bookingreference
            - orderreference
            - affiliatecode
            - agency
            - clerk
            - bookingstatusid
            - notransfers
            - paymenttype
            - dateentered
            - pdf_voucher
            - html_voucher
          properties:
            bookingreference:
              type: string
              description: The unique reference assigned by Holiday Taxis for the booking
            orderreference:
              type:
                - string
                - 'null'
              description: The reference provided by the affiliate or travel agency that made the booking
            affiliatecode:
              type: string
              description: The unique code used by Holiday Taxis to identfiy the Affiliate that made the booking
            agency:
              type:
                - string
                - 'null'
              description: The name of the travel agency (if applicable) that made the booking
            clerk:
              type:
                - string
                - 'null'
              description: The name of the clerk from the travel agency (if applicable) that made the booking
            bookingstatusid:
              description: An indicator of the status of the booking. Internal use only.
              type: integer
            notransfers:
              type: integer
              description: 'The number of transfer journeys encompassed under this booking; e.g. single journey = 1, return journey = 2, multi-leg journeys = 3+'
            paymenttype:
              type: string
              description: 'The way in which the affiliate, agent, or consumer is paying for this booking'
              enum:
                - Card
                - ELV
                - Paypal
                - Invoice/Direct Debit
            dateentered:
              type: string
              description: 'Date and time the booking was made. Formatted without time zone, but always expressed in UTC.'
              pattern: '^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}'
            pdf_voucher:
              type: string
              description: 'Link to the voucher for this booking, formatted as PDF'
            html_voucher:
              type: string
              description: |-
                Link to the voucher for this booking.

                Please note that support for HTML vouchers is being removed and this field will instead also link to the PDF version. Please avoid relying on this field.
              deprecated: true
        contact:
          $ref: "#/components/schemas/booking-contact"
        pricing:
          type: object
          description: Overall pricing for the booking. This is the sum of the pricing for each individual transfer in the 'transfers' block.
          required:
            - netprice
            - currency
            - totalprice
            - transactionfee
            - carbonoffset
            - optionalextras
            - creditamount
            - saleprice
          properties:
            currency:
              type: string
              minLength: 3
              maxLength: 3
              description: 'The currency of all prices in this response. This is the currency the booking will be charged in, as an ISO 4217 currency code. The available options should be agreed in advance with Holiday Taxis.'
              example: GBP
            netprice:
              $ref: '#/components/schemas/fixed-precision-price'
              description: The net price (excluding agency commission) of the entire booking. (See 'fixed-precision-price' type.)
            totalprice:
              $ref: '#/components/schemas/fixed-precision-price'
              description: The price including agency commission, but excluding optional extras and credits, of the entire booking. (See 'fixed-precision-price' type.)
            transactionfee:
              type: string
              description: The charge for card payments - always 0.00
              enum:
                - '0.00'
            carbonoffset:
              $ref: '#/components/schemas/fixed-precision-price'
              description: The carbon offset charge amount for the entire booking. (See 'fixed-precision-price' type.)
            optionalextras:
              $ref: '#/components/schemas/fixed-precision-price'
              description: The amount charged for optional extras for the entire booking. (See 'fixed-precision-price' type.)
            creditamount:
              $ref: '#/components/schemas/fixed-precision-price'
              description: The adjustment amount (in way of customer service amendments/credits) for the entire booking. (See 'fixed-precision-price' type.)
            saleprice:
              $ref: '#/components/schemas/fixed-precision-price'
              description: The final sale price (totalprice + carbonoffset + optionalextras + creditamount) for the entire booking. (See 'fixed-precision-price' type.)
        transfers:
          type: array
          description: 'Details of each transfer on the booking - normally one object for a one-way booking, or two for a return. This array is arranged in order of travel date, earliest first.'
          items:
            type: object
            additionalProperties: false
            properties:
              transferorder:
                type: integer
                description: The sequence number of the journey within the booking.
              transferid:
                type: integer
                description: The Holiday Taxis internal identifier for the journey within the booking.
              transferstatus:
                type: string
                description: |-
                  The status of the individual journey.
                  
                    - PCON: Pending Confirmation - The booking is confirmed from a Holiday Taxis and Client point of view. 
                      The client will have received confirmation and a booking voucher. This is an internal code that tells us we are waiting for our supplier to physically acknowledge the booking.
                    - ACON: Approved Confirmation - Booked and confirmed by supplier.
                    - PAMM: Pending Amendment - The amendment has been processed, but we are waiting for the supplier to acknowledge it.
                    - AAMM: Approved Amendment.
                    - PCAN: Pending Cancellation - The booking is cancelled from a Holiday Taxis and Client point of view. 
                      The client will have received notification of cancellation and a refund will have been requested from the payment provider. 
                      This is an internal code that tells us we are waiting for our supplier to physically acknowledge cancellation.
                    - ACAN: Approved Cancellation.
                    - PPAY: Pending Payment - Internal code indicating we are waiting for payment completion.
                    - PINF: Pending Information - Additional information required on booking before it can be fulfilled.
              bookingtypeid:
                type: integer
                description: 'The direction of travel. As our products can travel in either direction, this field dictates which direction the transfer is travelling. Booking types 2 and 7 are outbound (e.g. airport to hotel); booking types 3 and 8 are inbound (e.g. hotel to airport).'
                enum:
                  - 2
                  - 3
                  - 7
                  - 8
              datebooked:
                type: string
                description: 'Date and time this journey was booked. Formatted without time zone, but always expressed in UTC.'
                pattern: '^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}'
              dateamended:
                type:
                  - string
                  - 'null'
                description: 'Date and time this journey was last amended (if applicable). Formatted without time zone, but always expressed in UTC.'
                pattern: '^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}'
              datecancelled:
                type:
                  - string
                  - 'null'
                description: 'Date and time this journey was cancelled (if applicable). Formatted without time zone, but always expressed in UTC.'
                pattern: '^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}'
              noadults:
                type: integer
                description: The number of adult passengers (age 12+) travelling
                minimum: 1
              nochildren:
                type: integer
                description: The number of child passengers (age 3 to 11) travelling
                minimum: 0
              noinfants:
                type: integer
                description: The number of infant passengers (age 0 to 2) travelling
                minimum: 0
              novehicles:
                type: integer
                minimum: 1
                description: 'The number of vehicles required. This field is present for private transfers, and omitted for shuttle (per person) transfers.'
              nopax:
                type: integer
                description: The number of passengers travelling (for shuttle bookings)
              productid:
                type: integer
                description: The unique identifier for this product. This is used to identify the route and vehicle provided by a supplier.
              producttype:
                type: string
                description: The type of vehicle being provided
              producttypeid:
                type: integer
                description: 'Identifier for the product type, which can be used to look up additional information'
              productdescription:
                type: string
                description: Information on the product
              transferimage:
                type: string
                description: Name of product image file
              productcategory:
                type: string
                description: |-
                  The name of the more generic category that the above vehicle belongs to.
                  
                    - Shuttle:  A standard shared shuttle service
                    - Taxi: A small private vehicle, typically a 1-4 passenger capacity
                    - Minibus: A mid-range private vehicle, typically 5-20 passenger capacities are available
                    - Coach: A large private vehicle
                    - Luxury: A more expensive private vehicle, including limousines and helicopters
                    - Green: Environmentally friendly vehicles
                    - Wheelchair Adapted: Vehicles specifically adapted to allow passengers in wheelchairs to board easily
                    - Non Refundable: Products which are exempt from our standard refund policy
              transportprovider:
                type: string
                description: The name of the supplier providing the service for this journey
              transfertime:
                type: integer
                description: 'The estimated time, in minutes, that the journey will take'
              minpax:
                type:
                  - integer
                  - 'null'
                description: The minimum number passengers the vehicle can hold (null for shuttles)
              maxpax:
                type:
                  - integer
                  - 'null'
                description: The maximum number passengers the vehicle can hold (null for shuttles)
              luggage:
                type: integer
                description: 'Maximum number of suitcases or bags the vehicle can hold (for shuttles, indicates 1 suitcase per person)'
              fromdetails:
                $ref: '#/components/schemas/pickup-location-details'
              todetails:
                $ref: '#/components/schemas/dropoff-location-details'
              instructions:
                type: object
                description: |-
                  Information that is useful for displaying on booking vouchers. It includes important telephone
                  numbers for the suppliers and Holiday Taxis along with instructions for the
                  passengers as to what to do on arrival/departure to locate their drivers.
                required:
                  - reconfirmationtel
                  - emergencytel
                  - hoursmonfri
                  - hoursat
                  - hourssun
                  - ukemergencytel
                  - airportmap
                  - instruction
                  - instructionnomarkup
                properties:
                  instruction:
                    type: string
                    description: The full written instructions for the passenger to help them find their driver on arrival / departure. Formatted using HTML.
                  instructionnomarkup:
                    type: string
                    description: The same text as 'instruction', but with all HTML markup removed.
                  reconfirmationtel:
                    type: string
                    description: The telephone number of the supplier, required to confirm the pickup details (if 'reconfirmationrequired' is set in the 'accommodation' block of the 'fromdetails').
                  emergencytel:
                    type: string
                    description: The emergency telephone number of the supplier, should the passenger need to contact them for any reason
                  hoursmonfri:
                    type: string
                    description: The Monday to Friday office hours of the supplier (expressed without time zone, in the local time of the transfer)
                  hoursat:
                    type: string
                    description: The Saturday office hours of the supplier (expressed without time zone, in the local time of the transfer)
                  hourssun:
                    type: string
                    description: The Sunday office hours of the supplier (expressed without time zone, in the local time of the transfer)
                  ukemergencytel:
                    type: string
                    description: The 24 hour Holiday Taxis emergency telephone number
                  airportmap:
                    type: 'null'
                    description: No longer used
                    deprecated: true
              pricing:
                type: object
                required:
                  - netprice
                  - totalprice
                  - transactionfee
                  - carbonoffset
                  - optionalextras
                  - creditamount
                  - prices
                properties:
                  netprice:
                    $ref: '#/components/schemas/fixed-precision-price'
                    description: The price of the transfer alone (excluding extras and fees), *before* any agency commission has been applied. (See 'fixed-precision-price' type.)
                  totalprice:
                    $ref: '#/components/schemas/fixed-precision-price'
                    description: The price of the transfer alone (excluding extras and fees) *after* any agency commission has been applied. (See 'fixed-precision-price' type.)
                  transactionfee:
                    type: string
                    description: The charge for card payments - always 0.00
                    enum:
                      - '0.00'
                  carbonoffset:
                    $ref: '#/components/schemas/fixed-precision-price'
                    description: The amount paid to offset the carbon emissions of the transfer. (See 'fixed-precision-price' type.)
                  optionalextras:
                    $ref: '#/components/schemas/fixed-precision-price'
                    description: The total price of any extras added to the booking. (See 'fixed-precision-price' type.)
                  creditamount:
                    $ref: '#/components/schemas/fixed-precision-price'
                    description: The total amount of any adjustments made to the price of the transfer by the Holiday Taxis customer services team. (See 'fixed-precision-price' type.)
                  prices:
                    type: array
                    description: Broken down details of the pricing for this transfer
                    items:
                      type: object
                      properties:
                        type:
                          type: string
                          description: The name of the pricing component
                          examples:
                            - Adult
                            - Vehicle
                            - Extra Suitcase
                        typecode:
                          type: string
                          description: The Holiday Taxis code for the pricing component; see [Pricing & Optional Extra Types](https://developer.holidaytaxis.com/ws2/overview.html#dictionary-pricing-types) for a list of currently used codes
                          examples:
                            - AD
                            - VEH
                            - EXS
                        description:
                          type: string
                          description: A brief description of the pricing component (not present for optional extras)
                          examples:
                            - Adult
                            - Vehicle
                        units:
                          type: integer
                          minimum: 1
                          description: The quantity of this pricing component that contribute to the net/total prices
                        netprice:
                          $ref: '#/components/schemas/fixed-precision-price'
                          description: The per-unit price of the pricing component *before* any agent commission has been applied. (See 'fixed-precision-price' type.)
                        totalprice:
                          $ref: '#/components/schemas/fixed-precision-price'
                          description: The per-unit price of the pricing component *after* any agent commission has been applied. (See 'fixed-precision-price' type.)
                      required:
                        - type
                        - typecode
                        - units
                        - netprice
                        - totalprice
            required:
              - transferorder
              - transferid
              - transferstatus
              - bookingtypeid
              - datebooked
              - dateamended
              - datecancelled
              - noadults
              - nochildren
              - noinfants
              - productid
              - producttype
              - productdescription
              - transferimage
              - productcategory
              - producttypeid
              - transportprovider
              - transfertime
              - luggage
              - fromdetails
              - todetails
              - instructions
              - pricing
    booking-contact:
      type: object
      description: The contact details of the lead passenger
      required:
        - title
        - firstname
        - lastname
        - email
        - telephone
      properties:
        title:
          type: string
          description: The title or salutation of the lead passenger.
        firstname:
          type: string
          description: The forename of the lead passenger.
        lastname:
          type: string
          description: The last name of the lead passenger.
        email:
          type: string
          description: The email address of the lead passenger.
        telephone:
          type: string
          description: The telephone number of the lead passenger.
    booking-request-general:
      type: object
      required:
        - paymenttype
      properties:
        orderreference:
          type:
            - string
            - 'null'
          description: |-
            An optional reference assigned by the agency / affiliate for this booking. 
            No validation is performed on the format of this field, but it is recommended to use a short
            unique value for each booking.
        paymenttype:
          type: string
          enum:
            - INV
            - CARD
            - ELV
          description: |-
            The way in which the agency / affiliate is paying for the booking.
            Accepted values depend on account setup, and may include:
            - INV - On account (requires an active invoicing agreement with Holiday Taxis)
            - CARD - Credit or debit card (requires a separate endpoint to securely transmit card details)
            - ELV - ELV or SEPA Direct Debit (no setup required, but restrictions apply)
    booking-request-extra-list:
      description: Details of any Optional Extras to include on the booking.
      type: array
      items:
        type: object
        properties:
          typecode:
            type: string
            description: The type of extra being booked
          units:
            type: integer
            minimum: 1
            description: The number of the above extra type being booked
        required:
          - typecode
          - units
    booking-request-payment:
      type: object
      description: |-
        Billing information and card or account payment details when the booking is not being paid by invoice.
        If present, this must contain either a "card" or "elv" block.
      properties:
        title:
          type: string
          description: The title or salutation of the card holder.
        forename:
          type: string
          description: The forename of the card holder.
        surname:
          type: string
          description: The last name of the card holder.
        telephone:
          type: string
          description: The telephone number of the card holder.
        addressline1:
          type: string
          description: The first line of the billing address for the card holder.
        addressline2:
          type: string
          description: The second line of the billing address for the card holder.
        addressline3:
          type: string
          description: The third line of the billing address for the card holder.
        postcode:
          type: string
          description: The postal code / zip code of the billing address for the card holder.
        card:
          type: object
          description: |-
            Details of debit or credit card for direct payment. Must be included if paying by debit or credit card, 
            omitted if paying by ELV/SEPA Direct Debit.
            
            Note that card payments require extra setup, and use a separate end-point, to ensure these details are
            processed securely in line with industry standards. Please contact Holiday Taxis if you wish to use this
            functionality.
          properties:
            cardtype:
              type: string
              description: The type of card being used for payment.
              enum:
                - visa
                - mastercard
                - maestro
                - visadebit
                - mastercarddebit
                - amex
            cardnumber:
              type: string
              description: The long card number printed on the card.
              pattern: '^[0-9]+$'
              minLength: 16
              maxLength: 16
            cv2:
              type: string
              description: The 3- or 4-digit security code on the car.
              minLength: 3
              maxLength: 4
              pattern: '^[0-9]+$'
            nameoncard:
              type: string
              description: The name that appears on the card.
            expirydate:
              type: string
              description: 'The month and year that the card expires, in the format MM-YYYY.'
              pattern: '^[01][0-9]-2[0-9][0-9][0-9]$'
            startdate:
              type: string
              description: 'The month and year that the card was issued, in the format MM-YYYY.'
              pattern: '^[01][0-9]-2[0-9][0-9][0-9]$'
            issueno:
              type: string
              description: The card issue number.
          required:
            - cardtype
            - cardnumber
            - cv2
            - nameoncard
            - expirydate
        auth3ds:
          type: object
          description: |-
            Specifies the result of a 3-D Secure authentication process, as supplied by an external payment service provider.

            Should be included if paying by debit or credit card to avoid payments being rejected; must be omitted if paying by ELV/SEPA Direct Debit.
          properties:
            version:
              type: string
              description: The version of the 3-D Secure protocol used
              example: 2.1.0
              pattern: '^[0-9.]+$'
            eci:
              type: string
              description: |-
                Electronic Commerce Indicator; indicates the status of the 3DS authentication:
                - "02" or "05" - fully authenticated
                - "01" or "06" - attempted but not completed
                - "00" or "07" - not attempted / failed
              pattern: '^0[0-9]$'
            ucaf:
              type: string
              description: 'Universal Cardholder Authentication Field; also known as AAV or CAVV, this is the cryptographic result of the authentication process. (Base64-encoded data.)'
            transactionid:
              type: string
              description: Additional identifier returned by 3-D Secure 2 implementations.
              format: uuid
          required:
            - version
            - eci
        elv:
          type: object
          required:
            - iban
            - bic
          description: |-
            Bank account details for paying via ELV (Elektronisches Lastschriftverfahren) or SEPA (Single Euro Payments Area) Direct Debit.

            Must be included if paying by ELV/SEPA Direct Debit, omitted if paying by debit or credit card.
          properties:
            iban:
              type: string
              description: '''International Bank Account Number'' for the account.'
            bic:
              type: string
              description: '''Bank Identifier Code'' for the account.'
      required:
        - title
        - forename
        - surname
        - addressline1
        - addressline2
        - postcode
  parameters:
    api-key-header:
      in: header
      name: API_KEY
      description: See Authentication section
      required: true
      schema:
        type: string
    agent-ref-header:
      in: header
      name: AGENT_REF
      description: |-
        If you wish to make a booking on account, you will need to pass an 'Agent Reference' in the header of
        your Create Booking request.
        
        A list of 'Agent References' linked to your account can be requested from sales.support@holidaytaxis.com
      schema:
        type: string
    format-header:
      in: header
      name: Accept
      description: Selects the preferred format for requests and responses (JSON or XML)
      required: true
      schema:
        type: string
        enum:
          - 'application/xml'
          - 'application/json'
    language-header:
      in: header
      name: Accept-Language
      description: |-
        ISO 639-1 Language code for the required language.
        
        The API will default to 'en' if this header is not included, or if an unsupported language code is passed.
      schema:
        type: string
        pattern: '^[a-z]{2}$'
        default: 'en'
    number-formatting-header:
      in: header
      name: DISABLE_NUMBER_FORMATTING
      description: |-
        By default, prices are formatted based on the output language, e.g. '1,234.00' for English
        and '1.234,00' for French.
        
        Set this header to 1 to disable this formatting, and always return with no thousand separator, 
        and '.' as decimal separator, e.g. '1234.00'
      schema:
        type: integer
        enum:
          - 0
          - 1
  securitySchemes:
    API_KEY:
      name: API_KEY
      type: apiKey
      in: header
      description: |-
        In order to connect to Web Services 2.0, you will need a HolidayTaxis.com API Key. If you do not have one, email us on [salessupport@holidaytaxis.com](mailto:salessupport@holidaytaxis.com).

        This API Key should be sent as an HTTP Header `API_KEY` with every request.
