Expedia Lodging API
API for lodging supply and property management within the Expedia Group partner network.
API for lodging supply and property management within the Expedia Group partner network.
openapi: 3.0.1
info:
title: Expedia Group Product API
description: |
The Product API will enable Expedia lodging partners to read, create and edit room types and rate plans via APIs, without having to use Partner Central or contact their market manager. </br><br/>To start experimenting, please use your existing EQC credentials and properties.
contact:
name: Lodging Connectivity
url: https://expediaconnectivity.com/developer
email: [email protected]
version: "2.0"
servers:
- url: https://services.expediapartnercentral.com/
tags:
- name: Property
description: The property resource
- name: Rate Plan
description: The rate plan resource
- name: Rate Verification Thresholds
description: Manage room types Rate Verification Thresholds
- name: Room Type
description: Manage room types
- name: Room Type Amenities
description: Manage room type amenities
paths:
/products/properties:
get:
tags:
- Property
summary: Expedia Group Obtain a list of properties
operationId: getProperties
parameters:
- name: status
in: query
description: Status filter. String. Only supported value is "all".
schema:
type: string
- name: offset
in: query
description: Pagination offset. Integer starting at 0
schema:
type: string
default: "0"
- name: limit
in: query
description: Pagination limit. Integer between 1 and 200.
schema:
type: string
default: "20"
responses:
"200":
description: OK
content:
application/vnd.expedia.eps.product-v2+json:
schema:
$ref: '#/components/schemas/ResponseWrapperDTO«List«PropertyDTO»»'
security:
- Basic: []
/products/properties/{propertyId}:
get:
tags:
- Property
summary: Expedia Group Read a single property
operationId: getProperty
parameters:
- name: propertyId
in: path
description: Expedia Property ID
required: true
schema:
type: string
responses:
"200":
description: OK
content:
application/vnd.expedia.eps.product-v2+json:
schema:
$ref: '#/components/schemas/ResponseWrapperDTO«PropertyDTO»'
security:
- Basic: []
/properties/{propertyId}/roomTypes:
get:
tags:
- Room Type
summary: Expedia Group Obtain a list of room types for a given property
operationId: getRoomTypes
parameters:
- name: propertyId
in: path
description: Expedia Property ID
required: true
schema:
type: string
responses:
"200":
description: OK
content:
application/vnd.expedia.eps.product-v3+json:
schema:
type: array
items:
$ref: '#/components/schemas/RoomType'
default:
description: Error
content:
application/vnd.expedia.eps.product-v3+json:
schema:
$ref: '#/components/schemas/Errors'
security:
- Basic: []
post:
tags:
- Room Type
summary: Expedia Group Creates a new room type
operationId: createRoomType
parameters:
- name: propertyId
in: path
description: Expedia Property ID
required: true
schema:
type: string
requestBody:
description: roomType
content:
application/vnd.expedia.eps.product-v3+json:
schema:
$ref: '#/components/schemas/RoomType'
required: true
responses:
"201":
description: Created
content:
application/vnd.expedia.eps.product-v3+json:
schema:
$ref: '#/components/schemas/RoomType'
default:
description: Error
content:
application/vnd.expedia.eps.product-v3+json:
schema:
$ref: '#/components/schemas/Errors'
security:
- Basic: []
x-codegen-request-body-name: roomType
/properties/{propertyId}/roomTypes/{roomTypeId}:
get:
tags:
- Room Type
summary: Expedia Group Read a single room type from a given property
operationId: getRoomType
parameters:
- name: propertyId
in: path
description: Expedia Property ID
required: true
schema:
type: string
- name: roomTypeId
in: path
description: Room type resource ID
required: true
schema:
type: string
responses:
"200":
description: OK
content:
application/vnd.expedia.eps.product-v3+json:
schema:
$ref: '#/components/schemas/RoomType'
default:
description: Error
content:
application/vnd.expedia.eps.product-v3+json:
schema:
$ref: '#/components/schemas/Errors'
security:
- Basic: []
put:
tags:
- Room Type
summary: Expedia Group Modify an existing room type
operationId: updateRoomType
parameters:
- name: propertyId
in: path
description: Expedia Property ID
required: true
schema:
type: string
- name: roomTypeId
in: path
description: Room type resource ID
required: true
schema:
type: string
requestBody:
description: roomType
content:
application/vnd.expedia.eps.product-v3+json:
schema:
$ref: '#/components/schemas/RoomType'
required: true
responses:
"200":
description: OK
content:
application/vnd.expedia.eps.product-v3+json:
schema:
$ref: '#/components/schemas/RoomType'
default:
description: Error
content:
application/vnd.expedia.eps.product-v3+json:
schema:
$ref: '#/components/schemas/Errors'
security:
- Basic: []
x-codegen-request-body-name: roomType
patch:
tags:
- Room Type
summary: Expedia Group Patch an existing room type
operationId: patchRoomType
parameters:
- name: propertyId
in: path
description: Expedia Property Id
required: true
schema:
type: string
- name: roomTypeId
in: path
description: Room type resource ID
required: true
schema:
type: string
requestBody:
description: JSON message of partially updated room type
content:
application/vnd.expedia.eps.product-v3+json:
schema:
$ref: '#/components/schemas/RoomType'
required: true
responses:
"200":
description: OK
content:
application/vnd.expedia.eps.product-v3+json:
schema:
$ref: '#/components/schemas/RoomType'
default:
description: Error
content:
application/vnd.expedia.eps.product-v3+json:
schema:
$ref: '#/components/schemas/Errors'
security:
- Basic: []
x-codegen-request-body-name: roomTypeBody
/properties/{propertyId}/roomTypes/{roomTypeId}/amenities:
get:
tags:
- Room Type Amenities
summary: Expedia Group Read a single room type's amenities
operationId: getRoomTypeAmenities
parameters:
- name: propertyId
in: path
description: Expedia Property ID
required: true
schema:
type: string
- name: roomTypeId
in: path
description: Room type resource ID. Integer
required: true
schema:
type: string
responses:
"200":
description: OK
content:
application/vnd.expedia.eps.product-v2+json:
schema:
$ref: '#/components/schemas/ResponseWrapperDTO«List«RoomTypeAmenityDTO»»'
security:
- Basic: []
put:
tags:
- Room Type Amenities
summary: Expedia Group Set room type amenities to an existing room type
operationId: setRoomTypeAmenities
parameters:
- name: propertyId
in: path
description: Expedia Property Id
required: true
schema:
type: string
- name: roomTypeId
in: path
description: Room type resource ID
required: true
schema:
type: string
requestBody:
description: JSON message with the room type amenities
content:
application/vnd.expedia.eps.product-v2+json:
schema:
type: array
items:
$ref: '#/components/schemas/RoomTypeAmenityDTO'
required: true
responses:
"200":
description: OK
content:
application/vnd.expedia.eps.product-v2+json:
schema:
$ref: '#/components/schemas/ResponseWrapperDTO«List«RoomTypeAmenityDTO»»'
security:
- Basic: []
x-codegen-request-body-name: roomTypeAmenityDTOs
/properties/{propertyId}/roomTypes/{roomTypeId}/ratePlans:
get:
tags:
- Rate Plan
summary: Expedia Group Obtain a list of rate plans
operationId: getRatePlans
parameters:
- name: propertyId
in: path
description: Expedia Property ID
required: true
schema:
type: string
- name: roomTypeId
in: path
description: Room type resource ID
required: true
schema:
type: string
- name: status
in: query
description: Status filter. String. Only supported value is "all".
schema:
type: string
responses:
"200":
description: OK
content:
application/vnd.expedia.eps.product-v2+json:
schema:
$ref: '#/components/schemas/ResponseWrapperDTO«List«RatePlanDTO»»'
security:
- Basic: []
post:
tags:
- Rate Plan
summary: Expedia Group Creates a new rate plan
operationId: createRatePlan
parameters:
- name: propertyId
in: path
description: Expedia Property ID
required: true
schema:
type: string
- name: roomTypeId
in: path
description: Room type resource ID
required: true
schema:
type: string
requestBody:
description: JSON message describing the new rate plan
content:
application/vnd.expedia.eps.product-v2+json:
schema:
$ref: '#/components/schemas/RatePlanDTO'
required: true
responses:
"201":
description: Created
content:
application/vnd.expedia.eps.product-v2+json:
schema:
$ref: '#/components/schemas/ResponseWrapperDTO«RatePlanDTO»'
security:
- Basic: []
x-codegen-request-body-name: ratePlanDTO
/properties/{propertyId}/roomTypes/{roomTypeId}/ratePlans/{ratePlanId}:
get:
tags:
- Rate Plan
summary: Expedia Group Read a single rate plan
operationId: getRatePlan
parameters:
- name: propertyId
in: path
description: Expedia Property ID
required: true
schema:
type: string
- name: roomTypeId
in: path
description: Room type resource ID
required: true
schema:
type: string
- name: ratePlanId
in: path
description: Rate plan resource ID
required: true
schema:
type: string
responses:
"200":
description: OK
content:
application/vnd.expedia.eps.product-v2+json:
schema:
$ref: '#/components/schemas/ResponseWrapperDTO«RatePlanDTO»'
security:
- Basic: []
put:
tags:
- Rate Plan
summary: Expedia Group Modify an existing rate plan
operationId: updateRatePlan
parameters:
- name: propertyId
in: path
description: Expedia Property ID
required: true
schema:
type: string
- name: roomTypeId
in: path
description: Room type resource ID
required: true
schema:
type: string
- name: ratePlanId
in: path
description: Rate plan resource ID
required: true
schema:
type: string
requestBody:
description: JSON message of modified rate plan
content:
application/vnd.expedia.eps.product-v2+json:
schema:
$ref: '#/components/schemas/RatePlanDTO'
required: true
responses:
"200":
description: OK
content:
application/vnd.expedia.eps.product-v2+json:
schema:
$ref: '#/components/schemas/ResponseWrapperDTO«RatePlanDTO»'
security:
- Basic: []
x-codegen-request-body-name: ratePlan
delete:
tags:
- Rate Plan
summary: Expedia Group Delete an existing rate plan
operationId: deleteRatePlan
parameters:
- name: propertyId
in: path
description: Expedia Property ID
required: true
schema:
type: string
- name: roomTypeId
in: path
description: Room type resource ID
required: true
schema:
type: string
- name: ratePlanId
in: path
description: Rate plan resource ID
required: true
schema:
type: string
responses:
"204":
description: No Content
content: {}
security:
- Basic: []
patch:
tags:
- Rate Plan
summary: Expedia Group Patch an existing rate plan
operationId: patchRatePlan
parameters:
- name: propertyId
in: path
description: Expedia Property ID
required: true
schema:
type: string
- name: roomTypeId
in: path
description: Room type resource ID
required: true
schema:
type: string
- name: ratePlanId
in: path
description: Rate plan resource ID
required: true
schema:
type: string
requestBody:
description: JSON message of partially updated rate plan
content:
application/vnd.expedia.eps.product-v2+json:
schema:
type: string
required: true
responses:
"200":
description: OK
content:
application/vnd.expedia.eps.product-v2+json:
schema:
$ref: '#/components/schemas/ResponseWrapperDTO«RatePlanDTO»'
security:
- Basic: []
x-codegen-request-body-name: ratePlan
/properties/{propertyId}/roomTypes/{roomTypeId}/rateThresholds:
get:
tags:
- Rate Verification Thresholds
summary: Expedia Group Read a single room type's rate verification thresholds
operationId: getRateVerificationThresholds
parameters:
- name: propertyId
in: path
description: Expedia Property ID
required: true
schema:
type: string
- name: roomTypeId
in: path
description: Room type resource ID. Integer
required: true
schema:
type: string
responses:
"200":
description: OK
content:
application/vnd.expedia.eps.product-v2+json:
schema:
$ref: '#/components/schemas/ResponseWrapperDTO«RateVerificationThresholdsDTO»'
security:
- Basic: []
components:
schemas:
ServiceFeesPerPersonDTO:
required:
- ageCategory
- dateEnd
- dateStart
- isTaxable
type: object
properties:
ageCategory:
type: string
description: The age category for the service fees
enum:
- Adult
- ChildAgeA
- ChildAgeB
- ChildAgeC
- ChildAgeD
- Infant
amountPerNight:
type: number
description: "Per night service charge. Min value 0.000, accepts up to 3 decimal points"
format: double
amountPerStay:
type: number
description: "Per stay service charge. Min value 0.000, accepts up to 3 decimal points"
format: double
dateEnd:
type: string
description: Date at which this amount will be not effective anymore.
format: date
dateStart:
type: string
description: "Date at which this fee started being applicable, can be in the past"
format: date
isTaxable:
type: boolean
description: "If the service fee is taxable. Values: true/false"
example: false
DistributionRuleDTO:
required:
- distributionModel
type: object
properties:
compensation:
$ref: '#/components/schemas/CompensationRuleDTO'
distributionModel:
type: string
description: "Distribution model adopted by the rate plan, matching property configuration. ExpediaCollect: indicates that when customers book this rate plan, they will pay Expedia. HotelCollect: indicates that when customers book this rate plan, they will pay the property. Note: if a product can be sold as both ExpediaCollect and HotelCollect, there will be 2 distribution rules under the rate plan to indicate this"
enum:
- HotelCollect
- ExpediaCollect
expediaId:
type: string
description: "String, min 1, max 50 characters. Expedia rate plan ID that will be specified in booking messages and that should be used to manage avail/rates if this set of distribution rules is marked as manageable."
manageable:
type: boolean
description: "Cannot be provided in a create request. Default to yes for HotelCollect-only or ExpediaCollect-only rate plans. For ExpediaTravelerPreference rate plans, if rate acquisition type is net, ExpediaCollect will default to true; if rate acquisition type is Sell/LAR, HotelCollect will default to true."
readOnly: true
example: false
partnerCode:
type: string
description: "Unique partner identifier for the rate plan. For a given room type, this code has to be unique per distribution model (e.g. for all ExpediaCollect rate plan distribution rules under this room, this code has to be unique). Uniqueness will be validated by Expedia during create or update operations. Accepted characters are a-z, A-Z, 0-9, '.', '_' and '-'"
RateVerificationThresholdsDTOLinks:
type: object
properties:
self:
$ref: '#/components/schemas/LinkDTO'
ErrorDTO:
type: object
properties:
code:
type: integer
format: int32
message:
type: string
ApiError:
type: object
properties:
code:
type: integer
format: int32
message:
type: string
PeriodDTO:
required:
- dateEnd
- dateStart
type: object
properties:
dateEnd:
type: string
description: Ending date of the period. Format is YYYY-MM-DD.
format: date
dateStart:
type: string
description: Starting date of the period. Format is YYYY-MM-DD.
format: date
PropertyAddressDTO:
type: object
properties:
city:
type: string
description: City in which the property is located
countryCode:
type: string
description: "ISO 3166-1 Alpha 3 country code, for the country where the property is located"
line1:
type: string
description: First line of address
line2:
type: string
description: "Second line of address, not always available"
postalCode:
type: string
description: "Postal or State Code, might not be available"
state:
type: string
description: "State/Province, which is optional and thus might not be available"
CancelPolicyExceptionDTO:
required:
- endDate
- startDate
type: object
properties:
endDate:
type: string
description: "Format: YYYY-MM-DD. Cancel penalty exception's end date"
format: date
penalties:
type: array
description: Definition of the exception penalties applied
items:
$ref: '#/components/schemas/PenaltyDTO'
startDate:
type: string
description: "Format: YYYY-MM-DD. Cancel penalty exception's starting date"
format: date
RatePlanDTOLinks:
type: object
properties:
depositPolicy:
$ref: '#/components/schemas/LinkDTO'
derivedRatePlans:
type: array
description: List of URLs that point to the derived Rate Plans. These Rate Plans have their rates and availability derived from this Rate Plan.
items:
$ref: '#/components/schemas/LinkDTO'
parentRatePlan:
$ref: '#/components/schemas/LinkDTO'
self:
$ref: '#/components/schemas/LinkDTO'
AdditionalGuestAmountDTO:
required:
- ageCategory
type: object
properties:
ageCategory:
type: string
description: The age category for the additional guests
enum:
- Adult
- ChildAgeA
- ChildAgeB
- ChildAgeC
- ChildAgeD
- Infant
amount:
type: number
description: "Min value 0.000, accepts up to 3 decimal points"
format: double
dateEnd:
type: string
description: "Date at which this amount will not be effective anymore. If no end date defined, will be returned as 2079-06-06."
format: date
dateStart:
type: string
description: "Date at which this amount started being applicable, can be in the past"
format: date
percent:
type: number
description: "Min value 0.0, Max value 1.0"
format: double
RateVerificationThresholdsDTO:
type: object
properties:
_links:
$ref: '#/components/schemas/RateVerificationThresholdsDTOLinks'
maxAmount:
type: number
description: "Defines maximum acceptable rates. If the rate is higher than this maximum value, the AR rate update will be ignored and a warning will be returned."
format: double
minAmount:
type: number
description: "Defines minimum acceptable rates. If the rate is lower than this minimum value, the AR rate update will be ignored and a warning will be returned."
format: double
source:
type: string
description: "Defines how the minimum and maximum amounts were calculated. It is either RecentBookings (thresholds calculated using last 10 reservations, and applying multiplication and division factor to find maximum and minimum values) or Manual (manually defined by Expedia). RecentReservation is Expedia's default method."
enum:
- RecentBookings
- ManualOverride
type:
type: string
description: "Type of the rate verification thresholds. The only possible value is: SellLAR"
enum:
- NetRate
- SellLAR
CompensationRuleDTO:
required:
- minAmount
- percent
type: object
properties:
exceptions:
type: array
description: "Depending on the contractual agreement between Expedia and the partner, compensation can vary based on different criteria. This array of exceptions will reflect this"
items:
$ref: '#/components/schemas/CompensationExceptionRuleDTO'
minAmount:
type: number
description: Minimum amount. Accepts up to 3 decimal points. Only applicable to ExpediaCollect distribution rules
format: double
percent:
type: number
description: "Compensation percentage applied by default. Expressed as a value. Between 0 and 1, accepts up to 4 decimal points"
format: double
RoomTypeAmenityDTO:
required:
- code
type: object
properties:
code:
type: string
description: Uniquely identifies an amenity
detailCode:
type: string
description: "Adds precision or qualifies the amenity. Mandatory for some amenity, optional for other and prohibited by the rest of the amenities."
value:
type: number
description: "Number. Adds precision to the amenity. Mandatory for some amenity, optional for other and prohibited by the rest of the amenities."
ServiceFeesPerStayDTO:
required:
- isTaxable
type: object
properties:
amountPerNight:
type: number
description: "Per night service charge. Min value 0.000, accepts up to 3 decimal points"
format: double
amountPerStay:
type: number
description: "Per stay service charge. Min value 0.000, accepts up to 3 decimal points"
format: double
isTaxable:
type: boolean
description: "If the service fee is taxable. Values: true/false"
example: false
percent:
type: number
description: "Percentage of the base rate. Value between 0 and 1, accepts up to 4 decimal points"
format: double
ResponseWrapperDTO«List«RatePlanDTO»»:
type: object
properties:
entity:
type: array
items:
$ref: '#/components/schemas/RatePlanDTO'
errors:
type: array
items:
$ref: '#/components/schemas/ErrorDTO'
ResponseWrapperDTO«List«PropertyDTO»»:
type: object
properties:
entity:
type: array
items:
$ref: '#/components/schemas/PropertyDTO'
errors:
type: array
items:
$ref: '#/components/schemas/ErrorDTO'
RnsAttributesDTO:
type: object
properties:
accessibility:
type: boolean
description: Attribute that determines if room is considered wheelchair accessible
example: false
area:
type: string
description: Attributed used to highlight the location of the room
bedroomDetails:
type: string
description: Attribute that describes details of the bedroom used to compose the name of the room
customLabel:
type: string
description: Free text that can be appended to the name generated by the attributes. Use of this attribute is discouraged (see full spec). Max 37 characters
featuredAmenity:
type: string
description: Attribute used to highlight a feature of the room on its name
includeBedType:
type: boolean
description: Attribute that determines whether or not to include bed type on the room name
example: false
includeSmokingPref:
type: boolean
description: Attribute that determines if room has smoking preference
example: false
roomClass:
type: string
description: "Attribute that described the class of room, which is used to compose the name"
typeOfRoom:
type: string
description: "Attribute that determines the type of room, which is used to compose the name"
view:
type: string
description: Attribute that gives additional information about the view of the room
PenaltyDTO:
type: object
properties:
amount:
type: number
description: "Min value 0.000 (3 decimal points). The amount provided here should be based on the property rate acquisition type. If the property rate acquisition type is Net, the rate provided here should be net of Expedia compensation. If it is SellLAR, the rate should be what the customer will be charged (inclusive of Expedia compensation). Used to define a flat amount that would be charged as a cancel or change penalty. This would normally replace a per-stay fee, but it can also be added on top of a per-stay fee if that is what the partner requires"
format: double
deadline:
type: integer
description: "Number of hours prior to the arrival of the guest. When set to 0, it means up until end of the day of arrival. Min 0, Max 32767"
format: int32
perStayFee:
type: string
description: Fee that will be charged if the customer cancels within the specified deadline.
enum:
- None
- 1stNightRoomAndTax
- 2NightsRoomAndTax
- 10PercentCostOfStay
- 20PercentCostOfStay
- 30PercentCostOfStay
- 40PercentCostOfStay
- 50PercentCostOfStay
- 60PercentCostOfStay
- 70PercentCostOfStay
- 80PercentCostOfStay
- 90PercentCostOfStay
- FullCostOfStay
RatePlanDTO:
required:
- distributionRules
- name
- occupantsForBaseRate
type: object
properties:
_links:
$ref: '#/components/schemas/RatePlanDTOLinks'
additionalGuestAmounts:
type: array
description: "Array of additional guest amounts. Up to 6 can be specified, 1 per category. Only 1 amount can be given per category, for all dates"
items:
$ref: '#/components/schemas/AdditionalGuestAmountDTO'
bookDateEnd:
type: string
description: "Date at which this rate plan stops being available for searching on any Expedia POS. Format YYYY-MM-DD. If not restricted, will be returned as 2079-06-06. If in 2079, indicates this rate plan book end date is unrestricted"
format: date
bookDateStart:
type: string
description: "Date at which this rate plan starts being available for searching on any Expedia POS. If in the past, indicates rate plan book date start is not restricted. Accepted format: YYYY-MM-DD. If not restricted, will be returned as 1900-01-01"
format: date
cancelPolicy:
$ref: '#/components/schemas/CancelPolicyDTO'
creationDateTime:
type: string
description: Date at which the rate plan has been created. The date is formatted in the ISO 8601 format.
format: date-time
readOnly: true
depositRequired:
type: boolean
description: Indicates if a deposit is required upon booking. This flag is only available for Rate Plan with business models HotelCollect or ExpediaTravelerPreference.
example: false
distributionRules:
type: array
description: "Used to provide information about how this rate plan can be sold (ExpediaCollect, HotelCollect or both)."
items:
$ref: '#/components/schemas/DistributionRuleDTO'
lastUpdateDateTime:
type: string
description: Date of the last modifications to this rate plan. The date is formatted in the ISO 8601 format.
format: date-time
readOnly: true
maxAdvBookDays:
typ
# --- truncated at 32 KB (58 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/expedia-group/refs/heads/main/openapi/expedia-lodging-product-openapi-original.yml