Reservations Retrieval
This method allows WuBook to read the hotel reservations from the channel extranet. The service should returned all reservation created, modified or canceled after the timestamp specified in the request.
Request from WooDoo
{
"action":"get_bookings",
"data":{
"start_time":"2014-04-25 15:00:00"
}
}
Field |
Mandatory |
Type |
Description |
---|---|---|---|
start_time |
Yes |
String |
The date and time (UTC+0 timezone) for filtering reservations. Format: YYYY-MM-DD hh24:mm:ss |
Response from channel
{
"code": 200,
"data": {
"bookings": [
{
"booking_id": "496",
“booking_modification_id”: “1001”,
"status": "new",
"created": "2014-04-27 01:12:28",
"modified": "2014-04-27 01:12:28",
“utc_offset”: '0200',
"hotel_id": "100",
"currency": "EUR",
"arrival_date": "2014-05-01",
"departure_date": "2014-05-03",
“arrival_hour”: “11:00”,
“departure_hour”: “10:00”,
"rooms": [
{
"room_id": "1",
“occupancy”: “occupancy_id1”,
"daily_prices": {
"2014-05-01": {“price”: 150.00, “rate_id”:”111”}
"2014-05-02": {“price”: 140.00, “rate_id”:”111”}
}
"adults_number": 2,
"children_number": 1,
"guests": ["John Doe", "Mary Doe",”Kevin Doe”],
},
{
"room_id": "2",
“occupancy”: “occupancy_id2”,
"daily_prices": {
"2014-05-01": {“price”: 150.00, “rate_id”:”111”}
"2014-05-02": {“price”: 120.00, “rate_id”:”112”}
}
"adults_number": 1,
"children_number": 0,
"guests": ["Jack Smith"],
},
],
"already_payed": false,
"customer": {
"first_name": "John",
"last_name": "Doe",
"email": "johndoe@gmail.com",
"phone": "12345678",
“country”: “IT”,
“city”: “Milan”,
“address”: “Viale Vittoria, 3”,
“zip”: “20133”
},
"credit_card": {
"owner": "John Doe",
"type": "VISA",
"number": "1234567890",
"cvc": "123",
"expiring": "06/2015"
},
"notes": "No smoking room, please",
"total_price": 600.00,
“ancillary”: { “custom_key1”: “custom_value1”,
},
]
}
}
Field |
Mandatory |
Type |
Description |
---|---|---|---|
booking_id |
Yes |
String |
Identifier of the reservation |
booking_modification_id |
No |
String |
Identifier of reservation event. A reservation that is created, then modified and then canceled has 1 booking_id but a different booking_modification_id for each one of these 3 events. This element can be useful only if the OTA needs a booking confirmation call (see paragraph “Reservations Confirmation”) |
created |
Yes |
String |
Date and time when the reservation was created |
modified |
Yes |
String |
Date and time when the reservation was modified last time. For newly created reservation it will be the same with “created” field. For canceled reservation it will represent the date and time of the cancellation. Format YYYY-MM-DD hh24:mm:ss |
utc_offset |
Yes |
String |
The offset between all dates/times in the booking and the corresponding UTC+0 date. Format: + or - followed by 4 digits HHMM (hours, minutes). I.e. +0000, +0330, -0200 |
status |
Yes |
String |
new - new reservation. modified - previously existed reservation was modified. canceled - previously existed reservation was canceled. |
hotel_id |
Yes |
String |
Univoque identifier for the property |
currency |
Yes |
String |
Currency Code (ISO 4217) |
arrival_date |
Yes |
String |
Check-in date. Format: YYYY-MM-DD |
departure_date |
Yes |
String |
Check-out date. Format: YYYY-MM-DD |
arrival_hour |
No |
String |
Check-in time. Format: HH:MM (hotel timezone) |
departure_hour |
No |
String |
Check-out time. Format: HH:MM (hotel timezone) |
rooms |
Yes |
List |
List of booked rooms |
room_id |
Yes |
String |
Room_id – the identifier of booked room. It is one of the identifier returned by get_rooms service. |
occupancy |
No |
String |
Only in case of “advanced occupancy model” (see paragraph “Occupancy model”), this field can be (not mandatory) filled with the occupancy ID involved in the booking |
daily_prices |
Yes |
Dictionary (Object) |
List of prices for appropriate booked room for each day of stay |
rate_id |
No** |
String |
Identifier of booked rate for the specified room-day. It is one of the identifier returned by get_rates service |
price |
Yes |
Float |
Price for the specified room-day |
adults_number |
Yes |
Integer |
Number of adults for the booked room |
children_number |
No |
Integer |
Number of children for the booked room. If channel doesn’t manage separately adults and children, the total number of guests can be specified in the field adults_number |
guests |
No |
List |
List of guests names for the booked room |
already_payed |
No |
Boolean |
If the reservation was already payed by guest |
customer |
Yes |
Dictionary |
The customer contact data |
first_name |
Yes |
String |
First name |
last_name |
Yes |
String |
Last name |
No |
String |
||
phone |
No |
String |
Phone |
country |
No |
String |
Standard ISO 3166, Alpha-2 Code |
city |
No |
String |
City |
address |
No |
String |
Address |
zip |
No |
String |
Zip |
credit_card* |
No |
Dictionary (Object) |
Optional structure for credit card data |
type |
No |
String |
Possible values: “VISA”, “MASTERCARD”, “DINERS”, “DISCOVER”,“AMERICAN_EXPRESS”,“ENROUTE”, “JCB”, “MAESTRO”, “BLANCHE” (Carte Blanche),“AUSTRALIAN” (Australian BankCard), “EUROCARD”, “UNIONPAY” If you manage other credit card types, please notify us: we’ll add it to our list and provide you the corresponding |
expiring |
No |
String |
Credit card expiring date. Format MM/YYYY |
owner |
No |
String |
Credit card owner |
number |
No |
String |
Credit card number |
cvc |
No |
String |
Credit card CVC |
notes |
No |
String |
Notes from customer |
total_price |
Yes |
Float |
Total price for the reservation |
ancillary |
No |
|
Key-value pairs that channel is free to set in order to report additional information about reservation that aren’t already mentioned in the other fields. It can also be a nested structure. |
- * The channel should notify WuBook whether credit card is never returned.
If credit card data can be present the channel endpoint API URL should use secure protocol (HTTPS).
- ** The rate_id field is mandatory if the channel manages availability at room-rate level. In this case, the
rate_id MUST be the same for all days of a booked room.
SPLIT RESERVATIONS
The json structure for every booking described above is designed to only support reservations in which all involved rooms have the same checkin and checkout dates. If your system can also generate reservations with different checkin and checkout dates for the rooms involved, you can return all the reservations as a list of splitted reservations , where every single one has homogeneous checkin and checkout dates for involved rooms.
For example, booking retrieval returning 2 bookings
Booking ID: 10001
Room 1
Booking ID: 10002
Room 1: checkin 01/01/2016, Checkout 03/01/2016 Room 2: checkin 01/01/2016, Checkout 03/01/2016 Room 3: checkin 01/01/2016, Checkout 04/01/2016
The second reservation can be split in two blocks, one for rooms 1 and 2, the other for room 3 Reservation retrieval response will be
{
"code": 200,
"data": {
"bookings": [
[
{"booking_id": "10002", ...}, → for room 1 and 2
{"booking_id": "10002", ...} → for room 3
]
]
}
}
Note
If one of the split is modified, the json returned by booking retrieval MUST contain the complete information of the reservation, not only the part regarding the modified split
If a previously split reservation is cancelled, it is sufficient to return one dictionary (object) for the booking, with status canceled.
The total_price field for each split reservation must regard only the part of reservation of the split (it is not the total amount of the full original reservation)