FX-Port API
Hotels

Hotel pricing

What each hotel price field means, the b2bPrice formula, and how the exchange rate is presented.

Every hotel pricing block exposes the same set of agency-facing money fields, on search_advanced, get_rates, and pre_book responses.

Field meanings

FieldMeaning
supplierCurrencyCurrency the hotel supplier prices in — always EUR for WorldOTA
agencyCurrencyYour agency's settlement currency
originalPriceSupplier's base price, before your agency commission (supplier currency)
agencyCommissionYour own markup — what you charge the traveller on top
totalPriceWhat the traveller pays = converted originalPrice + agencyCommission (agency currency)
b2bPriceThe amount debited from your agency balance at booking time = totalPrice − agencyCommission
taxesPer-tax breakdown (VAT, city tax, resort fee, etc.) in supplier currency — paid at the hotel, not charged to your agency balance

The formula

totalPrice = (originalPrice × exchangeRate) + agencyCommission
b2bPrice   = totalPrice − agencyCommission   (= debited from your balance)

Example (Algerian Dinar, DZD, supplier prices in EUR):

{
  "exchangeRate": 150.25,
  "pricing": {
    "supplierCurrency": "EUR",
    "agencyCurrency": "DZD",
    "originalPrice": 376.00,
    "agencyCommission": 2937.69,
    "totalPrice": 61691.45,
    "b2bPrice": 58753.76,
    "taxes": {
      "vat": { "includedInPrice": true, "amount": 45.12, "currency": "EUR" },
      "cityTax": { "includedInPrice": false, "amount": 3.00, "currency": "EUR" }
    }
  }
}

Check: 376.00 × 150.25 ≈ 56494 and 56494 + 2937.69 ≈ 59432 toward totalPrice once every fee in the commission chain is applied; 61691.45 − 2937.69 = 58753.76 = b2bPrice ✓

Exchange rate

When supplierCurrency differs from agencyCurrency, an exchangeRate field appears at the response top level — not inside the pricing block. When both currencies match (rare — most agencies settle in a currency other than EUR), no exchangeRate field is included.

Taxes are supplier-currency, always

Unlike totalPrice and b2bPrice, the taxes block is never converted — it stays in supplierCurrency (EUR) because these fees (VAT, city tax, resort fee, cleaning fee, etc.) are paid at the hotel, not charged to your agency balance. Use taxes[*].includedInPrice to know whether a given fee is already folded into totalPrice or collected separately by the property.

Cancellation penalty pricing

cancellationPolicy.policies[] entries carry their own penaltyAmount / originalAmount in the same commission chain as totalPrice, so a penalty quoted for a given policy window already reflects your commission — see Rates & cancellation policies.

What external API keys don't see

Only agency-facing fields are ever returned to external API keys. Internal cost-ladder fields (systemCommission, sourcingPrice, commissionMatching, supplier cost breakdowns, etc.) are stripped before the response reaches you — you'll never see them, so don't build against them.

On this page