Cancel for any reason
Give travelers the flexibility to cancel a non-refundable booking and receive a refund for the full hotel price
Overview
The Trip Protection API is a new, optional capability for those who already integrated with the Rapid Lodging API. It allows eligible lodging bookings to be offered with a cancel for any reason (CFAR) upgrade, giving travelers the flexibility to cancel a non-refundable booking and receive a full refund of the price paid for the hotel.
What is CFAR?
With the addition of CFAR, travelers can cancel non-refundable lodging bookings before check‑in and receive a full hotel refund. CFAR is a travel service—not traditional travel insurance—and requires no qualifying reason or claims process; travelers may cancel for any reason without additional paperwork.
CFAR helps you:
- Increase conversion on lower-priced non-refundable inventory
- Give travelers confidence when booking non-refundable rates
- Reduce friction around cancellation
- Provide flexibility without introducing manual claims handling
CFAR live site display example

Please note: This sample is provided for illustrative purposes only.
Launch requirements
Before integrating the Trip Protection API, you must already be live on the Rapid Lodging API (Availability/Shopping, Price Check, and Booking endpoints). The authentication mechanism will be through Signature Authentication as in the Rapid Lodging API.
Contact your account manager to have this scope added to your credentials.
How it works
The CFAR integration is minimally disruptive. No changes are required to your existing Rapid Lodging request payloads for Availability/Shopping, Booking, and Cancellation (Steps 1, 4, and 6). The new behavior is additive, so if you don’t act on the CFAR offer, you'll see no change to your integration.
CFAR with Rapid Lodging

Step 1: Search for lodging rates
No changes required.
This is the standard Rapid Lodging Availability/Shopping call. No modifications are needed to the request or response handling.
Step 2: Call the Price Check API
This is the standard Rapid Lodging price check call. No changes to the request are required.
When a rate is eligible for CFAR, the Price Check response will include an add_trip_protection link alongside the existing book link in the links object. You should use this link to offer the traveler the CFAR option.
Example: Price Check response links object (CFAR-eligible rate)
{
"links": {
"book": {
"method": "POST",
"href": "/v3/itineraries?token=QldfCGtcTjIbASj7"
},
"add_trip_protection": {
"method": "GET",
"href": "/v1/trip-protection/quote?token=QldfCGtcTjIbASj7"
}
}
}Note: The add_trip_protection link will only be present when the rate is eligible for CFAR. If the link is absent, CFAR is not available for that rate.
Step 3: Get a Trip Protection quote
Endpoint: GET /v1/trip-protection/quote?token={token}
This is an optional step that retrieves a full CFAR quote for the selected rate. Use the href from the add_trip_protection link returned in Step 2 as the request URL.
The response contains:
- Product details: product name, type, vendor, and merchant of record
- Policy details: coverage dates, coverage percentage and limit, marketing copy (headline, overview, benefits), disclaimer, and a link to the policy wording document
- Pricing: the CFAR price (
trip_protection_price) and combined lodging + protection totals (totals), each expressed in both billable and request currencies (inclusive and exclusive of taxes/fees) - Cancel penalties: penalties that apply to the protection product itself if cancelled
- Booking link: the
links.bookparameter is used in Step 4 to book with CFAR
Required headers
| Header | Required | Notes |
|---|---|---|
Accept | Yes | Must be application/json |
Accept-Encoding | Yes | Must be gzip |
Customer-Ip | Yes | End-traveler's IPv4 address (not your server's) |
User-Agent | Yes | Customer's user-agent or {app-name}/{app-version} |
Customer-Session-Id | No | Unique per user session; re-use across calls in the same session |
Test | No | For sandbox testing: standard, service_unavailable, unknown_internal_error |
Example: Quote response
{
"product_name": "Cancel for any reason (100% Refund)",
"product_type": "hotel_cancel_for_any_reason",
"vendor": "[vendor name]",
"merchant_of_record": "expedia",
"policy": {
"start_date": "2025-10-13T15:59:00.000+01:00",
"end_date": "2025-10-18T08:00:00.000-08:00",
"coverage": {
"percentage": "100%",
"limit": {
"inclusive": {
"billable_currency": { "value": "[amount]", "currency": "USD" },
"request_currency": { "value": "[amount]", "currency": "USD" }
},
"exclusive": {
"billable_currency": { "value": "[amount]", "currency": "USD" },
"request_currency": { "value": "[amount]", "currency": "USD" }
}
}
},
"description": {
"headline": "Change of plans? You're covered.",
"overview": "Add flexibility to your stay with Cancel for any reason coverage. Get a refund if you cancel before 8:00 AM property time on [check-in date].",
"benefits": "<b>Get a refund of 100%: [refund_amount]</b>
<b>Cancel anytime before 8:00 AM property time on [checkin_date]</b>
<b>No questions asked, no paperwork</b>
"
},
"disclaimer": "By purchasing, I agree to all Cancel for any reason [policy_terms_link_text] on my itinerary",
"links": {
"policy_wording": {
"method": "GET",
"href": "https://staging.vendor.com/pds/1ed50cef-49e1-4ff6-acc9-137ba784e472?policy_type=expedia_travel_insurance_v1"
}
}
},
"pricing": {
"trip_protection_price": {
"inclusive": {
"billable_currency": { "value": "[amount]", "currency": "USD" },
"request_currency": { "value": "[amount]", "currency": "USD" }
},
"exclusive": {
"billable_currency": { "value": "[amount]", "currency": "USD" },
"request_currency": { "value": "[amount]", "currency": "USD" }
}
},
"totals": {
"inclusive": {
"billable_currency": { "value": "[amount]", "currency": "USD" },
"request_currency": { "value": "[amount]", "currency": "USD" }
},
"exclusive": {
"billable_currency": { "value": "[amount]", "currency": "USD" },
"request_currency": { "value": "[amount]", "currency": "USD" }
}
}
},
"refundable": false,
"cancel_penalties": [
{
"start": "2026-10-13T15:59:00.000+01:00",
"end": "2026-10-18T08:00:00.000-08:00",
"currency": "USD",
"amount": "[amount]",
"percent": "100%"
}
],
"links": {
"book": {
"method": "POST",
"href": "/v3/itineraries?token=MY5S3j36cOcL",
"expires": "2026-10-13T16:10:00.000+01:00"
}
}
}Step 4: Call Booking API
No changes to the request payload.
This is the standard Rapid Lodging Booking call (POST /v3/itineraries). The booking link to use depends on whether the traveler opted into CFAR.
| Traveler choice | Booking link to use |
|---|---|
| With CFAR | links.book from the Step 3 quote response |
| Without CFAR | links.book from the Step 2 Price Check response |
No new fields are added to the booking request or response. CFAR is activated solely by which token is used in the booking link.
Note: The links.book token from the quote response expires (see the expires field). Ensure the booking is submitted before the token expiry.
Step 5: Retrieve Booking
No changes to the request.
This is the standard Rapid Lodging GET /v3/itineraries/{itinerary_id} call.
When CFAR was purchased, the Itinerary response will include an additional trip_protection object containing the policy and pricing details of the purchased product. If you did not purchase CFAR, you'll see no change to the Itinerary response.
Additionally, when CFAR is active, the cancel_penalties and refundable fields on the rate object in the itinerary will reflect the CFAR policy rather than the base rate's cancellation policy.
Example: Itinerary response showing the trip_protection object
[
{
"itinerary_id": "8999989898988",
"property_id": "8150374",
"trip_protection": {
"product_name": "Cancel for any reason (100% Refund)",
"product_type": "hotel_cancel_for_any_reason",
"vendor": "[vendor]",
"merchant_of_record": "expedia",
"policy": {
"start_date": "2026-10-13T15:59:00.000+01:00",
"end_date": "2026-10-18T08:00:00.000-08:00",
"coverage": {
"percentage": "100%",
"limit": {
"inclusive": {
"billable_currency": { "value": "[amount]", "currency": "USD" }
},
"exclusive": {
"billable_currency": { "value": "[amount]", "currency": "USD" }
}
}
},
"links": {
"policy_wording": {
"method": "GET",
"href": "https://staging.vendor.com/pds/1ed50cef-49e1-4ff6-acc9-137ba784e472?policy_type=expedia_travel_insurance_v1"
}
}
},
"pricing": {
"inclusive": {
"billable_currency": { "value": "[amount]", "currency": "USD" }
},
"exclusive": {
"billable_currency": { "value": "[amount]", "currency": "USD" }
}
}
}
}
]Note: The trip_protection pricing in the Retrieve response reflects the billable currency only. For the full breakdown including request currency, refer to the original quote response.
Step 6: Cancel Booking
No changes to the request.
This is the standard Rapid Lodging cancellation call. When CFAR was purchased, canceling the booking will automatically trigger a refund claim on behalf of the traveler. No additional action is required for your implementation.
Refunds are processed entirely by Expedia Group. The traveler will receive the applicable refund through the standard claim settlement process.
API details
Explore the Trip Protection-related endpoint definitions on this page, then use the API Explorer or another testing software to get an understanding of how the examples and schema definitions compare to the actual output.
Note: This schema file is provided for evaluation purposes only. Changes and refinement, including breaking changes, are likely before this reaches general availability.