Room type resources
The Product API request enables you to read, create, and edit room types. The Product API response is transmitted through a synchronous connection to update the property’s system with the status of the Product API request. If a connectivity problem or another issue occurs, an error code will be returned that indicates what issue occurred.
Product API is RESTful and all requests and responses must be sent over a secure connection. All request and response bodies, including errors are encoded in JSON.
To facilitate integrating with Product API, Expedia Group offers a Swagger JSON file file documenting Product API’s model and operations.
Note: This topic provides details about the v3 model, which is the current version. For the older v2 version of the room type resources, refer to Archived.
Obtain a list of room types
- Method: GET
- URL:
https://services.expediapartnercentral.com/properties/{propertyId}/roomTypes
- Consumes: HTTP Request (GET)
- Produces: application/vnd.expedia.eps.product-v3+json
Request parameters
Parameter | Parameter Type | Description | Required | Data Type | Default |
Authorization | header | Authorization token in HTTP header. Format: Authorization: Basic [username:password encoded by Base64] | Yes | Base64 encoded auth token |
|
propertyId | path | Expedia Property ID | Yes | string | |
status | query | Status filter. String. Only supported value is "all". | false | string | If not provided, API will only return active room types (meaning room type with at least one active rate plan, as room type status can't be directly controlled, but is rather inferred from its rate plans statuses). |
Success responses
Status Code | Description | Response Model |
200 | OK |
Create a room type
- Method: POST
- URL:
https://services.expediapartnercentral.com/properties/{propertyId}/roomTypes
- Consumes: application/vnd.expedia.eps.product-v3+json
- Produces: application/vnd.expedia.eps.product-v3+json
Request parameters
Parameter | Parameter Type | Description | Required | Data Type |
Authorization | header | Authorization token in HTTP header. Format: Authorization: Basic [username:password encoded by Base64] | Yes | Base64 encoded auth token |
propertyId | path | Expedia Property Id | Yes | string |
body | body | JSON message describing the new room type | Yes |
Example syntax
1{2 "partnerCode": "MyStringCode",3 "name": {4 "attributes": {5 "typeOfRoom": "Penthouse",6 "roomClass": "Executive",7 "includeBedType": true,8 "view": "City View",9 "featuredAmenity": "Jetted Tub"10 }11 },12 "ageCategories": [13 {14 "category": "Adult",15 "minAge": 1816 },17 {18 "category": "ChildAgeA",19 "minAge": 620 },21 {22 "category": "Infant",23 "minAge": 024 }25 ],26 "maxOccupancy": {27 "adults": 2,28 "children": 1,29 "total": 330 },31 "bedrooms": [32 {33 "count": 1,34 "bedding": [35 {36 "option": [37 {38 "quantity": 1,39 "type": "King Bed",40 "size": "King"41 }42 ]43 }44 ]45 }46 ],47 "livingRooms": [48 {49 "count": 1,50 "bedding": [51 {52 "option": [53 {54 "quantity": 1,55 "type": "Murphy Bed",56 "size": "Full"57 }58 ]59 }60 ]61 }62 ],63 "extraBedding": [64 {65 "quantity": 1,66 "type": "Rollaway Bed",67 "size": "Full",68 "surcharge": {69 "type": "Per Day",70 "amount": 2071 }72 }73 ],74 "regulatoryRecords": {75 "category": "HOTEL",76 "records": [77 {78 "registrationNumber": "STR321321321",79 "registrationNumberType": "LICENSE_ID",80 "expiry": "2022-12-12"81 }82 ],83 "exemptionCategories": ["MAX_NIGHT_CAP"]84 },85 "smokingPreferences": ["Non-Smoking"],86 "floorSize": {87 "squareFeet": 300,88 "squareMeters": 1489 },90 "views": ["Ocean View", "Beach View"]91}
Success responses
Status Code | Description | Response Model |
201 | Created |
Read a single room type
- Method: GET
- URL:
https://services.expediapartnercentral.com/properties/{propertyId}/roomTypes/{roomTypeId}
- Consumes: HTTP Request (GET)
- Produces: application/vnd.expedia.eps.product-v3+json
Request parameters
Parameter | Parameter Type | Description | Required | Data Type |
Authorization | header | Authorization token in HTTP header. Format: Authorization: Basic [username:password encoded by Base64] | Yes | Base64 encoded auth token |
propertyId | path | Expedia Property ID | Yes | string |
roomTypeId | path | Room type resource ID. Integer | Yes | string |
Success responses
Status Code | Description | Response Model |
200 | OK |
Modify a room type
Expedia Group offers two ways to modify a room type.
Using the PUT verb, you can perform a full overlay change of the room type resource. It means that all elements of a room type need to be provided, and any optional element not provided will be erased/removed.
Using the PATCH verb, you can perform a partial update of a room type. Expedia Group implemented the Merge-Patch RFC.
Full overlay (PUT)
- Method: PUT
- URL:
https://services.expediapartnercentral.com/properties/{propertyId}/roomTypes/{roomTypeId}
- Consumes: application/vnd.expedia.eps.product-v3+json
- Produces: application/vnd.expedia.eps.product-v3+json
Request parameters
Parameter | Parameter Type | Description | Required | Data Type |
Authorization | header | Authorization token in HTTP header. Format: Authorization: Basic [username:password encoded by Base64] | Yes | Base64 encoded auth token |
propertyId | path | Expedia Property Id | Yes | string |
roomTypeId | path | Room type resource ID | Yes | string |
body | body | JSON message with modified room type | Yes |
Example syntax
1{2 "resourceId": 201171339,3 "partnerCode": "JS002",4 "name": {5 "attributes": {6 "typeOfRoom": "Suite",7 "roomClass": "Executive",8 "bedroomDetails": "1 Bedroom",9 "featuredAmenity": "Jetted Tub",10 "view": "City View"11 },12 "value": "Executive Suite"13 },14 "status": "Active",15 "ageCategories": [16 {17 "category": "Adult",18 "minAge": 1319 },20 {21 "category": "Infant",22 "minAge": 023 }24 ],25 "maxOccupancy": {26 "total": 4,27 "adults": 3,28 "children": 229 },30 "bedrooms": [31 {32 "count": 1,33 "bedding": [34 {35 "option": [36 {37 "quantity": 1,38 "type": "King Bed",39 "size": "King"40 }41 ]42 }43 ]44 }45 ],46 "extraBedding": [47 {48 "quantity": 1,49 "type": "Rollaway Bed",50 "size": "Full",51 "surcharge": {52 "type": "Per Day",53 "amount": 2054 }55 },56 {57 "quantity": 1,58 "type": "Crib",59 "size": "Crib",60 "surcharge": {61 "type": "Free"62 }63 }64 ],65 "smokingPreferences": [66 "Non-Smoking"67 ]68}
Success responses
Status Code | Description | Response Model |
200 | OK |
Partial update (PATCH)
Expedia chose the merge-patch method for partial update, as described in the IETF RFC. This method allows you to update a room type by providing only the fields/values you need to change. This saves you from having to first read the room type before updating it. If you provide the complete room type data, this method essentially behaves just like the PUT method.
The response will always be the complete image of the room type after changes have been applied.
Important: The PATCH logic only applies to first (top) level elements/objects of the room type. You can include any number of these top level elements/objects, and any elements/objects not included will be ignored/untouched. If you include any array or complex object (such as name, age categories or maximum occupancy), these objects must be fully specified with all the desired elements/attributes/object changes, as they are treated as full overlay. First-level elements/objects not provided in the input will remain unchanged. Some top-level elements can be removed, but to do so, you have to explicitly specify it in the JSON message, as null. For array types, you need to provide a "null" or empty array value. Finally, all validation rules are applied on the complete updated room type data. For instance, only providing an ageCategories that has no "Adult" category will yield the appropriate error response.
- Method: PATCH
- URL:
https://services.expediapartnercentral.com/properties/{propertyId}/roomTypes/{roomTypeId}
- Consumes: application/vnd.expedia.eps.product-v3+json
- Produces: application/vnd.expedia.eps.product-v3+json
Request parameters
Parameter | Parameter Type | Description | Required | Data Type |
Authorization | header | Authorization token in HTTP header. Format: Authorization: Basic [username:password encoded by Base64] | Yes | Base64 encoded auth token |
propertyId | path | Expedia Property ID | Yes | string |
roomTypeId | path | Room type resource ID | Yes | string |
body | body | JSON message of partially updated room type | Yes |
Example syntax
This example updates the partner code and the name attributes:
1{2 "partnerCode": "PatchedPartnerCode",3 "name": {4 "attributes": {5 "typeOfRoom": "Loft",6 "roomClass": "Deluxe",7 "area": "Poolside"8 }9 }10}
This updates only the maximum occupancy:
1{2 "maxOccupancy": {3 "total": 3,4 "adults": 25 }6}
Success responses
Status Code | Description | Response Model |
200 | OK |
Definitions
Room type resource definition
Property Name | Type | Required for POST | Description |
resourceId | integer | No | Integer. Required for modify, and cannot be changed. This resource ID is what will be used to manage availability and rates, and also what Expedia Group specifies in booking messages to identify the room booked. |
partnerCode | string | Yes | Partner room type code/identifier. Maximum of 40 characters. Has to be unique across all room types for this hotel. This is used as a unique key to ensure you do not duplicate room types in Expedia Group's system. |
name | Yes | Name object. Collection of elements/attributes related to the name of a room. | |
status | enum | No | Possible values are (Active, Inactive). Room type status is derived from the rate plans associated with the room type: if at least one rate plan is active, the room type status will be active. If all rate plans are inactive, then the room type becomes inactive as well. This value can be omitted in a create request. If provided during create, it will be ignored. This value cannot be edited in an update message. If modified, an error will be returned. |
ageCategories | Array[RoomTypeAgeCategory ] | Yes | Array of age categories. Defines the different age categories supported by the room type. At the very least, the 'Adult' category must be defined. |
maxOccupancy | No | Defines the maximum occupancy of the room in total and by age category. Always returned by room type GET. Optional for room type create and update. When not provided the Product API will calculate the occupancy based on bedding options. | |
bedRooms | Yes | A count of Bedrooms can be specified. Minimum 1, maximum 2 bedding options a bedroom may have. Each bedding option can be with a combination of beds (type, size and quantity). | |
livingRooms | No | A count of living rooms can be specified. A bedding option can be with a combination of beds (type, size and quantity). | |
extraBedding | Array[ExtraBed ] | No | Defines the extra bed combination (type, size and quality) the room type may have. |
regulatoryRecords | No | Regulatory and license details required to sell the room. Depending on the location of the property and the property type, this attribute may or may not be mandatory. Predominantly used for vacation rental listings. For more details on government regulations that may potentially affect your short term rental, please refer to the page here. | |
smokingPreferences | Array[smokingPreferenceEnum ] | Yes | Used to define whether the room type is smoking, nonsmoking, or if both options are available on request. If a single smoking option is provided, then the room is, by default, only available in this configuration. If both options are provided, then a choice will be offered to the customer at the time he makes a reservation, and the customer preference will be sent in electronic booking messages to you. |
floorSize | No | Used to define room size. When used, both size in square feet and in square meters must be specified. | |
views | Array[viewEnum ] | No | Used to define view(s) from the room. There can be up to 2 different views defined per room type. |
wheelchairAccessibility | Boolean | No | Used to indicate whether the room is configured to be wheelchair accessible or not. |
_links | No | Collection of URLs that point to various resources related to the current resource. Cannot be provided in create requests. Cannot be changed via partial (PATCH) or full overlay (PUT) updates. |
roomTypeName resource definition
For more information about room type names, see Room name logic section.
Property Name | Type | Description |
attributes | Collection of attributes that can be used to build a room type name. Should only be provided if you don't want to use one of the predefined names Expedia Group supports. | |
value | string | For create and modify requests, optional and ignored if name attributes are used. Required if name attributes are not provided. When provided in create or update requests, without any name attributes, value provided needs to be one of the predefined room names found in PredefinedRoomNamesEnum section. For read, create and modify responses, if you are making use of room name attributes, this field will contain the auto-generated name based off of the attributes that were provided, in English-US language. If you are using a predefined name, this field will contain the predefined name value, as provided in the create or update request. |
roomNameAttributes resource definition
For more information about room type names, see the Room name logic section.
Property Name | Type | Required | Description |
typeOfRoom | Yes | Attribute that determines the type of room, which is used to compose the name | |
roomClass | No | Attribute that described the class of room, which is used to compose the name | |
includeBedType | Boolean | No | Attribute that determines whether or not to include bed type on the room name |
bedroomDetails | No | Attribute that describes the details of the bedroom used to compose the name of the room | |
includeSmokingPref | Boolean | No | Attribute that determines if room has smoking preference |
accessibility | No | Attribute that describes the accessibility features offered by the room | |
view | No | Attribute that gives additional information about the view of the room | |
featuredAmenity | No | Attribute used to highlight a feature of the room on its name | |
area | No | Attributed used to highlight the location of the room |
roomTypeAgeCategory resource definition
Property Name | Type | Required | Description |
category | Yes | Defines which category of age is being defined. | |
minAge | integer | Yes | Defines what is the minimum age for a person to belong in the given age category. |
Occupancy resource definition
Property Name | Type | Required | Description |
total | integer | Yes | Total count of people that can reside in the room. |
adults | integer | Yes | Maximum number of adults that can reside in the room. |
children | integer | Yes | Maximum number of children that can reside in the room. |
bedroomOption resource definition
Property Name | Type | Required | Description |
count | integer | Yes | Total count of bedrooms in the room. |
bedding | Yes | Provides details on each bedding option within a bedroom. |
beddingOption resource definition
Property Name | Type | Required | Description |
option | Array[ Bed ] | Yes | Each bedding option can be with a combination of beds (type, size and quality). |
Expedia Group only supports two bedding options. When both options are included in the call, i.e. "option" node is listed twice with different bed types, this bedding configuration will be presented to the customer as "OR". For instance, the following JSON configuration is displayed as "1 Queen Bed OR 1 King Bed":
1"bedding": [2 {3 "option": [4 {5 "quantity": 1,6 "type": "Queen Bed",7 "size": "Queen"8 }9 ]10 },11 {12 "option": [13 {14 "quantity": 1,15 "type": "King Bed",16 "size": "King"17 }18 ]19 }20]
When the "options" node is listed only once with multiple bed types, these bed types will be displayed to the customer as "AND". For instance, the following JSON configuration is displayed as "1 Queen Bed AND 1 King Bed":
1"bedding": [2 {3 "option": [4 {5 "quantity": 1,6 "type": "Queen Bed",7 "size": "Queen"8 },9 {10 "quantity": 1,11 "type": "King Bed",12 "size": "King"13 }14 ]15 }16]
Please note that the screenshot below illustrates two bedrooms, therefore, the count of each bedding type is multiplied by 2.
Bed resource definition
Property Name | Type | Required | Description |
quantity | integer | Yes | Number of beds. |
type | Yes | Defines the bed type. Example: "King Bed", "Sofa Bed". | |
size | No | Defines the size of the bed. Example: "King", "Queen". When specified, only certain sizes can be used for each type. For bed types where Expedia Group accepts different sizes, when the size is not specific, Expedia Group will default to the smallest size possible for the bed type. |
livingRoomOption resource definition
Property Name | Type | Required | Description |
count | integer | Yes | Total count of living rooms in the RoomType. |
bedding | Yes | Provides details on each bedding option within a livingRoom. |
livingRoomBeddingOption resource definition
Property Name | Type | Required | Description |
option | Array[livingRoomBed ] | Yes | Each bedding option can be with a combination of beds (type, size and quality). |
livingRoomBed resource definition
Property Name | Type | Required | Description |
quantity | integer | Yes | Number of beds. |
type | Yes | Defines the bed type. Example: "King Bed", "Sofa Bed". | |
size | No | Defines the size of the bed. Example: "King", "Queen". When specified, only certain sizes can be used for each type . For bed types where Expedia Group accepts different sizes, when the size is not specific, Expedia Group will default to the smallest size possible for the bed type. |
extraBed resource definition
Property Name | Type | Required | Description |
quantity | integer | Yes | Number of beds. |
type | Yes | Defines the bed type. Example: "King Bed", "Sofa Bed". | |
size | No | Defines the size of the bed. Example: "King", "Queen". When specified, only certain sizes can be used for each type . For bed types where Expedia Group accepts different sizes, when the size is not specific, Expedia Group will default to the smallest size possible for the bed type. | |
surcharge | No | Defines the surcharge of the bed. Only extra beds of type "Crib" and "Rollaway Bed" can have a surcharge defined. |
Surcharge resource definition
Property Name | Type | Required | Description |
type | Yes | Defines the surcharge type. Example: "Free", "Per Day". | |
amount | number | No | Defines the amount of the surcharge. Must be defined if type is not "Free". |
regulatoryRecords resource definition
Property Name | Type | Required | Description |
category | Yes | Used to specify the category of property as per jurisdiction requirements. Utilized for regulatory validation purposes. | |
records | Yes | Lists the regulatory data attributes Expedia is collecting. This page has more details on the regulatory data required for short-term rentals. |
records resource definition
Property Name | Type | Required | Description |
registrationNumber | string | Yes | Used to specify the license/registration number of the property/room type that is registered with the city's regulators. Could be required for certain jurisdictions depending on property type. |
registrationNumberType | Yes | Type of license/registration number that is registered with the city's regulator. Could be required for certain jurisdictions depending on property type. | |
expiry | date | No | Date of expiration of the license/registration number in YYYY-MM-DD format |
floorSize resource definition
Property Name | Type | Required | Description |
squareFeet | integer | Yes | Room size in square feet. |
squareMeters | integer | Yes | Room size in square meters. |
roomTypeLinks resource definition
Property Name | Type | Description |
self | URL of the current resource. Cannot be provided in create requests. Cannot be changed via partial (PATCH) or full overlay (PUT) updates. |
Examples
The room type resource describes the configuration of a specific room type/category/class in the Expedia Group system. Room types belong to properties, and each room type contains one or more rate plans. A room type resource contains information such as bed types, smoking preferences, occupancy settings by age categories, etc.
Against the room type resource, you can retrieve a list of room types or a specific room type. You can also create new room types (one at a time), and edit an existing room type (one at a time, full overlay operation).
- All room types read
- Single room type read
- Create room type (predefined room name)
- Create room type (room name attributes)
- Create room type (ignored room name attributes)
- Modify room type (predefined name, code, and name categories)
- Modify room type (predefined name to name attributes)
- Room type partial update (PATCH)- Updating only the name attributes- Updating both the partner code and the age categories- Updating both the maximum occupancy and the standard bedding- Updating only the room views- Updating only the room views (this will remove views since the provided list is empty)
All room types read
This example shows how to perform a read request to retrieve all room types under a given property. The example below illustrates how to add the status param on the request to get all active and inactive room types. In this example, the property has active and inactive room types, sorted by resourceId.
Request:
1GET https://services.expediapartnercentral.com/properties/1780041/roomTypes?status=all
Response:
1{2 "entity": [3 {4 "resourceId": 209857,5 "partnerCode": "Deluxe Suite",6 "name": {7 "attributes": {8 "typeOfRoom": "Suite",9 "roomClass": "Executive",10 "area": "Ground Floor"11 },12 "value": "Executive Suite, Ground Floor"13 },14 "status": "Active",15 "ageCategories": [16 {17 "category": "Adult",18 "minAge": 1719 },20 {21 "category": "ChildAgeA",22 "minAge": 023 }24 ],25 "maxOccupancy": {26 "total": 3,27 "adults": 3,28 "children": 229 },30 "bedrooms": [31 {32 "count": 1,33 "bedding": [34 {35 "option": [36 {37 "quantity": 1,38 "type": "King Bed",39 "size": "King"40 }41 ]42 }43 ]44 }45 ],46 "livingRooms": [47 {48 "count": 1,49 "bedding": [50 {51 "option": [52 {53 "quantity": 1,54 "type": "Murphy Bed",55 "size": "Full"56 }57 ]58 }59 ]60 }61 ],62 "extraBedding": [63 {64 "quantity": 1,65 "type": "Rollaway Bed",66 "size": "Full",67 "surcharge": {68 "type": "Per Day",69 "amount": 2070 }71 },72 {73 "quantity": 1,74 "type": "Crib",75 "size": "Crib",76 "surcharge": {77 "type": "Free"78 }79 }80 ],81 "regulatoryRecords": {82 "category": "HOTEL",83 "records": [84 {85 "registrationNumber": "STR321321321",86 "registrationNumberType": "LICENSE_ID",87 "expiry": "2022-12-12"88 }89 ],90 "exemptionCategories": [91 "MAX_NIGHT_CAP"92 ]93 },94 "smokingPreferences": [95 "Smoking",96 "Non-Smoking"97 ],98 "_links": {99 "self": {100 "href": "https://services.expediapartnercentral.com/properties/1780041/roomTypes/209857"101 }102 }103 },104 {105 "resourceId": 200108425,106 "partnerCode": "Caribbean Test",107 "name": {108 "attributes": {109 "typeOfRoom": "Room",110 "roomClass": "Standard",111 "includeBedType": true112 },113 "value": "Standard Room, 2 Double Beds"114 },115 "status": "Inactive",116 "ageCategories": [117 {118 "category": "Adult",119 "minAge": 13120 },121 {122 "category": "ChildAgeA",123 "minAge": 0124 }125 ],126 "maxOccupancy": {127 "total": 4,128 "adults": 4,129 "children": 3130 },131 "bedrooms": [132 {133 "count": 1,134 "bedding": [135 {136 "option": [137 {138 "quantity": 1,139 "type": "King Bed",140 "size": "King"141 }142 ]143 }144 ]145 }146 ],147 "livingRooms": [148 {149 "count": 1,150 "bedding": [151 {152 "option": [153 {154 "quantity": 1,155 "type": "Murphy Bed",156 "size": "Full"157 }158 ]159 }160 ]161 }162 ],163 "smokingPreferences": [164 "Smoking",165 "Non-Smoking"166 ],167 "floorSize": {168 "squareFeet": 150,169 "squareMeters": 14170 },171 "views": [172 "Beach View",173 "Bay View"174 ],175 "_links": {176 "self": {177 "href": "https://services.expediapartnercentral.com/properties/1780041/roomTypes/200108425"178 }179 }180 }181 ]182}
Single room type read
This example shows how to do a read request for a single room type with 2 age categories, a choice of 2 bedding options, and supporting both smoking and non-smoking preferences.
Request:
1GET https://services.expediapartnercentral.com/properties/1780044/roomTypes/200192910
Response:
1{2 "entity": {3 "resourceId": 200192910,4 "partnerCode": "Deluxe",5 "name": {6 "attributes": {7 "typeOfRoom": "Apartment "8 },9 "value": "Apartment"10 },11 "status": "Active",12 "ageCategories": [13 {14 "category": "Adult",15 "minAge": 1816 },17 {18 "category": "ChildAgeA",19 "minAge": 020 }21 ],22 "maxOccupancy": {23 "total": 4,24 "adults": 4,25 "children": 326 },27 "bedrooms": [28 {29 "count": 1,30 "bedding": [31 {32 "option": [33 {34 "quantity": 1,35 "type": "King Bed",36 "size": "King"37 }38 ]39 }40 ]41 }42 ],43 "livingRooms": [44 {45 "count": 1,46 "bedding": [47 {48 "option": [49 {50 "quantity": 1,51 "type": "Murphy Bed",52 "size": "Full"53 }54 ]55 }56 ]57 }58 ],59 "extraBedding": [60 {61 "quantity": 1,62 "type": "Rollaway Bed",63 "size": "Full",64 "surcharge": {65 "type": "Per Day",66 "amount": 2067 }68 },69 {70 "quantity": 1,71 "type": "Crib",72 "size": "Crib",73 "surcharge": {74 "type": "Free"75 }76 }77 ],78 "regulatoryRecords": {79 "category": "HOTEL",80 "records": [81 {82 "registrationNumber": "STR321321321",83 "registrationNumberType": "LICENSE_ID",84 "expiry": "2022-12-12"85 }86 ],87 "exemptionCategories": [88 "MAX_NIGHT_CAP"89 ]90 },91 "smokingPreferences": [92 "Smoking",93 "Non-Smoking"94 ],95 "floorSize": {96 "squareFeet": 500,97 "squareMeters": 4698 },99 "views": [100 "Partial Sea View"101 ],102 "wheelchairAccessibility": false,103 "_links": {104 "self": {105 "href": "https://services.expediapartnercentral.com/properties/1780044/roomTypes/200192910"106 }107 }108 }109}
Create room type (predefined room name)
When creating a new room type, you have the choice to pick a predefined name, or provide a set of attributes that can be included in the room name.
This example creates a room type with a predefined name, 3 age categories, a single bedding configuration and "non-smoking" for smoking policy.
Request:
1POST https://services.expediapartnercentral.com/properties/1780041/roomTypes
1{2 "partnerCode": "JS001",3 "name": {4 "value": "Junior Suite"5 },6 "ageCategories": [7 {8 "category": "Adult",9 "minAge": 1310 },11 {12 "category": "ChildAgeA",13 "minAge": 514 },15 {16 "category": "Infant",17 "minAge": 018 }19 ],20 "maxOccupancy": {21 "total": 4,22 "adults": 3,23 "children": 224 },25 "bedrooms": [26 {27 "count": 1,28 "bedding": [29 {30 "option": [31 {32 "quantity": 1,33 "type": "King Bed",34 "size": "King"35 }36 ]37 }38 ]39 }40 ],41 "livingRooms": [42 {43 "count": 1,44 "bedding": [45 {46 "option": [47 {48 "quantity": 1,49 "type": "Murphy Bed",50 "size": "Full"51 }52 ]53 }54 ]55 }56 ],57 "extraBedding": [58 {59 "quantity": 1,60 "type": "Rollaway Bed",61 "size": "Full",62 "surcharge": {63 "type": "Per Day",64 "amount": 2065 }66 },67 {68 "quantity": 1,69 "type": "Crib",70 "size": "Crib",71 "surcharge": {72 "type": "Free"73 }74 }75 ],76 "regulatoryRecords": {77 "category": "HOTEL",78 "records": [79 {80 "registrationNumber": "STR321321321",81 "registrationNumberType": "LICENSE_ID",82 "expiry": "2022-12-12"83 }84 ]85 },86 "smokingPreferences": [87 "Non-Smoking"88 ],89 "floorSize": {90 "squareFeet": 1023,91 "squareMeters": 9592 },93 "views": [94 "Ocean View",95 "Beach View"96 ],97 "wheelchairAccessibility": false98}
When successful, the API will respond with the room that Expedia Group created.
Note: Room types are always created as inactive, and will become active automatically when the first active rate plan is created.
Response:
1{2 "entity": {3 "resourceId": 201171339,4 "partnerCode": "JS001",5 "name": {6 "value": "Junior Suite"7 },8 "status": "Inactive",9 "ageCategories": [10 {11 "category": "Adult",12 "minAge": 1313 },14 {15 "category": "ChildAgeA",16 "minAge": 517 },18 {19 "category": "Infant",20 "minAge": 021 }22 ],23 "maxOccupancy": {24 "total": 4,25 "adults": 3,26 "children": 227 },28 "bedrooms": [29 {30 "count": 1,31 "bedding": [32 {33 "option": [34 {35 "quantity": 1,36 "type": "King Bed",37 "size": "King"38 }39 ]40 }41 ]42 }43 ],44 "livingRooms": [45 {46 "count": 1,47 "bedding": [48 {49 "option": [50 {51 "quantity": 1,52 "type": "Murphy Bed",53 "size": "Full"54 }55 ]56 }57 ]58 }59 ],60 "extraBedding": [61 {62 "quantity": 1,63 "type": "Rollaway Bed",64 "size": "Full",65 "surcharge": {66 "type": "Per Day",67 "amount": 2068 }69 },70 {71 "quantity": 1,72 "type": "Crib",73 "size": "Crib",74 "surcharge": {75 "type": "Free"76 }77 }78 ],79 "regulatoryRecords": {80 "category": "HOTEL",81 "records": [82 {83 "registrationNumber": "STR321321321",84 "registrationNumberType": "LICENSE_ID",85 "expiry": "2022-12-12"86 }87 ]88 },89 "smokingPreferences": [90 "Non-Smoking"91 ],92 "floorSize": {93 "squareFeet": 1023,94 "squareMeters": 9595 },96 "views": [97 "Ocean View",98 "Beach View"99 ],100 "wheelchairAccessibility": false,101 "_links": {102 "self": {103 "href": "https://services.expediapartnercentral.com/properties/1780041/roomTypes/201171339"104 }105 }106 }107}
Create room type (room name attributes)
When creating a new room type, you have the choice to pick a predefined name, or provide a set of attributes that can be included in the room name.
This example creates a room type with a set of name attributes, 3 age categories, a single bedding configuration and "non-smoking" for smoking policy.
Request:
1POST https://services.expediapartnercentral.com/properties/1780041/roomTypes
1{2 "partnerCode": "JS001",3 "name": {4 "attributes": {5 "typeOfRoom": "Condo",6 "bedroomDetails": "3 Bedrooms",7 "featuredAmenity": "2 Bathrooms",8 "view": "Partial Ocean View"9 }10 },11 "ageCategories": [12 {13 "category": "Adult",14 "minAge": 1315 },16 {17 "category": "ChildAgeA",18 "minAge": 519 },20 {21 "category": "Infant",22 "minAge": 023 }24 ],25 "maxOccupancy": {26 "total": 4,27 "adults": 3,28 "children": 229 },30 "bedrooms": [31 {32 "count": 1,33 "bedding": [34 {35 "option": [36 {37 "quantity": 1,38 "type": "King Bed",39 "size": "King"40 }41 ]42 }43 ]44 }45 ],46 "extraBedding": [47 {48 "quantity": 1,49 "type": "Rollaway Bed",50 "size": "Full",51 "surcharge": {52 "type": "Per Day",53 "amount": 2054 }55 },56 {57 "quantity": 1,58 "type": "Crib",59 "size": "Crib",60 "surcharge": {61 "type": "Free"62 }63 }64 ],65 "smokingPreferences": [66 "Non-Smoking"67 ],68 "floorSize": {69 "squareFeet": 1023,70 "squareMeters": 9571 },72 "views": [73 "Ocean View",74 "Beach View"75 ],76 "wheelchairAccessibility": false77}
When successful, the API will respond with what Expedia Group created.
Note: Room types are always created as inactive, and will become active automatically when the first active rate plan is created.
Response:
1{2 "entity": {3 "resourceId": 201171339,4 "partnerCode": "JS001",5 "name": {6 "attributes": {7 "typeOfRoom": "Condo",8 "bedroomDetails": "3 Bedrooms",9 "featuredAmenity": "2 Bathrooms",10 "view": "Partial Ocean View"11 },12 "value": "Condo, 3 Bedrooms, 2 Bathrooms, Partial Ocean View"13 },14 "status": "Inactive",15 "ageCategories": [16 {17 "category": "Adult",18 "minAge": 1319 },20 {21 "category": "ChildAgeA",22 "minAge": 523 },24 {25 "category": "Infant",26 "minAge": 027 }28 ],29 "maxOccupancy": {30 "total": 4,31 "adults": 3,32 "children": 233 },34 "bedrooms": [35 {36 "count": 1,37 "bedding": [38 {39 "option": [40 {41 "quantity": 1,42 "type": "King Bed",43 "size": "King"44 }45 ]46 }47 ]48 }49 ],50 "extraBedding": [51 {52 "quantity": 1,53 "type": "Rollaway Bed",54 "size": "Full",55 "surcharge": {56 "type": "Per Day",57 "amount": 2058 }59 },60 {61 "quantity": 1,62 "type": "Crib",63 "size": "Crib",64 "surcharge": {65 "type": "Free"66 }67 }68 ],69 "smokingPreferences": [70 "Non-Smoking"71 ],72 "floorSize": {73 "squareFeet": 1023,74 "squareMeters": 9575 },76 "views": [77 "Ocean View",78 "Beach View"79 ],80 "wheelchairAccessibility": false,81 "_links": {82 "self": {83 "href": "https://services.expediapartnercentral.com/properties/1780041/roomTypes/201171339"84 }85 }86 }87}
Create room type (ignored room name attributes)
When using room name attributes to generate a name, Expedia Group has specific rules around how many attributes can be used. To reserve the logic complexity behind these rules, Product API allows you to specify more attributes than Expedia Group will actually use to generate the name. The selection logic and ranking of attributes are described in detail in the Room name logic section.
The example below shows what would happen if you sent all possible room name attributes in a create request. Product API responds with the attributes it used, and the name that was generated.
Request:
1POST https://services.expediapartnercentral.com/properties/1780041/roomTypes
1{2 "partnerCode": "JS001",3 "name": {4 "attributes": {5 "typeOfRoom": "Studio",6 "roomClass": "Basic",7 "includeBedType": true,8 "bedroomDetails": "1 Bedroom",9 "includeSmokingPref": true,10 "accessibility": "Bathtub Grab Bars",11 "view": "Beach View",12 "featuredAmenity": "Hot Tub",13 "area": "Corner",14 "customLabel": "Blue Room"15 }16 },17 "ageCategories": [18 {19 "category": "Adult",20 "minAge": 1321 },22 {23 "category": "Infant",24 "minAge": 025 }26 ],27 "maxOccupancy": {28 "total": 4,29 "adults": 3,30 "children": 231 },32 "bedrooms": [33 {34 "count": 1,35 "bedding": [36 {37 "option": [38 {39 "quantity": 1,40 "type": "King Bed",41 "size": "King"42 }43 ]44 }45 ]46 }47 ],48 "extraBedding": [49 {50 "quantity": 1,51 "type": "Rollaway Bed",52 "size": "Full",53 "surcharge": {54 "type": "Per Day",55 "amount": 2056 }57 },58 {59 "quantity": 1,60 "type": "Crib",61 "size": "Crib",62 "surcharge": {63 "type": "Free"64 }65 }66 ],67 "smokingPreferences": [68 "Non-Smoking"69 ]70}
The response will not include bedroom details, view, featured amenity and area as we cannot use all attributes to build a name.
Response:
1{2 "entity": {3 "resourceId": 201171339,4 "partnerCode": "JS001",5 "name": {6 "attributes": {7 "typeOfRoom": "Studio",8 "roomClass": "Basic",9 "includeBedType": true,10 "includeSmokingPref": true,11 "accessibility": "Roll-in Shower",12 "customLabel": "Blue Room"13 },14 "value": "Basic Studio, 1 Queen Bed, Accessible, Non Smoking (Blue Room)"15 },16 "ageCategories": [17 {18 "category": "Adult",19 "minAge": 1320 },21 {22 "category": "Infant",23 "minAge": 024 }25 ],26 "maxOccupancy": {27 "total": 4,28 "adults": 3,29 "children": 230 },31 "bedrooms": [32 {33 "count": 1,34 "bedding": [35 {36 "option": [37 {38 "quantity": 1,39 "type": "King Bed",40 "size": "King"41 }42 ]43 }44 ]45 }46 ],47 "extraBedding": [48 {49 "quantity": 1,50 "type": "Rollaway Bed",51 "size": "Full",52 "surcharge": {53 "type": "Per Day",54 "amount": 2055 }56 },57 {58 "quantity": 1,59 "type": "Crib",60 "size": "Crib",61 "surcharge": {62 "type": "Free"63 }64 }65 ],66 "smokingPreferences": [67 "Non-Smoking"68 ],69 "_links": {70 "self": {71 "href": "https://services.expediapartnercentral.com/properties/1780041/roomTypes/201171339"72 }73 }74 }75}
Modify room type (predefined name, code, and age categories)
Following the Create (Predefined room name) example, the name is modified to "Executive Suite", childage category is removed, and partner code is changed.
Request:
1PUT https://services.expediapartnercentral.com/properties/1780041/roomTypes/201171339
1{2 "resourceId": 201171339,3 "partnerCode": "JS002",4 "name": {5 "value": "Executive Suite"6 },7 "status": "Active",8 "ageCategories": [9 {10 "category": "Adult",11 "minAge": 1812 },13 {14 "category": "ChildAgeA",15 "minAge": 1216 },17 {18 "category": "Infant",19 "minAge": 020 }21 ],22 "maxOccupancy": {23 "total": 4,24 "adults": 3,25 "children": 226 },27 "bedrooms": [28 {29 "count": 1,30 "bedding": [31 {32 "option": [33 {34 "quantity": 1,35 "type": "King Bed",36 "size": "King"37 }38 ]39 }40 ]41 }42 ],43 "extraBedding": [44 {45 "quantity": 1,46 "type": "Rollaway Bed",47 "size": "Full",48 "surcharge": {49 "type": "Per Day",50 "amount": 2051 }52 },53 {54 "quantity": 1,55 "type": "Crib",56 "size": "Crib",57 "surcharge": {58 "type": "Free"59 }60 }61 ],62 "smokingPreferences": [63 "Non-Smoking"64 ],65 "floorSize": {66 "squareFeet": 1023,67 "squareMeters": 9568 },69 "views": [70 "Ocean View",71 "Beach View"72 ],73 "wheelchairAccessibility": false74}
Response:
1{2 "entity": {3 "resourceId": 201171339,4 "partnerCode": "JS002",5 "name": {6 "value": "Executive Suite"7 },8 "status": "Active",9 "ageCategories": [10 {11 "category": "Adult",12 "minAge": 1813 },14 {15 "category": "ChildAgeA",16 "minAge": 1217 },18 {19 "category": "Infant",20 "minAge": 021 }22 ],23 "maxOccupancy": {24 "total": 4,25 "adults": 3,26 "children": 227 },28 "bedrooms": [29 {30 "count": 1,31 "bedding": [32 {33 "option": [34 {35 "quantity": 1,36 "type": "King Bed",37 "size": "King"38 }39 ]40 }41 ]42 }43 ],44 "extraBedding": [45 {46 "quantity": 1,47 "type": "Rollaway Bed",48 "size": "Full",49 "surcharge": {50 "type": "Per Day",51 "amount": 2052 }53 },54 {55 "quantity": 1,56 "type": "Crib",57 "size": "Crib",58 "surcharge": {59 "type": "Free"60 }61 }62 ],63 "smokingPreferences": [64 "Non-Smoking"65 ],66 "floorSize": {67 "squareFeet": 1023,68 "squareMeters": 9569 },70 "views": [71 "Ocean View",72 "Beach View"73 ],74 "wheelchairAccessibility": false,75 "_links": {76 "self": {77 "href": "https://services.expediapartnercentral.com/properties/1780041/roomTypes/201171339"78 }79 }80 }81}
Modify room type (predefined name to name attributes)
Based on the Room type create (Predefined room name) example, a predefined name is modified to a new room name built from attributes, child age category is removed, and the partner code is changed.
The name field is kept with its old value, but will be overridden by the room name attributes, as name attributes always take precedence over predefined names.
Request:
1PUT https://services.expediapartnercentral.com/properties/1780041/roomTypes/201171339
1{2 "resourceId": 201171339,3 "partnerCode": "JS002",4 "name": {5 "attributes": {6 "typeOfRoom": "Suite",7 "roomClass": "Executive",8 "bedroomDetails": "1 Bedroom",9 "featuredAmenity": "Jetted Tub",10 "view": "City View"11 },12 "value": "Executive Suite"13 },14 "status": "Active",15 "ageCategories": [16 {17 "category": "Adult",18 "minAge": 1319 },20 {21 "category": "Infant",22 "minAge": 023 }24 ],25 "maxOccupancy": {26 "total": 4,27 "adults": 3,28 "children": 229 },30 "bedrooms": [31 {32 "count": 1,33 "bedding": [34 {35 "option": [36 {37 "quantity": 1,38 "type": "King Bed",39 "size": "King"40 }41 ]42 }43 ]44 }45 ],46 "extraBedding": [47 {48 "quantity": 1,49 "type": "Rollaway Bed",50 "size": "Full",51 "surcharge": {52 "type": "Per Day",53 "amount": 2054 }55 },56 {57 "quantity": 1,58 "type": "Crib",59 "size": "Crib",60 "surcharge": {61 "type": "Free"62 }63 }64 ],65 "smokingPreferences": [66 "Non-Smoking"67 ]68}
Response:
1{2 "entity": {3 "resourceId": 201171339,4 "partnerCode": "JS002",5 "name": {6 "attributes": {7 "typeOfRoom": "Suite",8 "roomClass": "Executive",9 "bedroomDetails": "1 Bedroom",10 "featuredAmenity": "Jetted Tub",11 "view": "City View"12 },13 "value": "Executive Suite, 1 Bedroom, Jetted Tub, City View"14 },15 "status": "Active",16 "ageCategories": [17 {18 "category": "Adult",19 "minAge": 1320 },21 {22 "category": "Infant",23 "minAge": 024 }25 ],26 "maxOccupancy": {27 "total": 4,28 "adults": 3,29 "children": 230 },31 "bedrooms": [32 {33 "count": 1,34 "bedding": [35 {36 "option": [37 {38 "quantity": 1,39 "type": "King Bed",40 "size": "King"41 }42 ]43 }44 ]45 }46 ],47 "extraBedding": [48 {49 "quantity": 1,50 "type": "Rollaway Bed",51 "size": "Full",52 "surcharge": {53 "type": "Per Day",54 "amount": 2055 }56 },57 {58 "quantity": 1,59 "type": "Crib",60 "size": "Crib",61 "surcharge": {62 "type": "Free"63 }64 }65 ],66 "smokingPreferences": [67 "Non-Smoking"68 ],69 "_links": {70 "self": {71 "href": "https://services.expediapartnercentral.com/properties/1780041/roomTypes/201171339"72 }73 }74 }75}
Room type partial update (PATCH)
Here are a few examples of PATCH requests you can make. Response examples are not included, but they would include the full room type resource definition with all its fields, in its final state after the partial update.
Updating only the name attributes
1{2 "name": {3 "attributes": {4 "typeOfRoom": "Penthouse",5 "roomClass": "Executive",6 "view": "City View",7 "featuredAmenity": "Jetted Tub"8 }9 }10}
Updating both the partner code and the age categories
1{2 "partnerCode": "PatchedPartnerCode",3 "ageCategories": [4 {5 "category": "Adult",6 "minAge": 187 },8 {9 "category": "ChildAgeA",10 "minAge": 011 }12 ]13}
Updating the maximum occupancy
1{2 "maxOccupancy": {3 "total": 3,4 "adults": 2,5 "children": 16 }
Updating only the room views
1{2 "views": [3 "Pool View",4 "Partial Ocean View"5 ]6}
Updating only the room views (this will remove views since the provided list is empty)
1{2 "views": []3}