Cancellation Policies¶
Every package returned by search, quote and book carries a cancellationPolicy that tells you what cancelling the booking costs at any point in time. The same terms are then applied when you cancel the booking through the Bookings API.
There are two cancellation models:
| Model | How cancellation works |
|---|---|
| Standard | Full refund until the free-cancellation deadline, no refund afterwards. |
| Partial refundability | Free cancellation until the first fee applies, then a schedule of fees that grow as check-in approaches. Cancelling while a fee applies refunds the total minus that fee. |
Availability
Partial refundability must be enabled for your partner account. Contact Bookit to request access. Until it is enabled, all packages follow the standard model and the fees field described below is never returned.
Standard model¶
The policy is described by two fields:
| Field | Type | Description |
|---|---|---|
isRefundable | boolean | true when the package can be cancelled free of charge |
fullRefundability | object/null | Free-cancellation window. null for non-refundable packages |
fullRefundability.from | string | Start of the free-cancellation window (ISO 8601, UTC) |
fullRefundability.to | string | Free-cancellation deadline (ISO 8601, UTC). After it, the booking is non-refundable |
Partial refundability¶
With partial refundability enabled, a package can carry a fee schedule in cancellationPolicy.fees:
| Field | Type | Description |
|---|---|---|
isRefundable | boolean | true when cancelling now returns any part of the total, that is while the fee in force is below the total price |
fullRefundability | object/null | Free-cancellation window. to is the moment the first fee applies. null once a fee is already in force |
fullRefundability.from | string | Start of the free-cancellation window (ISO 8601, UTC) |
fullRefundability.to | string | End of the free-cancellation window, equal to fees[0].since (ISO 8601, UTC) |
fees | array | Cancellation fee schedule, ordered by since. Omitted when the package has no fee schedule |
fees[].since | string | Moment from which this fee applies (ISO 8601, UTC, inclusive) |
fees[].amount | number | Fee charged when cancelling from since until the next entry's since, for the whole booking, in the currency of the package total |
Reading the schedule¶
- Cancellation is free before the first entry's
since. - Each entry applies from its
sinceuntil the next entry'ssince. The last entry applies through check-in. amountis the absolute fee for the whole booking (all rooms and nights). The refund is the package total minus the fee in force at the moment you cancel.- Fees never decrease over time. An entry whose
amountequals the total price makes the booking non-refundable from itssince. isRefundable: truetogether withfullRefundability: nullmeans free cancellation has passed, but a partial refund is still available.feesis omitted (not an empty array) when the package has no fee schedule. Non-refundable packages carry nofees, and packages without a schedule are described byisRefundableandfullRefundabilityexactly as in the standard model. Always test for the key's presence.
Example¶
A package with a total price of 500.00 USD and check-in on 2026-12-10:
"cancellationPolicy": {
"isRefundable": true,
"fullRefundability": {
"from": "2026-11-19T00:00:00Z",
"to": "2026-12-01T12:00:00Z"
},
"fees": [
{ "since": "2026-12-01T12:00:00Z", "amount": 100.00 },
{ "since": "2026-12-06T12:00:00Z", "amount": 250.00 },
{ "since": "2026-12-09T12:00:00Z", "amount": 500.00 }
]
}
| Cancellation time (UTC) | Fee | Refund |
|---|---|---|
Before 2026-12-01 12:00 | 0.00 | 500.00 |
2026-12-01 12:00 - 2026-12-06 12:00 | 100.00 | 400.00 |
2026-12-06 12:00 - 2026-12-09 12:00 | 250.00 | 250.00 |
From 2026-12-09 12:00 | 500.00 | 0.00 (cancellation not possible) |
The same package requested on 2026-12-03, when the first fee is already in force:
"cancellationPolicy": {
"isRefundable": true,
"fullRefundability": null,
"fees": [
{ "since": "2026-12-01T12:00:00Z", "amount": 100.00 },
{ "since": "2026-12-06T12:00:00Z", "amount": 250.00 },
{ "since": "2026-12-09T12:00:00Z", "amount": 500.00 }
]
}
Through the booking flow¶
| Step | Behavior |
|---|---|
| Search (Search V2 API) | Every package carries its cancellationPolicy, including fees when it has a schedule. Fees are indicative until quote |
Quote (POST /api/v2/quote) | Confirms the schedule you will book. If the fees or their dates differ from search, changes contains CancellationPolicyChanged |
Book (POST /api/v2/book) | The schedule confirmed at quote is stored with the booking and returned in booking.cancellationPolicy. It does not change after booking |
Cancel (POST /api/bookings/{orderId}/cancel) | The fee in force at the moment of cancellation is charged and the rest of the total is refunded. See Cancelling a booking |
Always show the end user the schedule returned by quote, not the one from search.
Cancelling a booking¶
Cancellation is requested with POST /api/bookings/{orderId}/cancel. The outcome depends on the fee in force at the moment the request is processed:
| Fee in force | Result |
|---|---|
| None (free-cancellation window) | Cancellation succeeds and the full total is refunded |
| Below the total price | Cancellation succeeds and the total minus the fee is refunded |
| Equal to the total price | Cancellation is rejected with 400 Bad Request; the booking is non-refundable. If you need non-refundable bookings to be cancellable via the API, contact Bookit |
- After a successful cancellation the booking status becomes
Cancelled, whether the refund was full or partial. - The cancel response does not return the refunded amount. Calculate it from the booking's schedule, and reconcile the credit applied to your account through the Liabilities API.
- Refunds are credited in the booking's order-level
currency. - Cancellation is not available on the check-in date.
Schedule on existing bookings¶
GET /api/bookings/{orderId} and GET /api/bookings return the schedule of a booking as cancellationPolicies windows. A booking with a fee schedule returns one window per fee, preceded by the free-cancellation window when there is one:
description | fee |
|---|---|
Free cancellation | 0 |
Partial refund | Fee charged within the window, below the total |
Non-refundable | Total price |
For the example above, booked on 2026-11-20 with check-out on 2026-12-12:
"cancellationPolicies": [
{
"fee": 0,
"availableFrom": "2026-11-19T00:00:00Z",
"availableTo": "2026-12-01T12:00:00Z",
"description": "Free cancellation",
"refundability": "Refundable"
},
{
"fee": 100.00,
"availableFrom": "2026-12-01T12:00:00Z",
"availableTo": "2026-12-06T12:00:00Z",
"description": "Partial refund",
"refundability": "Refundable"
},
{
"fee": 250.00,
"availableFrom": "2026-12-06T12:00:00Z",
"availableTo": "2026-12-09T12:00:00Z",
"description": "Partial refund",
"refundability": "Refundable"
},
{
"fee": 500.00,
"availableFrom": "2026-12-09T12:00:00Z",
"availableTo": "2026-12-13T00:00:00Z",
"description": "Non-refundable",
"refundability": "Refundable"
}
]
Use fee to determine what cancelling within each window costs.