Perks and Promotions
Exclusive Rates & Perks
Overview
Lite API offers two complementary features for eligible partners to differentiate their travel offering and increase booking conversion:
- Exclusive Rates: Access privately negotiated hotel prices and surface original-vs-discounted pricing to end users.
- Exclusive Perks: Offer additional hotel benefits (breakfast, upgrades, credits, etc.) tied to loyalty programs and guest tiers.
Both features are surfaced automatically in the standard booking flow (Search, Prebook, Book) with no additional endpoints required.
Exclusive Rates
What are Exclusive Rates?
Exclusive rates are privately negotiated hotel prices available to eligible Lite API partners. When a rate is exclusive, the API provides both the original listed price and the discounted final price, allowing you to display strikethrough pricing or savings badges to drive conversion.
How to detect an Exclusive Rate
Compare retailRate.initialPrice to retailRate.total on each rate object. When initialPrice is higher than total, the rate has been discounted.
| Field | Description |
|---|---|
retailRate.total | The final price the end user pays (the exclusive/discounted price). |
retailRate.initialPrice | The hotel's standard listed price before any exclusive discount. Always >= total. |
retailRate.promotions | Array of active promotions explaining the discount (name, dates, discount value, type). |
At the offer level, the same comparison applies:
| Field | Description |
|---|---|
offerRetailRate | Combined final price across all rates in the offer. |
offerInitialPrice | Combined original price across all rates before discounts. |
Promotions schema
When an exclusive discount is applied, the promotions array inside retailRate provides details:
{
"promotions": [
{
"name": "Early booker Deal",
"from": "2025-11-14",
"to": "2025-11-27",
"discount": 45.0,
"discountType": "percentage",
"promotionCode": "",
"currency": "THB"
}
]
}| Field | Type | Description |
|---|---|---|
name | string | Name or title of the promotion. |
from | string | Start date of the promotion (YYYY-MM-DD). |
to | string | End date of the promotion (YYYY-MM-DD). |
discount | number | The discount value applied. |
discountType | string | Type of discount (e.g. percentage). |
promotionCode | string | Optional promotion code. Empty if none required. |
currency | string | Currency associated with the discount. |
Example: Identifying an Exclusive Rate in Search
{
"rates": [
{
"rateId": "...",
"name": "Standard King Room",
"retailRate": {
"total": [{ "amount": 163.66, "currency": "USD" }],
"initialPrice": [{ "amount": 210.00, "currency": "USD" }],
"promotions": [
{
"name": "Early booker Deal",
"from": "2025-11-14",
"to": "2025-11-27",
"discount": 45.0,
"discountType": "percentage",
"currency": "THB"
}
]
}
}
]
}In this example, the original price is $210.00 and the exclusive price is $163.66. You can display this as:
$210.00$163.66 -- Save 22% with Early booker Deal
Where Exclusive Rates appear
| Endpoint | Field location |
|---|---|
POST /hotels/rates (Search) | data[].roomTypes[].rates[].retailRate |
POST /rates/prebook (Prebook) | data.roomTypes[].rates[].retailRate |
POST /rates/book (Book) | data.roomTypes[].rates[].retailRate |
Exclusive Perks
What are Exclusive Perks?
Exclusive perks are additional hotel benefits offered at participating properties when a booking is made through your platform. These can include amenities such as:
- Daily breakfast
- Room upgrades
- Property credits
- Early check-in / late check-out
- Free laundry service
- Other value-added services
Perks are configured through loyalty programs that define which benefits apply to which guest tiers, allowing you to tailor the travel experience for different user segments.
How perks appear in the API
Perks are returned in the perks array on each rate object across Search, Prebook, and Book responses.
Perk object schema
{
"perks": [
{
"perkId": 10,
"name": "Daily breakfast for 2",
"amount": 40,
"currency": "USD",
"level": "HOTEL"
}
]
}| Field | Type | Description |
|---|---|---|
perkId | integer | Unique identifier for the perk. |
name | string | Human-readable description of the perk. |
amount | number | Monetary value of the perk (can be 0 for complimentary perks like early check-in). |
currency | string | Currency of the perk's monetary value. |
level | string | Scope of the perk: HOTEL (hotel-wide), RATE (specific to rate), or ROOM (specific to room). |
Example: Search response with perks
{
"data": [
{
"hotelId": "lp1897",
"roomTypes": [
{
"offerId": "...",
"rates": [
{
"rateId": "...",
"name": "Standard King Room",
"retailRate": {
"total": [{ "amount": 163.66, "currency": "USD" }]
},
"perks": [
{
"perkId": 10,
"name": "Daily breakfast for 2",
"amount": 40,
"currency": "USD",
"level": "HOTEL"
},
{
"perkId": 5,
"name": "Late check-out if available",
"amount": 20,
"currency": "USD",
"level": "HOTEL"
},
{
"perkId": 8,
"name": "Room upgrade if available",
"amount": 60,
"currency": "USD",
"level": "HOTEL"
},
{
"perkId": 6,
"name": "Early check-in if available",
"amount": 0,
"currency": "USD",
"level": "HOTEL"
},
{
"perkId": 2,
"name": "$100 Property credit",
"amount": 100,
"currency": "USD",
"level": "HOTEL"
}
]
}
]
}
],
"guestLevel": 0
}
]
}Where perks appear
| Endpoint | Field location |
|---|---|
POST /hotels/rates (Search) | data[].roomTypes[].rates[].perks |
POST /rates/prebook (Prebook) | data.roomTypes[].rates[].perks |
POST /rates/book (Book) | data.roomTypes[].rates[].perks |
GET /bookings/{bookingId} (Retrieve) | data.roomTypes[].rates[].perks |
Guest levels and loyalty programs
The API response includes a guestLevel field that indicates the guest's tier within your loyalty program. This level determines which perks are available for a given booking.
| Field | Type | Description |
|---|---|---|
guestLevel | integer | The guest's loyalty tier. Determines the level of perks and cost reductions applied. |
The guestLevel is returned at the top level of Search, Prebook, Book, and Booking retrieval responses.
Integration guide
Step 1: Search for rates
Call POST /hotels/rates with your standard search parameters. The response will automatically include any applicable exclusive rates and perks.
curl -X POST https://api.liteapi.travel/v3.0/hotels/rates \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"hotelIds": ["lp1897"],
"checkin": "2026-07-01",
"checkout": "2026-07-03",
"currency": "USD",
"guestNationality": "US",
"occupancies": [{ "adults": 2 }]
}'Parse the response:
- For each rate, check if
retailRate.initialPrice > retailRate.totalto identify exclusive pricing. - Read the
promotionsarray for discount details. - Read the
perksarray for included benefits. - Use
guestLevelto understand the guest's loyalty tier.
Step 2: Prebook
Call POST /rates/prebook with the selected offerId. The response confirms availability and returns the same perks and pricing structure.
curl -X POST https://api.liteapi.travel/v3.0/rates/prebook \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"offerId": "OFFER_ID_FROM_SEARCH",
"usePaymentSdk": false
}'Step 3: Book
Complete the booking with POST /rates/book. Perks are confirmed and attached to the final booking.
curl -X POST https://api.liteapi.travel/v3.0/rates/book \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prebookId": "PREBOOK_ID",
"holder": {
"firstName": "Steve",
"lastName": "Doe",
"email": "[email protected]",
"phone": "+1234567890"
},
"guests": [
{
"occupancyNumber": 1,
"firstName": "Steve",
"lastName": "Doe",
"email": "[email protected]"
}
],
"payment": { "method": "ACC_CREDIT_CARD" }
}'The booking response includes loyaltyGuestId and guestLevel alongside all confirmed perks.
Step 4: Retrieve booking
Call GET /bookings/{bookingId} at any time to see the confirmed perks and pricing on an existing booking.
Displaying perks and rates to users
Recommended UI patterns
Exclusive rate badge:
When initialPrice > total, display a savings indicator:
┌─────────────────────────────────────────┐
│ ★ EXCLUSIVE RATE │
│ Standard King Room │
│ ~~$210.00~~ $163.66 per night │
│ You save 22% · Early booker Deal │
└─────────────────────────────────────────┘
Perks list: Display available perks as a benefits checklist:
┌─────────────────────────────────────────┐
│ Included with your stay: │
│ ✓ Daily breakfast for 2 ($40 value)│
│ ✓ Late check-out ($20 value)│
│ ✓ Room upgrade if available ($60 value)│
│ ✓ Early check-in │
│ ✓ $100 Property credit │
│ │
│ Total perks value: $220 │
└─────────────────────────────────────────┘
Calculating total perks value
Sum the amount field across all perks for a rate to show the total added value:
const totalPerksValue = rate.perks.reduce((sum, perk) => sum + perk.amount, 0);Handling perk levels
Filter perks by level if you need to display them in different sections:
| Level | Meaning | Example |
|---|---|---|
HOTEL | Applies at the hotel level for the entire stay | Daily breakfast, property credit |
RATE | Specific to this particular rate | Rate-specific discount |
ROOM | Specific to the booked room | Room upgrade |
FAQ
Q: Do I need to enable anything to receive perks and promotions? A: Exclusive rates and perks are available to eligible partners. Contact your Lite API account manager to enable these features.
Q: Are perks guaranteed? A: Perks marked "if available" (e.g., room upgrade, early check-in) are subject to hotel availability at the time of stay. Perks without this qualifier (e.g., daily breakfast, property credit) are confirmed.
Q: How do guest levels affect perks?
A: Guest levels are part of your loyalty program configuration. Higher tiers can unlock additional perks at participating hotels. Use the PUT /loyalties endpoint to configure your program.
Q: Can I combine vouchers with exclusive rates?
A: Yes. Pass a voucherCode during prebook to apply a voucher discount on top of any exclusive rate pricing.
Q: Where do I find the original price for display?
A: Use retailRate.initialPrice as the original/strikethrough price and retailRate.total as the final price. At the offer level, use offerInitialPrice and offerRetailRate respectively.
Updated about 2 hours ago