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 Book an Activity

Last updated: 2026-03-03

How to Book an Activity

After confirming availability and selecting a product option, use the booking endpoint to create a reservation. This endpoint requires traveler information, booking question answers, and payment details.

Endpoint

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

Headers

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

Request Body

ParameterTypeRequiredDescription
productCodestringYesThe activity product code.
bookingIdstringYesYour own unique tracking ID for this booking.
travelDatestringYesTravel date in YYYY-MM-DD format.
startTimestringConditionalRequired if the activity has specific time slots. Format: HH:MM.
productOptionCodestringYesThe product option code from the availability response (e.g., "TG1").
paxMixarrayYesTraveler groups by age band (same format as availability request).
bookerInfoobjectYesName of the person making the booking.
communicationobjectYesContact information for the booking.
bookedCurrencystringYesCurrency code for the booking (e.g., "USD").
amountnumberYesTotal booking amount in the specified currency.
bookingQuestionAnswersarrayNoAnswers to required booking questions.
languageGuideobjectNoLanguage and guide preference for the activity.

Booker Info Object

ParameterTypeRequiredDescription
firstNamestringYesBooker's first name.
lastNamestringYesBooker's last name.

Communication Object

ParameterTypeRequiredDescription
emailstringYesContact email address.
phonestringYesContact phone number.

Booking Question Answers

The bookingQuestionAnswers array allows you to provide answers to questions required by the activity provider. Each answer object has the following fields:

ParameterTypeRequiredDescription
questionstringYesThe question identifier.
answerstringYesThe answer value.
unitstringNoThe unit type for the answer (e.g., "LOCATION_REFERENCE" for pickup points).
travelerNumintegerNoThe traveler number this answer applies to (1-indexed).

Common Question Types


QuestionDescription
PICKUPPOINTPickup location for hotel pickup activities. Use unit: "LOCATIONREFERENCE" with the location reference as the answer.
AGEBANDAge band of the traveler (e.g., "ADULT").
FULLNAMESFIRSTFirst name of a specific traveler.
FULLNAMESLASTLast name of a specific traveler.

Language Guide Object


ParameterTypeRequiredDescription
languagestringYesLanguage code (e.g., "en").
legacyGuidestringYesLegacy guide identifier (e.g., "en/SERVICE_GUIDE").
typestringYesGuide type (e.g., "GUIDE").

Example Request

JSON
{
  "productCode": "12345ABC",
  "bookingId": "MY-BOOKING-001",
  "travelDate": "2026-04-15",
  "startTime": "09:00",
  "productOptionCode": "TG1",
  "paxMix": [
    {
      "ageBand": "ADULT",
      "numberOfTravelers": 2
    }
  ],
  "bookerInfo": {
    "firstName": "Jane",
    "lastName": "Smith"
  },
  "communication": {
    "email": "jane.smith@example.com",
    "phone": "+1-555-123-4567"
  },
  "bookedCurrency": "USD",
  "amount": 450,
  "bookingQuestionAnswers": [
    {
      "question": "PICKUP_POINT",
      "answer": "LOC-12345",
      "unit": "LOCATION_REFERENCE"
    },
    {
      "question": "FULLNAMESFIRST",
      "answer": "Jane",
      "travelerNum": 1
    },
    {
      "question": "FULLNAMESLAST",
      "answer": "Smith",
      "travelerNum": 1
    },
    {
      "question": "FULLNAMESFIRST",
      "answer": "John",
      "travelerNum": 2
    },
    {
      "question": "FULLNAMESLAST",
      "answer": "Smith",
      "travelerNum": 2
    }
  ],
  "languageGuide": {
    "language": "en",
    "legacyGuide": "en/SERVICE_GUIDE",
    "type": "GUIDE"
  }
}

Usage Notes

  • The bookingId is your own unique identifier for tracking this booking in your system. It must be unique across all your bookings.
  • The startTime field is only required when the availability response includes multiple time slots. If the activity does not have specific start times, you can omit this field.
  • The amount must match the pricing returned by the availability endpoint. Mismatched amounts will cause the booking to fail.
  • The bookingQuestionAnswers vary by activity. Some activities require pickup points, traveler names, or age bands. The specific questions required are determined by the activity provider.
  • If the activity includes hotel pickup (isPickupIncluded: true from the availability response), you will typically need to provide a PICKUP_POINT answer with a location reference.

Next Steps

After creating a booking, you can retrieve its details at any time. See How to Retrieve Activity Booking Details.

Was this article helpful?