What it covers
- Hotel stays paid at booking, for one room, on a rate that can be cancelled for a full refund.
For any other stay,
get_booking_ancillariessays why it cannot be protected (see When protection cannot be added). - Jinko searches the hotel once a day (
terms.check_interval_minutes) until shortly before free cancellation of the stay ends (terms.ends_at), so that the original stay can still be cancelled for a full refund. - A rebook needs the same hotel, room, board, dates and guests, free cancellation until at least
the same date as the original booking, and a price lower by more than
terms.min_saving_money(USD 10). For a booking in another currency, USD 10 is converted at the rate of the day of each check. - A stay is rebooked at most once. The new booking cannot be protected again.
- When the original booking also holds a flight, the new booking holds only the hotel. The flight stays on the original booking.
Add protection to a booking
Once the hotel booking is confirmed, list what can be added to it with itsbooking_ref and the
traveler’s last name.
type price_drop_protection:
description is one paragraph you can show the traveler as it is. With the traveler’s approval,
add the offer to a trip of its own and check it out:
- Send
add_itemwithout atrip_id: the protection is a trip of its own. The trip takes the travelers and contact of the booking; you do not add them. - A trip that holds only free products has nothing to pay. Checkout answers
statusfulfillingandpayment_typenone, with an emptycheckout_urland noexpires_at. There is no payment step. - The offer’s
trip_item_tokenis valid untilcatalog_expires_at. Protection can be added untilpurchase_deadline.
get_booking_ancillaries({ booking_ref, last_name }), then
trip({ add_item: { trip_item_token } }) without a trip_id, then checkout({ trip_id }).
Follow the protection
get_booking shows price_drop_protection on the protected hotel item:
A search that finds no cheaper equivalent room changes nothing: the status stays
active until
the next search.
When the stay is rebooked
Jinko first books the same room at the lower price as a new booking, then cancels the stay on the original booking. If the original stay cannot be cancelled for a full refund at that moment, Jinko cancels the new booking instead, keeps the original, and the protection ends withended_reason refund_window_closed.
After a rebook:
-
The original hotel item is
cancelledand showsprice_drop_protection.statusrebooked, with the new booking inrebook. When the original booking held only this stay, itsstatusiscancelledtoo; a flight on the same booking stays booked, so do not stop tracking it: -
The new booking holds the stay. Read it with
get_bookingonrebook.new_booking_refand the same last name. Cancel it as any hotel booking; a refund goes to the original payment. -
refund_moneyis what the traveler paid for the original stay minus the price of the new booking. It is refunded to the original payment. Nothing new is charged: the original payment covers the new booking. -
The traveler receives one email,
hotel-price-drop-rebooked, with the new booking and the cancellation of the original stay. Jinko sends no separate booking confirmation or cancellation email for a rebook. -
Jinko sends the
servicing.price_drop_rebookedwebhook event. See Webhooks.
When protection cannot be added
An item withpurchasable false lists no offer. not_purchasable_reason says why:
Test on sandbox
On sandbox, a rebook happens only when the hotel’s sandbox price is lower when Jinko searches it. No call triggers a rebook. Test adding protection and readingprice_drop_protection there,
and handle the servicing.price_drop_rebooked event from the example in
Webhooks.