Getting Started with the Xeni Activities APIHow to Book an ActivityHow to Browse Activity Tags and CategoriesHow to Cancel an Activity BookingHow to Check Activity AvailabilityHow to Get Activity DetailsHow to Retrieve Activity Booking DetailsHow to Search for Activities with FiltersHow to Search for Activity DestinationsCar Rental API - Getting StartedCar Rental API - Understanding Response FieldsHow to Book a Car RentalHow to Get Rental Car Details and Equipment Add-OnsHow to Retrieve or Cancel a Car Rental BookingHow to Search for Available Rental CarsHow to Search for Pickup LocationsHow to Use Car Rental Search FiltersDeals API Best Practices for IntegrationDeals API Frequently Asked QuestionsGetting Started with the Xeni Deals APIDeals API Request Parameters and Headers ReferenceDeals API Supported Currencies and LocalizationHow to Display Deals in Your ApplicationHow to Fetch Hotel Deals by LocationFlights API Error Codes and TroubleshootingGetting Started with the Xeni Flights APIHow to Book a FlightHow to Check Flight Availability and PricingHow to Confirm or Cancel a Flight BookingHow to Retrieve Fare Rules for a FlightHow to Retrieve Flight Booking DetailsHow to Search for Airports Using AutocompleteHow to Search for FlightsHow to Use Flight Search Filters, Sorting, and PaginationHow to Check Room Availability and PricingHow to Filter Vacation Rental ResultsHow to Get Resort Property Details, Amenities, and AccessibilityHow to Hold and Confirm a Resort BookingHow to Release a Resort HoldHow to Retrieve Resort Booking DetailsHow to Search for Available ResortsHow to Search for Resort DestinationsHow to Search for Vacation Rental LocationsHow to Search for Vacation RentalsHow to Use Resort Search Filters and SortingGetting Started with the Xeni Resorts APIResorts API: Understanding Booking Statuses and PoliciesGetting Started with the Vacation Rentals APIVacation Rentals Frequently Asked QuestionsVacation Rentals Supported Property TypesUnderstanding Async Search for Vacation RentalsAuthentication & API SignaturesBooking Hotels — Direct API & SSO CheckoutError Handling, Rate Limits & Best PracticesGetting Started with the Xeni Hotels APIManaging Bookings: Status, Retrieval & CancellationPricing Confirmation & Token LifecycleRetrieving Hotel Details & Room AvailabilitySearching for Hotels: Locations, Filters & PaginationSearching for HotelsSession Management & Correlation IDsAPI authentication and getting your API keys

How to Cancel an Activity Booking

Last updated: 2026-03-03

How to Cancel an Activity Booking

Cancelling an activity booking is a two-step process. First, check the cancellation penalty to determine the refund amount and available cancellation reasons. Then, submit the cancellation request with the appropriate reason code.

Step 1: Check Cancellation Penalty

Before cancelling, retrieve the penalty details and available reasons.

Endpoint

GET {{api_host}}/api/ext/activity/{bookingId}/cancel-penalty

Headers

HeaderRequiredDescription
x-api-keyYesYour Xeni API key

Path Parameters

ParameterTypeRequiredDescription
bookingIdstringYesThe booking ID to check for cancellation penalties.

Example Request

GET {{api_host}}/api/ext/activity/MY-BOOKING-001/cancel-penalty

Response

FieldTypeDescription
data.reasonsarrayAvailable cancellation reasons.
data.reasons[].reasonstringMachine-readable reason identifier.
data.reasons[].descriptionstringHuman-readable description of the reason.
data.reasons[].codestringShort code for the reason.
data.refundAmtnumberRefund amount after penalty deduction.
data.currencystringCurrency of the refund amount.

Example Response

JSON
{
  "data": {
    "reasons": [
      {
        "reason": "CHANGEOFPLANS",
        "description": "Change of plans",
        "code": "COP"
      },
      {
        "reason": "FOUNDBETTERPRICE",
        "description": "Found a better price",
        "code": "FBP"
      },
      {
        "reason": "WEATHER_CONCERNS",
        "description": "Weather concerns",
        "code": "WC"
      },
      {
        "reason": "HEALTH_ISSUES",
        "description": "Health issues",
        "code": "HI"
      }
    ],
    "refundAmt": 793.26,
    "currency": "QAR"
  }
}

Cancellation Reason Codes

ReasonCodeDescription
CHANGEOFPLANSCOPThe customer changed their plans.
FOUNDBETTERPRICEFBPThe customer found a better price elsewhere.
WEATHERCONCERNSWCCancellation due to weather concerns.
HEALTHISSUESHICancellation due to health issues.
Additional reason codes may be available depending on the activity and provider.

Step 2: Cancel the Booking

After reviewing the penalty and refund amount, submit the cancellation.

Endpoint

POST {{api_host}}/api/ext/activity/cancel

Headers

HeaderRequiredDescription
x-api-keyYesYour Xeni API key
Content-TypeYesapplication/json

Request Body

ParameterTypeRequiredDescription
bookingIdstringYesThe booking ID to cancel.
reasonstringYesThe cancellation reason identifier from the penalty response.

Example Request

JSON
{
  "bookingId": "MY-BOOKING-001",
  "reason": "CHANGEOFPLANS"
}

Usage Notes

  • Always check the cancellation penalty before submitting a cancellation. This lets you display the expected refund amount to the customer before they confirm.
  • The reason field in the cancellation request must be one of the reason identifiers returned by the cancel-penalty endpoint (e.g., "CHANGEOFPLANS", not the code "COP").
  • The refundAmt in the penalty response represents the amount that will be refunded after any penalty deductions. A refundAmt of 0 means the booking is non-refundable at this point.
  • The refund currency may differ from the original booking currency depending on the provider's configuration.
  • Cancellation policies vary by activity and provider. Some activities offer free cancellation up to 24 hours before the travel date, while others may have stricter policies.
  • Once a cancellation is submitted and confirmed, it cannot be reversed. A new booking would need to be created.

Was this article helpful?