Deeplinking to Whitelabel
This guide explains how to use URL parameters to deep link to the Hotel Listing, Hotel Details, and Checkout pages with pre-filled data. It includes parameter descriptions, values, and examples for easy implementation.
1. Hotel Listing Page
Example URL:
http://wl-domain/hotels
Use the parameters below to customize the hotel search results:
| Parameter | Description | Example Value | Example Usage |
|---|---|---|---|
placeId | Google Place ID for the destination | ChIJgUbEo8cfqokR5lP9_Wh_DaM | ?placeId=ChIJgUbEo8cfqokR5lP9_Wh_DaM |
checkin | Check-in date (YYYY-MM-DD) | 2024-09-15 | &checkin=2024-09-15 |
checkout | Checkout date (YYYY-MM-DD) | 2024-09-20 | &checkout=2024-09-20 |
occupancies | Guest & room configuration (base64) | btoa(JSON.stringify([{ "adults": 2, "children": [8,6] }])) | &occupancies=encodedStringHere |
stars | Star ratings (comma-separated) | 4,5 | &stars=4,5 Possible Values: 5.0 – 5 stars 4.0 – 4 stars 3.0 – 3 stars 2.0 – 2 stars 1.0 – 1 star 0 – Unrated |
ratings | Guest ratings (comma-separated) | 8,9 | &ratings=8,9 Possible Values: 9 – Wonderful 8 – Very Good 7 – Good 6 – Pleasant |
facilities, roomAmenities, chains, hotelTypes | Feature filter (IDs, comma-separated) | 5,12 | &facilities=5,12 |
suburbs | Suburbs (comma-separated) | manhattan,brooklyn | &suburbs=manhattan,brooklyn |
mealPlans | Meal plans | AI,HB | &mealPlans=AI,HB Possible Values: BI – Breakfast Included LI – Lunch Included DI – Dinner Included HB – Half Board FB – Full Board AI – All Inclusive |
freeCancellation | Show only free cancellation options | 1 (all), 2 (only free cancellation) | &freeCancellation=2 |
min_price | Minimum price filter | 100 | &min_price=100 |
max_price | Maximum price filter | 500 | &max_price=500 |
sorting | Sorting options | 1 | &sorting=1 Possible Values: 1 – Our Top Picks 2 – Price Low to High 3 – Price High to Low 4 – Stars Low to High 5 – Stars High to Low 6 – Distance from City Center 7 – Guest Rating High to Low |
Example Full URL
http://wl-domain/hotels?placeId=ChIJgUbEo8cfqokR5lP9_Wh_DaM&checkin=2024-09-15&checkout=2024-09-20&occupancies=W3siYWR1bHRzIjoyLCJjaGlsZHJlbiI6W119LHsiYWR1bHRzIjoxLCJjaGlsZHJlbiI6W119XQ==&stars=4,5&mealPlans=BI&freeCancellation=1
2. Hotel Details Page
URL Format:
https://wl-domain/hotels/{hotelId}
Example:
https://wl-domain/hotels/lp4aa75
Supported Parameters
| Parameter | Description | Example |
|---|---|---|
placeId | Google Place ID | ChIJgUbEo8cfqokR5lP9_Wh_DaM |
checkin | Check-in date | 2024-09-15 |
checkout | Checkout date | 2024-09-20 |
occupancies | Room and guest config (base64) | btoa(JSON.stringify([{ "adults": 2, "children": [8,6] }])) |
needFreeCancellation | Only show free cancellation | 1 |
needBreakfast | Filter for breakfast | 1 |
needHalfBoard | Filter for half board | 1 |
needFullBoard | Filter for full board | 1 |
needAllInclusive | Filter for all inclusive | 1 |
needDinnerIncluded | Filter for dinner | 1 |
needLunchIncluded | Filter for lunch | 1 |
Example URL
https://wl-domain/hotels/lp4aa75?placeId=ChIJgUbEo8cfqokR5lP9_Wh_DaM&checkin=2024-09-15&checkout=2024-09-20&occupancies=eyJhZHVsdHMiOjIsImNoaWxkcmVuIjpbOCw2XX0=&needAllInclusive=1&needBreakfast=1
3. Checkout Page
The checkout page supports dynamic deep linking, allowing you to send a user directly into the checkout flow by providing either a prebookId or an offerId.
This is especially useful when you already know which rate the user wants to book or when your system has performed prebooking in advance.
How It Works
You can open the checkout page using one of the following parameters:
| Parameter | Source / Where It Comes From | Meaning |
|---|---|---|
| offerId | From the hotel rates API: • /hotels/rates• /hotels/min-rateshttps://docs.liteapi.travel/reference/post_hotels-rates https://docs.liteapi.travel/reference/post_hotels-min-rates | Direct rate identifier. The WL system will automatically perform prebooking before checkout. |
| prebookId | From the /rates/prebook APIhttps://docs.liteapi.travel/reference/post_rates-prebook | A prebook token you created yourself by calling the prebook endpoint. |
When to Use Which?
✔ Option 1 — offerId (Recommended for simplicity)
-
Best option if you don't want to call prebook yourself.
-
The offerId represents an actual rate returned by the system.
-
When the user lands on the checkout page with
offerId, the White Label will:- Fetch the rate
- Automatically perform the prebook step
- Load the checkout page with all details ready
Pros:
- Less work for you
- No need to call
/rates/prebookon your side - Any pricing updates or conditions are confirmed automatically
✔ Option 2 — prebookId (Advanced / Full control)
- Use this if you want to perform the prebook on your backend first.
- After calling the
/rates/prebookendpoint, you receive aprebookId. - Pass that ID into the checkout page, and the WL will skip prebooking and go directly to checkout.
Pros:
- Your system controls the prebook
- Ideal for custom workflows requiring checks before letting users pay
Example URLs
Checkout using offerId
https://wl-domain/checkout?offerId=abc123xyz
Checkout using prebookId
https://wl-domain/checkout?prebookId=pq98lm45
Both will load the checkout page with the selected rate and room information.
Notes & Best Practices
- You may still append global parameters such as
language,currency,clientReference,, orxData` to enhance the checkout experience. xDatacan pre-fill customer information, discount codes, and guest/holder data.- When using offerId, you do not need to send any room or date parameters — the WL already knows them from the rate.
- When using prebookId, make sure the prebook response hasn’t expired (prebook validity is limited).
Quick Summary
| Method | What You Provide | Who Handles Prebook | Recommended For |
|---|---|---|---|
| offerId | Rate offer ID | WL system | Fastest setup, simplest integration |
| prebookId | Prebook token | Your backend | Advanced workflows, extra validations |
4. Generic Parameters
Any Route with xData
Note: The Checkout page must be accessed via the Hotel Details page, as it depends on session data from prebooking.
How xData Works
xData WorksxData allows you to pre-populate the checkout page with booking details. It can be appended to any route on the website and will persist throughout the user's journey, ensuring the data is retained until checkout.
Steps:
- Serialization — Convert your JSON data into a string.
- Compression — Gzip compress the string.
- Encoding — Base64 encode the compressed data.
Then, pass the result as a URL parameter xData.
Encoding Example (JavaScript)
import pako from 'pako';
export const encodeXdata = (data: any): string => {
const jsonString = JSON.stringify(data);
const compressedData = pako.gzip(jsonString);
const base64String = btoa(String.fromCharCode(...compressedData));
return base64String;
};
Example Usage
https://test.nuitee.link?xData=H4sIAAAAAA...
When the user lands on this URL:
xDatais decoded and stored automatically.- Checkout will pre-fill guest, holder, and discount information.
Supported xData Fields
xData Fields{
"guests": [
{
"firstName": "Guest1FirstName",
"lastName": "Guest1LastName",
"email": "[email protected]"
},
{
"firstName": "Guest2FirstName",
"lastName": "Guest2LastName",
"email": "[email protected]"
}
],
"discount": {
"code": "WEDDING10",
"id": 1,
},
"holder": {
"firstName": "HolderFirstName",
"lastName": "HolderLastName",
"email": "[email protected]"
}
}
| Field | Type | Required | Description |
|---|---|---|---|
holder | Object | Required (if guest details used) | Main holder responsible for booking |
guests | Array | Optional | Guest info for each room |
discount | Object | Optional | Promo code to apply automatically |
Important Rules
-
Discount can be passed independently (without guests/holder).
-
Holder is required to proceed with booking.
-
If 1 room and no guests: ➜ holder will be used.
-
If multiple rooms:
- Equal guests ➜ Each fills one room.
- Fewer guests ➜ First room uses holder, others use guests, then placeholders.
Scenario Examples
| Selected Rooms | Provided Guests | Final Room Assignment |
|---|---|---|
| 1 | 0 | Holder details used as guest |
| 2 | 2 | Guest 1 ➜ Room 1, Guest 2 ➜ Room 2 |
| 2 | 1 | Holder ➜ Room 1, Guest 1 ➜ Room 2 |
| 3 | 0 | Holder ➜ Room 1, Room 2 ➜ Empty, Room 3 ➜ Empty |
Notes
- Emails must be valid (used for confirmation).
- Discount codes are auto-validated during checkout.
- Missing or empty
xDatawill NOT break the flow — will load a fresh page.
Quick Summary
| What You Must Do | Why |
|---|---|
Always pass a valid holder | Required for booking to proceed |
Optionally pass guests | To pre-fill room guest names |
Optionally pass discount | To auto-apply promotions |
Encode the xData properly | To avoid payload issue |
Client Reference
Parameter: clientReference
Type: String
Optional
A custom identifier to tag the booking flow with your internal reference (e.g., guest ID, cart ID, session ID). Useful for tracking, analytics, and mapping bookings to your system.
Example:
https://wl-domain/hotels?clientReference=guest_12345
✔️ Works across listing, details, and checkout pages.
Sandbox Mode
Parameter: isSandbox
Type: Boolean (true / false)
Optional — Default: false
Use this parameter to enable the sandbox (test) payment flow instead of processing live transactions.
Important: This requires the White Label configuration to include a valid sandbox payment key. If not properly configured, the work flow will not function.
Example
https://wl-domain/hotels?isSandbox=true
Notes
- ✔️ Can be used on any route
- ✔️ Default behavior is live mode (
isSandbox=falseor when omitted) - 🔁 Remember to set
isSandbox=falsewhen switching back to live payments
Language and Currency
These parameters can be appended to any route and influence the site behavior globally.
Language
Parameter: language
Default: en
Supported Languages:
en– Englishfr– Frenchru– Russianit– Italiannl– Dutches– Spanishtr– Turkishde– Germanar– Arabicpt– Portugueseel– Greekro– Romanian
Currency
Parameter: currency
Default: USD
Supported Currencies:
AED– UAE DirhamAUD– Australian DollarBRL– Brazilian RealCAD– Canadian DollarCNY– Yuan RenminbiEGP– Egyptian PoundsEUR– EuroFJD– Fiji DollarGBP– Pound SterlingHKD– Hong Kong DollarIDR– RupiahINR– Indian RupeeJPY– YenLKR– Sri Lanka RupeeMAD– Moroccan DirhamMNT– TugrikMUR– Mauritius RupeeMXN– Mexican PesoMYR– Malaysian RinggitPHP– Philippine PesoRUB– Russian RubleSAR– Saudi RiyalSGD– Singapore DollarTHB– BahtTWD– New Taiwan DollarUSD– US DollarZAR– RandRON– Romanian Leu
That’s it!
By following this guide, you can seamlessly integrate deep linking across the entire website — from hotel search and details to checkout — ensuring a smoother, faster, and more personalized user experience.
Updated 13 days ago