openapi: 3.0.0
info:
  title: Rapid Cars
  description: Rapid Cars V2
  version: v2
servers:
  - url: https://test.ean.com/v2
  - url: https://api.ean.com/v2
tags:
  - name: Shopping
    description: The Shopping API provides you with access to live rates and availability for car rentals.
  - name: Booking
    description: The Booking API allows you to create and retrieve car bookings.
  - name: Manage Booking
    description: The Manage Booking API allows you to retrieve existing itineraries or cancel car bookings.
paths:
  /cars/availability:
    get:
      operationId: getCarAvailability
      summary: Get car rental availability
      tags:
        - Shopping
      description: |
        This API call provides a list of available rental cars based on specified criteria such as pickup location, dropoff location, and search radius. A maximum of 200 results can be returned per request. The response includes a car_rental_id, pickup and dropoff locations, ACRISS code, mileage, and more.
      security:
        - EgTokenAuth:
            - demand-solutions.rapid-car-api.all
      parameters:
        - $ref: '#/components/parameters/Accept'
        - $ref: '#/components/parameters/AcceptEncoding'
        - $ref: '#/components/parameters/CustomerIp'
        - $ref: '#/components/parameters/CustomerSessionId'
        - $ref: '#/components/parameters/UserAgent'
        - $ref: '#/components/parameters/ShopTestHeader'
        - $ref: '#/components/parameters/PickupTime'
        - $ref: '#/components/parameters/DropoffTime'
        - $ref: '#/components/parameters/PickupArea'
        - $ref: '#/components/parameters/DropoffArea'
        - $ref: '#/components/parameters/PickupAirport'
        - $ref: '#/components/parameters/DropoffAirport'
        - $ref: '#/components/parameters/DriverAge'
        - $ref: '#/components/parameters/Currency'
        - $ref: '#/components/parameters/Language'
        - $ref: '#/components/parameters/CountryCode'
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Sort'
        - $ref: '#/components/parameters/SalesChannel'
        - $ref: '#/components/parameters/SalesEnvironment'
        - $ref: '#/components/parameters/PackagedProduct'
        - $ref: '#/components/parameters/Filter'
        - $ref: '#/components/parameters/RateOption'
      responses:
        '200':
          $ref: '#/components/responses/CarAvailability'
        '400':
          $ref: '#/components/responses/Error400'
        '401':
          $ref: '#/components/responses/Error401'
        '403':
          $ref: '#/components/responses/Error403'
        '406':
          $ref: '#/components/responses/Error406'
        '426':
          $ref: '#/components/responses/Error426'
        '429':
          $ref: '#/components/responses/Error429'
        '500':
          $ref: '#/components/responses/Error500'
        '503':
          $ref: '#/components/responses/Error503'
  /cars/{car_rental_id}/details:
    get:
      operationId: getCarDetails
      summary: Car details
      tags:
        - Shopping
      description: |
        The link for this API call is included in the `availability` response. It provides detailed information about a car, including a breakdown of pricing and applicable policies.
      security:
        - EgTokenAuth:
            - demand-solutions.rapid-car-api.all
      parameters:
        - $ref: '#/components/parameters/Accept'
        - $ref: '#/components/parameters/AcceptEncoding'
        - $ref: '#/components/parameters/CustomerIp'
        - $ref: '#/components/parameters/CustomerSessionId'
        - $ref: '#/components/parameters/UserAgent'
        - $ref: '#/components/parameters/ShopTestHeader'
        - $ref: '#/components/parameters/CarRentalId'
        - $ref: '#/components/parameters/RapidToken'
      responses:
        '200':
          $ref: '#/components/responses/CarDetails'
        '400':
          $ref: '#/components/responses/Error400'
        '401':
          $ref: '#/components/responses/Error401'
        '403':
          $ref: '#/components/responses/Error403'
        '406':
          $ref: '#/components/responses/Error406'
        '426':
          $ref: '#/components/responses/Error426'
        '429':
          $ref: '#/components/responses/Error429'
        '500':
          $ref: '#/components/responses/Error500'
        '503':
          $ref: '#/components/responses/Error503'
  /itineraries/car:
    get:
      operationId: getItineraryByAffiliateReference
      description: |
        This API call returns itinerary details about a booking associated with the affiliate_reference_id and includes a link to cancel the booking.

        _Note:_ There may be a brief delay between the creation of a new itinerary and its availability for retrieval. If an error occurs while attempting to retrieve a recently created itinerary, please wait a few minutes and try again.
      summary: Retrieve Booking
      tags:
        - Manage Booking
      security:
        - EgTokenAuth:
            - demand-solutions.rapid-car-api.all
            - demand-solutions.rapid-car-itinerary.all
      parameters:
        - $ref: '#/components/parameters/Accept'
        - $ref: '#/components/parameters/AcceptEncoding'
        - $ref: '#/components/parameters/CustomerIp'
        - $ref: '#/components/parameters/CustomerSessionId'
        - $ref: '#/components/parameters/UserAgent'
        - $ref: '#/components/parameters/BookTestHeader'
        - $ref: '#/components/parameters/AffiliateReferenceId'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RetrieveResponse'
              examples:
                response:
                  $ref: '#/components/examples/retrieve-itineraries-list-200-success'
        '400':
          $ref: '#/components/responses/Error400'
        '401':
          $ref: '#/components/responses/Error401'
        '403':
          $ref: '#/components/responses/Error403'
        '406':
          $ref: '#/components/responses/Error406'
        '426':
          $ref: '#/components/responses/Error426'
        '429':
          $ref: '#/components/responses/Error429'
        '500':
          $ref: '#/components/responses/Error500'
        '503':
          $ref: '#/components/responses/Error503'
    post:
      operationId: createBooking
      description: |
        The link for this API call is included in the `details` response and is used to create a booking. If the booking was successful, the response will include an itinerary_id and the applicable links to retrieve reservation details or cancel the booking.
      summary: Create Booking
      tags:
        - Booking
      security:
        - EgTokenAuth:
            - demand-solutions.rapid-car-api.all
            - demand-solutions.rapid-car-itinerary.all
      parameters:
        - $ref: '#/components/parameters/Accept'
        - $ref: '#/components/parameters/AcceptEncoding'
        - $ref: '#/components/parameters/ContentType'
        - $ref: '#/components/parameters/CustomerIp'
        - $ref: '#/components/parameters/CustomerSessionId'
        - $ref: '#/components/parameters/UserAgent'
        - $ref: '#/components/parameters/BookTestHeader'
        - $ref: '#/components/parameters/RapidToken'
      requestBody:
        $ref: '#/components/requestBodies/RentalRequestBody'
      responses:
        '201':
          $ref: '#/components/responses/RentalResponseBody'
        '400':
          $ref: '#/components/responses/Error400'
        '401':
          $ref: '#/components/responses/Error401'
        '403':
          $ref: '#/components/responses/Error403'
        '406':
          $ref: '#/components/responses/Error406'
        '409':
          $ref: '#/components/responses/Error409PriceMismatch'
        '410':
          $ref: '#/components/responses/Error410SoldOut'
        '415':
          $ref: '#/components/responses/Error415'
        '426':
          $ref: '#/components/responses/Error426'
        '429':
          $ref: '#/components/responses/Error429'
        '500':
          $ref: '#/components/responses/Error500'
        '503':
          $ref: '#/components/responses/Error503'
  /itineraries/{itinerary_id}/car:
    get:
      operationId: getItineraryById
      description: |
        This API call returns reservation details for a given itinerary_id and includes a link to cancel the booking.

        _Note:_ There may be a brief delay between the creation of a new itinerary and its availability for retrieval. If an error occurs while attempting to retrieve a recently created itinerary, please wait a few minutes and try again.
      summary: Retrieve Booking
      tags:
        - Manage Booking
      security:
        - EgTokenAuth:
            - demand-solutions.rapid-car-api.all
            - demand-solutions.rapid-car-itinerary.all
      parameters:
        - $ref: '#/components/parameters/Accept'
        - $ref: '#/components/parameters/AcceptEncoding'
        - $ref: '#/components/parameters/CustomerIp'
        - $ref: '#/components/parameters/CustomerSessionId'
        - $ref: '#/components/parameters/UserAgent'
        - $ref: '#/components/parameters/BookTestHeader'
        - $ref: '#/components/parameters/ItineraryId'
      responses:
        '200':
          $ref: '#/components/responses/RetrieveResponseBody'
        '400':
          $ref: '#/components/responses/Error400'
        '401':
          $ref: '#/components/responses/Error401'
        '403':
          $ref: '#/components/responses/Error403'
        '406':
          $ref: '#/components/responses/Error406'
        '426':
          $ref: '#/components/responses/Error426'
        '429':
          $ref: '#/components/responses/Error429'
        '500':
          $ref: '#/components/responses/Error500'
        '503':
          $ref: '#/components/responses/Error503'
    delete:
      operationId: cancelBooking
      description: |
        The link for this API call will be available in the retrieve response and can be used to cancel an existing booking.
      summary: Cancel Booking
      tags:
        - Manage Booking
      security:
        - EgTokenAuth:
            - demand-solutions.rapid-car-api.all
            - demand-solutions.rapid-car-itinerary.all
      parameters:
        - $ref: '#/components/parameters/Accept'
        - $ref: '#/components/parameters/AcceptEncoding'
        - $ref: '#/components/parameters/CustomerIp'
        - $ref: '#/components/parameters/CustomerSessionId'
        - $ref: '#/components/parameters/UserAgent'
        - $ref: '#/components/parameters/BookTestHeader'
        - $ref: '#/components/parameters/ItineraryId'
      responses:
        '204':
          description: No Content - Booking successfully cancelled
        '400':
          $ref: '#/components/responses/Error400'
        '401':
          $ref: '#/components/responses/Error401'
        '403':
          $ref: '#/components/responses/Error403'
        '406':
          $ref: '#/components/responses/Error406'
        '426':
          $ref: '#/components/responses/Error426'
        '429':
          $ref: '#/components/responses/Error429'
        '500':
          $ref: '#/components/responses/Error500'
        '503':
          $ref: '#/components/responses/Error503'
components:
  securitySchemes:
    EgTokenAuth:
      type: oauth2
      description: This API uses Oauth2 with EGToken scheme.
      flows:
        clientCredentials:
          tokenUrl: https://api.ean.com/identity/oauth2/v3/token
          scopes:
            demand-solutions.rapid-car-api.all: Allows full access to Shopping calls but only allows mocked responses from Booking calls.
            demand-solutions.rapid-car-itinerary.all: Allows full access to Booking and Manage Booking calls.
  parameters:
    Accept:
      in: header
      name: Accept
      example: application/json
      description: |
        Specifies the response format. Only `application/json` is supported.
      required: true
      schema:
        type: string
        enum:
          - application/json
    AcceptEncoding:
      in: header
      name: Accept-Encoding
      example: gzip
      description: |
        Specifies the response encoding. Only `gzip` is supported.
      required: true
      schema:
        type: string
        enum:
          - gzip
    BookTestHeader:
      description: |
        Specifies the type of mocked response to be returned for API testing.
      name: Test
      in: header
      required: false
      schema:
        type: string
        enum:
          - standard
          - service_unavailable
          - internal_server_error
          - price_mismatch
          - car_unavailable
    CustomerIp:
      in: header
      name: Customer-Ip
      description: |
        Specifies the customer's IP address, captured by your integration. Only IPv4 addresses are supported.

        Ensure that your integration transmits the customer's IP address, not your own. This value is used to determine their location and assign the appropriate payment gateway.

        This IP address is also utilized for fraud prevention and critical analytics.
      required: false
      schema:
        type: string
        format: ipv4
    ContentType:
      in: header
      name: Content-Type
      example: application/json
      description: |
        Specifies the format of the request body. Only `application/json` is supported.
      required: true
      schema:
        type: string
        enum:
          - application/json
    CustomerSessionId:
      in: header
      name: Customer-Session-Id
      description: |
        Provide a unique value for each user session, starting with the first API call.

        Use the same value for all subsequent API calls during the user's session, and generate a new value for every new customer session.

        This value helps streamline internal debugging by explicitly linking request paths for individual user sessions.
      required: false
      schema:
        type: string
    Language:
      in: query
      name: language
      example: en-US
      description: |
        The response language must follow the BCP47 format, using hyphenated pairs of two-character language and country codes. Only ISO639-1 alpha-2 language codes and ISO3166-1 alpha-2 country codes are supported. Refer to [https://www.w3.org/International/articles/language-tags/](https://www.w3.org/International/articles/language-tags/) for more details.
      required: true
      schema:
        type: string
    CarRentalId:
      in: path
      name: car_rental_id
      description: Unique identifier for a car rental provided in the availability response.
      example: AQ_PvCPCWLLZGzhRf4YeMM1md7xEb41ZEhUz6ns4tIn6OjYrQtAT3LjMJKBV2wVNJVfS5rzOjsiTA5skmypO4SM85Kz0H6TAZEqcXSNr1YewA
      required: true
      schema:
        type: string
    UserAgent:
      in: header
      name: User-Agent
      examples:
        Chrome:
          value: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
        TravelNow:
          value: TravelNow/3.30.112
      description: |
        The `User-Agent` header string from the customer's request, captured by your integration, should represent the client's environment. 
        For applications, format the `User-Agent` value as `{application name}/{application version}`.
      required: true
      schema:
        type: string
    ShopTestHeader:
      name: Test
      in: header
      required: false
      description: |
        Specifies the type of mocked response to be returned for API testing.
      schema:
        type: string
        enum:
          - standard
          - service_unavailable
          - unknown_internal_error
    PickupTime:
      in: query
      name: pickup_time
      example: '2018-02-12T11:59:00'
      description: |
        Car rental pickup date and time, to be provided in ISO 8601 format without time zone information. This time will be interpreted in the context of the pickup location's time zone.
      required: true
      schema:
        type: string
        format: local-date-time
    DropoffTime:
      in: query
      name: dropoff_time
      example: '2018-02-12T11:59:00'
      description: |
        Car rental drop off date and time, to be provided in ISO 8601 format without time zone information. This time will be interpreted in the context of the drop off location's time zone.
      required: true
      schema:
        type: string
        format: local-date-time
    PickupArea:
      in: query
      name: pickup_area
      example: 10,37.9838,23.7275
      description: |
        Pickup location within a radius (in kilometers, range: 1-100) and coordinates. Format: radius,latitude,longitude.
        Only one of `pickup_area` or `pickup_airport` is required.
      required: false
      schema:
        type: string
        format: radius,latitude,longitude
    DropoffArea:
      in: query
      name: dropoff_area
      example: 10,37.9838,23.7275
      description: |
        Drop off location within a radius (in kilometers, range: 1-100) and coordinates. Format: radius,latitude,longitude.
        Only one of `dropoff_area` or `dropoff_airport` is required.
      required: false
      schema:
        type: string
        format: radius,latitude,longitude
    PickupAirport:
      in: query
      name: pickup_airport
      example: 4277587
      description: |
        Pickup airport ID. This value must correspond to a region_id with a type of "airport."
        Only one of `pickup_airport` or `pickup_coordinates` is required.
      required: false
      schema:
        type: number
    DropoffAirport:
      in: query
      name: dropoff_airport
      example: 4277587
      description: |
        Drop off airport ID. This value must correspond to a region_id with a type of "airport."
        Only one of `dropoff_airport` or `dropoff_coordinates` is required.
      required: false
      schema:
        type: number
    Limit:
      in: query
      name: limit
      example: 4
      description: |
        The maximum number of cars to return. For example, setting limit=4 will return the top 4 car rates based on the specified sort order.
      required: true
      schema:
        type: integer
        minimum: 1
        maximum: 200
    DriverAge:
      in: query
      name: driver_age
      example: 30
      description: The age of the primary driver, in years, to determine age-based fees and restrictions.
      required: true
      schema:
        type: integer
    Currency:
      in: query
      name: currency
      example: USD
      description: |
        Requested currency for the rates, to be provided in ISO 4217 format.
      required: true
      schema:
        type: string
    CountryCode:
      in: query
      name: country_code
      example: US
      description: |
        The country code of the traveler's point of sale, to be provided in ISO 3166-1 alpha-2 format. This should indicate the country where the shopping transaction occurs.
      required: true
      schema:
        type: string
    RapidToken:
      in: query
      name: token
      description: |
        Provided as part of the link object and used to maintain state across calls. 
        This simplifies each subsequent call by limiting the amount of information required at each step and reduces the potential for errors. 
        Token values cannot be viewed or changed.
      required: true
      schema:
        type: string
    Sort:
      in: query
      name: sort
      example: recommended
      description: |
        You must provide the sort order for car rentals.<br>
        Accepted values:<br>
        * `recommended` - Uses machine learning to sort results based on search criteria and relevancy.
        * `total_price` - A lowest to highest sort order based on the total price of the rental.
        * `customer_rating` - A highest to lowest sort order based on the overall rating of the pickup location.
        * `distance` - A nearest to farthest sort order based on the distance between the center of the pickup_area and the pickup location. This sort order is only allowed for searches with a pickup_area (radius & coordinates).
      required: true
      schema:
        type: string
        enum:
          - recommended
          - total_price
          - customer_rating
          - distance
    SalesChannel:
      in: query
      name: sales_channel
      example: website
      description: |
        You must provide the sales channel for the display of rates.<br>
        Accepted values:<br>
        * `website` - Standard website accessed from the customer's computer.
        * `agent_tool` - Your own agent tool used by your call center or retail store agent.
        * `mobile_app` - An application installed on a phone or tablet device.
        * `mobile_web` - A web browser application on a phone or tablet device.
        * `meta` - Rates will be passed to and displayed on a 3rd party comparison website.
        * `cache` - Rates will be used to populate a local cache.
      required: true
      schema:
        type: string
        enum:
          - website
          - agent_tool
          - mobile_app
          - mobile_web
          - meta
          - cache
    SalesEnvironment:
      in: query
      name: sales_environment
      example: car_only
      description: |
        You must provide the sales environment in which rates will be sold.<br>
        Accepted values:<br>
        * `car_package` - Use when selling the car rental with another product, e.g. car & hotel.
        * `car_only` - Use when selling the car rental as an individual product.
      required: true
      schema:
        type: string
        enum:
          - car_package
          - car_only
    PackagedProduct:
      in: query
      name: packaged_product
      example:
        - hotel
      description: |
        When shopping for package or cross-sell rates, you must specify the type of product(s) being sold with the car rental.
      style: form
      explode: true
      schema:
        type: array
        items:
          type: string
          enum:
            - hotel
            - flight
    Filter:
      in: query
      name: filter
      example:
        - expedia_collect
      description: |
        Accepted values:<br>
        * `refundable` - Only returns fully refundable rates. "Fully refundable rates" are rates that can be refunded for the full amount. This may only apply to certain time windows. Check cancel_penalties for detailed policy information.
        * `expedia_collect` - Only returns rates with payment collected by Expedia at the time of booking.
        * `vendor_collect` - Only returns rates with payment collected by the vendor at the time of pickup.
      style: form
      explode: true
      schema:
        type: array
        items:
          type: string
          enum:
            - refundable
            - expedia_collect
            - vendor_collect
    RateOption:
      in: query
      name: rate_option
      example:
        - member
      description: |
        Accepted values:<br>
        * `member` - Request member rates. This feature must be enabled and requires a user to be logged in to request these rates.
        * `cross_sell` - Request cross sell rates when the traffic is coming from a cross sell booking. The traveler must have booked another service (hotel, flight, activities...) before the car rental.
      style: form
      explode: true
      schema:
        type: array
        items:
          type: string
          enum:
            - member
            - cross_sell
    ItineraryId:
      in: path
      name: itinerary_id
      description: The itinerary ID from the booking response.
      example: '123456789'
      required: true
      schema:
        type: string
    AffiliateReferenceId:
      in: query
      name: affiliate_reference_id
      description: |
        The affiliate reference ID associated with the booking.

        This field supports a minimum of 3 characters, maximum of 28 characters, and is required to be unique per booking.
        Entering special characters ("<", ">", "(", ")", and "&") in this field will result in the request being rejected.
      example: 111A222BB33344CC5555
      required: true
      schema:
        type: string
  requestBodies:
    RentalRequestBody:
      content:
        application/json:
          schema:
            required:
              - affiliate_reference_id
              - primary_driver
              - payment_token
            properties:
              affiliate_reference_id:
                type: string
                description: |-
                  Specifies the affiliate reference ID associated with the booking.
                  This field supports a minimum of 3 characters, maximum of 28 characters, and is required to be unique per booking. Entering special characters ("<", ">", "(", ")", and "&") in this field will result in the request being rejected.
                example: 111A222BB33344CC5555
              primary_driver:
                $ref: '#/components/schemas/PrimaryDriver'
              flight_details:
                $ref: '#/components/schemas/FlightDetails'
              traveler_loyalty_member_id:
                type: string
                description: Specifies the unique identifier associated with a loyalty program member.
                example: ABD123
              requested_extras:
                type: array
                items:
                  type: string
                  description: Specifies the identifier for the optional extra being requested.
                  example: BabyChildSeat
              affiliate_metadata:
                type: string
                description: This field stores up to 256 characters of additional metadata with the itinerary. It will be returned on all retrieve responses for this itinerary. The data must be in the format 'key1:value|key2:value|key3:value'. Other Special characters ("<", ">", "(", ")", and "&") entered in this field will be re-encoded.
                example: data_point_1:123|data_point2:This is data.
              payment_token:
                type: string
                description: Encoded payment token generated by the payment service. The decoded token gives payment_id, payment_verification_id, etc.
  responses:
    Error400:
      description: Bad Request
      headers:
        Rate-Limit-Day:
          description: Reserved for future use. Optional header for request capacity per day.
          schema:
            type: number
        Rate-Limit-Day-Remaining:
          description: Optional header for the remaining capacity, as a percentage, for the daily time window.
          schema:
            type: number
        Rate-Limit-Day-Reset:
          description: Optional header for the timestamp, as the number of milliseconds since the Unix Epoch, when the daily capacity resets.
          schema:
            type: number
        Rate-Limit-Minute:
          description: Reserved for future use. Optional header for request capacity per minute.
          schema:
            type: number
        Rate-Limit-Minute-Remaining:
          description: Optional header for the remaining capacity, as a percentage, for the per minute time window.
          schema:
            type: number
        Rate-Limit-Minute-Reset:
          description: Optional header for the timestamp, as the number of milliseconds since the Unix Epoch, when the per minute capacity resets.
          schema:
            type: number
        Rate-Limit-Reduction-Status:
          description: Optional header that indicates the state (inactive, active) of minute capacity reduction triggered once all daily capacity has been used.
          schema:
            type: string
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            response:
              $ref: '#/components/examples/invalid-input'
    Error401:
      description: Unauthorized
      headers:
        WWW-Authenticate:
          description: Provides an example of the Authorization header.
          schema:
            type: string
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            response:
              $ref: '#/components/examples/request-unauthenticated'
    Error403:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            response:
              $ref: '#/components/examples/request-unauthorized'
    Error406:
      description: Not Acceptable
      headers:
        Rate-Limit-Day:
          description: Reserved for future use. Optional header for request capacity per day.
          schema:
            type: number
        Rate-Limit-Day-Remaining:
          description: Optional header for the remaining capacity, as a percentage, for the daily time window.
          schema:
            type: number
        Rate-Limit-Day-Reset:
          description: Optional header for the timestamp, as the number of milliseconds since the Unix Epoch, when the daily capacity resets.
          schema:
            type: number
        Rate-Limit-Minute:
          description: Reserved for future use. Optional header for request capacity per minute.
          schema:
            type: number
        Rate-Limit-Minute-Remaining:
          description: Optional header for the remaining capacity, as a percentage, for the per minute time window.
          schema:
            type: number
        Rate-Limit-Minute-Reset:
          description: Optional header for the timestamp, as the number of milliseconds since the Unix Epoch, when the per minute capacity resets.
          schema:
            type: number
        Rate-Limit-Reduction-Status:
          description: Optional header that indicates the state (inactive, active) of minute capacity reduction triggered once all daily capacity has been used.
          schema:
            type: string
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            response:
              $ref: '#/components/examples/invalid-accept-header'
    Error409PriceMismatch:
      description: Conflict - Price Mismatch
      headers:
        Rate-Limit-Day:
          schema:
            type: number
          description: Reserved for future use. Optional header for request capacity per day.
        Rate-Limit-Day-Remaining:
          schema:
            type: number
          description: Optional header for the remaining capacity, as a percentage, for the daily time window.
        Rate-Limit-Day-Reset:
          schema:
            type: number
          description: Optional header for the timestamp, as the number of milliseconds since the Unix Epoch, when the daily capacity resets.
        Rate-Limit-Minute:
          schema:
            type: number
          description: Reserved for future use. Optional header for request capacity per minute.
        Rate-Limit-Minute-Remaining:
          schema:
            type: number
          description: Optional header for the remaining capacity, as a percentage, for the per minute time window.
        Rate-Limit-Minute-Reset:
          schema:
            type: number
          description: Optional header for the timestamp, as the number of milliseconds since the Unix Epoch, when the per minute capacity resets.
        Rate-Limit-Reduction-Status:
          schema:
            type: string
          description: Optional header that indicates the state (inactive, active) of minute capacity reduction triggered once all daily capacity has been used.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            response:
              $ref: '#/components/examples/create-booking-409-price-mismatch'
    Error410SoldOut:
      description: Gone - Sold Out
      headers:
        Rate-Limit-Day:
          schema:
            type: number
          description: Reserved for future use. Optional header for request capacity per day.
        Rate-Limit-Day-Remaining:
          schema:
            type: number
          description: Optional header for the remaining capacity, as a percentage, for the daily time window.
        Rate-Limit-Day-Reset:
          schema:
            type: number
          description: Optional header for the timestamp, as the number of milliseconds since the Unix Epoch, when the daily capacity resets.
        Rate-Limit-Minute:
          schema:
            type: number
          description: Reserved for future use. Optional header for request capacity per minute.
        Rate-Limit-Minute-Remaining:
          schema:
            type: number
          description: Optional header for the remaining capacity, as a percentage, for the per minute time window.
        Rate-Limit-Minute-Reset:
          schema:
            type: number
          description: Optional header for the timestamp, as the number of milliseconds since the Unix Epoch, when the per minute capacity resets.
        Rate-Limit-Reduction-Status:
          schema:
            type: string
          description: Optional header that indicates the state (inactive, active) of minute capacity reduction triggered once all daily capacity has been used.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            response:
              $ref: '#/components/examples/create-booking-410-sold-out'
    Error415:
      description: Unsupported Media Type
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            response:
              $ref: '#/components/examples/unsupported-media-type'
    Error426:
      description: Upgrade Required
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            response:
              $ref: '#/components/examples/upgrade-required'
    Error429:
      description: Too Many Requests
      headers:
        Rate-Limit-Day:
          description: Reserved for future use. Optional header for request capacity per day.
          schema:
            type: number
        Rate-Limit-Day-Remaining:
          description: Optional header for the remaining capacity, as a percentage, for the daily time window.
          schema:
            type: number
        Rate-Limit-Day-Reset:
          description: Optional header for the timestamp, as the number of milliseconds since the Unix Epoch, when the daily capacity resets.
          schema:
            type: number
        Rate-Limit-Minute:
          description: Reserved for future use. Optional header for request capacity per minute.
          schema:
            type: number
        Rate-Limit-Minute-Remaining:
          description: Optional header for the remaining capacity, as a percentage, for the per minute time window.
          schema:
            type: number
        Rate-Limit-Minute-Reset:
          description: Optional header for the timestamp, as the number of milliseconds since the Unix Epoch, when the per minute capacity resets.
          schema:
            type: number
        Rate-Limit-Reduction-Status:
          description: Optional header that indicates the state (inactive, active) of minute capacity reduction triggered once all daily capacity has been used.
          schema:
            type: string
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            response:
              $ref: '#/components/examples/too-many-requests'
    Error500:
      description: Unknown Internal Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            response:
              $ref: '#/components/examples/unknown-internal-error'
    Error503:
      description: Service Unavailable
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            response:
              $ref: '#/components/examples/service-unavailable'
    CarAvailability:
      description: OK
      headers:
        Rate-Limit-Day:
          description: Reserved for future use. Optional header for request capacity per day.
          schema:
            type: number
        Rate-Limit-Day-Remaining:
          description: Optional header for the remaining capacity, as a percentage, for the daily time window.
          schema:
            type: number
        Rate-Limit-Day-Reset:
          description: Optional header for the timestamp, as the number of milliseconds since the Unix Epoch, when the daily capacity resets.
          schema:
            type: number
        Rate-Limit-Minute:
          description: Reserved for future use. Optional header for request capacity per minute.
          schema:
            type: number
        Rate-Limit-Minute-Remaining:
          description: Optional header for the remaining capacity, as a percentage, for the per minute time window.
          schema:
            type: number
        Rate-Limit-Minute-Reset:
          description: Optional header for the timestamp, as the number of milliseconds since the Unix Epoch, when the per minute capacity resets.
          schema:
            type: number
        Rate-Limit-Reduction-Status:
          description: Optional header that indicates the state (inactive, active) of minute capacity reduction triggered once all daily capacity has been used.
          schema:
            type: string
      content:
        application/json:
          schema:
            type: array
            items:
              $ref: '#/components/schemas/Car'
          examples:
            responses:
              $ref: '#/components/examples/car-availability-list-200-success'
    CarDetails:
      description: OK
      headers:
        Rate-Limit-Day:
          description: Reserved for future use. Optional header for request capacity per day.
          schema:
            type: number
        Rate-Limit-Day-Remaining:
          description: Optional header for the remaining capacity, as a percentage, for the daily time window.
          schema:
            type: number
        Rate-Limit-Day-Reset:
          description: Optional header for the timestamp, as the number of milliseconds since the Unix Epoch, when the daily capacity resets.
          schema:
            type: number
        Rate-Limit-Minute:
          description: Reserved for future use. Optional header for request capacity per minute.
          schema:
            type: number
        Rate-Limit-Minute-Remaining:
          description: Optional header for the remaining capacity, as a percentage, for the per minute time window.
          schema:
            type: number
        Rate-Limit-Minute-Reset:
          description: Optional header for the timestamp, as the number of milliseconds since the Unix Epoch, when the per minute capacity resets.
          schema:
            type: number
        Rate-Limit-Reduction-Status:
          description: Optional header that indicates the state (inactive, active) of minute capacity reduction triggered once all daily capacity has been used.
          schema:
            type: string
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CarDetails'
          examples:
            BasicCarDetailsResponse:
              $ref: '#/components/examples/car-details-200-success'
    RentalResponseBody:
      description: Created
      headers:
        Rate-Limit-Day:
          description: Reserved for future use. Optional header for request capacity per day.
          schema:
            type: number
        Rate-Limit-Day-Remaining:
          description: Optional header for the remaining capacity, as a percentage, for the daily time window.
          schema:
            type: number
        Rate-Limit-Day-Reset:
          description: Optional header for the timestamp, as the number of milliseconds since the Unix Epoch, when the daily capacity resets.
          schema:
            type: number
        Rate-Limit-Minute:
          description: Reserved for future use. Optional header for request capacity per minute.
          schema:
            type: number
        Rate-Limit-Minute-Remaining:
          description: Optional header for the remaining capacity, as a percentage, for the per minute time window.
          schema:
            type: number
        Rate-Limit-Minute-Reset:
          description: Optional header for the timestamp, as the number of milliseconds since the Unix Epoch, when the per minute capacity resets.
          schema:
            type: number
        Rate-Limit-Reduction-Status:
          description: Optional header that indicates the state (inactive, active) of minute capacity reduction triggered once all daily capacity has been used.
          schema:
            type: string
      content:
        application/json:
          schema:
            properties:
              itinerary_id:
                type: string
                description: The itinerary ID.
              links:
                type: object
                description: A map of links, including links to retrieve a rental or cancel rental.
                properties:
                  retrieve:
                    $ref: '#/components/schemas/Link'
          examples:
            BasicCreateResponse:
              $ref: '#/components/examples/create-booking-201-success'
    RetrieveResponseBody:
      description: OK
      headers:
        Rate-Limit-Day:
          description: Reserved for future use. Optional header for request capacity per day.
          schema:
            type: number
        Rate-Limit-Day-Remaining:
          description: Optional header for the remaining capacity, as a percentage, for the daily time window.
          schema:
            type: number
        Rate-Limit-Day-Reset:
          description: Optional header for the timestamp, as the number of milliseconds since the Unix Epoch, when the daily capacity resets.
          schema:
            type: number
        Rate-Limit-Minute:
          description: Reserved for future use. Optional header for request capacity per minute.
          schema:
            type: number
        Rate-Limit-Minute-Remaining:
          description: Optional header for the remaining capacity, as a percentage, for the per minute time window.
          schema:
            type: number
        Rate-Limit-Minute-Reset:
          description: Optional header for the timestamp, as the number of milliseconds since the Unix Epoch, when the per minute capacity resets.
          schema:
            type: number
        Rate-Limit-Reduction-Status:
          description: Optional header that indicates the state (inactive, active) of minute capacity reduction triggered once all daily capacity has been used.
          schema:
            type: string
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/RetrieveResponse'
          examples:
            response:
              $ref: '#/components/examples/retrieve-itineraries-200-success'
  schemas:
    PrimaryDriver:
      type: object
      required:
        - given_name
        - family_name
        - phone
        - email
      properties:
        given_name:
          type: string
          description: First name of driver.
          example: John
        middle_name:
          type: string
          description: Middle name of the driver
          example: George
        family_name:
          type: string
          description: Last name of driver.
          example: Doe
        phone:
          $ref: '#/components/schemas/PhoneRequest'
        email:
          type: string
          description: Email address for the customer. Must adhere to standard email format. Special characters ("<", ">", "(", ")", and "&") entered in this field will be re-encoded.
          example: john@website.com
        age:
          type: integer
          description: Age of the driver.
          example: 25
          minimum: 1
    FlightDetails:
      type: object
      description: Details about a flight
      required:
        - air_carrier_code
        - flight_number
      properties:
        air_carrier_code:
          type: string
          description: The air carrier code. Must be a 2 character code.
          example: G4
          maxLength: 2
          minLength: 2
        flight_number:
          type: integer
          description: The flight number. Must be a 1-4 digit number.
          example: 778
          maximum: 9999
          minimum: 0
    PhoneRequest:
      type: object
      required:
        - country_code
        - number
      description: The entire phone number must be represented across the three fields in this object.
      properties:
        country_code:
          type: string
          description: The numerical portion of the country code from the phone number. Do not include the leading '+' character. Special characters ("<", ">", "(", ")", and "&") entered in this field will be re-encoded.
          example: '1'
        area_code:
          type: string
          description: The area code of the phone number. Special characters ("<", ">", "(", ")", and "&") entered in this field will be re-encoded.
          example: '487'
        number:
          type: string
          description: The remaining digits of the phone number. Special characters ("<", ">", "(", ")", and "&") entered in this field will be re-encoded.
          example: '5550077'
    Address:
      type: object
      description: Container for the property's address information.
      properties:
        line_1:
          type: string
          description: Address line 1.
        line_2:
          type: string
          description: Address line 2.
        city:
          type: string
          description: City.
        state_province_name:
          type: string
          description: Text name of the State/Province - more common for additional countries.
        postal_code:
          type: string
          description: Postal/zip code.
        country_code:
          type: string
          description: 2-letter country code, in ISO 3166-1 alpha-2 format.
    Amount:
      type: object
      description: The monetary amount.
      properties:
        value:
          description: The value of the amount object. Decimal point inline with correct precision.
          type: string
          example: '123.45'
        currency:
          description: Currency of the amount object.
          type: string
          example: USD
    Vendor:
      type: object
      description: The vendor providing the rental.
      properties:
        id:
          type: string
          description: The vendor ID for use in looking up vendor details.
          example: GH
        name:
          type: string
          example: Avis
        image:
          type: object
          description: An individual image, representing the icon image of the vendor.
          properties:
            caption:
              type: string
              description: Image caption.
            links:
              type: object
              additionalProperties:
                $ref: '#/components/schemas/Link'
              description: Contains URLs for all of the image sizes available.
    Location:
      type: object
      description: A car rental location.
      properties:
        name:
          type: string
          description: Name of the location
          example: Counter and car in terminal
        description:
          type: string
          description: Description
          example: Rental car counter and car in the airport.
        address:
          $ref: '#/components/schemas/Address'
        coordinates:
          $ref: '#/components/schemas/Coordinates'
        type:
          type: string
          description: The type of location being offered.
          example: airport
          enum:
            - airport
            - non_airport
        airport_code:
          type: string
          description: The three-letter IATA code of the airport. This property will only be present when the location type is Airport.
          example: SEA
        vendor:
          type: string
          description: The name of the vendor.
          example: Avis
        hours_of_operation:
          type: array
          items:
            type: object
            properties:
              start_time:
                type: string
                format: local-date-time
                description: The start
                example: '2018-02-12T06:00:00'
              end_time:
                type: string
                format: local-date-time
                description: The end
                example: '2018-02-12T23:00:00'
        rating:
          $ref: '#/components/schemas/Rating'
    NumberOfDoors:
      type: object
      description: The number of doors for this vehicle.
      properties:
        min:
          type: integer
          description: The minimum number of doors for this vehicle.
          example: 2
        max:
          type: integer
          description: The maximum number of doors for this vehicle.
          example: 4
    LuggageCount:
      type: object
      description: Amount of luggage that the car can hold.
      properties:
        small:
          type: number
          description: The number of small luggage that the car can hold.
          example: 2
        large:
          type: number
          description: The number of large luggage that the car can hold.
          example: 3
    AcrissCode:
      type: string
      description: The ACRISS code for this vehicle. See [ACRISS Codes](https://www.acriss.org/car-codes/expanded-matrix/) for an exhaustive list.
      example: PCAR
    FuelLevel:
      type: string
      description: The fuel policy for this vehicle.
      example: full_to_full
      enum:
        - full_to_full
    Car:
      type: object
      description: The car object.
      properties:
        car_rental_id:
          type: string
          description: The rental ID for use in looking up car details.
          example: AQ_PvCPCWLLZGzhRf4YeMM1md7xEb41ZEhUz6ns4tIn6Nv-m9LtrUYMhZ4F_a0Xkqu2rGXht4g0Zd53gL4e9yMh0fMVtqe0jKkaZKaBghFVtc
        vendor:
          $ref: '#/components/schemas/Vendor'
        locations:
          type: object
          description: The pickup and dropoff locations.
          properties:
            pickup:
              $ref: '#/components/schemas/Location'
            dropoff:
              $ref: '#/components/schemas/Location'
        description:
          type: string
          example: Nissan Rogue or similar
          description: The description of the car being offered (e.g. Nissan Rogue or similar).
        number_of_passengers:
          type: number
          description: The maximum number of passengers for this vehicle.
          example: 5
        number_of_doors:
          $ref: '#/components/schemas/NumberOfDoors'
        luggage_count:
          $ref: '#/components/schemas/LuggageCount'
        acriss_code:
          $ref: '#/components/schemas/AcrissCode'
        mileage_tracking:
          type: string
          description: Describes how mileage will be tracked for this vehicle.
          example: First 100 miles free per day, then $0.25 per mile.
        image:
          type: object
          description: An individual image, representing a similar vehicle to what is being offered.
          properties:
            caption:
              type: string
              description: Image caption.
            links:
              type: object
              description: Contains URLs for all of the image sizes available.
              properties:
                rental_image:
                  $ref: '#/components/schemas/Link'
        rate:
          $ref: '#/components/schemas/Rate'
        cancel_penalties:
          type: array
          description: An array of cancellation penalties that may apply.
          items:
            $ref: '#/components/schemas/CancelPenalty'
        links:
          type: object
          description: Contains the URL for a link to details on the car rental.
          properties:
            details:
              $ref: '#/components/schemas/Link'
          example:
            details:
              method: GET
              href: https://test.ean.com/v2/cars/1234/details?token=MY5S3j36cOcLfLBZjPYQ1abhfc8CqmjmFVzkk7euvWaunE57LLeDgaxm516m
    Rate:
      type: object
      description: The rate object.
      properties:
        merchant_of_record:
          type: string
          description: The merchant of record.
          example: expedia
          enum:
            - expedia
            - vendor
        sale_scenario:
          $ref: '#/components/schemas/SaleScenario'
        pricing:
          type: object
          description: |
            * `daily_rate_strikethrough` - Provides the non-discounted daily rate of the car, excluding taxes and fees. If present, this value should be displayed with a strikethrough to indicate it represents the original daily rate of the car.
            * `daily_rate` - Provides the daily rate of the car, excluding taxes and fees.
            * `fees` - Provides a list of mandatory taxes and fees that apply to the entire reservation (not divided per day).
          properties:
            daily_rate_strikethrough:
              $ref: '#/components/schemas/Charge'
            daily_rate:
              $ref: '#/components/schemas/Charge'
            fees:
              description: Array of amount objects. Details any charges that apply to the entire reservation (not divided per day).
              type: array
              items:
                $ref: '#/components/schemas/Fee'
            totals:
              type: object
              description: |
                * `inclusive_strikethrough` - Provides the non-discounted total price including taxes and fees. If present, this value should be displayed with a strikethrough to indicate it represents the original price.
                * `inclusive` - Provides the total price including taxes and fees.
                * `exclusive` - Provides the total price excluding taxes and fees.
                * `fees` - Provides the total price of taxes and fees.
                * `extras` - Provides a total price of the requested extras (if applicable).
                * `due_at_booking` - Provides the total price due at booking.
              properties:
                inclusive_strikethrough:
                  $ref: '#/components/schemas/Charge'
                inclusive:
                  $ref: '#/components/schemas/Charge'
                exclusive:
                  $ref: '#/components/schemas/Charge'
                fees:
                  $ref: '#/components/schemas/Charge'
                extras:
                  $ref: '#/components/schemas/Charge'
                due_at_booking:
                  $ref: '#/components/schemas/Charge'
    SaleScenario:
      type: object
      properties:
        package:
          type: boolean
          description: |
            If true, this rate has been provided to be bundled with hotel, air, etc. and displayed as a total package price.

            If shopping in a cross-sell scenario and using the cross-sell rate option, this indicates that the rate is a package rate available to be sold as an add-on to an existing itinerary.
          example: false
        member:
          type: boolean
          description: |
            If true, this rate has a "Member Only Deal" discount applied to the rate.

            Partners must be enabled to receive "Member Only Deals". If interested, partners should speak to their account representatives.

            This parameter can be used to merchandise if a "Member Only Deal" has been applied, which will help drive loyalty. In addition, it can be used by OTA's to create an opaque, but public shopping experience.
          example: false
        mobile_promotion:
          type: boolean
          description: If true, this rate has an associated mobile promotion which can be advertised as a special mobile only rate.
          example: false
    OptionalExtra:
      type: object
      properties:
        id:
          type: string
          description: The ID to use when requesting an optional extra at the time of booking.
          example: BabyChildSeat
        name:
          type: string
          description: A non-localized, short description of the optional extra.
          example: Baby Child Seat
        daily_rate:
          $ref: '#/components/schemas/Charge'
    Charge:
      description: An object representing a charge. Information about the charge is provided in both the billable currency and the request currency.
      type: object
      properties:
        billable_currency:
          $ref: '#/components/schemas/Amount'
        request_currency:
          $ref: '#/components/schemas/Amount'
    CancelPenalty:
      description: An object representing a cancellation penalty. Information about the penalty is provided in both the billable currency and the request currency.
      type: object
      properties:
        start:
          example: '2018-02-12T11:59:00'
          description: |
            The time after which the cancellation penalty applies, provided in ISO 8601 format.
            If start_time is not provided, the cancellation penalty applies from the time of booking until the next start_time or the rental pickup_time, whichever occurs first.
          type: string
          format: local-date-time
        end:
          example: '2018-02-12T11:59:00'
          description: |
            The time before which the cancellation penalty applies, provided in ISO 8601 format.
            If end_time is not provided, the cancellation penalty applies until the start of the rental period.
          type: string
          format: local-date-time
        currency:
          description: The currency of the cancellation penalty.
          type: string
          example: USD
        amount:
          description: The amount of the cancellation penalty. Decimal point inline with correct precision.
          type: string
          example: '123.45'
        percent:
          description: The percentage of the total rental cost due as a cancellation penalty.
          type: string
          example: 10%
    Error:
      type: object
      description: The overall class of error that occurred.
      properties:
        type:
          description: The error type.
          type: string
        message:
          description: A human readable message giving details about this error.
          type: string
        fields:
          type: array
          description: Details about the specific fields that had an error.
          items:
            $ref: '#/components/schemas/Field'
        errors:
          type: array
          description: An array of all the actual errors that occurred.
          items:
            $ref: '#/components/schemas/ErrorIndividual'
    ErrorIndividual:
      type: object
      description: An individual error.
      properties:
        type:
          type: string
          description: The error type.
        message:
          type: string
          description: A human readable message giving details about this error.
        fields:
          type: array
          description: Details about the specific fields that had an error.
          items:
            $ref: '#/components/schemas/Field'
    Field:
      type: object
      description: An individual field that had an error.
      properties:
        name:
          type: string
          description: The field that had an error.
        type:
          type: string
          description: The type of the field that had an error.
        value:
          type: string
          description: The value of the field that had an error.
    Link:
      type: object
      description: An individual link.
      properties:
        method:
          type: string
          description: The request method used to access the link.
        href:
          type: string
          format: uri-reference
          description: The URL for the link. This can be absolute or relative.
        expires:
          type: string
          description: If the link expires, this will be the UTC date the link will expire, in ISO 8601 format.
    CarDetails:
      type: object
      description: The car details response.
      properties:
        locations:
          type: object
          description: The pickup and dropoff locations.
          properties:
            pickup:
              $ref: '#/components/schemas/Location'
            dropoff:
              $ref: '#/components/schemas/Location'
        vendor:
          $ref: '#/components/schemas/Vendor'
        description:
          type: string
          description: The description of the car being offered (e.g. Nissan Rogue or similar).
          example: Nissan Rogue or similar
        pickup_time:
          type: string
          format: local-date-time
          description: The date and time the car will be picked up.
          example: '2024-10-12T11:59:00'
        dropoff_time:
          type: string
          format: local-date-time
          description: The date and time the car will be dropped off.
          example: '2024-11-12T11:59:00'
        number_of_passengers:
          example: 5
          type: number
          description: The maximum number of passengers for this vehicle.
        number_of_doors:
          $ref: '#/components/schemas/NumberOfDoors'
        acriss_code:
          $ref: '#/components/schemas/AcrissCode'
        mileage_tracking:
          type: string
          description: Describes how mileage will be tracked for this vehicle.
          example: First 100 miles free per day, then $0.25 per mile.
        luggage_count:
          $ref: '#/components/schemas/LuggageCount'
        fuel_level:
          $ref: '#/components/schemas/FuelLevel'
        image:
          type: object
          description: An individual image, representing a similar vehicle to what is being offered.
          properties:
            caption:
              type: string
              description: Image caption.
            links:
              type: object
              additionalProperties:
                $ref: '#/components/schemas/Link'
              description: Contains URLs for all of the image sizes available.
        policies:
          type: array
          items:
            type: object
            properties:
              name:
                type: string
                description: The heading or title of the policy.
              descriptions:
                type: array
                items:
                  type: string
                  description: Explains or describes the policy in more detail.
              policy_statements:
                type: array
                items:
                  type: object
                  properties:
                    statement:
                      type: string
                      description: A short statement or phrase qualifying the policy.
                    statement_condition:
                      type: string
                      description: A description of a condition that must hold for the policy to be true.
              policy_type:
                type: string
                description: The type of the policy
        optional_extras:
          type: array
          items:
            $ref: '#/components/schemas/OptionalExtra'
        rate:
          $ref: '#/components/schemas/Rate'
        cancel_penalties:
          type: array
          description: An array of cancellation penalties that may apply.
          items:
            $ref: '#/components/schemas/CancelPenalty'
        links:
          type: object
          description: A map of links for the next step(s) in the booking process.
          example:
            payment:
              method: POST
              href: https://pay-test.ean.com/v1/payments?token=K~IjZ45n9y8TKnmQeJ2jQKZxJcYDFCOjkqIl6wLmcyVQlZBVUKLZctxg==
            book:
              method: POST
              href: https://test.ean.com/v2/itineraries/car?token=MY5S3j36cOcLfLBZjPYQ1abhfc8CqmjmFVzkk7euvWaunE57LLeDgaxm516m
          properties:
            payment:
              $ref: '#/components/schemas/Link'
            book:
              $ref: '#/components/schemas/Link'
    Fee:
      type: object
      properties:
        type:
          description: The price breakout type.
          type: string
        value:
          description: The value of the amount object. Decimal point inline with correct precision.
          type: string
        currency:
          description: Currency of the amount object.
          type: string
    Phone:
      type: object
      description: The entire phone number must be represented across the three fields in this object.
      properties:
        country_code:
          type: string
          description: The numerical portion of the country code from the phone number. Do not include the leading '+' character.
        area_code:
          type: string
          description: The area code of the phone number.
        number:
          type: string
          description: The remaining digits of the phone number.
    BillingContact:
      type: object
      properties:
        given_name:
          type: string
          description: First/given name of the payment type account holder.
        family_name:
          type: string
          description: Last/family name of the payment type account holder.
        address:
          $ref: '#/components/schemas/AddressBillingContact'
    AddressBillingContact:
      type: object
      properties:
        line_1:
          type: string
          description: First line of customer's street address.
        line_2:
          type: string
          description: Second line of customer's street address.
        line_3:
          type: string
          description: Third line of customer's street address.
        city:
          type: string
          description: Customer's city.
        state_province_code:
          type: string
          description: Customer's state or province code.
        postal_code:
          type: string
          description: Customer's postal code.
        country_code:
          type: string
          description: Customer's country code, in two-letter ISO 3166-1 alpha-2 format.
    Coordinates:
      type: object
      description: Coordinates of the location
      properties:
        latitude:
          type: number
          description: Latitude of the location
          example: 47.6097
        longitude:
          type: number
          description: Longitude of the location
          example: -122.3331
    Rating:
      type: object
      description: Review count and overall star rating of the location
      properties:
        count:
          type: number
          description: The number of ratings for the location
          example: 203
        overall:
          type: number
          description: The average star rating of the location
          example: 4
    RetrieveResponse:
      type: object
      description: The response body for the retrieve itinerary request.
      properties:
        itinerary_id:
          type: string
          description: The itinerary id.
        status:
          type: string
          description: The status of the itinerary.
          example: BOOKED
        confirmation_id:
          type: string
          example: wnoujinwp5erg45w6few36
        email:
          type: string
          description: Email address for the customer.
        phone:
          $ref: '#/components/schemas/Phone'
        billing_contact:
          $ref: '#/components/schemas/BillingContact'
        creation_time:
          type: string
          format: date-time
          example: '2018-02-12T11:59:00.000Z'
        car_details:
          $ref: '#/components/schemas/CarDetails'
        primary_driver:
          $ref: '#/components/schemas/PrimaryDriver'
        flight_details:
          $ref: '#/components/schemas/FlightDetails'
        traveler_loyalty_member_id:
          type: string
          description: The identifier for the individual associated with a loyalty program.
          example: ABD123
        affiliate_metadata:
          type: string
          example: data_point_1:123|data_point2:This is data.
        affiliate_reference_id:
          type: string
          example: 4480ABC
        links:
          type: object
          properties:
            cancel:
              $ref: '#/components/schemas/Link'
          example:
            cancel:
              method: DELETE
              href: https://test.ean.com/v2/itineraries/8999989898988/car
  examples:
    car-availability-list-200-success:
      value:
        - car_rental_id: AQ_PvCPCWLLZGzhRf4YeMM1md7xEb41ZEhUz6ns4tIn6Nv-m9LtrUYMhZ4F_a0Xkqu2rGXht4g0Zd53gL4e9yMh0fMVtqe0jKkaZKaBghFVtc
          vendor:
            id: GH
            name: Avis
            image:
              caption: Fox
              links:
                vendor_image:
                  method: GET
                  href: https://media.int.expedia.com/int/cars/logos/FX.png
          locations:
            pickup:
              name: Shuttle to counter and car
              address:
                line_1: 3150 S 160th Street
                line_2: ''
                city: Seattle
                state_province_name: Washington
                postal_code: '98188'
                country_code: US
              coordinates:
                latitude: 47.6097
                longitude: -122.3331
              type: airport
              rating:
                count: 203
                overall: 4
            dropoff:
              name: Shuttle to counter and car
              address:
                line_1: 3150 S 160th Street
                line_2: ''
                city: Seattle
                state_province_name: Washington
                postal_code: '98188'
                country_code: US
              coordinates:
                latitude: 47.6097
                longitude: -122.3331
              type: airport
          description: Nissan Rogue or similar
          number_of_passengers: 5
          number_of_doors:
            min: 2
            max: 2
          acriss_code: CEBD
          mileage_tracking: First 100 miles free per day, then $0.25 per mile.
          luggage_count:
            small: 2
            large: 3
          image:
            caption: Compact
            links:
              rental_image:
                method: GET
                href: https://images.trvl-media.com/cars%2F19%2FFX_USA_Toyota_Yaris_EC_20160606_s.jpg
          rate:
            merchant_of_record: vendor
            sale_scenario:
              package: false
              member: false
              mobile_promotion: false
            pricing:
              daily_rate_strikethrough:
                billable_currency:
                  value: '38.57'
                  currency: USD
                request_currency:
                  value: '38.57'
                  currency: USD
              daily_rate:
                billable_currency:
                  value: '29.34'
                  currency: USD
                request_currency:
                  value: '29.34'
                  currency: USD
              totals:
                inclusive_strikethrough:
                  billable_currency:
                    value: '47.44'
                    currency: USD
                  request_currency:
                    value: '47.44'
                    currency: USD
                inclusive:
                  billable_currency:
                    value: '47.44'
                    currency: USD
                  request_currency:
                    value: '47.44'
                    currency: USD
                exclusive:
                  billable_currency:
                    value: '35.24'
                    currency: USD
                  request_currency:
                    value: '35.24'
                    currency: USD
                fees:
                  request_currency:
                    value: '12.20'
                    currency: USD
                  billable_currency:
                    value: '12.20'
                    currency: USD
                due_at_booking:
                  billable_currency:
                    value: '0'
                    currency: ''
                  request_currency:
                    value: '0'
                    currency: ''
          cancel_penalties:
            - currency: USD
              start: '2018-02-12T11:59:00'
              end: '2018-02-12T11:59:00'
              amount: '50.00'
          links:
            details:
              method: GET
              href: https://test.ean.com/v2/cars/1234/details?token=MY5S3j36cOcLfLBZjPYQ1abhfc8CqmjmFVzkk7euvWaunE57LLeDgaxm516m
    invalid-input:
      value:
        type: invalid_input
        message: An invalid request was sent in, please check the nested errors for details.
        errors:
          - type: Customer-Ip.required
            message: You have not provided a valid IPv4 address
            fields:
              - name: Customer-Ip
                type: HEADER
    request-unauthenticated:
      value:
        type: request_unauthenticated
        message: Data required to authenticate your request is missing or inaccurate. Ensure that your request follows the guidelines in our documentation.
        fields:
          - name: token
            type: header
            value: jaj3982k239dka328e
    request-unauthorized:
      value:
        type: request_unauthorized
        message: Your request could not be authorized.
    invalid-accept-header:
      value:
        type: not_acceptable
        message: The request was not acceptable as 'Accept' header can only be 'application/json'
        fields:
          - name: Accept
            type: HEADER
            value: application/text
    upgrade-required:
      value:
        type: upgrade_required
        message: This service requires the use of TLS.
    too-many-requests:
      value:
        type: too_many_requests
        message: You have reached your capacity for this type of request.
    unknown-internal-error:
      value:
        type: unknown_internal_error
        message: An internal server error has occurred.
    service-unavailable:
      value:
        type: service_unavailable
        message: This service is currently unavailable.
    car-details-200-success:
      value:
        locations:
          pickup:
            name: Counter and car in terminal
            description: Rental car counter and car in the airport.
            address:
              line_1: 3150 S 160th Street
              line_2: ''
              city: Seattle
              state_province_name: Washington
              postal_code: '98188'
              country_code: US
            coordinates:
              latitude: 47.6097
              longitude: -122.3331
            type: airport
            airport_code: SEA
            vendor: AVIS
            hours_of_operation:
              - start_time: '2018-02-12T06:00:00'
                end_time: '2018-02-12T23:00:00'
            rating:
              count: 203
              overall: 4
          dropoff:
            name: Counter and car in terminal
            description: Rental car counter and car in the airport.
            address:
              line_1: 3150 S 160th Street
              line_2: ''
              city: Seattle
              state_province_name: Washington
              postal_code: '98188'
              country_code: US
            coordinates:
              latitude: 47.6097
              longitude: -122.3331
            type: airport
            airport_code: SEA
            vendor: AVIS
            hours_of_operation:
              - start_time: '2018-02-14T06:00:00'
                end_time: '2018-02-14T23:00:00'
        vendor:
          id: GH
          name: Avis
          image:
            caption: Avis
            links:
              vendor_image:
                method: GET
                href: https://media.int.expedia.com/int/cars/logos/GH.png
        description: Nissan Rogue or similar
        pickup_time: '2024-10-12T11:59:00'
        dropoff_time: '2024-11-12T11:59:00'
        number_of_passengers: 5
        number_of_doors:
          min: 2
          max: 2
        acriss_code: CEBD
        mileage_tracking: First 100 miles free per day, then $0.25 per mile.
        luggage_count:
          small: 2
          large: 3
        fuel_level: full_to_full
        image:
          caption: Economy
          links:
            default:
              method: GET
              href: https://images.trvl-media.com/cars%2F19%2FFX_USA_Toyota_Yaris_EC_20160606_s.jpg
        policies:
          - name: Free cancellation
            descriptions: []
            policy_statements:
              - statement: Lock in this price today, cancel free of charge anytime. Reserve now and pay at pick-up.
                statement_condition: ''
            policy_type: PRODUCT_USE_POLICY
          - name: 'Fuel: full to full'
            descriptions: []
            policy_statements:
              - statement: 'Fuel: full to full'
                statement_condition: Vehicle to be returned with the same amount of fuel as start of the trip to avoid refuelling charges.
            policy_type: PRODUCT_USE_POLICY
          - name: Unlimited mileage
            descriptions: []
            policy_statements:
              - statement: Unlimited mileage
                statement_condition: Drive unlimited distance with this car at no extra cost.
            policy_type: PRODUCT_USE_POLICY
        optional_extras:
          - id: BoosterSeat
            name: CBS - CHILD BOOSTER SEAT
            daily_rate:
              billable_currency:
                value: '26.34'
                currency: USD
              request_currency:
                value: '26.34'
                currency: USD
        rate:
          merchant_of_record: vendor
          sale_scenario:
            package: false
            member: false
            mobile_promotion: false
          pricing:
            daily_rate:
              billable_currency:
                value: '17.88'
                currency: USD
              request_currency:
                value: '17.88'
                currency: USD
            fees:
              - type: AIR - APT CONC RECOV FEE
                value: '3.97'
                currency: USD
              - type: CFC - CUST FACILITY CHG
                value: '15.50'
                currency: USD
              - type: VLF - VEHICLE LICENSE FEE
                value: '1.58'
                currency: USD
              - type: TAX - STATE TAX
                value: '7.11'
                currency: USD
            totals:
              inclusive:
                billable_currency:
                  value: '63.92'
                  currency: USD
                request_currency:
                  value: '63.92'
                  currency: USD
              exclusive:
                billable_currency:
                  value: '35.76'
                  currency: USD
                request_currency:
                  value: '35.76'
                  currency: USD
              fees:
                billable_currency:
                  value: '28.16'
                  currency: USD
                request_currency:
                  value: '28.16'
                  currency: USD
              due_at_booking:
                billable_currency:
                  value: '0'
                  currency: USD
                request_currency:
                  value: '0'
                  currency: USD
        cancel_penalties:
          - currency: USD
            start: '2018-02-12T11:59:00'
            end: '2018-02-12T11:59:00'
            amount: '50.00'
        links:
          payment:
            method: POST
            href: https://pay-test.ean.com/v1/payments?token=K~IjZ45n9y8TKnmQeJ2jQKZxJcYDFCOjkqIl6wLmcyVQlZBVUKLZctxg==
          book:
            method: POST
            href: https://test.ean.com/v2/itineraries/car?token=MY5S3j36cOcLfLBZjPYQ1abhfc8CqmjmFVzkk7euvWaunE57LLeDgaxm516m
    retrieve-itineraries-list-200-success:
      value:
        - itinerary_id: '9015232204253'
          status: BOOKED
          confirmation_id: wnoujinwp5erg45w6few36
          email: example@expedia.com
          phone:
            country_code: '1'
            area_code: '487'
            number: '5550077'
          billing_contact:
            given_name: John
            family_name: Doe
            address:
              line_1: 3150 S 160th Street
              line_2: Line 2
              line_3: Line 3
              city: Seattle
              state_province_code: WA
              postal_code: '98188'
              country_code: USA
          creation_time: '2018-02-12T11:59:00.000Z'
          car_details:
            locations:
              pickup:
                name: Counter and car in terminal
                description: Rental car counter and car in the airport.
                address:
                  line_1: 3150 S 160th Street
                  line_2: ''
                  city: Seattle
                  state_province_name: Washington
                  postal_code: '98188'
                  country_code: US
                coordinates:
                  latitude: 47.6097
                  longitude: -122.3331
                type: airport
                airport_code: SEA
                vendor: AVIS
                hours_of_operation:
                  - start_time: '2018-02-14T06:00:00'
                    end_time: '2018-02-14T23:00:00'
                rating:
                  count: 203
                  overall: 4
              dropoff:
                name: Counter and car in terminal
                description: Rental car counter and car in the airport.
                address:
                  line_1: 3150 S 160th Street
                  line_2: ''
                  city: Seattle
                  state_province_name: Washington
                  postal_code: '98188'
                  country_code: US
                coordinates:
                  latitude: 47.6097
                  longitude: -122.3331
                type: airport
                airport_code: SEA
                vendor: AVIS
                hours_of_operation:
                  - start_time: '2018-02-14T06:00:00'
                    end_time: '2018-02-14T23:00:00'
            vendor:
              id: GH
              name: Avis
              image:
                caption: Avis
                links:
                  vendor_image:
                    method: GET
                    href: https://media.int.expedia.com/int/cars/logos/GH.png
            description: Nissan Rogue or similar
            pickup_time: '2024-10-12T11:59:00'
            dropoff_time: '2024-11-12T11:59:00'
            number_of_passengers: 5
            number_of_doors:
              min: 2
              max: 2
            acriss_code: CEBD
            mileage_tracking: First 100 miles free per day, then $0.25 per mile.
            luggage_count:
              small: 2
              large: 3
            fuel_level: full_to_full
            image:
              caption: Economy
              links:
                default:
                  method: GET
                  href: https://images.trvl-media.com/cars%2F19%2FFX_USA_Toyota_Yaris_EC_20160606_s.jpg
            policies:
              - name: string
                descriptions:
                  - string
                policy_statements:
                  - statement: string
                    statement_condition: string
                policy_type: string
            optional_extras:
              - id: string
                name: string
                daily_rate:
                  billable_currency:
                    value: string
                    currency: string
                  request_currency:
                    value: string
                    currency: string
            rate:
              merchant_of_record: vendor
              pricing:
                daily_rate:
                  billable_currency:
                    value: string
                    currency: string
                  request_currency:
                    value: string
                    currency: string
                fees:
                  - type: string
                    value: string
                    currency: string
                totals:
                  inclusive:
                    billable_currency:
                      value: string
                      currency: string
                    request_currency:
                      value: string
                      currency: string
                  exclusive:
                    billable_currency:
                      value: string
                      currency: string
                    request_currency:
                      value: string
                      currency: string
                  fees:
                    billable_currency:
                      value: string
                      currency: string
                    request_currency:
                      value: string
                      currency: string
                  extras:
                    billable_currency:
                      value: string
                      currency: string
                    request_currency:
                      value: string
                      currency: string
                  due_at_booking:
                    billable_currency:
                      value: string
                      currency: string
                    request_currency:
                      value: string
                      currency: string
            cancel_penalties:
              - currency: USD
                start: '2018-02-12T11:59:00'
                end: '2018-02-12T11:59:00'
                amount: '50.00'
          primary_driver:
            given_name: John
            middle_name: George
            family_name: Doe
            phone:
              country_code: '1'
              area_code: '487'
              number: '5550077'
            email: john@website.com
            age: 25
          flight_details:
            air_carrier_code: G4
            flight_number: 778
          traveler_loyalty_member_id: ABD123
          affiliate_metadata: data_point_1:123|data_point2:This is data.
          affiliate_reference_id: 4480ABC
          links:
            cancel:
              method: DELETE
              href: https://test.ean.com/v2/itineraries/8999989898988/car
    create-booking-201-success:
      value:
        itinerary_id: '8999989898988'
        links:
          retrieve:
            method: GET
            href: https://test.ean.com/v2/itineraries/8999989898988/car
    create-booking-409-price-mismatch:
      value:
        type: price_mismatch
        message: Payment amount did not match current price, please check price and try again.
        fields:
          - name: payments.amount
            type: body
            value: '100.00'
          - name: price.amount
            type: body
            value: '120.00'
    create-booking-410-sold-out:
      value:
        type: sold_out
        message: The requested item is no longer available.
    unsupported-media-type:
      value:
        type: unsupported_media_type
        message: The server can't provide an acceptable response matching the request, please check the nested errors for details.
        errors:
          - type: content_type.unsupported
            message: Content-Type header is required and must accept application/json.
            fields:
              - name: Content-Type
                type: header
                value: application/text
    retrieve-itineraries-200-success:
      value:
        itinerary_id: '8999989898988'
        status: BOOKED
        confirmation_id: wnoujinwp5erg45w6few36
        email: example@expedia.com
        phone:
          country_code: '1'
          area_code: '487'
          number: '5550077'
        billing_contact:
          given_name: John
          family_name: Doe
          address:
            line_1: 3150 S 160th Street
            line_2: Line 2
            line_3: Line 3
            city: Seattle
            state_province_code: WA
            postal_code: '98188'
            country_code: USA
        creation_time: '2018-02-12T11:59:00.000Z'
        car_details:
          locations:
            pickup:
              name: Counter and car in terminal
              description: Rental car counter and car in the airport.
              address:
                line_1: 3150 S 160th Street
                line_2: ''
                city: Seattle
                state_province_name: Washington
                postal_code: '98188'
                country_code: US
              coordinates:
                latitude: 47.6097
                longitude: -122.3331
              type: airport
              airport_code: SEA
              vendor: AVIS
              hours_of_operation:
                - start_time: '2018-02-14T06:00:00'
                  end_time: '2018-02-14T23:00:00'
              rating:
                count: 203
                overall: 4
            dropoff:
              name: Counter and car in terminal
              description: Rental car counter and car in the airport.
              address:
                line_1: 3150 S 160th Street
                line_2: ''
                city: Seattle
                state_province_name: Washington
                postal_code: '98188'
                country_code: US
              coordinates:
                latitude: 47.6097
                longitude: -122.3331
              type: airport
              airport_code: SEA
              vendor: AVIS
              hours_of_operation:
                - start_time: '2018-02-14T06:00:00'
                  end_time: '2018-02-14T23:00:00'
          vendor:
            id: GH
            name: Avis
            image:
              caption: string
              links:
                vendor_image:
                  method: string
                  href: https://media.int.expedia.com/int/cars/logos/ZR.png
          description: Nissan Rogue or similar
          pickup_time: '2024-10-12T11:59:00'
          dropoff_time: '2024-11-12T11:59:00'
          number_of_passengers: 5
          number_of_doors:
            min: 2
            max: 2
          acriss_code: CEBD
          mileage_tracking: First 100 miles free per day, then $0.25 per mile.
          luggage_count:
            small: 2
            large: 3
          fuel_level: full_to_full
          image:
            caption: Economy
            links:
              default:
                method: GET
                href: https://images.trvl-media.com/cars%2F19%2FFX_USA_Toyota_Yaris_EC_20160606_s.jpg
          policies:
            - name: string
              descriptions:
                - string
              policy_statements:
                - statement: string
                  statement_condition: string
              policy_type: string
          optional_extras:
            - id: string
              name: string
              daily_rate:
                billable_currency:
                  value: string
                  currency: string
                request_currency:
                  value: string
                  currency: string
          rate:
            merchant_of_record: vendor
            pricing:
              daily_rate:
                billable_currency:
                  value: string
                  currency: string
                request_currency:
                  value: string
                  currency: string
              fees:
                - type: string
                  value: string
                  currency: string
              totals:
                inclusive:
                  billable_currency:
                    value: string
                    currency: string
                  request_currency:
                    value: string
                    currency: string
                exclusive:
                  billable_currency:
                    value: string
                    currency: string
                  request_currency:
                    value: string
                    currency: string
                fees:
                  billable_currency:
                    value: string
                    currency: string
                  request_currency:
                    value: string
                    currency: string
                extras:
                  billable_currency:
                    value: string
                    currency: string
                  request_currency:
                    value: string
                    currency: string
                due_at_booking:
                  billable_currency:
                    value: string
                    currency: string
                  request_currency:
                    value: string
                    currency: string
          cancel_penalties:
            - currency: USD
              start: '2018-02-12T11:59:00'
              end: '2018-02-12T11:59:00'
              amount: '50.00'
        primary_driver:
          given_name: John
          middle_name: George
          family_name: Doe
          phone:
            country_code: '1'
            area_code: '487'
            number: '5550077'
          email: john@website.com
        flight_details:
          air_carrier_code: G4
          flight_number: 778
        traveler_loyalty_member_id: ABD123
        affiliate_metadata: data_point_1:123|data_point2:This is data.
        affiliate_reference_id: 4480ABC
        links:
          cancel:
            method: DELETE
            href: https://test.ean.com/v2/itineraries/8999989898988/car
