Getting Started with the Xeni Resorts API
The Xeni Resorts API v2 gives you programmatic access to a global inventory of resort properties. With a single integration, you can search destinations, browse available resorts, check room availability and pricing, and complete bookings entirely via API.
What You Can Do
The Resorts API v2 supports the full booking lifecycle:
- Search destinations — Use autocomplete to find cities, regions, states, or countries and retrieve the region codes needed for property searches.
- Search resorts — Query available resort properties by region, dates, pricing, ratings, amenities, and more.
- Get property details — Retrieve full property information including images, policies, check-in/check-out times, and ratings.
- Check facilities — Look up accessibility features, nearby airports, and on-site or off-site amenities for any property.
- Check room availability — View available rooms with real-time pricing for specific dates.
- Confirm pricing — Retrieve final pricing and a session ID before booking.
- Hold and confirm bookings — Reserve a property with a hold, then confirm or release it.
- Retrieve booking details — Look up full booking information including fare breakdowns, traveler details, and property policies.
Environments
| Environment | Base URL | Purpose |
|---|---|---|
| UAT (Sandbox) | https://uat.travelapi.ai | Development and testing. No real bookings are created. |
| Production | https://api.travelapi.ai | Live environment. Real bookings with real charges. |
Build and test your integration against the UAT environment before switching to production. The API surface is identical across both environments.
API Versioning
All resort endpoints use the v2 path prefix under /resorts/api/v2. Here is a summary of the available endpoints:
GET /resorts/api/v2/search
POST /resorts/api/v2/properties/{xeniregioncode}
GET /resorts/api/v2/property/{property_id}
GET /resorts/api/v2/properties/availability
GET /resorts/api/v2/properties/price
POST /resorts/api/v2/itineraries
PUT /resorts/api/v2/itineraries
GET /resorts/api/v2/booking/{reference_number}
Prerequisites
Before you begin, you will need:
- API Key — Your unique API key, provided during onboarding.
- API Secret — Your secret key, used alongside the API key to generate authentication signatures.
If you have not received your credentials yet, contact your Xeni account representative.
Required Headers
All requests to the Resorts API must include the following headers:
| Header | Value | Required |
|---|---|---|
Content-Type | application/json | Yes |
x-api-key | Your API key | Yes |
x-correlation-id | A unique identifier to correlate requests within a session | Yes |
The
x-api-key header authenticates your requests. The x-correlation-id header ties related API calls together within a single search-to-booking session and is essential for tracking and debugging.
Quick Start: Your First Resort Search
Here is the minimum flow to search for resorts. Each step is covered in detail in subsequent articles.
Step 1 — Search for a Destination
Use the autocomplete endpoint to find a destination and retrieve its region code.
GET {{api_host}}/resorts/api/v2/search?key=hawaii
// Response
{
"status": 200,
"data": [
{
"name": "Hawaii",
"full_name": "Hawaii, United States",
"city": "",
"state": "Hawaii",
"country": "United States",
"region": "aGF3YWlp",
"type": "state",
"popularity": 95,
"location": {
"lat": 19.8968,
"lon": -155.5828
}
}
]
}
Save the region value (a Base64-encoded code) — you will need it for the property search.
Step 2 — Search for Resorts
Use the region code from the autocomplete response to search for available resort properties.
POST {{api_host}}/resorts/api/v2/properties/aGF3YWlp?currency=USD
{
"stay_period": {
"start": "2026-04-01",
"end": "2026-04-07"
},
"lat": 19.8968,
"lon": -155.5828
}
Step 3 — Check Availability and Pricing
Once you have identified a property, check room availability and then confirm the price before booking.
Step 4 — Hold and Confirm
Create a hold on the booking, then confirm it to finalize the reservation.
Response Format
All API responses return JSON. Successful responses include a status field and wrap their payload in a data property:
{
"status": 200,
"data": { ... }
}
Error responses follow a consistent structure:
{
"message": "Description of the error",
"status": 400
}