These docs are for v1.0. Click to read the latest docs for v2.0.

Booking notification

This endpoint should be implemented by partners connecting to Holidu’s API and willing to have their properties bookable on Holidu.

Holidu will send a request to notify the partners when one of their properties is booked. The partners need to register the booking in their system and confirm the receiving of the booking. There needs to be a unique transaction id for any successful transmitted booking provided by the partner in the response to the request.

❗️

Please only accept bookings if the total price in the booking notification matches the price in your system. Due to some configuration errors or time delays it can be possible to have price differences between your prices and the prices shown on holidu, BUT the customer books the property based on the prices shown on holidu. In order to avoid customer complaints and cancelled bookings, please reject bookings with a wrong price directly.

BookingNotification Request

It is a POST request with the following parameters:

FieldTypeRequiredContent
bookingIdstringtrueBooking ID created by Holidu
externalIdstringtrueYour Identifier + Apartment ID in your system (see example below)
arrivalLocalDate:
YYYY-MM-DD
trueWhen the customer would check in
departureLocalDate:
YYYY-MM-DD
trueWhen the customer would check out
guestsArray of Guest objectstrueList of guests
genderstring:
male
female
trueGender
firstNamestringtrueFirst name
lastNamestringtrueLast name
streetstringtrueName of the street
zipstringtrueZip code
citystringtrueCity
countrystring:
DE, FR, US, GB, etc.
trueCountry of the user (ISO 3166-2)
phonestringtruePhone number
emailstringtrueEmail address
commentstringoptionalSpecial request or comment
extraServicesArray of ExtraService objectsoptionalList of extra services included in the final price (selected options)
pricePrice objectoptionalFinal price including all the mandatory and selected extra costs but without Tourist Tax
paymentMethodstring:
BANK_TRANSFER, INVOICE, VISA, CREDIT_CARD, MAESTRO, PAYPAL, MASTER_CARD, AMERICAN_EXPRESS, JAPAN_CREDIT_BUREAU, DINERS_CLUB, MASTERPASS
trueThe payment method selected by the customer
paymentRatesArray of payment ratesoptionalThe payment rates calculated as per configuration
currencystring:
EUR, USD, GBP, etc.
trueUser’s currency (ISO 4217)
languagestring:
de, fr, en, etc.
trueLanguage that the customer speaks (ISO 639-1)
costsArray of Mandatory Cost objectsoptionalList of mandatory costs pushed to Holidu

Guest object
Each guest is represented by a guest object containing information about him.

FieldTypeRequiredContent
ageintegertrueThe age of this guest

ExtraService object
Information about selected option or mandatory costs included in the total price.

FieldTypeRequiredContent
serviceIdstringtrueId of the service you provide in our API
quantityintegertrueQuantity selected by the guest
labelstringtrueName of the service you provide

Price object
Price information in both original and user’s currency. They can be the same if the user uses the original currency.

FieldTypeRequiredContent
valuenumber (BigDecimal)truePrice in user’s currency
currencystring:
EUR, USD, GBP, etc.
trueUser’s currency (ISO 4217)
originalValuenumber (BigDecimal)truePrice in original currency
originalCurrencystring:
EUR, USD, GBP, etc.
trueOriginal currency (ISO 4217)

Payment rates object

FieldTypeRequiredContent
pricePrice objecttrueTotal price due on date
dueDatestringtrueDate on which the payment is due, pattern: yyyy-MM-dd
percentagenumber (BigDecimal)truePercentage of total price which is due

Cost object

FieldTypeRequiredContent
serviceIdStringtrueId of the cost in our API
labelStringtrueName of the cost in our API
descriptionStringtrueDescription of the cost
costTypeString:
MANDATORY_EXCLUDED_FROM_BASE_PRICE
trueType of cost.
costUnitString:
PER_NIGHT, PER_TWO_NIGHTS, PER_DAY, PER_WEEK, PER_MONTH, PER_STAY, PER_PERSON, PER_PERSON_PER_NIGHT, PER_PERSON_PER_TWO_NIGHTS, PER_PERSON_PER_DAY, PER_PERSON_PER_WEEK, PER_PET, PER_PET_PER_NIGHT, PER_PET_PER_DAY, PER_PET_PER_WEEK, PER_UNIT, PER_PERCENTAGE
trueUnit at which the cost is charged.
pricePerUnitPrice objecttruePrice per unit of the cost
totalPricePrice objectoptionalTotal price of the cost based on calculations
paymentDueDateStringtrueDate on which the payment is due, pattern: yyyy-MM-dd
paymentTimeString:
WITH_BASE_PRICE, ON_ARRIVAL, ON_DEPARTURE, ON_DATE, ON_SITE
trueTime at which the payment for the cost is expected.
maximumCountintegertrueMaximum count of the cost that is possible
minimumCountintegertrueMinimum count of the cost that is possible
conditionsArray of Condition objectoptionalConditions that are applicable to the cost. See Condition object below.

Condition object

FieldTypeRequiredContent
typeString:
PRICE_RANGE, VALIDITY_PERIOD, NUMBER_OF_NIGHTS, NUMBER_OF_PEOPLE, AGE_OF_PERSON
trueThe type of condition on which the cost is applied
fromstringtrueStart range of the condition
tostringtrueEnd range of the condition

Example booking notification

{
 "bookingId": "eacf97a4-cba2-4db1-8c02-d69306fc369f",
 "externalId": "PROVIDER-623730",
 "arrival": "2018-12-07",
 "departure": "2018-12-10",
 "guests": [
   {
     "age": 18
   },
   {
     "age": 18
   }
 ],
 "gender": "male",
 "firstName": "Test1 2",
 "lastName": "Test 2 3 4",
 "street": "Teststreet 24",
 "zip": "80992",
 "city": "München",
 "country": "DE",
 "phone": "000000000000",
 "email": "[email protected]",
 "comment": "TEST booking, please cancel",
 "extraServices": [
   {
     "serviceId": "110_fac_xb",
     "providerServiceId":"3344-abba",
     "quantity": 1,   
     "label": "Haustier"
   },
   {
     "serviceId": "111_fac_xb",
     "providerServiceId":"3345-abba",
     "quantity": 2,
     "label": "Bettwäsche"
   }
 ],
 "price": {
   "value": 1820.00,
   "currency": "EUR",
   "originalValue": 1820.00,
   "originalCurrency": "EUR"
 },
 "paymentMethod": "BANK_TRANSFER",
 "paymentRates":[
      {
         "price":{
            "value":588.00,
            "currency":"EUR",
            "originalValue":588.00,
            "originalCurrency":"EUR"
         },
         "dueDate":"2020-12-17"
      },
      {
         "price":{
            "value":1372.00,
            "currency":"EUR",
            "originalValue":1372.00,
            "originalCurrency":"EUR"
         },
         "dueDate":"2021-03-05"
      }
   ],
 "currency": "EUR",
 "language": "de",  
  
 "costs": [
   {
     "serviceId": "111_109918759",
     "label": "CLEANING",
     "costType": "MANDATORY_EXCLUDED_FROM_BASE_PRICE",
     "costUnit": "PER_STAY",
     "pricePerUnit": {
       "value": 100,
       "currency": "EUR",
       "originalValue": 100,
       "originalCurrency": "EUR"
     },
     "totalPrice": {
       "value": 100,
       "currency": "EUR",
       "originalValue": 100,
       "originalCurrency": "EUR"
     },
     "paymentTime": "WITH_BASE_PRICE",
     "maximumCount": 1,
     "conditions": []
   }
 ],
"brand":"HOLIDU"
}

Booking response body

FieldTypeRequiredContent
errorCodeIntegeroptionalError code. Required in case of a failed booking.
errorMessageStringoptionalError message as a String. Required in case of failed booking.
transactionIdStringoptionalTransaction/Booking Id generated in your system. Required in case of successful booking.
statusStringtrueStatus of the booking request. It should be one of eitherCONFIRMED, FAILED
paymentUrlStringoptionalThis lets you return an URL to which the user can pay its booking. We will show this URL on the confirmation page, and on the confirmation email.

Example Responses

{
 "transactionId": "123456789",
 "status": "CONFIRMED",
 "paymentUrl" : "https://PAYMENT_LINK.com"
}
{
 "errorCode": XXX,
 "errorMessage": "Please specify the error"
 "status": "FAILED"
}
❗️

Please make sure you send the correct http status in the response. Any response with a response code of 200 will be handled as a confirmed booking independent on any errorCode or errorMessage in the response.

👍

For security measures we recommend you to whitelist our IPs so that we can only do requests to you from the following IPs:

  • 54.77.51.111
  • 34.249.124.33
  • 212.114.208.106
  • 99.80.89.251
  • 34.242.187.158
  • 34.250.93.237