Hotel guides

Money, currency and commission

Prices are integers in minor units, you settle in your wallet currency, and bookings are paid from your agency's credit. Commissionable rates also tell you what you'll earn.

Amounts are integers in minor units

Every amount is a whole number in the currency's smallest unit, next to its currency code. 48230 with USD is $482.30. Integers avoid floating-point rounding; keep them as integers until you format them for display.

Formatting
// Minor units → display string. Let Intl pick the right decimals per currency.
function formatMoney(amountMinor, currency, locale = 'en-GB') {
  const digits = new Intl.NumberFormat(locale, { style: 'currency', currency })
    .resolvedOptions().maximumFractionDigits;
  return new Intl.NumberFormat(locale, { style: 'currency', currency })
    .format(amountMinor / 10 ** digits);
}

formatMoney(48230, 'USD'); // "US$482.30"

You'll meet amounts in two shapes:

  • Flat fields on search rows: sellAmountMinor with sellCurrency.
  • Money objects everywhere else, such as breakdown.sell: amountMinor and currency. Money objects carry a few more bookkeeping fields (fxRate, roundingRule and so on) that you can ignore.

What a price includes

FieldMeaning
breakdown.sellThe price for the rooms, dates and party you searched. On net rates this is what your agency pays. On commissionable rates you pay the published price instead (agencyCommission.grossMinor, below).
breakdown.taxesAndFeesAn estimate of the taxes and fees within sell, for display. It's already included, and it isn't the property's itemised tax bill.
breakdown.serviceFeeInformational, and can be 0. It isn't added to the amount you're charged.
excludedTaxesTaxes and fees the property collects directly, such as city or tourism tax. Never included in sell. Show them to the traveller as payable at the hotel.

Use the totals as returned. Don't rebuild a total from nightly prices or apply your own rounding. The amount you're charged is breakdown.sell on net rates and agencyCommission.grossMinor on commissionable rates, exactly.

Search in your wallet currency

Your agency's wallet has one currency, and bookings settle in it. The wallet doesn't convert between currencies, and a booking in a different currency returns 409 wallet_currency_mismatch.

  • Hotels: rates that can't be priced in the currency you searched in are left out of search results.
  • Flights, activities and transfers: results can come back in the inventory's own currency even when you asked for another. Check each row's sellCurrency and don't offer rows that differ from your wallet currency — they can't be paid from credit.

So send your wallet currency as currency on every search. To show travellers local prices, convert for display on your side and settle in the wallet currency.

Paying for bookings

Through the API, bookings are paid from your agency's credit: send paymentMethod: "credit". The amount is reserved when you book and settled against your wallet.

ResponseMeaningFix
402 credit_limit_exceededAvailable credit doesn't cover this booking.Top up your wallet or ask for a higher limit.
403 credit_disabledCredit payment is switched off for your agency.Contact support.
409 wallet_currency_mismatchBooking and wallet currencies differ.Search in your wallet currency.

Net and commissionable rates

Hotels can be sold on two models:

ModelYou payYou earn
NetThe net price, breakdown.sell.Whatever margin you add when you set your client's price.
CommissionableThe published price, agencyCommission.grossMinor.A commission by your agency's tier — Silver 8%, Gold 10%, Platinum 12% — which becomes payable after the guest checks out.

Your agency's settings decide the model. If your agency lets advisors choose per booking, send rateMode: "net" or "commissionable" on the search and price-check; otherwise the field is ignored and your agency's default applies.

On commissionable hotel rates, search rows (as summary.agencyCommission) and price-checks include agencyCommission. Commission is a percentage of the published (gross) price, and its amounts are plain integers in minor units:

agencyCommission
"agencyCommission": {
  "tier": "gold",
  "percent": 10,
  "grossMinor": 53590,
  "commissionMinor": 5359
}

On a commissionable rate, grossMinor is the amount you're charged when you book. When commission doesn't apply, agencyCommission is null and agencyCommissionUnavailableReason on the price-check says why. Flights, activities and transfers are always sold net.