Purpose
This page explains how to implement multicontracting in both the Push model and the Pull model. It also clarifies how RatePlan codes are structured under multicontracting and shows concrete XML examples.Overview
Multicontracting lets you distribute multiple contracts under a single hotel code so that the system can surface the best availability and rates across different contracting models (e.g., integrated vs. manual), and also support simple packages (hotel + other products). This functionality is ready for PROD. Under multicontracting, the RatePlan code is extended from the original 5-character concept to a three-part code: [simple-package-code]-[contract-code]-[rateplan-code] Example: AR-OWN1-S0000 WhereAR is a simple package (Accommodation + Car), OWN1 is the contract code, and S0000 is the rateplan code.
Note on RatePlan code details: visit RatePlan codesRatePlan codes are constructed from the below elements Rate Type(1), Rate Group(1), Rate Refund(1), Rate Sub Type(2) There is also a possibility of duplicating RatePlan which already exists in the contract. In this case the “.” character, and a number starting with 1, and then subsecuently every iteration. Example: BHSP2.1
Code Construction
RatePlan codes are constructed from the below elements:Rate Type (1), Rate Group (1), Rate Refund (1), Rate Sub Type (2)
| Rate Type | Rate Group | Rate Refund | Rate Sub Type | ||||
|---|---|---|---|---|---|---|---|
| 0 | Rates | 0 | undefined | 0 | Undefined | 00 | Undefined |
| R | Retail rates | H | Hotel only | N | Non refundable | A0 | Advanced Purchase |
| S | Static rates | P | Packaging | S | Semi-flexible | A2 | Advanced Purchase 2 |
| F | FIT Rates | O | Opaque | F | Flexible | A3 | Advanced Purchase 3 |
| B | BAR rates | R | Rack | P0 | Promotional Rate | ||
| P2 | Promotional Rate 2 | ||||||
| P3 | Promotional Rate 3 | ||||||
| P4 | Promotional Rate 4 | ||||||
| P5 | Promotional Rate 5 | ||||||
| P6 | Promotional Rate 6 | ||||||
| P7 | Promotional Rate 7 | ||||||
| P8 | Promotional Rate 8 | ||||||
| P9 | Promotional Rate 9 | ||||||
| 01 | [1] | ||||||
| 02 | [2] | ||||||
| 03 | [3] | ||||||
| 04 | [4] | ||||||
| 05 | [5] | ||||||
| 06 | [6] | ||||||
| 07 | [7] | ||||||
| 08 | [8] | ||||||
| 09 | [9] |
Rate Type
- 0 → Not defined – rate stays unchanged like in the basic contract edition.
- B → Bar - best available rates (changing due to rate updates)
- S → Static – unchanged contract rate till the time of a promotion or an offer introduction
- F → FIT - free individual traveller rates
- R → Retail – advised end-price
Rate Group
- H → Hotel only - rates valid when booking contains only hotel
- P → Packaging - rates valid when booking contains hotel + another product
- O → Opaque - hotel rates must not be visible for end consumer
- R → Rack - walk-in hotel rates for end consumer
Rate Refund
- N → Non refundable - immediately after booking
- S → Semi-flexible – cancellation without fees up to 12 hours after booking
- F → Flexible – cancellation without fees up to 24 hours after booking
Rate Sub Type
- A → Advanced Purchase - booking has to be paid before confirming
- P → Promotion Rate
- If there is a character N on the rateplan 3rd position means it’s completely non-refundable OR at the roomtype code on the last position
- When the character is 0 and IF there is no rateplan NOR N as the last character of the room code, means the room is refundable and conditions will be shared on the Vendor Messages on the AvailRS and ResRS (Quote/Book)
- A→ Advanced Purchase - booking has to be paid before confirming
- P→ Promotion rate
Pull Model
What Changes in Search Results
Search results for the same hotel may include multiple contracts as RatePlans, allowing integrated and manual contracts to compete for best availability and price across seasons/windows. If you need to de‑duplicate or filter multicontracting search results, you can use the following request switches explained in OTA_HotelAvailRQWhat to Send / Receive in Realtime
- Use
RoomTypeCodein realtime messages instead of a RatePlan ID.
Package Examples (Search / Book)
- Accommodation+Car:
AR-OWN1-S0000(room might beSTSD000000-ECMRfor car class). - Other simple packages supported conceptually: ski (
SP1), golf, spa, yoga, cooking classes, etc. (package prefix + contract + rateplan).
Implementation Notes
- For non‑refundable identification, ensure you read the 3rd character from the end of the RatePlan code (due to the extended prefixing), not the 3rd from the start.
- Clients using pull and push models have no behavioral impact beyond the longer RatePlan codes.
Push Model
What You Receive
Partners with a multicontracting + rateplan integration receive the relevant information via notification files; the format is equivalent across notification variants.How RatePlans Are Delivered
You can consume RatePlans in notifications in two ways:-
Concatenated into the RoomCode, e.g.
RMSD000000;OwWN1-P0N00(no dev to add a new field, but existing room mapping must be updated and any “best price” logic on mapped codes may only surface the cheapest option). Non‑refundable plans may exist in rooms without anNat the 10th position. -
Separate attribute via
RoomKey/RatePlanID, e.g. RoomCodeRMSD000000and RoomKeyP0N00.2. This keeps mapping unchanged, but requires implementing the RoomKey attribute (not available in OTDS).
Examples (Separate Code)
OTAPackaging Support in Notifications
Simple packages are supported via the simple-package-code prefix. For instance, an Accommodation+Car package usesAR, with the car type appended to the room when applicable (e.g., STSD000000-ECMR).
Flatfile Users
If you opted for concatenated codes, the room code field and the rateplan code size are extended in Version 3 of the flatfile definition.At a Glance
Examples tied to a single hotel & room:- HotelCode
AESPMI1234, RoomCodeRMSDDB0000,RateplanCode="-ABC1-0P0A0"→ ContractABC1with a Packaging Advanced Purchase rateplan from the hotel. - HotelCode
AESPMI1234, RoomCodeRMSDDB0000,RateplanCode="-DEF1-S0N00"→ ContractDEF1with a Static, Non‑Refundable rate. RateplanCode="-OWN1-"→ Manual contract with no rateplans in the contract.RateplanCode="AR-OWN1-S0000", RoomCodeSTSD000000-ECMR→ Accommodation + Car package using contractOWN1and static rates;ECMRdenotes an Economy Manual A/C car class.
Next Steps
- INT examples (RQ/RS) and a Postman collection are available for integration tests. Provide feedback on your test cases, complete certification for multicontracting, and then roll out to PROD.
Appendix
- If your distribution excludes Opaque or Packaging rates on hotel‑only websites, re‑check any code parsing logic to account for the prefixed code structure.
- Test users:
TST3(separate code/RoomKey) andTST4(concatenated code).

