Expedia Group Bookings API

The primary itinerary method of the Booking API creates a reservation for the selected hotel, room, rate and occupancy.

OpenAPI Specification

expedia-group-bookings-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Expedia Group EPS Deposit Bookings API
  description: 'The EPS Deposit API manages the deposit policy for a property, offering operations to create/update, read and delete it. <br/><br/>To start experimenting, please use your existing EQC credentials and properties. We''ve also made the following test credentials available: EQCtest12933870 / ew67nk33 assigned to test property ID 12933870.'
  contact:
    name: Expedia Partner Services
    url: https://expediaconnectivity.com/developer
    email: eqcss@expedia.com
  version: '1.0'
servers:
- url: https://services.expediapartnercentral.com/
security:
- Basic: []
tags:
- name: Bookings
  description: The primary itinerary method of the Booking API creates a reservation for the selected hotel, room, rate and occupancy.
paths:
  /payment-sessions:
    post:
      tags:
      - Bookings
      summary: Expedia Group Register Payments
      description: '<b>This link only applies to transactions where EPS takes the customer''s payment information. This includes both Expedia Collect and Property Collect transactions.</b><br>

        This link will be available in the Price Check response if payment registration is required. It returns a payment session ID and a link to create a booking. This will be the first step in the booking flow only if you''ve opted into Two-Factor Authentication to comply with the September 2019 EU Regulations for PSD2. Learn more with our [PSD2 Overview](https://developers.expediagroup.com/docs/rapid/lodging/booking/psd2-regulation)

        '
      operationId: postPaymentSessions
      parameters:
      - name: Accept
        in: header
        description: 'Specifies the response format that the client would like to receive back. This must be `application/json`.

          '
        required: true
        schema:
          type: string
        example: application/json
      - name: Accept-Encoding
        in: header
        description: 'Specifies the response encoding that the client would like to receive back. This must be `gzip`.

          '
        required: true
        schema:
          type: string
        example: gzip
      - name: Content-Type
        in: header
        description: 'This parameter is to specify what format the request body is in. The only supported value is application/json.

          '
        required: true
        schema:
          type: string
        example: application/json
      - name: Customer-Ip
        in: header
        description: 'IP address of the customer, as captured by your integration.<br>

          Ensure your integration passes the customer''s IP, not your own. This value helps determine their location and assign the correct payment gateway.<br>

          Also used for fraud recovery and other important analytics.

          '
        required: true
        schema:
          type: string
      - name: Customer-Session-Id
        in: header
        description: 'Insert your own unique value for each user session, beginning with the first API call.

          Continue to pass the same value for each subsequent API call during the user''s session, using a new value for every new customer session.<br>

          Including this value greatly eases EPS''s internal debugging process for issues with partner requests, as it explicitly links together request paths for individual user''s session.

          '
        schema:
          type: string
      - name: User-Agent
        in: header
        description: 'The `User-Agent` header string from the customer''s request, as captured by your integration. If you are building an application then the `User-Agent` value should be `{app name}/{app version}`.

          '
        required: true
        schema:
          type: string
        example: TravelNow/3.30.112
      - name: Test
        in: header
        description: 'The book call has a test header that can be used to return set responses with the following keywords:<br>

          * `standard`

          * `service_unavailable`

          * `internal_server_error`

          '
        schema:
          type: string
          enum:
          - standard
          - service_unavailable
          - internal_server_error
      - name: token
        in: query
        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
        example: MY5S3j36cOcLfLBZjPYQ1abhfc8CqmjmFVzkk7euvWaunE57LLeDgaxm516m
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PaymentSessionsRequest'
        required: true
      responses:
        '201':
          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
            Region:
              $ref: '#/components/headers/Region'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentSessions'
              example:
                payment_session_id: 76d6aaea-c1d5-11e8-a355-529269fb1459
                encoded_init_config: QSBiYXNlNjQgZW5jb2RlZCBvYmplY3Qgd2hpY2ggY29udGFpbnMgY29uZmlndXJhdGlvbiBuZWVkZWQgdG8gcGVyZm9ybSBkZXZpY2UgZmluZ2VycHJpbnRpbmcgYW5kL29yIDNEUyBNZXRob2Qu
                links:
                  book:
                    method: POST
                    href: /v3/itineraries?token=MY5S3j36cOcLfLBZjPYQ1abhfc8CqmjmFVzkk7euvWaunE57LLeDgaxm516m
                    expires: '2019-03-05T07:23:14.000Z'
        '400':
          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
            Region:
              $ref: '#/components/headers/Region'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                type: invalid_input
                message: An invalid request was sent in, please check the nested errors for details.
                errors:
                - type: payments.required
                  message: Payment is required.
                  fields:
                  - name: payments
                    type: body
        '401':
          description: Unauthorized
          headers:
            Region:
              $ref: '#/components/headers/Region'
            WWW-Authenticate:
              description: Provides an example of the Authorization header.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                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: apikey
                  type: header
                  value: jaj3982k239dka328e
                - name: signature
                  type: header
                  value: 129d75332614a5bdbe0c7eb540e95a65f9d85a5b53dabb38d19b37fad6312a2bd25c12ee5a82831d55112087e1b
                - name: timestamp
                  type: header
                  value: 198284729
                - name: servertimestamp
                  type: server
                  value: 198284729
        '403':
          description: Forbidden
          headers:
            Region:
              $ref: '#/components/headers/Region'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                type: request_unauthorized
                message: Your request could not be authorized.
        '426':
          description: Upgrade Required
          headers:
            Region:
              $ref: '#/components/headers/Region'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                type: upgrade_required
                message: This service requires the use of TLS.
        '429':
          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
            Region:
              $ref: '#/components/headers/Region'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                type: too_many_requests
                message: You have reached your capacity for this type of request.
        '500':
          description: Unknown Internal Error
          headers:
            Region:
              $ref: '#/components/headers/Region'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                type: unknown_internal_error
                message: An internal server error has occurred.
        '503':
          description: Service Unavailable
          headers:
            Region:
              $ref: '#/components/headers/Region'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                type: service_unavailable
                message: This service is currently unavailable.
      security:
      - rapidAuth: []
  /itineraries:
    post:
      tags:
      - Bookings
      summary: Expedia Group Create Booking
      description: 'This link will be available in the Price Check response or in the register payments response when Two-Factor Authentication is used. It returns an itinerary id and links to retrieve reservation details, cancel a held booking, resume a held booking or complete payment session. Please note that depending on the state of the booking, the response will contain only the applicable link(s).

        '
      operationId: postItinerary
      parameters:
      - name: Accept
        in: header
        description: 'Specifies the response format that the client would like to receive back. This must be `application/json`.

          '
        required: true
        schema:
          type: string
        example: application/json
      - name: Accept-Encoding
        in: header
        description: 'Specifies the response encoding that the client would like to receive back. This must be `gzip`.

          '
        required: true
        schema:
          type: string
        example: gzip
      - name: Content-Type
        in: header
        description: 'This parameter is to specify what format the request body is in. The only supported value is application/json.

          '
        required: true
        schema:
          type: string
        example: application/json
      - name: Customer-Ip
        in: header
        description: 'IP address of the customer, as captured by your integration.<br>

          Ensure your integration passes the customer''s IP, not your own. This value helps determine their location and assign the correct payment gateway.<br>

          Also used for fraud recovery and other important analytics.

          '
        required: true
        schema:
          type: string
      - name: Customer-Session-Id
        in: header
        description: 'Insert your own unique value for each user session, beginning with the first API call.

          Continue to pass the same value for each subsequent API call during the user''s session, using a new value for every new customer session.<br>

          Including this value greatly eases EPS''s internal debugging process for issues with partner requests, as it explicitly links together request paths for individual user''s session.

          '
        schema:
          type: string
      - name: User-Agent
        in: header
        description: 'The `User-Agent` header string from the customer''s request, as captured by your integration. If you are building an application then the `User-Agent` value should be `{app name}/{app version}`.

          '
        required: true
        schema:
          type: string
        example: TravelNow/3.30.112
      - name: Test
        in: header
        description: 'The book call has a test header that can be used to return set responses with the following keywords:<br>

          * `standard`

          * `complete_payment_session`

          * `service_unavailable`

          * `internal_server_error`

          * `price_mismatch`

          * `cc_declined`

          * `rooms_unavailable`

          '
        schema:
          type: string
          enum:
          - standard
          - service_unavailable
          - internal_server_error
          - price_mismatch
          - cc_declined
          - rooms_unavailable
      - name: token
        in: query
        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
        example: MY5S3j36cOcLfLBZjPYQ1abhfc8CqmjmFVzkk7euvWaunE57LLeDgaxm516m
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateItineraryRequest'
        required: true
      responses:
        '201':
          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
            Region:
              $ref: '#/components/headers/Region'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ItineraryCreation'
              examples:
                Create Without Hold (No Challenge) Example:
                  value:
                    itinerary_id: '8999989898988'
                    links:
                      retrieve:
                        method: GET
                        href: /v3/itineraries/8999989898988?token=MY5S3j36cOcLfLBZjPYQ1abhfc8CqmjmFVzkk7euvWaunE57LLeDgaxm516m
                Create With Hold (No Challenge) Example:
                  value:
                    itinerary_id: '8999989898988'
                    links:
                      retrieve:
                        method: GET
                        href: /v3/itineraries/8999989898988?token=MY5S3j36cOcLfLBZjPYQ1abhfc8CqmjmFVzkk7euvWaunE57LLeDgaxm516m
                      resume:
                        method: PUT
                        href: /v3/itineraries/8999989898988?token=MY5S3j36cOcLfLBZjPYQ1abhfc8CqmjmFVzkk7euvWaunE57LLeDgaxm516m
                      cancel:
                        method: DELETE
                        href: /v3/itineraries/8999989898988?token=MY5S3j36cOcLfLBZjPYQ1abhfc8CqmjmFVzkk7euvWaunE57LLeDgaxm516m
                Create (Payment Challenged) Example:
                  value:
                    itinerary_id: '8999989898988'
                    links:
                      complete_payment_session:
                        method: PUT
                        href: /v3/itineraries/8999989898988/payment-sessions?token=MY5S3j36cOcLfLBZjPYQ1abhfc8CqmjmFVzkk7euvWaunE57LLeDgaxm516m
                    encoded_challenge_config: ABElifsiejfacies2@033asfe=
        '400':
          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
            Region:
              $ref: '#/components/headers/Region'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                Invalid Country Code Example:
                  value:
                    type: invalid_input
                    message: An invalid request was sent in, please check the nested errors for details.
                    errors:
                    - type: address.country_code.invalid
                      message: Address country code is invalid.
                      fields:
                      - name: country_code
                        type: body
                        value: ABCD
                Duplicate Itinerary Example:
                  value:
                    type: invalid_input
                    message: An invalid request was sent in, please check the nested errors for details.
                    errors:
                    - type: duplicate_itinerary
                      message: An itinerary already exists with this affiliate reference id.
                      fields:
                      - name: affiliate_reference_id
                        type: body
                        value: ABCD
        '401':
          description: Unauthorized
          headers:
            Region:
              $ref: '#/components/headers/Region'
            WWW-Authenticate:
              description: Provides an example of the Authorization header.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                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: apikey
                  type: header
                  value: jaj3982k239dka328e
                - name: signature
                  type: header
                  value: 129d75332614a5bdbe0c7eb540e95a65f9d85a5b53dabb38d19b37fad6312a2bd25c12ee5a82831d55112087e1b
                - name: timestamp
                  type: header
                  value: 198284729
                - name: servertimestamp
                  type: server
                  value: 198284729
        '403':
          description: Forbidden
          headers:
            Region:
              $ref: '#/components/headers/Region'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                type: request_unauthorized
                message: Your request could not be authorized.
        '409':
          description: Price Mismatch
          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
            Region:
              $ref: '#/components/headers/Region'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                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'
        '410':
          description: Sold Out
          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
            Region:
              $ref: '#/components/headers/Region'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                type: rooms_unavailable
                message: One or more requested rooms are unavailable.
        '426':
          description: Upgrade Required
          headers:
            Region:
              $ref: '#/components/headers/Region'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                type: upgrade_required
                message: This service requires the use of TLS.
        '429':
          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
            Region:
              $ref: '#/components/headers/Region'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                type: too_many_requests
                message: You have reached your capacity for this type of request.
        '500':
          description: Unknown Internal Error
          headers:
            Region:
              $ref: '#/components/headers/Region'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                type: unknown_internal_error
                message: An internal server error has occurred.
        '503':
          description: Service Unavailable
          headers:
            Region:
              $ref: '#/components/headers/Region'
          content:
        

# --- truncated at 32 KB (88 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/expedia-group/refs/heads/main/openapi/expedia-group-bookings-api-openapi.yml