API reference

Quotes

Every bookable rate is a quote. Price-check it to confirm the live price and terms, and read its details for everything you should show before checkout.

Price-check a quote

POST/api/v1/quotes/:quoteId/price-check

:quoteId is a result row's rateQuoteId. Confirms availability, price and cancellation terms with the inventory source. Returns 200 even when the price or terms changed; book within 10 minutes. The body is optional — send {}.

Body

FieldDescription
occupancyarrayReprice for a different party (activities). Entries: adults, childrenAges, optional children and infants counts.
rateMode"net" | "commissionable"Rate model, when your agency lets advisors choose.
supplierRateRefstringActivities: the option to price and book — a bookableOptions[].supplierRateRef token from activity options for this same quote. Omit to re-check the rate as searched.

Response

FieldDescription
quoteIdstringThe quote you checked — book with this ID.
priceChangedbooleanThe price differs from the search.
policyChangedbooleanThe cancellation terms differ from the search.
changesobjectPresent only when something changed. price (only if the price changed): from / to money objects — the published price on commissionable rates. cancellation (only if the terms changed): from / to policies; from can be null, and supplierFlaggedOnly: true marks a change the inventory source reported although the terms read the same.
breakdownobjectMoney objects: sell (the price — what you pay on net rates), taxesAndFees (an estimate included in sell, for display), paymentFeeEstimate and serviceFee (both informational; serviceFee can be 0 and isn't charged). On commissionable rates you're charged agencyCommission.grossMinor.
quoteobjectThe updated quote: _id, productType, canonicalProductId, status, expiresAt (now 20 minutes after this check), cancellationPolicy, details (product details such as rateComments, excludedTaxes, bookingQuestions, pickup information) and more.
agentMarkupobjectMarkup limits used by the portal: cardFeePercent and maxPercent.
agencyCommissionobject | nullCommissionable hotel rates: tier, percent, grossMinor (the published price — the amount you're charged), commissionMinor. Plain integers in minor units.
agencyCommissionUnavailableReasonstring | nullWhy commission doesn't apply, when it doesn't: no_organization, no_tier, tier_not_configured, net_only_policy, net_rate_selected or non_hotel_product.
ErrorWhen
404 not_foundNo such quote.
403 forbiddenThe quote belongs to another agency's search.
409 rate_unavailableSold out or withdrawn.
410 quote_expiredPast its expiresAt.
409 quote_not_repriceableAlready claimed by a booking.
409 price_check_conflictA concurrent price-check won. Retry once.
409 pax_mix_unavailableActivity can't take the requested party.
400 rate_option_not_offeredThe supplierRateRef token isn't one of this quote's options.
400 validation_errorThe supplierRateRef token was altered or isn't valid.
409 price_check_currency_unavailablePriced in a currency we can't settle.
409 quote_invalidThe quote has no usable price. Fetch fresh rates.
409 unknown_supplierThe quote's inventory source can't be reached for a price-check right now. Choose another rate.
403 agreement_unsignedCan be returned while your agency hasn't signed the distribution agreement.
503 supplier_unavailableInventory source didn't answer.

List an activity's options

POST/api/v1/quotes/:quoteId/activity-recheck

For activities that come back as one “from” row, lists every bookable option — time slot, language, ticket type — after a live check. Body optional: send occupancy to list options for a different party. Returns data.quoteId and data.bookableOptions[]; some activities also return pickupLocations and allowCustomTravellerPickup. Price-check the chosen option by sending its token as supplierRateRef. See Choose an option.

FieldDescription
supplierRateRefstringOpaque token for this option. Send it back unchanged as supplierRateRef on the price-check.
referencestringThe option's reference.
titlestringOption name, when the operator provides one.
timeSlotstringStart time, when the option has one.
languagestringGuide or audio language, when relevant.
durationstringDuration as display text, when provided.
priceMoneyWhat you pay for this option, priced the same way as the price-check. Absent when the option can't be priced yet.
cancellationPolicyobjectThe option's cancellation terms, priced at what you pay.
panRequiredbooleanWhen true, send panNumber when you book.
bookingQuestionsarrayQuestions to answer in bookingAnswers when you book.
ErrorWhen
400 activity_recheck_unsupportedThis activity has no separate options — price-check the row directly.
404 not_found / 403 forbiddenNo such quote, or it belongs to another agency's search.
410 quote_expiredPast its expiresAt.

Get a quote's details

GET/api/v1/quotes/:quoteId/details

The full details for any quote, without contacting the inventory source: descriptions, fare rules, pickup instructions, remarks. Use it to fill your product and checkout pages.

Response · 200 (abridged)
{
  "data": {
    "quoteId": "66f1c0b8e4b0c1d2e3f4a7a2",
    "productType": "hotel",
    "supplier": "src-3fa1c2",
    "status": "price_checked",
    "expiresAt": "2026-09-10T12:26:00Z",
    "breakdown": { "sell": { "amountMinor": 51120, "currency": "USD" } },
    "cancellationPolicy": { "refundable": true, "freeCancelBefore": "2026-11-08T12:00:00Z", "deadlines": [] },
    "details": { "rateComments": "Check-in from 15:00. Photo ID required." }
  },
  "meta": {},
  "error": null
}

Quote status

statusMeaning
activeFrom a search; not yet price-checked.
price_checkedChecked; bookable within 10 minutes of the check.
consumedUsed by a booking. If that booking fails, the quote returns to price_checked.

A quote past its expiresAt keeps its last status; price-checking it returns 410 quote_expired. Compare expiresAt with the current time rather than waiting for the status to change.