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
| Field | Meaning |
|---|---|
supplierCurrency | Currency the hotel supplier prices in — always EUR for WorldOTA |
agencyCurrency | Your agency's settlement currency |
originalPrice | Supplier's base price, before your agency commission (supplier currency) |
agencyCommission | Your own markup — what you charge the traveller on top |
totalPrice | What the traveller pays = converted originalPrice + agencyCommission (agency currency) |
b2bPrice | The amount debited from your agency balance at booking time = totalPrice − agencyCommission |
taxes | Per-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.