Cancellation

Cancelling

CallCancels
DELETE /v2/bookings/{booking_id}every reservation in the booking
DELETE /v2/bookings/{booking_id}/reservations/{reservation_id}one reservation (unit)

Like booking, cancellation is asynchronous.

Cancel the whole booking when you can. For a multi-unit booking, cancelling one reservation means the hotel has to modify the booking, which is slower and fails more often for some hotel systems. If the guest is cancelling every unit, use DELETE /v2/bookings/{booking_id}.

What 204 No Content means: we accepted the request and are sending it to the hotel. The reservation moves to TO_BE_CANCELLED.

What to do next: poll GET /v2/bookings/{booking_id} (same pattern as Booking) until the status is one of:

  • CANCELLED: done.
  • CANCELLATION_FAILED: the hotel did not accept the cancellation, and the reservation is still active. Check errors (usually CANCELLATION_REJECTED). See When a cancellation fails.

Most cancellations complete within 10 seconds. Keep polling as for bookings: up to 120 seconds.

Errors when submitting a cancellation

HTTPerror_codes[].codeMessage / meaning
400NON_CANCELLABLEReservation with status <STATUS> cannot be cancelled. The reservation is in a status that can't be cancelled, for example still TO_BE_DELIVERED. Wait until it is CONFIRMED.
400NON_CANCELLABLECancelling a reservation after check in date is not allowed
400NON_CANCELLABLEThe reservation cannot be cancelled at the moment, try again in N minutes. Retry after N minutes.
400ALREADY_CANCELLEDAlready cancelled.
404NOT_FOUNDNo such reservation for your account.
500INTERNAL_SERVER_ERRORRetry later.

Common mistake: treating every 400 as "already cancelled". Check error_codes[].code. Only ALREADY_CANCELLED means the reservation is cancelled; NON_CANCELLABLE means it is still active.

When a cancellation fails

Common causes:

  • Hotel system unavailable: the hotel system is down or in maintenance. Hotel chains announce these windows and we relay them. Retry after the window: send the same DELETE again. A reservation in CANCELLATION_FAILED can be cancelled again.
  • Hotel refusal: the hotel refused, for example because the reservation is non-refundable or the guest has already checked in.

Status at the hotel can differ. Occasionally, a reservation is CANCELLED with us but still visible at the hotel, or the other way round. This happens because hotels' booking and front-desk systems don't always sync. Contact support with the booking ID and supplier_confirmation_id.

Cancellation policies

Which policy applies. The policy at the time of booking applies. It is stored on the reservation (cancellation_policies, no_show_policy) and returned by GET /bookings/{id}. A hotel may change a rate plan's policy later; that doesn't affect existing reservations.

Where to read policies:

  • Before booking: read them from data.rate_plans[rate_plan_id] in the availability response. Every bookable rate has them there.
  • Don't rely on /properties: the policies on /properties and the rate plan endpoints describe the rate plan in general and can be empty.

Refunds. Refunds for cancellation charges are handled by the hotel.

No policy is not "non-refundable". If cancellation_policies is empty, the hotel hasn't provided a policy for that rate. Treat it as unknown and report it to us; don't show the rate as non-refundable or free to cancel.

Fields

{
  "name": "Free cancellation until 2 days before arrival",
  "description": "…text from the hotel…",
  "charge_type": "percentage",
  "amount": 100,
  "reference": "prior-to-arrival",
  "days_before_activation": 2,
  "hours_before_activation": 0,
  "type": "static"
}
FieldMeaning
charge_typefixed: a fixed amount in the property's currency. percentage: a percentage of the reservation total. nights: the price of a number of nights.
amountThe value for charge_type. For percentage it is a percentage (100 = full price). For fixed it is a currency amount (e.g. 123.5). For nights it is a number of nights (1 = the price of one night).
referenceThe moment the deadline is counted from. prior-to-arrival: before the property's check-in date/time (local time, see the property's timezone and check-in time). after-booking: after the booking was confirmed.
days_before_activationDays before (or after, for after-booking) the reference when the charge starts to apply.
hours_before_activationDespite its name, this is the hour of the day (0–23, property local time) on the deadline day. It is not a number of hours.
name, descriptionFree text from the hotel, for display only. Don't parse it.

A reservation can have several policies, for example a free period followed by a 100% charge. The one that applies is the latest one whose deadline has passed.

Worked examples

Example 1. Property in Europe/London, check-in 2026-11-10. Policy:

{ "charge_type": "percentage", "amount": 100, "reference": "prior-to-arrival",
  "days_before_activation": 2, "hours_before_activation": 14 }
  • Deadline: 2 days before check-in at 14:00 local time, i.e. 2026-11-08 14:00 Europe/London.
  • Before the deadline: free cancellation.
  • From the deadline on: cancelling costs 100% of the reservation total.

Example 2: same day. Check-in 2026-11-10 at 15:00. Policy:

{ "charge_type": "nights", "amount": 1, "reference": "prior-to-arrival",
  "days_before_activation": 0, "hours_before_activation": 13 }

Free cancellation until 13:00 on the day of arrival. From then on, cancelling costs one night.

Example 3: one day before. days_before_activation: 1, hours_before_activation: 16 means free cancellation until 16:00 the day before arrival.

Example 4: after booking. reference: after-booking, days_before_activation: 1. Booked on 1 August at 14:00: free cancellation until 2 August at 14:00.

No-show policy

no_show_policy uses the same charge_type and amount. It applies if the guest doesn't arrive and the reservation wasn't cancelled.