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.

FieldDescription
retailRate.totalThe final price the end user pays (the exclusive/discounted price).
retailRate.initialPriceThe hotel's standard listed price before any exclusive discount. Always >= total.
retailRate.promotionsArray of active promotions explaining the discount (name, dates, discount value, type).

At the offer level, the same comparison applies:

FieldDescription
offerRetailRateCombined final price across all rates in the offer.
offerInitialPriceCombined 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"
    }
  ]
}
FieldTypeDescription
namestringName or title of the promotion.
fromstringStart date of the promotion (YYYY-MM-DD).
tostringEnd date of the promotion (YYYY-MM-DD).
discountnumberThe discount value applied.
discountTypestringType of discount (e.g. percentage).
promotionCodestringOptional promotion code. Empty if none required.
currencystringCurrency 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

EndpointField 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"
    }
  ]
}
FieldTypeDescription
perkIdintegerUnique identifier for the perk.
namestringHuman-readable description of the perk.
amountnumberMonetary value of the perk (can be 0 for complimentary perks like early check-in).
currencystringCurrency of the perk's monetary value.
levelstringScope 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

EndpointField 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.

FieldTypeDescription
guestLevelintegerThe 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:

  1. For each rate, check if retailRate.initialPrice > retailRate.total to identify exclusive pricing.
  2. Read the promotions array for discount details.
  3. Read the perks array for included benefits.
  4. Use guestLevel to 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:

LevelMeaningExample
HOTELApplies at the hotel level for the entire stayDaily breakfast, property credit
RATESpecific to this particular rateRate-specific discount
ROOMSpecific to the booked roomRoom 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.