.. meta:: :description: Reservations Retrieval :keywords: Woodooapi 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 | List of prices for appropriate booked room for each day of| | | | (Object) | 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 | +-------------------------+-------------+-------------+-------------------------------------------------------------+ | email | No | String | Email | +-------------------------+-------------+-------------+-------------------------------------------------------------+ | 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 | Optional structure for credit card data | | | | (Object) | | +-------------------------+-------------+-------------+-------------------------------------------------------------+ | 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 | Dictionary | Key-value pairs that channel is free to set in order to | | | | (Object) | 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)