Skip to content

OTA_HotelResNotifRQ

Method for retrieving bookings from Kurzurlaub.de booking channel.

See also general information for our Reservation API in Developer Guide

Bookings are sent with status

States Description
Book New bookings, this status is used only once when first sent, after that all further responses to a booking ID are always sent with status Modify
Modify Booking changes or retrieval of a booking that has already been sent before via ResID_Value or by date range
Cancel Cancellations

OTA_HotelResNotifRQ - Request via GET - REST API

each method can be called via REST-API using GET. But this should only be done on bookings for development or testing purposes

Parameters used:

  • AgentDutyCode (optional if IP WhiteList or HTTP Basic Auth is used)
  • HotelCode (mandatory)
  • HotelReservationId (mandatory) a ReservationsId or comma separated IDs
  • Id (alternative to HotelReservationId)

Example:

GET /ota/api/HotelResNotif?AgentDutyCode=1&HotelCode=4&HotelReservationId=2129149

or comma separated ReservationsId`s

GET /ota/api/HotelResNotif?AgentDutyCode=1&HotelCode=4&HotelReservationId=2129149,2129150,2129151

Alternatively, you can also specify the entire ResID_Value (R12345678-A123456-1234, e.g. R2129149-A20540-4).

OTA_HotelResNotifRQ - Anfrage per POST

OTA_HotelResNotifRQ Request (RQ) and Response (RS) using the example of our test hotel

  • @AgentDutyCode (Agent-ID): 1
  • RequestorID@ID (Hotel-ID): 4
  • HotelReservationID@ResID_Value (ReservationId): 12345678 or long version R12345678-A1234567-1234

Example OTA_HotelResNotifRQ (Request)

<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelResNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05" Target="Production" Version="1">
    <POS>
        <Source AgentDutyCode="1">
            <RequestorID ID="4" Type="4"/>
        </Source>
    </POS>
    <HotelReservations>
        <HotelReservation>
            <ResGlobalInfo>
                <HotelReservationIDs>
                    <HotelReservationID ResID_Value="R1513719-A1234567-1234"/>
                </HotelReservationIDs>
            </ResGlobalInfo>
        </HotelReservation>
    </HotelReservations>
</OTA_HotelResNotifRQ>

OTA_HotelResNotifRS - versions of the response

in the older version of the OTA_HotelResNotifRS, which is still used by partners Extra nights are not shown as RoomStays but as a service.

Here the OTA-V2 (new version from 10.2021) is described as a new version of the transmission of booking data with designated RoomStays

  • Room costs per RoomStay (offer price per person is converted into room costs per night)
  • Extra nights shown as RoomStay (price per person/night for one or more extra nights is converted into room costs per night)

Hints:

there should always be a <Success/> in the response,

<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelResNotifRS xmlns="http://www.opentravel.org/OTA/2003/05" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                     EchoToken="1394da4bfc4daf820437a33cb87de833" PrimaryLangID="de"
                     TimeStamp="2021-10-28T12:52:38+02:00" Target="Production" Version="1.000">
    <Success/>
    <HotelReservations>
        <HotelReservation LastModifyDateTime="2021-06-21T15:38:33+00:00">
            <ResGlobalInfo>
                <ResStatus>Modify</ResStatus>
                <BookingChannel Primary="1" Type="7">
                    <CompanyName>Kurzurlaub.de Testagent WBE</CompanyName>
                </BookingChannel>
                <HotelReservationIDs>
                    <HotelReservationID ResID_Value="R1513719-190772-4" ResID_Date="2021-06-21T15:38:33+00:00" />
                </HotelReservationIDs>
                <Total AmountAfterTax="427.40" DecimalPlaces="2" CurrencyCode="EUR"/>
                <TimeSpan Start="2021-10-05" End="2021-10-11"/>
                <Profiles>
                    <ProfileInfo>
                        <Profile>
                            <Customer>
                                <PersonName>
                                    <NamePrefix>Herr</NamePrefix>
                                    <GivenName>Andreas</GivenName>
                                    <Surname>Günther</Surname>
                                </PersonName>
                                <Telephone PhoneNumber="0385 1666555111111112" PhoneTechType="1"/>
                                <Address>
                                    <CompanyName/>
                                    <AddressLine>JS10</AddressLine>
                                    <CityName>Schwerin</CityName>
                                    <PostalCode>19053</PostalCode>
                                    <CountryName Code="DEU">Deutschland</CountryName>
                                </Address>
                            </Customer>
                        </Profile>
                    </ProfileInfo>
                </Profiles>
            </ResGlobalInfo>
            <Comments>
                <Comment>
                    <Text><![CDATA[
Test

Gebuchtes Angebot:
 - Offer-ID: 190772
 - Offer-Name: Testarrangement schönes Schwerin - bitte nicht buchen 2
 - RatePlanCode: BAR-190772
 - RatePlanId: 190772
 - Reservation-ID: 1513719
 - Reservation-Code: 45VQK
 - Reservation-Number: R1513719-AP190772-9432 / P88

Gebuchte Extras:
2 x Flasche Rotwein / 2 x 5.90 Euro [Per use] = 11.80 Euro total
4 x Testleistung Hukepack [10 Minuten] / 4 x 3.90 Euro [Per person] = 15.60 Euro total
]]></Text>
                </Comment>
            </Comments>
            <RoomStays>
                <RoomStay IndexNumber="1">
                    <RoomTypes>
                        <RoomType RoomTypeCode="5306">
                            <RoomDescription Name="Doppelzimmer (20m²)"/>
                        </RoomType>
                    </RoomTypes>
                    <Base AmountAfterTax="200.00" DecimalPlaces="2" CurrencyCode="EUR"/>
                    <Total AmountAfterTax="400.00" DecimalPlaces="2" CurrencyCode="EUR"/>
                    <BasicPropertyInfo HotelCode="4"/>
                    <ResGuestRPHs>
                        <ResGuestRPH RPH="0"/>
                    </ResGuestRPHs>
                    <RatePlans>
                        <RatePlan RatePlanCode="BAR-190772" RatePlanID="190772">
                            <RatePlanDescription>
                                <Text>Testarrangement! Bitte dieses schöne Arrangement nicht buchen !!!</Text>
                            </RatePlanDescription>
                        </RatePlan>
                    </RatePlans>
                    <RoomRates>
                        <RoomRate RoomTypeCode="5306" RatePlanCode="BAR-190772" RatePlanID="190772" NumberOfUnits="2">
                            <Rates>
                                <Rate EffectiveDate="2021-10-05" ExpireDate="2021-10-08" UnitMultiplier="3">
                                    <Base AmountAfterTax="46.67" DecimalPlaces="2" CurrencyCode="EUR"/>
                                    <Total AmountAfterTax="140.00" DecimalPlaces="2" CurrencyCode="EUR"/>
                                    <RateDescription>
                                        <Text>Offer rate (3 overnight stays)</Text>
                                    </RateDescription>
                                </Rate>
                                <Rate EffectiveDate="2021-10-08" ExpireDate="2021-10-11" UnitMultiplier="3">
                                    <Base AmountAfterTax="20.00" DecimalPlaces="2" CurrencyCode="EUR"/>
                                    <Total AmountAfterTax="60.00" DecimalPlaces="2" CurrencyCode="EUR"/>
                                    <RateDescription>
                                        <Text>Extra night rate (3 x Verlängerungsnacht inkl. Frühstück für 2
                                            Doppelzimmer a 2 Personen / Keine Kinder)
                                        </Text>
                                    </RateDescription>
                                </Rate>
                            </Rates>
                        </RoomRate>
                    </RoomRates>
                    <GuestCounts IsPerRoom="0">
                        <GuestCount AgeQualifyingCode="10" Count="4"/>
                        <GuestCount AgeQualifyingCode="8" Count="0"/>
                    </GuestCounts>
                </RoomStay>
            </RoomStays>
            <ResGuests>
                <ResGuest ResGuestRPH="1">
                    <Profiles>
                        <ProfileInfo>
                            <Profile>
                                <Customer>
                                    <PersonName>
                                        <NamePrefix>Herr</NamePrefix>
                                        <GivenName>Andreas</GivenName>
                                        <Surname>Günther</Surname>
                                    </PersonName>
                                </Customer>
                            </Profile>
                        </ProfileInfo>
                    </Profiles>
                </ResGuest>
                <ResGuest ResGuestRPH="2">
                    <Profiles>
                        <ProfileInfo>
                            <Profile>
                                <Customer>
                                    <PersonName>
                                        <NamePrefix>Frau</NamePrefix>
                                        <GivenName>Mama</GivenName>
                                        <Surname>Günther</Surname>
                                    </PersonName>
                                </Customer>
                            </Profile>
                        </ProfileInfo>
                    </Profiles>
                </ResGuest>
                <ResGuest ResGuestRPH="3">
                    <Profiles>
                        <ProfileInfo>
                            <Profile>
                                <Customer>
                                    <PersonName>
                                        <NamePrefix>Herr</NamePrefix>
                                        <GivenName>Max</GivenName>
                                        <Surname>Günther</Surname>
                                    </PersonName>
                                </Customer>
                            </Profile>
                        </ProfileInfo>
                    </Profiles>
                </ResGuest>
                <ResGuest ResGuestRPH="4">
                    <Profiles>
                        <ProfileInfo>
                            <Profile>
                                <Customer>
                                    <PersonName>
                                        <NamePrefix>Frau</NamePrefix>
                                        <GivenName>Gerda</GivenName>
                                        <Surname>Günther</Surname>
                                    </PersonName>
                                </Customer>
                            </Profile>
                        </ProfileInfo>
                    </Profiles>
                </ResGuest>
            </ResGuests>
            <Services>
                <Service ID="2289821" ServiceRPH="1" ServiceInventoryCode="10153" ServicePricingType="Per use"
                         Quantity="2">
                    <Price NumberOfUnits="2">
                        <Base AmountAfterTax="5.90" DecimalPlaces="2" CurrencyCode="EUR"/>
                        <Total AmountAfterTax="11.80" DecimalPlaces="2" CurrencyCode="EUR"/>
                    </Price>
                    <ServiceDetails>
                        <Comments>
                            <Comment>
                                <Text>Flasche Rotwein</Text>
                            </Comment>
                        </Comments>
                    </ServiceDetails>
                </Service>
                <Service ID="2289822" ServiceRPH="2" ServiceInventoryCode="10154" ServicePricingType="Per person"
                         Quantity="4">
                    <Price NumberOfUnits="4">
                        <Base AmountAfterTax="3.90" DecimalPlaces="2" CurrencyCode="EUR"/>
                        <Total AmountAfterTax="15.60" DecimalPlaces="2" CurrencyCode="EUR"/>
                    </Price>
                    <ServiceDetails>
                        <Comments>
                            <Comment>
                                <Text>Testleistung Hukepack</Text>
                            </Comment>
                        </Comments>
                    </ServiceDetails>
                </Service>
            </Services>
        </HotelReservation>
    </HotelReservations>
</OTA_HotelResNotifRS>

Specifics - Number of rooms, overnight stays and extra nights

As an Example with 2 booked rooms, please note this news about UnitMultiplier / NumberOfUnits

@UnitMultiplier: Number of nights

refers to the period of the room stay (@EffectiveDate - @ExpireDate)

Example 1

<Rate EffectiveDate="2022-01-26" ExpireDate="2022-01-28" UnitMultiplier="2">

Base@AmountAfterTax: price per room / per night

Total@AmountAfterTax: So in the total RoomStay as BaseAmount * UnitMultiplier = TotalAmount

<Rate EffectiveDate="2022-01-26" ExpireDate="2022-01-28" UnitMultiplier="2“>
    <Base AmountAfterTax="140.00" DecimalPlaces="2" CurrencyCode="EUR“/>
    <Total AmountAfterTax="280.00" DecimalPlaces="2" CurrencyCode="EUR“/>   
</Rate>

@NumberOfUnits: number of booked Rooms or 1, if Agent is using separate RoomStays for each booked room (if you need this 2 booked rooms as 2 separate RoomStays blocks)

Example 2

  • 1 booked room but with additional nights, so we have 2 rate blocks for
  • Offer rate (2 overnight stays)
  • Extra night rate (2 x)
<RoomRates>
<RoomRate RoomTypeCode="22740" RatePlanCode="TEST-BAR-2N" RatePlanID="131729" NumberOfUnits="1">
    <Rates>
        <Rate EffectiveDate="2022-01-26" ExpireDate="2022-01-28" UnitMultiplier="2">
            <Base AmountAfterTax="140.00" DecimalPlaces="2" CurrencyCode="EUR"/>
            <Total AmountAfterTax="280.00" DecimalPlaces="2" CurrencyCode="EUR"/>
            <RateDescription>
                <Text>Offer rate (2 overnight stays)</Text>
            </RateDescription>
        </Rate>
        <Rate EffectiveDate="2022-01-28" ExpireDate="2022-01-30" UnitMultiplier="2">
            <Base AmountAfterTax="178.00" DecimalPlaces="2" CurrencyCode="EUR"/>
            <Total AmountAfterTax="356.00" DecimalPlaces="2" CurrencyCode="EUR"/>
            <RateDescription>
                <Text>Extra night rate (2 x Verlängerungsnacht Verlängerungsnacht incl. Frühstück für 1 Doppelzimmer a 2 Personen / Keine Kinder)</Text>
            </RateDescription>
        </Rate>
    </Rates>
</RoomRate>
</RoomRates>

Number of guests per room and distribution of guests

The number of guests per room and the allocation of guests to the booked rooms is always based on the principle of calculation based on standard room occupancy. There is a standard room occupancy for each room type, e.g.

  • Double room with 2 people + children
  • Single room with 1 person + children

A different occupancy (e.g. single occupancy) is not calculated for double rooms.

GuestCounts@IsPerRoom: attribute is always 0

All guests are not distributed per room but in total, so if a double room is booked, the number (Count="2") = 2 people in a double room, for 2 booked double rooms, the number (Count="4"), i.e. 2 x 2 people each in the 2 double rooms.

<GuestCounts IsPerRoom="0">
     <GuestCount AgeQualifyingCode="10" Count="4"/>
     <GuestCount AgeQualifyingCode="8" Count="0"/>
</GuestCounts>

Alternative cost attributes

Alternatively and in addition to the total amount @AmountAfterTax also possible with separate total cost attributes for the following areas

  • @RoomStaysAmountAfterTax (total amount of room costs / RoomStays)
  • @ServicesAmountAfterTax (total amount of services)
  • @CouponAmountAfterTax (Total value voucher)

Example:

<Total 
    AmountAfterTax="427.40" DecimalPlaces="2" CurrencyCode="EUR" 
    RoomStaysAmountAfterTax="400.00"
    ServicesAmountAfterTax="27.40"
    CouponAmountAfterTax="0.00"
/>

Additional services booked - Services and ServicePricingType

All booked additional services are sent as a list in the Services block.

  • Service@ID (unique ID of the booked additional service)
  • Service@ServiceRPH (consecutive number)
  • Service@ServiceInventoryCode (Unique ID of the hotel's additional service at Kurzurlaub.de)
  • Service@ServicePricingType (PriceType see list of ServicePricingTypes)
  • Service@Quantity (number of booked services 1-n)
  • Price@NumberOfUnits (identical to Quantity)

Example of services

            <Services>
                <Service ID="2289821" ServiceRPH="1" ServiceInventoryCode="10153" ServicePricingType="Per use" Quantity="2">
                    <Price NumberOfUnits="2">
                        <Base AmountAfterTax="5.90" DecimalPlaces="2" CurrencyCode="EUR"/>
                        <Total AmountAfterTax="11.80" DecimalPlaces="2" CurrencyCode="EUR"/>
                    </Price>
                    <ServiceDetails>
                        <Comments>
                            <Comment>
                                <Text>Flasche Wasser</Text>
                            </Comment>
                        </Comments>
                    </ServiceDetails>
                </Service>
                <Service ID="2289822" ServiceRPH="2" ServiceInventoryCode="10154" ServicePricingType="Per person" Quantity="4">
                    <Price NumberOfUnits="4">
                        <Base AmountAfterTax="3.90" DecimalPlaces="2" CurrencyCode="EUR"/>
                        <Total AmountAfterTax="15.60" DecimalPlaces="2" CurrencyCode="EUR"/>
                    </Price>
                    <ServiceDetails>
                        <Comments>
                            <Comment>
                                <Text>Testleistung einmalig pro Person</Text>
                            </Comment>
                        </Comments>
                    </ServiceDetails>
                </Service>
            </Services>

Overview of the ServicePricingTypes

We send the following values for the ServicePricingType attribute.

The default value if something cannot be mapped is Per use.

  • Per room
  • Per room per night
  • Per stay (once per stay)
  • Per person
  • Per person per night
  • Per night (e.g. extra bed)
  • Per use (per piece or use or also as default value)

Special Shapes

  • Per day (e.g. bike rental)
  • Per minute
  • Per hour

Error messages

If serious errors occur, e.g. in authentication, they are sent in an OTA_ErrorRS Response with @ErrorCode and @ErrorMessage

Here is a list of common errors

ErrorCode ErrorMessage
210 HotelNotLinked - Hotel (HotelCode 1234) linked to another channel manager (your AgentDutyCode is 123)
211 HotelNotActivated - Hotel not found (HotelCode 1234 / AgentDutyCode 123)
104 InternalError - Empty HotelCode (HotelId) in accepted params (agentdutycode, hotelcode, ...)
550 CustomError - forbidden to read HotelReservation for ReservationId 12345678 (HotelId 1234)
550 CustomError - HotelReservation for ReservationId 12345678 not found

Example OTA_ErrorRS (Response)

<OTA_ErrorRS xmlns="http://www.opentravel.org/OTA/2003/05" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    EchoToken="29419a3b53ee97680b01c40f377eb98f" 
    PrimaryLangID="de" 
    TimeStamp="2022-02-03T15:18:47+01:00" 
    Target="Production" 
    Version="1.000" 
    ErrorCode="550" 
    ErrorMessage="CustomError - forbidden to read HotelReservation for ReservationId 2109075 (HotelId 6069 vs 4)"
/>
Alternative caught errors (<Errors> or <Warnings>) are sent within the response without the <Success/>, e.g. ReservationId not found or incorrect date periods specified

Example OTA_HotelResNotifRS (Response) with a reservation and a caught error

<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelResNotifRS xmlns="http://www.opentravel.org/OTA/2003/05" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" EchoToken="6dbce5c77f9a5be84fae246f97dd02c7" PrimaryLangID="de" TimeStamp="2022-02-03T16:35:43+01:00" Target="Production" Version="1.000">
  <Errors>
    <Error Code="550" Type="5">forbidden to read HotelReservation for ReservationId 2129150 (HotelId 6504 vs 4)</Error>
  </Errors>
  <HotelReservations>
    <HotelReservation LastModifyDateTime="2022-01-31T11:51:58+01:00">
      <ResGlobalInfo>
        <ResStatus>Modify</ResStatus>
        <BookingChannel Primary="1" Type="7">
          <CompanyName>Kurzurlaub.de Testagent WBE</CompanyName>
        </BookingChannel>
        <HotelReservationIDs>
          <HotelReservationID ResID_Value="R2129149-20540-4" ResID_Date="2022-01-31T11:02:30+01:00"/>
        </HotelReservationIDs>
        <Total AmountAfterTax="1990.00" DecimalPlaces="2" CurrencyCode="EUR"/>
        <TimeSpan Start="2022-02-18" End="2022-02-20"/>

...
</OTA_HotelResNotifRS>

Cancellation of bookings

If bookings are cancelled, we will send this status <ResStatus>Cancel</ResStatus> with a cancellation date in the CancellationDate attribute.

Example Cancel and CancellationDate

<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelResNotifRS xmlns="http://www.opentravel.org/OTA/2003/05" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" EchoToken="6dbce5c77f9a5be84fae246f97dd02c7" PrimaryLangID="de" TimeStamp="2022-05-01T11:43:35+02:00" Target="Production" Version="2.000">
  <HotelReservations>
    <HotelReservation LastModifyDateTime="2022-05-01T11:43:35+02:00">
      <ResGlobalInfo>
        <ResStatus>Cancel</ResStatus>
        <BookingChannel Primary="1" Type="7">
          <CompanyName>Kurzurlaub.de Testagent WBE</CompanyName>
        </BookingChannel>
        <HotelReservationIDs>
          <HotelReservationID ResID_Value="R2129149-20540-4" ResID_Date="2022-01-31T11:02:30+01:00" CancellationDate="2022-05-01T11:43:35+02:00"/>
        </HotelReservationIDs>

        ...
      </ResGlobalInfo>
    </HotelReservation>
  </HotelReservations>
</OTA_HotelResNotifRS>