Skip to main content
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="AESPMI5L46" 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="RM00CRMV00"/>
</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="RM00CRMV00" 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="AESPMI5L46">
	<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:
ValueMeaning
(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.

Reccomended Retail price

As a distributor, there is an optional setup that can be activated so that the Hotel avail response returns the reccomended retail price from the hotelier. In this case two rates will be received, our own selling price, and also the the minimal price for which this hotel can be sold to end-customers. The Rate node containing the attribute RateMode = "1" defines the minimal price to sell to an end-customer. See below example:
<RoomRates>
    <RoomRate RoomTypeCode="RMSDDB00A0;FP000" NumberOfUnits="14">
        <Rates>
            <Rate ChargeType="21" >
                <Base AmountAfterTax="510.16" CurrencyCode="EUR"/>
                <Total AmountAfterTax="510.16" CurrencyCode="EUR"/>
            </Rate>
            <Rate ChargeType="21" RateMode="1">
                <Base AmountAfterTax="520" CurrencyCode="EUR"/>
                <Total AmountAfterTax="520" CurrencyCode="EUR"/>
            </Rate>                        
        </Rates>
        <Features>
            <Feature>
                <Description>
                    <Text>RO</Text>
                </Description>
            </Feature>
        </Features>
    </RoomRate>
</RoomRates>
Even when this feature is active for a distributor, not all portfolio would contain the RRP node, not all hotels would return this.

Offer Tags

As a distributor, there is an optional setup to receive Offer Tags. For more info please check General Messaging

Complete Examples

<OTA_HotelAvailRS
    xmlns="http://www.opentravel.org/OTA/2003/05" Version="2008.1" TransactionIdentifier="1-1/1">
    <Success/>
    <HotelStays>
        <HotelStay>
            <BasicPropertyInfo HotelCode="AESPMI5L46" 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="RM00CRMV00"/>
            </RoomTypes>
            <RoomRates>
                <RoomRate RoomTypeCode="RM00CRMV00" 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="AESPMI5L46">
                <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="TEST" ID_Context="TEST"/>
        </RoomStay>
        <RoomStay RoomStayCandidateRPH="0" RPH="1" ResponseType="PropertyList">
            <RoomTypes>
                <RoomType RoomTypeCode="RM00CRMV00"/>
            </RoomTypes>
            <RoomRates>
                <RoomRate RoomTypeCode="RM00CRMV00" 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="AESPMI5L46">
                <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="TEST" ID_Context="TEST"/>
        </RoomStay>
        <RoomStay RoomStayCandidateRPH="0" RPH="2" ResponseType="PropertyList">
            <RoomTypes>
                <RoomType RoomTypeCode="RM00CRMV00"/>
            </RoomTypes>
            <RoomRates>
                <RoomRate RoomTypeCode="RM00CRMV00" 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="AESPMI5L46">
                <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="TEST" ID_Context="TEST"/>
        </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>

Best Practices

  1. Include EchoToken in both request and response correlation.
  2. Use InfoSource=0 when you only need pricing blocks; enable specific enrichments incrementally.
  3. In multi-room flows, validate combinations client‑side using NumberOfUnits and candidate indexes.
  4. Parse ChargeType to correctly label price basis (per person/per unit).