2026-10 |
2026-10-22 |
-
All sample files and the snippets embedded in this document were reworked for this release: dates were rebased, the two were realigned where they had drifted apart, and the root Version attribute now carries the OTA2015A version of the message it appears on (see section 3.5)
|
|
|
-
New samples cover features that were described but never shown: the follow-up response to an acknowledgment, rate plan joining, special offers, Overlay and Remove messages, the out-of-order and out-of-market counts, availability for specific rooms, and the alternative forms of Commission and CardNumber
|
|
|
|
|
|
-
The examples now describe one single property throughout: every sample addresses HotelCode 123 "AlpineBits Hotel", and its room categories are named SINGLE, DOUBLE, SUITE and PITCH in every action, as section 4.1.1 requires; the renaming example of section 4.3.1 follows suit, showing EZ renamed to SINGLE and DZ to DOUBLE
|
|
|
|
|
|
-
GuestRequests: the original booking ID, assigned by the system where the guest completed the reservation, can be transmitted in a HotelReservationID element with ResID_Type 14, next to the ID assigned by the channel manager in UniqueID
|
|
|
-
GuestRequests: the End attribute of TimeSpan is now explicitly exclusive (it is the departure date), both in RoomStay and in Service; ExpireDateExclusiveInd is documented as optional, defaulting to false; seven examples show the valid combinations of TimeSpan, Start and End in a Service
|
|
|
-
RatePlans: the algorithm of section 4.4.2 "Computing the cost of a stay" was restructured: the guests are first classified as adults or children according to the first OfferRule element (new step 0), then all the bookability checks are performed on the resulting numbers of adults and children and before any transformation (steps 1 to 3; the former step 4a is now step 3), then the transformations are applied (steps 4 and 5) and finally the cost is computed (step 6)
|
|
|
-
Protocol: Removed the multipart/form-data Content-Type of the POST request. The action is now sent in the X-AlpineBits-Action header field and the XML document is sent as the request body with Content-Type set to application/xml. During the transition a server may keep serving earlier versions from the same URL, telling them apart by the Content-Type of the request
|
|
|
-
Schema: the schema has been aligned with OTA2015A wherever it accepted more than OTA does, so that every document valid against the AlpineBits® schema is also valid against OTA2015A. Nothing OTA2015A allows was removed: enumerations were restored for RatingSymbol, OffsetDropTime and CardCode; CurrencyCode and the OTA code list attributes got their OTA pattern back; numeric attributes, string lengths and maxOccurs got the upper bounds OTA states; the coordinates of Position and the ignored ID of UniqueID got the length limits OTA states; and DiscountPattern no longer accepts the empty string
|
|
|
-
Schema: an empty Services, Features, TextItems or OfferRules element, and an empty MultimediaDescriptions element inside a GuestRoom, are no longer valid, because OTA2015A requires at least one child in each of them. For all of them but one the document already prescribed at least one child, and only the schema was wider; the exception is Features, described in section 4.3 as containing zero or more Feature elements, which now requires one (a hotel with no accessibility feature to declare omits the Features element). An empty GuestRooms element is not affected and keeps its documented meaning of removing all room categories of a hotel
|
|
|
-
Schema: RatePlanCode is now limited to 16 characters everywhere it appears (RatePlans, BaseRates and GuestRequests), down from 64. OTA2015A allows only 16 in a reservation, so a longer code could be published but never reported back
|
|
|
-
Inventory: inside Policies, the schema now enforces what section 4.3 has always stated, namely that a Policy element carries exactly one policy; the children are declared as a choice, in the order OTA2015A uses. The schema used to accept any combination of them in a single Policy, in an order OTA2015A rejects. Messages following the documented model are unaffected
|
|
|
-
Inventory: added the optional attribute MaxAdultOccupancy to GuestRoom, with StandardOccupancy ≤ MaxAdultOccupancy ≤ MaxOccupancy, to state how many adults a room category allows; when it is given, the computation of the cost of a stay (section 4.4.2) rejects a stay with more adults
|
|
|
|
|
|
-
RatePlans: in section 4.4.2 family offers are now applied before children are transformed into adults to reach the minimum number of full-rate payers (steps 4 and 5), where up to 2024-10 the transformation came first. The conditions of a family offer are thus evaluated on the children as classified by the rate plan, and a child who stays free is never transformed into an adult. Note that all the bookability checks are still performed beforehand, in particular the minimum number of adults (MinOccupancy on the Occupancy element with AgeQualifyingCode 10 ("adult")). This new order only makes a difference when a family offer grants a child a free stay before the subsequent transformation (step 5) could turn that child into an adult to reach the minimum number of full-rate payers. This is a purely theoretical scenario: in practice, a family offer is unlikely to ever be meant for such a child.
Hotels relying on the previous behaviour have to review their family offers
|
|
|
-
RatePlans: the static rate must now be transmitted in every message, with RatePlanNotifType New as well as Overlay, where up to 2024-10 it could be transmitted only with New. In an Overlay message it serves for control purposes only: the server should compare it with the rate plan on record and, on a discrepancy, refuse the rates with an error (see sections 4.4.1 and 4.4.3)
|
|
|
|
|
|
-
RatePlans: the pricing of pets, prescribed since release 2022-10, can finally be expressed in a valid message: ALPINEBITS-PETS is now an allowed value for CodeContext and InvType in the schema, and a sample was added
|
|
|
-
RatePlans: the value that marks the pets’ booking rules and supplements was renamed from ALPINEBITSEXTRA-PETS to ALPINEBITS-PETS: OTA declares InvType as StringLength1to16 and the old spelling is 20 characters long, so no message carrying it could validate against OTA2015A. The reserved InvType value ALPINEBITSEXTRA, which stands for a shared list of common InvCode values that does not exist yet, was renamed to ALPINEBITS at the same time, so that the two AlpineBits®-specific values of that attribute share one prefix
|
|
|
-
BaseRates: inside RatePlan, the schema now enforces what section 4.5.1 has always stated, namely that DateRange, RatePlanCandidates and HotelRef are given in that order, at most one each, with HotelRef always present. The schema used to accept them repeated, in any order, and with no HotelRef at all. Messages following the documented model are unaffected
|
|
|
-
GuestRequests (push): the HotelReservations element of a OTA_HotelResNotifRQ request must carry at least one HotelReservation, where the document previously allowed zero; OTA2015A rejects the empty element. The ReservationsList element of a OTA_ResRetrieveRS response may still be empty, as before
|
|
|
-
GuestRequests (push): the HotelReservations element of a OTA_HotelResNotifRS response is now optional, as it is in OTA2015A. It was mandatory and requires at least one HotelReservation, so a server that could process none of the requests in a batch had no valid way to acknowledge nothing; it can now omit the element and answer with the warning outcome of section 2.3, listing every refusal in Warnings. The empty element stays invalid. No message valid until now becomes invalid, but clients must be prepared for the element to be absent
|
|
|
-
GuestRequests: a reservation can now carry all the arriving guests: ResGuests may contain one ResGuest per guest, each identified by the new ResGuestRPH attribute, and each RoomStay may list the guests that occupy it in the new ResGuestRPHs element. ResGuests is now described as optional, as the schema always allowed
|
|
|
-
GuestRequests: the Profiles element of ResGlobalInfo may now contain up to three ProfileInfo elements, with ProfileType 1 (customer), 3 (company) or 4 (booking channel), and a Profile may contain a Customer element, so that a reservation booked by a company can be described (see the sample GuestRequests-OTA_ResRetrieveRS-allguests-and-company.xml)
|
|
|
|
|
|
-
GuestRequests: PaymentCard now has the same definition in the Guarantee of a RoomStay and in DepositPayments. In Guarantee, CardHolderName and the CardCode and ExpireDate attributes are now optional, ExpireDate must be a valid MMYY date where any four digits were accepted, and CardNumber also accepts the Mask, Token and TokenProviderID attributes
|
|
|
|
|
|
-
GuestRequests: the attributes of DepositPayments, which were untyped, now have a type: GuaranteeTypeCode accepts only 3, 28 and 46, GuaranteeID up to 64 characters, PaymentTransactionTypeCode only charge, reserve and the new value refund (see section 4.2.2 for the rules of a refund), Start a date-time and GuaranteeCode up to 32 characters
|
|
|
|
|
|
|
|
|
|
2024-10 |
2024-10-24 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-10 |
2022-10-20 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-10 |
2020-10-15 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-10 |
2018-11-30 |
Notable documentation changes:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-10 |
2017-11-08 |
Notable documentation changes:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-
RatePlans: added static rates, added supplements that are only available on given days of the week and supplements that depend on room category, improved and extended offers, added SetForwardMinStay and SetForwardMaxStay, extended descriptions and improved their documentation
|
|
|
|
|
|
|
|
|
|
|
|
Reorganization of the appendices:
|
|
|
|
|
|
|
|
|
|
2015-07b |
2016-08-01 |
|
|
|
|
|
|
|
|
|
|
2015-07 |
2015-10-28 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-04 |
2014-12-23 |
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-04 |
2014-10-15 |
|
|
|
|
|
|
|
2013-04 |
2013-05-24 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-05b |
2012-10-01 |
|
|
|
|
|
|
|
2012-05 |
2012-05-31 |
|
|
|
|
|
|
|
|
|
|
2011-11 |
2011-11-18 |
minor alterations and release under Creative Commons Attribution-NoDerivs 3.0 Unported License
|
2011-10 |
2011-10-20 |
production release with minor alterations
|
2011-09 |
2011-09-08 |
first draft of redesigned version (using POST instead of SOAP)
|
2010-10 |
2010-10-20 |
|
2010-08 |
2010-08-01 |
|