Skip to content
ApiqDevelopers
API v1.64.0Open console
v1.64.0Published · API version 2026-09-30

Every trip. One API.

Search, price and book hotels, flights, cruises, packages and tours through one envelope, one error model and one order lifecycle.

Your first call
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"
      }
    }
  },
);
200 PARTIAL · 2 of 4 suppliersThe contract's own example response for this request
Unified API

One integration. Every category.

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.

Products
21across 7 categories
Journey operations
13the whole booking surface you learn
Calls to a booking
3in 19 of 21 products: search, reprice, book
  • Learn it once

    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.

  • One shape for everything

    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 change, your code doesn't

    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.

  • Typed clients and a sandbox

    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.

The journey, by category

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.

ProductShopBookAfter bookingCalls to book
SearchPollDetailSchedulesSeat mapRulesExtrasRepriceHoldBookCancel quoteCancelAmend
Transport5 products · books in 3 calls
FlightsFLTInstantSupportedSupportedSupportedSupportedSupportedSupportedSupportedSupportedSupportedSupportedSupportedSupportedSupported3
CarsCARInstantSupportedNot offeredSupportedNot offeredNot offeredSupportedSupportedSupportedSupportedSupportedSupportedSupportedSupported3
TransfersTXIInstantSupportedNot offeredSupportedNot offeredNot offeredSupportedSupportedSupportedNot offeredSupportedSupportedSupportedSupported3
TransfersXFRInstantSupportedNot offeredSupportedNot offeredNot offeredSupportedSupportedSupportedNot offeredSupportedSupportedSupportedSupported3
BusBUSInstantSupportedSupportedSupportedSupportedSupportedSupportedSupportedSupportedSupportedSupportedSupportedSupportedSupported3
Trip extras6 products · books in 3 calls
ParkingPARKInstantSupportedSupportedSupportedNot offeredNot offeredSupportedNot offeredSupportedNot offeredSupportedSupportedSupportedSupported3
InsuranceINSInstantSupportedNot offeredSupportedNot offeredNot offeredSupportedNot offeredSupportedNot offeredSupportedSupportedSupportedSupported3
eSIMESIMInstantSupportedSupportedSupportedNot offeredNot offeredSupportedNot offeredSupportedNot offeredSupportedSupportedSupportedNot offered3
Gift cardsGIFTInstantSupportedNot offeredSupportedNot offeredNot offeredSupportedNot offeredSupportedNot offeredSupportedNot offeredNot offeredNot offered3
LoungesLOUNGEInstantSupportedNot offeredSupportedNot offeredNot offeredNot offeredNot offeredSupportedNot offeredSupportedSupportedSupportedNot offered3
Airport servicesAPTSVCInstantSupportedNot offeredSupportedNot offeredNot offeredNot offeredNot offeredSupportedNot offeredSupportedSupportedSupportedNot offered3
Stays1 product · books in 3 calls
HotelsHTLInstantSupportedSupportedSupportedNot offeredNot offeredSupportedSupportedSupportedSupportedSupportedSupportedSupportedSupported3
Cruises1 product · books in 4 calls
CruisesCRUHold, then confirmSupportedSupportedSupportedSupportedSupportedSupportedSupportedSupportedSupportedSupportedSupportedSupportedSupported4
Things to do5 products · books in 3 calls
ExperiencesEXPInstantSupportedSupportedSupportedSupportedNot offeredSupportedSupportedSupportedSupportedSupportedSupportedSupportedSupported3
AttractionsATTInstantSupportedNot offeredSupportedSupportedSupportedSupportedSupportedSupportedSupportedSupportedSupportedSupportedSupported3
ToursTOUROn requestSupportedSupportedSupportedSupportedNot offeredSupportedSupportedSupportedSupportedSupportedSupportedSupportedSupported3
DiningFNBInstantSupportedNot offeredSupportedNot offeredNot offeredSupportedNot offeredSupportedSupportedSupportedSupportedSupportedSupported3
AicontAICONTInstantSupportedSupportedNot offeredNot offeredNot offeredNot offeredNot offeredSupportedNot offeredSupportedNot offeredNot offeredNot offered3
Packages and carts2 products · books in 3 calls
PackagesPKGInstantSupportedSupportedSupportedSupportedNot offeredSupportedSupportedSupportedSupportedSupportedSupportedSupportedSupported3
CartCARTInstantNot offeredNot offeredNot offeredNot offeredNot offeredSupportedSupportedSupportedNot offeredSupportedSupportedSupportedSupported—
Ancillaries1 product · books in 3 calls
CheckinCHKInstantSupportedNot offeredNot offeredNot offeredNot offeredSupportedNot offeredSupportedNot offeredSupportedSupportedSupportedSupported3

After booking, the same for every product

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

Only the intent changes

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.

  1. context.domain picks the product — FLT, HTL, EXP and so on.
  2. message.intent carries what that product needs: slices for a flight, a stay for a hotel, dates and a party for an activity.
  3. Send the canonical code. The other spellings listed are accepted for compatibility; anything else is 400 UNKNOWN_DOMAIN.
FlightSearchIntentFlights

context.domain

  • FLTFlightsalso FLIGHT, FLIGHTS
All 12 fields of FlightSearchIntent
Search request
{
  "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 · Transfers

context.domain

  • CARCarsalso CARS
  • TXITransfersalso TAXI
  • XFRTransfersalso TRANSFER, TRANSFERS
All 11 fields of GroundSearchIntent
Search request
{
  "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
Search request
{
  "context": {
    "domain": "BUS",
    "currency": "USD"
  },
  "message": {
    "intent": {
      "origin": {
        "text": "Montreal"
      },
      "destination": {
        "text": "Ottawa"
      },
      "departureDate": "2026-12-10",
      "party": {
        "adults": 1,
        "childAges": [
          10
        ],
        "seniorAges": [
          70
        ]
      }
    }
  }
}
Every context.domain and all 17 search intents

Endpoint families

shopSearch every product, poll for results, and read offer detail, schedules, seat maps, fare rules and ancillaries.8 endpointspriceConfirm an offer's current price and hold it for a while before booking.4 endpointsordersBook an offer, then read, change and cancel the order.18 endpointspaymentsPay for an order with a card tokenized by the payment provider, and confirm the payment.17 endpointsreferenceReference data and static content: places, airports and other lookups, and what each product supports today.5 endpointsidentitySign in, refresh and end sessions, read the signed-in caller, and create, rotate and revoke API keys; these routes take and answer plain JSON, not the travel envelope.72 endpointsdiscoveryThe public discovery documents an agent reads before it holds any credential: the signed onboarding manifest and the key set that verifies it.2 endpointsdevicesRegister and remove the push-notification devices of a signed-in person's mobile apps; a human session only, never an API key.3 endpointsconfigYour commercial configuration: the markup rules applied to every price your customers see, versioned and simulated before you publish them.3 endpointsenquiriesSend a lead to a supplier that takes enquiries instead of bookings; nothing is priced, held or paid.3 endpointswalletsYour prepaid wallet, one per settlement currency: its balance, its movements and top-ups.5 endpointseventsSubscribe to webhooks and replay the events your account has received.7 endpointsagentsProposals an AI agent submits for a signed-in person to approve or reject; an agent proposes, a person commits.4 endpointsenrichmentRead-only travel data such as flight emissions and status, ratings, weather, holidays and entry requirements; it never blocks a booking.11 endpoints

The booking journey

The same verbs for every product. Each step opens its reference.

  1. 01SearchPOST/v1/search
  2. 02DetailPOST/v1/detail
  3. 03RepricePOST/v1/reprice
  4. 04 · optionalHoldPOST/v1/hold
  5. 05Create orderPOST/v1/orders
  6. 06Cancel orderPOST/v1/orders/{orderRef}/cancel

Errors are code · retryable

Every failure is one error body. Branch on code and honour retryable — never on the HTTP status alone.

  • code
  • message
  • traceId
  • retryable
  • nextAction
  • docs
  • details
All 28 error codes

Authentication

Every request carries one of these credentials. The tenant comes from the credential, never from the body.

  • X-Api-Key
    Self-serve API keys from the console (mo_test_ sandbox, mo_live_ production), sent as X-Api-Key.Show moreSelf-serve API keys from the console (mo_test_ sandbox, mo_live_ production), sent as X-Api-Key. A key holds a set of scopes (the permission strings listed under oauthClientCredentials) and calls only the operations those scopes allow.
  • oauth2
    Machine-to-machine tokens: an API key exchanged at POST /v1/oauth/token (relative to each server) for a Bearer access token of at most 15 minutes.Show moreMachine-to-machine tokens: an API key exchanged at POST /v1/oauth/token (relative to each server) for a Bearer access token of at most 15 minutes. client_id is the key's prefix, client_secret the whole key. The scopes are the permission strings an API key can hold, and a token only ever narrows its key's.
  • http basic
    Token endpoint only (POST /v1/oauth/token): client_id = the API key's prefix, client_secret = the whole API key, each form-urlencoded, joined by a colon, base64 (RFC 6749 section 2.3.1).Show moreToken endpoint only (POST /v1/oauth/token): client_id = the API key's prefix, client_secret = the whole API key, each form-urlencoded, joined by a colon, base64 (RFC 6749 section 2.3.1). the AI plane's exchange client authenticates the token-exchange grant the same way, with its own configured client id and secret (never an API key).
  • http bearer
    An operation marked `x-aikonic-credential: human-session` accepts ONLY a human session token from POST /v1/auth/login; a service token or an API key is 403 PERMISSION_DENIED details.reason…Show moreAn operation marked `x-aikonic-credential: human-session` accepts ONLY a human session token from POST /v1/auth/login; a service token or an API key is 403 PERMISSION_DENIED details.reason SESSION_REQUIRED whatever its scopes. OpenAPI cannot tell the two bearer kinds apart, so the extension is the machine-readable contract; it is an extension rather than a second security scheme because a second bearer scheme makes the Kotlin generator emit a conflicting setBearerToken overload. Tenant derived from the token, never the body. A service token is accepted exactly as its API key would be, and is refused at once when that key is revoked. a third bearer kind, the downstream token the AI plane obtains by token exchange for an MCP grant a human approved. It is never a human session: every human-session operation answers it 403 PERMISSION_DENIED details.reason SESSION_REQUIRED (details.credential mcp-grant), and the platform serves it only the read operations of the grant's toolset that the human ticked, under the human's live permissions. The MCP client's own access token (audience the MCP resource) is refused by every platform route.