The OTA_HotelAvailRS (Hotel Availability Response) returns bookable options and related context for one or more properties in reply to an OTA_HotelAvailRQ. It is compatible with enrichment switches and multi-room behavior defined for the availability workflow.
Purpose
Confirm successful processing (<Success/>) or return error diagnostics (<Errors/>). Error Scenarios .
Deliver one or more <RoomStay> items with pricing, guest counts, and property references.
Optionally include contextual blocks (HotelStays, Areas, amenities/descriptions) controlled by InfoSource.
Structure – Root Element
< OTA_HotelAvailRS xmlns = "http://www.opentravel.org/OTA/2003/05" Version = "2016.2" EchoToken = "1" >
< Success />
...
</ OTA_HotelAvailRS >
The EchoToken is useful to identify transactions.
Success
Indicates the request was processed without fatal errors. When absent, see Errors.
Errors
Container for one or more Error items describing non-recoverable issues in the request. Error Scenarios .
Warnings
Used for non-fatal guidance. Example: when a multi-room search cannot satisfy every candidate, a warning like Code="14" with text Not all rooms in the request do have a suitable candidate may be present.
Structure - Core Elements
HotelStays
Portfolio-level hotel facts that can accompany availability (e.g., BasicPropertyInfo with HotelCode, HotelName, AreaID, optional VendorMessages, Award).
Example
< HotelStays >
< HotelStay >
< BasicPropertyInfo HotelCode = "AMTSES08UI" HotelName = "Caserio de Lanzarote" HotelCodeContext = "11111" AreaID = "1012SA" >
< Award Rating = "2 Stars" />
</ BasicPropertyInfo >
</ HotelStay >
</ HotelStays >
HotelCodeContext returns the GIATA code if the client is licensed
Areas
Geographical labels corresponding to the AreaID linkage.
Example
< Areas >
< Area AreaID = "1012SA" >
< AreaDescription Name = "Country" >
< Text > Spain </ Text >
</ AreaDescription >
< AreaDescription Name = "CountryCode" >
< Text > ES </ Text >
</ AreaDescription >
< AreaDescription Name = "TravelDestination" >
< Text > ACE </ Text >
</ AreaDescription >
< AreaDescription Name = "Destination" >
< Text > Canarian Islands </ Text >
</ AreaDescription >
< AreaDescription Name = "Region" >
< Text > Lanzarote </ Text >
</ AreaDescription >
< AreaDescription Name = "Resort" >
< Text > San Bartolome </ Text >
</ AreaDescription >
< AreaDescription Name = "ResortCode" >
< Text > 1012SA </ Text >
</ AreaDescription >
< AreaDescription Name = "Airport" >
< Text > ACE </ Text >
</ AreaDescription >
</ Area >
</ Areas >
RoomStays
Each RoomStay conveys a bookable option (room/board/rateplan) for a given hotel.
RoomStay@RoomStayCandidateRPH echoes the corresponding room candidate index from the request.
Grouping Semantics
Standard searches: multiple room/board combinations for the same hotel may share the same RPH for grouping purposes.
Multi-room mode : each RoomStay carries a unique RPH (one per returned option) to help client-side combination logic.
< RoomStay RoomStayCandidateRPH = "0" RPH = "0" ResponseType = "PropertyList" >
RoomType
Specifies the room code of the returned product.
< RoomTypes >
< RoomType RoomTypeCode = "RMSD000000" />
</ RoomTypes >
The room codes breakdown can be found at Mapping codes
RoomRates
Pricing appears under RoomRates/RoomRate/Rates/Rate as Base and Total (amounts after tax, currency).
Availability for each option is indicated at RoomRate@NumberOfUnits (omitted when free sales apply).
The ChargeType code on Rate reflects the original contract rate basis (OTA CHG codelist):
19 → Per Unit
21 → Per Person
Features/Feature/Description/Text indicates the board for the returned rate.
< RoomRates >
< RoomRate RoomTypeCode = "RMSD000000" NumberOfUnits = "99" >
< Rates >
< Rate ChargeType = "21" >
< Base AmountAfterTax = "900.00" CurrencyCode = "EUR" />
< Total AmountAfterTax = "900.00" CurrencyCode = "EUR" />
</ Rate >
</ Rates >
< Features >
< Feature >
< Description >
< Text > BB </ Text >
</ Description >
</ Feature >
</ Features >
</ RoomRate >
</ RoomRates >
GuestCounts
Shows the pax count for the returned product:
AgeQualifyingCode values:
10: Adult
8: Child
7: Infant
< GuestCounts >
< GuestCount AgeQualifyingCode = "10" Age = "30" Count = "2" />
</ GuestCounts >
TimeSpan
Indicates the dates for which the service is available.
< TimeSpan Start = "2026-07-17" End = "2026-07-24" />
BasicPropertyInfo
Shows the hotel code for the returned room stay. Vendor Messages can also be displayed at this section. Check Vendor Messages
< BasicPropertyInfo HotelCode = "AMTSES08UI" >
< VendorMessages >
< VendorMessage Title = "Free Stay Offers" InfoType = "3" >
< SubSection SubTitle = "100" SubCode = "Value" >
< Paragraph >
< Text > Free Stay Offers 100 </ Text >
</ Paragraph >
</ SubSection >
< SubSection SubTitle = "FSO" SubCode = "OTS" />
</ VendorMessage >
< VendorMessage Title = "FreeCancellationConditions" InfoType = "2" >
< SubSection SubTitle = "FCP-RATE" SubCode = "DRV" />
< SubSection SubTitle = "FCP-P7D" SubCode = "DRV" />
</ VendorMessage >
</ VendorMessages >
</ BasicPropertyInfo >
Rules and Features
Enrichment via InfoSource
The response can be enriched beyond RoomStays depending on the InfoSource value used in the request:
Value Meaning
(not set) Full enrichment (equivalent to 1234) 0No enrichment – only RoomStays are included 1Include HotelStays only 2Include Areas only 3Include room Amenities only 4Include RoomDescription only 5Include BoardDescription only
Combination is supported (e.g., InfoSource="12" returns HotelStays + Areas).
Multi-Room Specifics
Up to 5 room candidates per request are supported.
Response returns one RoomStay per option that fits each candidate; combine client‑side using RoomStayCandidateRPH, RPH, and NumberOfUnits.
If one or more candidates cannot be satisfied, a warning is returned.
Complete Examples
< OTA_HotelAvailRS
xmlns = "http://www.opentravel.org/OTA/2003/05" Version = "2008.1" TransactionIdentifier = "1-1/1" >
< Success />
< HotelStays >
< HotelStay >
< BasicPropertyInfo HotelCode = "AMTSES08UI" HotelName = "Caserio de Lanzarote" HotelCodeContext = "11111" AreaID = "1012SA" >
< Award Rating = "2 Stars" />
</ BasicPropertyInfo >
</ HotelStay >
</ HotelStays >
< RoomStays >
< RoomStay RoomStayCandidateRPH = "0" RPH = "0" ResponseType = "PropertyList" >
< RoomTypes >
< RoomType RoomTypeCode = "RMSD000000" />
</ RoomTypes >
< RoomRates >
< RoomRate RoomTypeCode = "RMSD000000" NumberOfUnits = "99" >
< Rates >
< Rate ChargeType = "21" >
< Base AmountAfterTax = "900.00" CurrencyCode = "EUR" />
< Total AmountAfterTax = "900.00" CurrencyCode = "EUR" />
</ Rate >
</ Rates >
< Features >
< Feature >
< Description >
< Text > BB </ Text >
</ Description >
</ Feature >
</ Features >
</ RoomRate >
</ RoomRates >
< GuestCounts >
< GuestCount AgeQualifyingCode = "10" Age = "30" Count = "2" />
</ GuestCounts >
< TimeSpan Start = "2026-07-17" End = "2026-07-24" />
< BasicPropertyInfo HotelCode = "AMTSES08UI" >
< VendorMessages >
< VendorMessage Title = "Free Stay Offers" InfoType = "3" >
< SubSection SubTitle = "100" SubCode = "Value" >
< Paragraph >
< Text > Free Stay Offers 100 </ Text >
</ Paragraph >
</ SubSection >
< SubSection SubTitle = "FSO" SubCode = "OTS" />
</ VendorMessage >
< VendorMessage Title = "FreeCancellationConditions" InfoType = "2" >
< SubSection SubTitle = "FCP-RATE" SubCode = "DRV" />
< SubSection SubTitle = "FCP-P7D" SubCode = "DRV" />
</ VendorMessage >
</ VendorMessages >
</ BasicPropertyInfo >
< Reference Type = "22" ID = "TST1" ID_Context = "TST1" />
</ RoomStay >
< RoomStay RoomStayCandidateRPH = "0" RPH = "1" ResponseType = "PropertyList" >
< RoomTypes >
< RoomType RoomTypeCode = "RMSD000000" />
</ RoomTypes >
< RoomRates >
< RoomRate RoomTypeCode = "RMSD000000" NumberOfUnits = "99" >
< Rates >
< Rate ChargeType = "21" >
< Base AmountAfterTax = "1050.00" CurrencyCode = "EUR" />
< Total AmountAfterTax = "1050.00" CurrencyCode = "EUR" />
</ Rate >
</ Rates >
< Features >
< Feature >
< Description >
< Text > HB </ Text >
</ Description >
</ Feature >
</ Features >
</ RoomRate >
</ RoomRates >
< GuestCounts >
< GuestCount AgeQualifyingCode = "10" Age = "30" Count = "2" />
</ GuestCounts >
< TimeSpan Start = "2026-07-17" End = "2026-07-24" />
< BasicPropertyInfo HotelCode = "AMTSES08UI" >
< VendorMessages >
< VendorMessage Title = "Free Stay Offers" InfoType = "3" >
< SubSection SubTitle = "100" SubCode = "Value" >
< Paragraph >
< Text > Free Stay Offers 100 </ Text >
</ Paragraph >
</ SubSection >
< SubSection SubTitle = "FSO" SubCode = "OTS" />
</ VendorMessage >
< VendorMessage Title = "FreeCancellationConditions" InfoType = "2" >
< SubSection SubTitle = "FCP-RATE" SubCode = "DRV" />
< SubSection SubTitle = "FCP-P7D" SubCode = "DRV" />
</ VendorMessage >
</ VendorMessages >
</ BasicPropertyInfo >
< Reference Type = "22" ID = "TST1" ID_Context = "TST1" />
</ RoomStay >
< RoomStay RoomStayCandidateRPH = "0" RPH = "2" ResponseType = "PropertyList" >
< RoomTypes >
< RoomType RoomTypeCode = "RMSD000000" />
</ RoomTypes >
< RoomRates >
< RoomRate RoomTypeCode = "RMSD000000" NumberOfUnits = "99" >
< Rates >
< Rate ChargeType = "21" >
< Base AmountAfterTax = "1200.00" CurrencyCode = "EUR" />
< Total AmountAfterTax = "1200.00" CurrencyCode = "EUR" />
</ Rate >
</ Rates >
< Features >
< Feature >
< Description >
< Text > AI </ Text >
</ Description >
</ Feature >
</ Features >
</ RoomRate >
</ RoomRates >
< GuestCounts >
< GuestCount AgeQualifyingCode = "10" Age = "30" Count = "2" />
</ GuestCounts >
< TimeSpan Start = "2026-07-17" End = "2026-07-24" />
< BasicPropertyInfo HotelCode = "AMTSES08UI" >
< VendorMessages >
< VendorMessage Title = "Free Stay Offers" InfoType = "3" >
< SubSection SubTitle = "100" SubCode = "Value" >
< Paragraph >
< Text > Free Stay Offers 100 </ Text >
</ Paragraph >
</ SubSection >
< SubSection SubTitle = "FSO" SubCode = "OTS" />
</ VendorMessage >
< VendorMessage Title = "FreeCancellationConditions" InfoType = "2" >
< SubSection SubTitle = "FCP-RATE" SubCode = "DRV" />
< SubSection SubTitle = "FCP-P7D" SubCode = "DRV" />
</ VendorMessage >
</ VendorMessages >
</ BasicPropertyInfo >
< Reference Type = "22" ID = "TST1" ID_Context = "TST1" />
</ RoomStay >
</ RoomStays >
< Areas >
< Area AreaID = "1012SA" >
< AreaDescription Name = "Country" >
< Text > Spain </ Text >
</ AreaDescription >
< AreaDescription Name = "CountryCode" >
< Text > ES </ Text >
</ AreaDescription >
< AreaDescription Name = "TravelDestination" >
< Text > ACE </ Text >
</ AreaDescription >
< AreaDescription Name = "Destination" >
< Text > Canarian Islands </ Text >
</ AreaDescription >
< AreaDescription Name = "Region" >
< Text > Lanzarote </ Text >
</ AreaDescription >
< AreaDescription Name = "Resort" >
< Text > San Bartolome </ Text >
</ AreaDescription >
< AreaDescription Name = "ResortCode" >
< Text > 1012SA </ Text >
</ AreaDescription >
< AreaDescription Name = "Airport" >
< Text > ACE </ Text >
</ AreaDescription >
</ Area >
</ Areas >
</ OTA_HotelAvailRS >
See all 170 lines
Best Practices
Include EchoToken in both request and response correlation.
Use InfoSource=0 when you only need pricing blocks; enable specific enrichments incrementally.
In multi-room flows, validate combinations client‑side using NumberOfUnits and candidate indexes.
Parse ChargeType to correctly label price basis (per person/per unit).