Rooms And Rates
🛏️ Rooms and Rates API
The Rooms and Rates API provides detailed information about hotel rooms and their pricing to help users find the best available options.
The API organizes room and rate data into multiple options, where each option represents a bookable set of rooms. Each rate option includes comprehensive details such as:
| Key | Description |
|---|---|
| currency | Currency in which all prices in the response are returned (for example INR). Applies to finalRate |
| refundability | Whether the rate can be cancelled for free, for example Refundable or NonRefundable |
| allGuestInfoRequired | Whether the details of every guest are mandatory at booking, or only those of the lead guest. If true, send all guests details in /hold and /book API |
| IsPassportMandatory | Whether passport details (number, expiry, issue) must be sent for the guests. If true, a booking without them might fail |
| IsPanMandatory | Whether panCardNumber must be sent for the guests. If true, a booking without them might fail |
| rooms | Details of a room, such as name, description, facilities, bed configuration and size |
| Occupancy | Number of adults and children (with ages) the room or rate is priced for. It matches the occupancies sent in the Search request |
| Meal option (boardBasis) | Meal plan of the rate. boardBasis.type holds the standardized value (for example RoomOnly, BedAndBreakfast) and boardBasis.description holds the supplier text. See the Board Basis documentation below |
| Pricing (finalRate) | Final price for the searched stay, in the response currency |
| cancellationPolicies | Cancellation terms of the rate. Each entry has rules, and each rule has value, start and end, which say what charge applies if the booking is cancelled in that window |
| option | One bookable rate for a search. Each option has an optionId, which is required for /pricecheck and /book. |
| rate | The price and terms for all rooms within an option: finalRate, boardBasis, refundability and cancellationPolicy |
| rooms | Rooms of the hotel that have rates for the searched stay. Each room has a roomId, which you send when holding or booking. |
| standardizedRooms | Rooms with their names and details normalized across suppliers, so that the same room from different suppliers is grouped together. Use it to show one clean room list with multiple rates under each room. |
➡️ It’s important to proceed with a specific option for booking, as only the rate and rooms from that chosen option will be booked.
🔑 Key Identifier
Each rate option includes a unique ID called recommendationId, which is required for booking.
📦 Key Components of API Response
- Rooms – Contains room name, description, facilities, bed configuration, and size.
- Options – Each represents a specific rate. Includes
recommendationId.- Board Basis - Standardized meal-plan info for each rate (e.g. Room Only, Bed & Breakfast, Half Board).
- Standardized Rooms – Ensures data consistency by normalizing room details across suppliers.
This API enables seamless integration and provides structured, accurate hotel room pricing information.
Usage: Call Rooms and Rates with the hotelId and traceId from Search. Show the standardized rooms, list the options under each, and let the customer choose one. Send the chosen optionId and the roomIds to /pricecheck and then to /book. Check the passport, PAN and guest info flags before collecting guest details, so the booking form asks for everything the supplier needs.
📘 API Reference: Rooms and Rates API Documentation
🥘 Board Basis (Field Deep Dive)
Each rate returned in the Rooms and Rates response carries its own boardBasis, since different rates for the same room can have different meal plans (e.g. Room Only vs Bed & Breakfast vs Half Board for the same standardized room).
Field in API Response
boardBasis is an object present on every rate - results.options[].rate.boardBasis.
| Field | Type | Description |
|---|---|---|
| boardBasis | object | Container for meal-plan info on a rate |
| boardBasis.description | string | Raw/near-raw text describing what's included (may include extra context like discounts, pax applicability, etc.). Free text, not standardized. |
| boardBasis.type | string | The standardized board basis bucket, one of the fixed values. This is the field integrations should key off for filtering/display logic. |
Example:
"boardBasis": {
"description": "Room only",
"type": "RoomOnly"
}boardBasis.type – Unique Types List
boardBasis.type – Unique Types Listtype value | Meaning |
|---|---|
| RoomOnly | No meals included |
| BedAndBreakfast | Room + breakfast included |
| HalfBoard | Breakfast + one more meal (usually dinner) included |
| FullBoard | Breakfast + lunch + dinner included |
| AllInclusive | All meals + (typically) drinks/snacks included |
This is a closed/fixed list — every rate's boardBasis.type must be one of these 5 values.
Usage – Filters & Standardization of Board Basis
Filters: System filter/sort results by meal plan using boardBasis.type (e.g. "Only Bed & Breakfast options" or "Only Room Only"). Filtering must never be done on boardBasis.description — only on boardBasis.type.
Standardization logic: Volt maps each raw meal-plan string to one of the 5 fixed type values. Examples of raw strings mapped to the same standardized type:
→ RoomOnly: "Room Only", "ROOM ONLY", "room only", "Accomodation only", "Accommodation Only"
→ BedAndBreakfast: "Free breakfast", "Breakfast buffet", "BED AND BREAKFAST", "Bed & Breakfast", "Continental breakfast", "Breakfast Included", "room with breakfast"
→ HalfBoard: "Half board", "HALF BOARD", "breakfast and dinner"
→ FullBoard: "Full board", "FULL BOARD"
→ AllInclusive: "All Inclusive", "All-inclusive", "All Included"
boardBasis.description -
boardBasis.description -The description field is closer to the raw text and is not guaranteed to be a clean meal-plan phrase — it can carry extra context that has no bearing on type. Below are real patterns grouped by the categories flagged for review:
| Category | Sample Raw Description | Standardizes To |
|---|---|---|
| Rules (discounts/policies bundled into the description, unrelated to the meal itself) | "10% discount on food & beverages,10% discount on laundry,room only" | RoomOnly |
| "15% discount on food & beverages,10% discount on spa,15% discount on laundry,room only" | RoomOnly | |
| "complimentary room upgrade (subject to availability),room only" | RoomOnly | |
| "welcome drink on arrival,free stay for the kid,room only" | RoomOnly | |
| Views (room-view text mixed into the board-basis description) | "premium mountain view room with private balcony room only" | RoomOnly |
| "standard hill view room with breakfast" | BedAndBreakfast | |
| "royal deluxe with valley view with breakfast and dinner" | HalfBoard | |
| "garden luxury room with breakfast (garden access with mountain view)" | BedAndBreakfast | |
| Meal types (explicit meal-plan wording) | Breakfast-only phrasing: "Free breakfast", "Breakfast buffet", "Continental breakfast", "BedAndBreakfast" | BedAndBreakfast |
| Half board phrasing: "Free dinner, Breakfast buffet", "breakfast and dinner" | HalfBoard | |
| Full board / all-inclusive phrasing: "Full board", "All Inclusive", "All Included" | FullBoard / AllInclusive | |
| No-meal phrasing: "nomeal", "Only Bed", "No breakfast service" | RoomOnly | |
| Applicability / pax (meal entitlement tied to number of guests) | "Breakfast for 2" | BedAndBreakfast |
| "complimentary breakfast will be provided for 2 pax per room." | BedAndBreakfast | |
| "Breakfast Included for Adults Only!" | BedAndBreakfast | |
| "Breakfast Included for Adults and Child." | BedAndBreakfast | |
| "compulsory buffet breakfast, breakfast supplement applicable from 23rd December to 2nd January INR 350/- per person and child within age group of 6 to 12 years INR 175/- per child per day." | BedAndBreakfast |
Usage – What to show end users
boardBasis.type is what should drive filters, badges/icons, and any comparison logic (e.g. sort by meal plan, "Free Breakfast" badge).
boardBasis.description can be shown as supplementary text under the rate (e.g. small print), since it may contain useful context (pax limits, discounts, exact hotel wording) that type doesn't capture
Updated 21 days ago
