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" and "DEVICE_SPECIFIC"

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 of the discount (for instance Early Bird Discount)
"discountType"stringYESChoose between the last minute or early bird, long stay, or device specific type of discount
"discountPercent"numberYESDiscount percentage
"conditions"objectYESConditions on which the discount is applied
"conditions"."daysBeforeCheckIn"int32YES*For "LAST_MINUTE" it is the maximum amount 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) needs the booking be made in order 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 less 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

Be aware

  • Discounts should be properly used for actual discounts, not for missing rates in 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 1 discounts for each booking only 1 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 2023-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 2023-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"
  }
}

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"
         }
      ]
   }
}