Overview

Allow travelers to book up to eight room or rate types in a single itinerary

Rapid partners have access to a range of different room and rate types across Expedia Group's industry-leading inventory of properties. The multi room type feature facilitates easier booking for groups traveling together by enabling travelers to book up to eight room or rate types in a single itinerary, simplifying the booking and servicing processes. For example, a traveler seeking to book one king room with breakfast and one twin room without breakfast.

How it works

Using the new links.price_check_multi_room parameter, you can make multiple availability requests with different occupancies.

The Shopping path conditions must be the same for all Availability searches made for room types. This includes:

  • checkin
  • checkout
  • currency
  • country_code
  • language
  • property_id
  • sales_channel
  • sales_environment
  • travel_purpose
  • billing_terms
  • partner_point_of_sale
  • payment_terms

Please note: Each room returned includes its own distinct set of rates, amenities, cancel_penalties, occupancy_pricing, and totals. As such, when multiple room rates are selected as part of a multi-room type booking, each one must be clearly and individually presented to the traveler to avoid confusion about which rate conditions apply to which room.

Integration process flow and API examples

Availability step

  • Use the links.price_check_multi_room query parameter to make multiple Availability requests with different room occupancies.
  • Each response will return a multi-room link that can be used to initiate a POST Price Check request.

Example request:

GET /v3/properties/availability?checkin=2025-09-09&checkout=2025-09-10&country_code=US&currency=USD&language=en-US&property_id=19&rate_plan_count=250&sales_channel=website&sales_environment=hotel_only&occupancy=1&include=links.price_check_multi_room

Example response:

[
  {
    "property_id": "19",
    "status": "available",
    "rooms": [
      {
        "id": "212410677",
        "room_name": "Luxe Room",
        "rates": [
          {
            "id": "236167773",
            "status": "available",
            "available_rooms": 22,
            "refundable": true,
            "member_deal_available": true,
            "sale_scenario": {},
            "merchant_of_record": "expedia",
            "amenities": {},
            "links": {
              "payment_options": {}
            },
            "bed_groups": {
              "37321": {
                "id": "37321",
                "description": "1 King Bed",
                "links": {
                  "price_check": {
                    "method": "GET",
                    "href": "/v3/properties/19/rooms/212410677/rates/236167773?token=F~OjogZCQ0Nhky..."
                  }
                },
                "configuration": []
              },
              "37340": {
                "id": "37340",
                "description": "2 Queen Beds",
                "links": {
                  "price_check": {
                    "method": "GET",
                    "href": "/v3/properties/19/rooms/212410677/rates/236167773?token=F~OjogZCQ0Nhky..."
                  }
                },
                "configuration": []
              }
            },
            "cancel_penalties": [],
            "occupancy_pricing": {}
          }
        ]
      }
    ],
    "links": {
      "price_check_multi_room": {
        "method": "POST",
        "href": "/v3/properties/19/rooms?token=QFlCEVhQRmxHFg4EXVpVOlEBCFcADFIMUkB6UVBXCEsTXFsCBA9WWgFUAFIH"
      }
    },
    "score": 603
  }
]

Price Check step

  • For each Availability response with varying room occupancies, extract the Price Check links and include them in the POST request body under each room's href container. Assign a unique traveler_reference to each room to distinguish the individual rate bookings.
  • Submit the Price Check request to confirm the availability of each room. The response will include both a booking link and a session token required for the subsequent booking request.

Example request:

POST /v3/properties/19/rooms?token=QFlCEVhQRmxHFg4EXVpVOlEBCFcADFIMUkB6UVBXCEsTXFsCBA9WWgFUAFIH

"rooms": [
        {
            "traveler_reference": "King",
            "href": "/v3/properties/19/rooms/200093863/rates/203299127?token=F~OjogZCQ0NhkyAQ9PYWUCZ202D2gCCVAMS1YAFAUNITJUAVQGGAldTgVUc2dhNXdkHVZTAAFXAVFUFABQC1QbBgAGVB4PVgUMGldQUgAGVlcPUgUHUT5BUVhQAwdUCwQVAQcEChpVBwIBGQZSUlkfVwEDUVMHAgtSBVoCVDJTA1EJAwRBNAADXQdCYlMNUwixOGJsYiOyYDlRp2A3B1FQAASvM29XFSldWwYRJFFXljNOa0pAFk8SBhMOQC5YW1R7VlNAG0ZFUEIEFgMRfw9bXhscQERNUF0XXUBJRggFGG7XYzBWUa8xZFYJTQUFhTBi0DU8lDYyvGE19jdk_jVnmGdlnjZHAVRRVAcBBQMUBAQCCEwMU1YDFQ4GAAdPBg1cUwcFAAwBAloA0zonBlUBBUwBBRpVVGcKVwxTDQsNVRoDUQ8CVlIFBVBq3zo2FwedYDIIe0iv"
        }, 
            {
            "traveler_reference": "Queen",
            "href": "/v3/properties/19/rooms/314008365/rates/380069275?token=F~OjogZCQ0NhkyAQ9PYWUCZ202D2gCCVAMS1YAFAUNITJUAVQGGAldTgVUc2dhNXdkHVZTAAFXAVFUFABQC1QbBgAGVB4PVgUMGldQUgAGVlcPUgUHUT5BUVhQAwdUCwQVAQcEChpVBwIBGQZSUlkfVwEDUVMHAgtSBVoCVDJTA1EJAwRBNAADXQdCYlMNUwixOGJsYiOyYDlRp2A3B1FQBgWvM2lUFTNBUARfRnZWUEHDMQA5GRQWGkFRQF8TZEZcVlkgUgAUFRoSXUNWFlwXaExVB1saHRESQVVeEFtAHBFfUE8512QyU1fyYjQDUR9TCdQ5Zd8yMJM1Z71nZ6dkOf1mNZRhM59hE1VQVFdYVVZWHAAJBg4bDAFTUE5bA10AHVQCW1dQAgENUgoBAdcxLlMBAQJJVQUVVwcyCwADUAAMUAgaV1YHBlcBUA0HO45nYEVVmWcyRag8NQ=="
        }
    ]
}'

Example response:

{
  "rooms": [
    {
      "traveler_reference": "King",
      "status": "available",
      "available_rooms": 242,
      "occupancy_pricing": {},
      "cancel_penalties": []
    },
    {
      "traveler_reference": "Queen",
      "status": "available",
      "available_rooms": 390,
      "occupancy_pricing": {},
      "cancel_penalties": []
    }
  ],
  "links": {
    "book": {
      "method": "POST",
      "href": "/v3/itineraries?token=QFlCEVhQRmxHFg4EXVpVOlEBCFcADFIMUkB6UVBXCEsTXFsCBA9WWgFUAFIH",
      "body_token": "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"
    }
  }
}

Create Booking step

  • Construct the booking request using the booking link as a query parameter and include the session token in the request body.
  • Populate each room object with the corresponding traveler_reference and complete the traveler's booking details, then submit the request.
  • Upon success, a single itinerary ID will be returned representing the booking of multiple room types.

Example request:

POST /v3/itineraries?token=QFlCEVhQRmxHFg4EXVpVOlEBCFcADFIMUkB6UVBXCEsTXFsCBA9WWgFUAFIH

{
  "rooms": [
    {
      "given_name": "",
      "family_name": "",
      "traveler_reference": "King"
    },
    {
      "given_name": "",
      "family_name": "",
      "traveler_reference": "Queen"
    }
  ],
  "payments": [],
  "body_token": "REhZAQsABAoHQhIKW0ZADFYCahJRTQoENTJ4d3F1L3codEBBWlYJEAlBDiYRVAF9UAtSQVYHRlJwHFV2F1QEXVdVQkNXXVNMElAGQAd1RAQKABAHBkFXcRxXAkRaVwtnWQATAQVEACIdBlZTBAgCWApeA1YUBQtAASAWBAYUUhBcaVlXFQcBQQR5Q1AGUwAAC1gAAFAPRApTEFNxEVRRQFRBVzoSTBJREFMDQwdyEQBTY2UjLHIjMXURUFcUB3AcAQUDWgtDV0xEBgsWBycQCwsFUxsMABZRBhECJxcGV0MXC1EBOgZYAA1fBlURVwNGC3UdVgVVVQ9HAxBXVBJUe0BWBlkGX1cGRUMDVBEKJBBTAwdZCURTHQUAQFEhEgpWQgBRFlpWUQBZBB0LBkAAcUQDAUMWEFYdVARDC3IcVwZUCFdXCTxdVQ5SAEprDloJG2wCBARfQRYKVhwLI0ECU15QDhFdHVFUEgZwQwZWQUQSEQoMVBA5CgFDUAUSUSMXAgo_

Example response:

{
  "links": {
    "retrieve": {
      "method": "GET",
      "href": "/v3/itineraries/9069459818327?token=REhZAQsABAoHQhIKW0ZADFYCahJRTQoENTJ4d3F1L3codEBeUEsHC1UKTTtbAGxEXAZaFgAIJjlhfCZ9c0BEV1JTRUFfXVdqRA1BF1dRXERZQVxRGRQXW1oAHVVdXQVTFhZTVVITQQpWUzsVXVwPUFwCAFdVVgtIV1UGDhlSBgIPG1JSUgAeAA9ZUFYBBFFWW1FbFxFRFV0-QRhCUVsXQFRRWxEPWgxVWT5TFFtER1cTFlIXEUINDlRGPRZURkBQXFk9XgALAA9ZAwBVVVMYDl9UUxgMVFJVGQxSAgsZXQRXBFQGUwBWVVZdRUJRFkIKV1pnDVMOAQAFAAZcBAFLDQQABBlXB1RQGgcIUlAUXQYFAwcLAw5XAVRUQw8DWV8RUQJSXlFcHTdmR0tWQRdQVVxDUkcNAR5IFF8FXBxaDVFVDx5EEAxAVRFEHGddBQlUWxUVAAlWQWxdCk9REAteDF1fFl9QVxcDW2tcCFgdFFYHDwMXUBYDBzoSC1pSX1ACAg0dVQAYBQJjVlBHB3cFUx1WdFYBF1cPV1AIDQwDUGJARRRSQ1wIPEQRSxRbFVYLbCt-KitiLT5layNidyppYmFkZ3xldhZbUhZrF1VABEUFV1RZRwFDUVYQXkJHQTlbXwBTDmIyFQZZRA0FCQkLUwFAVg1UVFIMXV4BBgZTHlQAGwAKFkVSFkNWAxBrEUJcXwhVVD1RBQVUBVQCAVJFUUBHQAAIVhsJYDJ1QF5GRlsSVFgBFl8NDW5XDQFUCGZqchEPVhZdXEwIWl5sVw5UV1dVDggIF1ALUVdbC0dAWAFVUAdJVVwdUFMeBlxVDF1eVl1PBVlWEVcEA00VA1MPWQIWW0ETHFYMWkByDlFaDkYUXFwJVwQADwQDXFRT"
    }
  },
  "itinerary_id": "7069459818327"
}

End-to-end booking flow

Multi room type flow

Common errors on Price Check with resolutions

FieldTypeHTTP statusError messageCorrection
checkintoken400Products must have the same checkin date.Must be same in all tokens to ensure same shopping experience.
checkouttoken400Products must have the same checkout date.Must be same in all tokens to ensure same shopping experience.
languagetoken400Products must have the same language.Must be same in all tokens to ensure same shopping experience.
country_codetoken400Products must have the same country_code.Must be same in all tokens to ensure same shopping experience.
currencytoken400Products must have the same currency.Must be same in all tokens to ensure same shopping experience.
sales_channeltoken400Products must have the same sales_channel.Must be same in all tokens to ensure same shopping experience.
sales_environmenttoken400Products must have the same sales_environment.Must be same in all tokens to ensure same shopping experience.
travel_purposetoken400Products must have the same travel_purpose.Must be same in all tokens to ensure same shopping experience.
property_idhref400Products must have the same property_id.The property ID in a href must match that of the POST path.
merchant_of_recordtoken400Products must have the same merchant_of_record.Part of the Shop response. Expedia and property collect products cannot be mix and matched.
occupancytoken400Number of occupancies must be less than 9.Totals the occupancies (within tokens) across all hrefs to ensure no more than 8 rooms.

Note: Some other common errors that can occur during multi room booking are the same as those that occur during Rapid Booking such as credit card and billing contact errors. Please refer to Rapid error handling on these errors.

Additional resources

Whether you're looking to try out all the Rapid API endpoints or to download its OpenAPI specs or our Postman collection, we have you covered.



Did you find this page helpful?
How can we improve this content?
Thank you for helping us improve!