You can use the discounts endpoint to add multiple discounts per apartment. There is no possibility to push discounts for all of your properties at the same time, you will always need to add the discounts individually to every apartment.

The following discount types are supported: "LAST_MINUTE", "EARLY_BIRD", "LONG_STAY", "DEVICE_SPECIFIC", "NEW_LISTING", "LOYALTY", "OFFER"

You can always check for active discounts for a specific apartment using the GET Discounts endpoint or GET a single discount for an apartment by discount id

The discount object

ParameterTypeRequiredUsage
"id"int64NOWhen creating a new discount, this field is empty, it will be set by Holidu in the response. When updating an existing discount push the "id" of this discount.
"status"stringYESThe status indicates if a discount is active, inactive (temporary), or deleted.
"name"stringNOYou can put a name for the discount (e.g., Early Bird Discount).
"discountType"stringYESChoose between the last minute, early bird, long stay, device specific, new listing, loyalty, or offer type of discount.
"discountPercent"numberYESDiscount percentage.
"conditions"objectYESConditions on which the discount is applied.
"conditions"."daysBeforeCheckIn"int32YES*For "LAST_MINUTE", it is the maximum number of days before check-in, and for "EARLY_BIRD", the minimum of days before check-in during which the discount should be applied. *Required if the discount type is "LAST_MINUTE" or "EARLY_BIRD"
"conditions"."minStay"int32YES*Minimum length of stay required for the discount to be applied. *Required if the discount type is "LONG_STAY"
"conditions"."bookingSeason"array of objectsNOFor the discount to be applied, the booking date must be within a specific season.
"conditions"."bookingSeason"."onlyApplicableFrom"dateYES*Start date of booking season. *Required if "bookingSeason" object is pushed.
"conditions"."bookingSeason"."onlyApplicableUntil"dateYES*End date of booking season. *Required if "bookingSeason" object is pushed.
"conditions"."travelSeason"array of objectsNOFor the discount to be applied, the travel date must be within a specific season.
"conditions"."travelSeason"."onlyApplicableFrom"dateYES*Start date of travel season. *Required if "travelSeason" object is pushed.
"conditions".travelSeason"."onlyApplicableUntil"dateYES*End date of travel season. *Required if "travelSeason" object is pushed.
"conditions"."deviceType"stringYES*From which device (Mobile or Desktop) the booking needs to be made for the discount to be applied. *Required if the discount type is "DEVICE_SPECIFIC"

Status of a discount

statusUsage
"ACTIVE"The discount should be active.
"INACTIVE"The discount should be inactive (paused) but not deleted.
"DELETED"You want to delete the discount.

Type of a discount

discountTypeUsage
"EARLY_BIRD"A discount should be applied x or more days before check-in.
"LAST_MINUTE"A discount should be applied x or fewer days before check-in.
"LONG_STAY"A discount should be applied if a booking has a specific minimum length of stay.
"DEVICE_SPECIFIC"A discount should be applied if a booking is made from a specific device such as a mobile phone or a desktop.
"NEW_LISTING"A discount should be applied only to newly published properties.
"LOYALTY"A discount should be applied only for logged-in users.
"OFFER"A discount should be applied for standard promotions, not fitting into any other type.

Be aware

  • Discounts should be properly used for actual discounts, not for missing rates in the LOS file.
  • The discount will always be applied to the whole base rate of the property if those conditions apply, not just to the specific days
  • If you push more than one discounts for each booking, only one discount object will be applied. The one leading to the highest discounted amount will be applied.

Examples

Create a discount for Early Birds

If a guest is an early bird and books for 5 nights or more and 90 days or more before check-in date, the price per night is discounted by 10%.

{
  "discountPercent": 10,
  "status": "ACTIVE",
  "discountType": "EARLY_BIRD",
  "conditions": {
    "daysBeforeCheckIn": 90,
    "minStay": 5
  }
 
}

Create a discount for Last Minute guests

If a guest likes to book last minute, 7 days or less before check-in date, the price per night is discounted by 20%.

{
  "discountPercent": 20,
  "status": "ACTIVE",
  "discountType": "LAST_MINUTE",
  "conditions": {
    "daysBeforeCheckIn":7
  }
 
}

Create a discount for Long Stays

If a guest chooses to stay 7 or more days, the price is discounted by 20% for bookings if the guests books between 2020-08-01 and 2021-04-30.

{
  "discountPercent": 20,
  "status": "ACTIVE",
  "discountType": "LONG_STAY",
  "conditions": {
    "bookingSeason": [
      {
        "onlyApplicableFrom": "2020-08-01",
        "onlyApplicableUntil": "2021-04-30"
      }
    ],
    "minStay": 7
  }
}

Create a discount for a device specific booking

If a guest chooses to book on a mobile device, the price is discounted by 15% if the guest's travel date is between 2020-08-01 and 2021-04-30

{
  "discountPercent": 15,
  "status": "ACTIVE",
  "discountType": "DEVICE_SPECIFIC",
  "conditions": {
    "travelSeason": [
      {
        "onlyApplicableFrom": "2020-08-01",
        "onlyApplicableUntil": "2021-04-30"
      }
    ],
    "deviceType": "MOBILE"
  }
}

Create a discount for New Listings

If an apartment is newly listed, offer a 15% discount for bookings made between 2025-06-01 and 2025-12-31.

{
  "discountPercent": 15,
  "status": "ACTIVE",
  "discountType": "NEW_LISTING",
  "conditions": {
    "bookingSeason": [
      {
        "onlyApplicableFrom": "2025-06-01",
        "onlyApplicableUntil": "2025-12-31"
      }
    ]
  }
}

Create a discount for Loyalty Users

Authenticated users get a 10% discount if they book at least 30 days before check-in and stay for 3 or more nights.

{
  "discountPercent": 10,
  "status": "ACTIVE",
  "discountType": "LOYALTY",
  "conditions": {
    "daysBeforeCheckIn": 30,
    "minStay": 3,
    "userType": "USER_AUTHENTICATED"
  }
}

Create a discount for Special Offers

For a promotional campaign, 25% discount is applied if the stay is between 2024-07-01 and 2024-08-31, and the booking is made on mobile devices only.

{
  "discountPercent": 25,
  "status": "ACTIVE",
  "discountType": "OFFER",
  "conditions": {
    "travelSeason": [
      {
        "onlyApplicableFrom": "2024-07-01",
        "onlyApplicableUntil": "2024-08-31"
      }
    ],
    "deviceType": "MOBILE"
  }
}

Update an existing discount to status deleted

💡Now the "id" needs to be included in the request. To get all pushed discount objects, including the discount id, you can use the GET

{
  "id": 123,
  "discountPercent": 20,
  "status": "DELETED",
  "discountType": "DEVICE_SPECIFIC",
  "conditions": {
    "deviceType": "DESKTOP"
  }
  
}

Update an existing discount to status inactive

💡Now the "id" needs to be included in the request. To get all pushed discount objects, including the discount id, you can use the GET

{
   "id":456,
   "discountPercent":20,
   "status":"INACTIVE",
   "discountType":"LONG_STAY",
   "conditions":{
      "minStay":14,
      "travelSeason":[
         {
            "onlyApplicableFrom":"2024-05-01",
            "onlyApplicableUntil":"2024-09-30"
         }
      ]
   }
}