Search, price and book hotels, flights, cruises, packages and tours through one envelope, one error model and one order lifecycle.
import { createConnectClient } from "@mondee-one/connect-client";
const connect = createConnectClient({
baseUrl: "https://apiq-sandbox.tripproagencysites.com",
token: process.env.AIKONIC_TOKEN,
});
const res = await connect.request(
"/v1/search",
"post",
{
"context": {
"domain": "FLT",
"currency": "USD"
},
"message": {
"intent": {
"slices": [
{
"origin": "GRU",
"destination": "MIA",
"date": "2026-11-10"
}
],
"travelers": [
{
"type": "ADT"
},
{
"type": "CHD",
"age": 9
}
],
"cabin": "ECONOMY"
}
}
},
);Flights, stays, cruises, things to do, transport and trip extras all run through the same contract. Learn one booking journey and reuse it everywhere — moving to a new category means a new search intent, not a new integration.
Search, reprice and book are the same three calls for a flight, a hotel or a tour. Your second category reuses the code you wrote for the first.
Every request is the same context + message envelope, every price is integer minor units with a currency, and every failure is one error body you branch on by code and retryable.
Suppliers are added behind the contract. New inventory arrives in the same search response — no new auth scheme, payload format or error codes to learn.
Generated SDKs from the same contract, and a sandbox that answers with the contract's own examples, so you can build the whole journey before you touch production.
Which steps each product supports and how many calls it takes to book. The columns are the same operations for every row — that is the unified API.
| Product | Shop | Book | After booking | Calls to book | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Search | Poll | Detail | Schedules | Seat map | Rules | Extras | Reprice | Hold | Book | Cancel quote | Cancel | Amend | ||
| Transport | ||||||||||||||
| FlightsFLTInstant | Supported | Supported | Supported | Supported | Supported | Supported | Supported | Supported | Supported | Supported | Supported | Supported | Supported | 3 |
| CarsCARInstant | Supported | Not offered | Supported | Not offered | Not offered | Supported | Supported | Supported | Supported | Supported | Supported | Supported | Supported | 3 |
| TransfersTXIInstant | Supported | Not offered | Supported | Not offered | Not offered | Supported | Supported | Supported | Not offered | Supported | Supported | Supported | Supported | 3 |
| TransfersXFRInstant | Supported | Not offered | Supported | Not offered | Not offered | Supported | Supported | Supported | Not offered | Supported | Supported | Supported | Supported | 3 |
| BusBUSInstant | Supported | Supported | Supported | Supported | Supported | Supported | Supported | Supported | Supported | Supported | Supported | Supported | Supported | 3 |
| Trip extras | ||||||||||||||
| ParkingPARKInstant | Supported | Supported | Supported | Not offered | Not offered | Supported | Not offered | Supported | Not offered | Supported | Supported | Supported | Supported | 3 |
| InsuranceINSInstant | Supported | Not offered | Supported | Not offered | Not offered | Supported | Not offered | Supported | Not offered | Supported | Supported | Supported | Supported | 3 |
| eSIMESIMInstant | Supported | Supported | Supported | Not offered | Not offered | Supported | Not offered | Supported | Not offered | Supported | Supported | Supported | Not offered | 3 |
| Gift cardsGIFTInstant | Supported | Not offered | Supported | Not offered | Not offered | Supported | Not offered | Supported | Not offered | Supported | Not offered | Not offered | Not offered | 3 |
| LoungesLOUNGEInstant | Supported | Not offered | Supported | Not offered | Not offered | Not offered | Not offered | Supported | Not offered | Supported | Supported | Supported | Not offered | 3 |
| Airport servicesAPTSVCInstant | Supported | Not offered | Supported | Not offered | Not offered | Not offered | Not offered | Supported | Not offered | Supported | Supported | Supported | Not offered | 3 |
| Stays | ||||||||||||||
| HotelsHTLInstant | Supported | Supported | Supported | Not offered | Not offered | Supported | Supported | Supported | Supported | Supported | Supported | Supported | Supported | 3 |
| Cruises | ||||||||||||||
| CruisesCRUHold, then confirm | Supported | Supported | Supported | Supported | Supported | Supported | Supported | Supported | Supported | Supported | Supported | Supported | Supported | 4 |
| Things to do | ||||||||||||||
| ExperiencesEXPInstant | Supported | Supported | Supported | Supported | Not offered | Supported | Supported | Supported | Supported | Supported | Supported | Supported | Supported | 3 |
| AttractionsATTInstant | Supported | Not offered | Supported | Supported | Supported | Supported | Supported | Supported | Supported | Supported | Supported | Supported | Supported | 3 |
| ToursTOUROn request | Supported | Supported | Supported | Supported | Not offered | Supported | Supported | Supported | Supported | Supported | Supported | Supported | Supported | 3 |
| DiningFNBInstant | Supported | Not offered | Supported | Not offered | Not offered | Supported | Not offered | Supported | Supported | Supported | Supported | Supported | Supported | 3 |
| AicontAICONTInstant | Supported | Supported | Not offered | Not offered | Not offered | Not offered | Not offered | Supported | Not offered | Supported | Not offered | Not offered | Not offered | 3 |
| Packages and carts | ||||||||||||||
| PackagesPKGInstant | Supported | Supported | Supported | Supported | Not offered | Supported | Supported | Supported | Supported | Supported | Supported | Supported | Supported | 3 |
| CartCARTInstant | Not offered | Not offered | Not offered | Not offered | Not offered | Supported | Supported | Supported | Not offered | Supported | Supported | Supported | Supported | — |
| Ancillaries | ||||||||||||||
| CheckinCHKInstant | Supported | Not offered | Not offered | Not offered | Not offered | Supported | Not offered | Supported | Not offered | Supported | Supported | Supported | Supported | 3 |
Not columns: every bookable product finds, reads, tracks and pays for its bookings through the same operations.
Calls to book counts the happy path: search, reprice where offered, a hold where the product books hold-then-confirm, and the order. A search that is still warming adds polls. This is the platform catalogue; what your tenant can call right now is GET /v1/capabilities
Every search is the same request. Pick a category to see the one part that differs — its payload, exactly as the contract's own example sends it.
FlightSearchIntentFlights{
"context": {
"domain": "FLT",
"currency": "USD"
},
"message": {
"intent": {
"slices": [
{
"origin": "GRU",
"destination": "MIA",
"date": "2026-11-10"
}
],
"travelers": [
{
"type": "ADT"
},
{
"type": "CHD",
"age": 9
}
],
"cabin": "ECONOMY"
}
}
}GroundSearchIntentCars · Transfers · TransfersCARCarsalso CARSTXITransfersalso TAXIXFRTransfersalso TRANSFER, TRANSFERS{
"context": {
"domain": "XFR",
"currency": "USD"
},
"message": {
"intent": {
"waypoints": [
{
"type": "PICKUP",
"location": {
"iata": "GRU"
},
"flightLink": {
"carrier": "LA",
"flightNumber": "8084",
"date": "2026-11-10"
}
},
{
"type": "DROPOFF",
"location": {
"placeId": "ChIJ0WGkg4FEzpQRrlsz_whLqZs"
}
}
],
"party": {
"adults": 2,
"childAges": [
4
]
},
"luggage": {
"checked": 3
},
"serviceType": "TRANSFER",
"shared": "PRIVATE",
"childSeats": [
{
"childAge": 4
}
]
}
}
}BusSearchIntentBus{
"context": {
"domain": "BUS",
"currency": "USD"
},
"message": {
"intent": {
"origin": {
"text": "Montreal"
},
"destination": {
"text": "Ottawa"
},
"departureDate": "2026-12-10",
"party": {
"adults": 1,
"childAges": [
10
],
"seniorAges": [
70
]
}
}
}
}ParkingSearchIntentParking{
"context": {
"domain": "PARK",
"currency": "USD"
},
"message": {
"intent": {
"location": {
"iata": "LAX"
},
"entryAt": "2027-06-01T09:00",
"exitAt": "2027-06-03T18:00",
"filters": {
"covered": true
}
}
}
}InsuranceSearchIntentInsurance{
"context": {
"domain": "INS",
"currency": "INR"
},
"message": {
"intent": {
"trip": {
"start": "2026-11-10",
"end": "2026-11-20",
"origin": "IN",
"destinations": [
"US"
],
"tripType": "SINGLE"
},
"insured": [
{
"travelerIndex": 0,
"ageAtDeparture": 34
},
{
"travelerIndex": 1,
"ageAtDeparture": 9
}
],
"categories": [
"OVERSEAS"
]
}
}
}EsimSearchIntenteSIM{
"context": {
"domain": "ESIM",
"currency": "USD"
},
"message": {
"intent": {
"esim": {
"country": "JP",
"minDataGb": 3
},
"dates": {
"from": "2026-11-10",
"to": "2026-11-16"
},
"party": {
"adults": 1
}
}
}
}GiftSearchIntentGift cards{
"context": {
"domain": "GIFT",
"currency": "USD"
},
"message": {
"intent": {
"country": "US",
"category": "beauty",
"faceValue": {
"amount": 1000,
"currency": "USD"
}
}
}
}LoungeSearchIntentLounges{
"context": {
"domain": "LOUNGE",
"currency": "INR"
},
"message": {
"intent": {
"station": {
"airport": "DEL",
"terminal": "3",
"terminalType": "INTERNATIONAL",
"direction": "DEPARTURE"
},
"visitAt": "2026-11-10T20:00:00+05:30",
"party": {
"adults": 2
},
"entitlementModels": [
"VOUCHER"
]
}
}
}AirportServiceSearchIntentAirport services{
"context": {
"domain": "APTSVC",
"currency": "INR"
},
"message": {
"intent": {
"flightLink": {
"carrier": "AI",
"flightNumber": "131",
"date": "2026-11-10",
"origin": "BOM",
"destination": "LHR",
"departureTerminal": "2"
},
"direction": "DEPARTURE",
"categories": [
"MEET_ASSIST",
"PORTER"
],
"party": {
"adults": 2,
"childAges": [
6
]
}
}
}
}StaySearchIntentHotelsHTLHotelsalso HOTEL, HOTELSThe contract's example uses VR. Send HTL instead; the intent and its fields are the same.
All 11 fields of StaySearchIntent{
"context": {
"domain": "VR",
"currency": "USD"
},
"message": {
"intent": {
"destination": {
"placeId": "mondee:place:miami"
},
"stay": {
"checkIn": "2026-11-10",
"checkOut": "2026-11-14"
},
"rooms": [
{
"adults": 2,
"childAges": [
4
],
"pets": 1
}
],
"unitType": "WHOLE_PROPERTY",
"petsAllowed": true
}
}
}CruiseSearchIntentCruises{
"context": {
"domain": "CRU",
"currency": "USD"
},
"message": {
"intent": {
"cruiseType": "OCEAN",
"departureWindow": {
"from": "2027-01-01",
"to": "2027-03-31"
},
"nights": {
"min": 5,
"max": 9
},
"regions": [
"mondee:cruise-region:8f3k2q"
],
"party": {
"adults": 2,
"childAges": []
}
}
}
}ExperienceSearchIntentExperiences · Attractions · ToursEXPExperiencesalso ACT, EXPERIENCE, EXPERIENCESATTAttractionsalso TICKETSTOURToursalso TOURSThe contract's example uses EVT. Send EXP, ATT, TOUR instead; the intent and its fields are the same.
All 10 fields of ExperienceSearchIntent{
"context": {
"domain": "EXP",
"currency": "EUR"
},
"message": {
"intent": {
"destination": {
"placeId": "mondee:place:rome"
},
"dates": {
"from": "2026-11-12",
"to": "2026-11-12"
},
"party": {
"adults": 2,
"childAges": [
9
]
},
"pickup": {
"mode": "PICKUP",
"point": {
"placeId": "mondee:place:rome-termini"
}
},
"guideLanguage": "en"
}
}
}DiningSearchIntentDiningFNBDiningalso DINING, REST, RESTAURANT, RESTAURANTS{
"context": {
"domain": "FNB",
"currency": "USD"
},
"message": {
"intent": {
"destination": {
"text": "San Francisco",
"countryCode": "US"
},
"date": "2026-11-12",
"time": "19:00",
"windowMinutes": 90,
"party": {
"adults": 2
},
"seating": [
"default"
]
}
}
}AicontSearchIntentAicont{
"context": {
"domain": "AICONT",
"currency": "INR"
},
"message": {
"intent": {
"operation": "list_services",
"arguments": {
"city": "Jaipur",
"category": "attractions",
"limit": 20
}
}
}
}PackageSearchIntentPackages{
"context": {
"domain": "PKG",
"currency": "BRL"
},
"message": {
"intent": {
"packageType": "HOTEL_FLIGHT",
"origin": {
"placeId": "mondee:place:sao-paulo-br"
},
"destination": {
"placeId": "mondee:place:fortaleza-br"
},
"departureDate": "2027-02-10",
"returnDate": "2027-02-17",
"party": {
"adults": 2,
"childAges": [
7
]
}
}
}
}No typed intent in the contract yet for Cart (CART).
CheckinSearchIntentCheckin{
"context": {
"domain": "CHK",
"currency": "USD"
},
"message": {
"intent": {
"flightLink": {
"carrier": "BA",
"flightNumber": "117",
"date": "2026-11-10",
"origin": "LHR",
"destination": "JFK"
},
"departureTime": "08:25",
"party": {
"adults": 2
}
}
}
}The same verbs for every product. Each step opens its reference.
Every failure is one error body. Branch on code and honour retryable — never on the HTTP status alone.
Every request carries one of these credentials. The tenant comes from the credential, never from the body.