Quick-start: search, reprice, book
Search, reprice and book against the sandbox (https://apiq-sandbox.tripproagencysites.com). The search intent is StaySearchIntent; the platform validates it against the schema context.domain selects.
The search body is the contract's own example: VR — StaySearchIntent, whole property, pets, child ages. The contract's stay example is a vacation rental (VR). Hotels select the same StaySearchIntent, so this body is that example with the domain set to HTL and the whole-property fields (unitType, petsAllowed, rooms[].pets) removed.
Every sample reads a sandbox bearer token from AIKONIC_TOKEN, exchanged from a SANDBOX key (mo_test_…). The generated Kotlin and Swift clients default to the production base, so each sample sets the sandbox base explicitly.
# A sandbox bearer token: exchange a SANDBOX key (mo_test_…) at POST /v1/oauth/token.
export AIKONIC_TOKEN=$(curl -s -u "$AIKONIC_CLIENT_ID:$AIKONIC_SANDBOX_KEY" \
-d grant_type=client_credentials https://apiq-sandbox.tripproagencysites.com/v1/oauth/token | jq -r .access_token)POST /v1/search
POST /v1/search with the vertical's typed intent. A 202 SEARCH_WARMING is progress: poll with the searchRef until COMPLETE, and label a PARTIAL answer as partial.
curl -X POST https://apiq-sandbox.tripproagencysites.com/v1/search \
-H "Authorization: Bearer $AIKONIC_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"context": {
"domain": "HTL",
"currency": "USD"
},
"message": {
"intent": {
"destination": {
"placeId": "mondee:place:miami"
},
"stay": {
"checkIn": "2026-11-10",
"checkOut": "2026-11-14"
},
"rooms": [
{
"adults": 2,
"childAges": [
4
]
}
]
}
}
}'POST /v1/reprice
POST /v1/reprice fixes the price of one offer and mints a repriceRef. The OF- reference shown is an example: use the offerRef from your search.
curl -X POST https://apiq-sandbox.tripproagencysites.com/v1/reprice \
-H "Authorization: Bearer $AIKONIC_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"context": {
"domain": "HTL",
"currency": "USD"
},
"message": {
"intent": {
"offerRef": "OF-3d90aa17"
}
}
}'POST /v1/orders
POST /v1/orders books the repriceRef with a fresh Idempotency-Key. No price is sent. Answer whatever requiredInfo the reprice returned; the RP- and pay_int_ references shown are examples.
curl -X POST https://apiq-sandbox.tripproagencysites.com/v1/orders \
-H "Authorization: Bearer $AIKONIC_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"context": {
"domain": "HTL",
"clientReference": "acme-91827"
},
"message": {
"intent": {
"repriceRef": "RP-6b02c1",
"clientReference": "acme-91827",
"travelers": [
{
"firstName": "Ana",
"lastName": "Souza",
"email": "[email protected]",
"phoneNumber": "+5511998877665"
}
],
"requiredInfoAnswers": {},
"payment": {
"mode": "PSP_TOKEN",
"paymentRef": "pay_int_91aa"
}
}
}
}'