Skip to content

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 Evocative 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 since until the next entry's since. The last entry applies through check-in.
  • amount is 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 amount equals the total price makes the booking non-refundable from its since.
  • isRefundable: true together with fullRefundability: null means free cancellation has passed, but a partial refund is still available.
  • fees is omitted (not an empty array) when the package has no fee schedule. Non-refundable packages carry no fees, and packages without a schedule are described by isRefundable and fullRefundability exactly 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 Evocative
  • 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.