Extra charges calculation and conditions
Understand the extra charges such as city tax, cleaning fees, or VAT and when they apply,how charges are calculated based on charge modes and conditions.
Overview
This guide complements the Accommodation pricing guide, focusing on how extra charges are calculated using the charge_mode
field and when conditional charges apply.
This guide helps you:
- Identify when extra charges apply (
included
,excluded
,conditional
, ornon_conditional
). - Understand how the total amount is calculated using the
charge_mode
- Use condition IDs to handle dynamic guest-dependent charges.
- Properly display or disclose charges across your booking flow.
What are extra charges?
Extra charges are additional costs applied to the base
accommodation price.
These can include mandatory fees like VAT and city taxes, or optional and conditional charges like cleaning fees, pet fees, or usage-based charges (e.g., spa or internet usage).
These charges can appear differently depending on endpoint context:
Pre-booking stage
-
In accommodations/search and accommodations/availability endpoints:
- Charges that might be
Included
orExcluded
from thebook
price (display price). Conditional
charges, only charged if specific conditions apply.
Booking stage
-
When using orders/preview endpoint:
- The
non_conditional
charges include all the mandatory charges, added to thetotal
price.
All extra charges are grouped by charge type, that is identified by an ID.
Key concepts
Each additional charge is defined in the appropriate category under extra_charges
.
These are the fields used to describe each extra charge category, including its purpose, amount, and calculation method.
Field | Description | Best practice |
---|---|---|
charge | Numeric ID of the charge type (e.g., 22 = city tax) - Identifies the type of charge using a unique ID. | Use /accommodations/constants to resolve the charge name. Example: city tax is "charge": 22 |
condition | Only for conditional charges. A number that uniquely identifies the condition that applies to this conditional charge. | See the full list of conditions and equivalent conditional change, in the Condition ids reference. |
mode | Determines how the total_amount is calculated (example: per night or percentage) | See Charge calculation modes section for more details. |
total_amount | The total amount to be paid for the charge. | It is always defined for excluded and included charges, but it is null for incalculable charges. |
unit_amount | The price per unit for this charge. | Only applicable when mode is per_night , per_person_per_night , or per_person_per_stay . |
Example: Accommodations/availability response with extra charges
"price": {
"base": 6166.67,
"book": 7640,
"extra_charges": {
"conditional": [
{
"charge": 3,
"condition": 28,
"mode": "per_stay",
"percentage": null,
"total_amount": 200.00,
"unit_amount": 200.00
}
],
"excluded": [],
"included": [
{
"charge": 1,
"mode": "per_stay",
"percentage": null,
"total_amount": 40,
"unit_amount": null
},
{
"charge": 21,
"mode": "percentage",
"percentage": 20,
"total_amount": 1233.33,
"unit_amount": null
}
]
},
"total": 7640
},
Conditional charges
Conditional charges only apply if specific guest actions or property conditions are met.
When there is a conditional charge, the condition
field is displayed under the charge breakdown and identifies the type of condition.
Example:
{
"extra_charges": {
"conditional": [
{
"charge": 3,
"condition": 28,
"mode": "per_stay",
"percentage": null,
"total_amount": 25.00,
"unit_amount": 25.00
}
]
}
}
Conditional charges are always excluded from the base
, book
and total
prices, as (if applicable) they are usually paid by the traveller at the accommodation.
Using the Condition ID reference:
- 3 = "Cleaning fee"
- 28 = "A cleaning fee will be charged if you don’t clean before checkout"
The cleaning fee (total_amount
) in this example is 25, only paid at the accommodation when checking out if the traveller does not clean the room.
Common conditional charges
Pet fee - Applied if the guest brings a pet to the stay.
Smoking fee - Charged if the guest smokes in a non-smoking room.
Late checkout fee - Applied if the guest checks out later than the agreed time.
Cleaning fee – If the guest doesn’t clean before leaving.
Condition id reference
Each conditional charge is associated with a condition ID. Use this table to interpret them:
Condition id | Description | Applies to charge_types (ids) |
---|---|---|
5 | A fee is applicable if you do not bring your own items. | TOWELFEE (4), BEDLINEN (6), LINENPACKAGEFEE (100), KITCHENLINNENFEE (103) |
28 | A cleaning fee will be charged if you don't clean before checking out. | CLEANINGFEE (3) |
29 | A cleaning fee is applicable, per pet, if you bring your pet to the accommodation. | CLEANINGFEE (3) |
30 | A cleaning fee is applicable if you smoke in the accommodation. | CLEANINGFEE (3) |
35 | A fee is applicable if you use a credit card of any type. | CREDITCARDFEE (116) |
37 | A fee is applicable if you use a credit card of a specific type. | CREDITCARDFEE (116) |
39 | A fee is applicable if you use a credit card of a list of types. | CREDITCARDFEE (116) |
126 | An internet fee is applicable if you use it, per hour of use. | INTERNETFEE (118) |
136 | Parking fee - start time to end time | PARKINGFEE (119) |
142 | Parking fee - day of week | PARKINGFEE (119) |
210 | Mandatory Israel VAT for domestic users | VAT (21) |
211 | Optional Israel VAT for all users | VAT (21) |
215 | A fee is applicable if you use the indicated facility. | SPA (180), SAUNA (181), HOTTUB (182), GOLFCOURSE (199), SUNBED (200), POOL (204) |
504 | A city tax is applicable. Business travellers can be exempt from this charge under certain conditions. Please check the city's official website for details prior to arrival. | CITYTAX (22) |
542 | A city tax is applicable if you are an adult. | CITYTAX (22) |
543 | A city tax is applicable for a maximum of n consecutive nights. Further consecutive nights at the same accommodation are exempt. | CITYTAX (22) |
Charge calculation mode
The charge_mode
determines how the total of the charge (total_amount
) is derived.
Charge mode value | How total_amount is calculated? |
---|---|
incalculable | Always appears in extra_charges.excluded .
|
percentage | This field indicates the value percentage at which the charge is applied against the price.base value.
|
per_night | unit_amount x number of nights. |
per_person_per_night | unit_amount x number of guests x number of nights. |
per_person_per_stay | unit_amount x number of guests. |
per_stay | Flat unit_amount for the entire stay. |
Included, and excluded charges
Depending on the user’s country and local tax laws, a charge on a product may appear as included
or excluded
from the book
price.
included
- This value must be part of the displayed price (book
price)excluded
- This charge can be left out of thebook
price displayed to the the user in pre-booking stages.
These fields are only retrieved when calling accommodation/search and /availability endpoints.
Therefore, the book
price for the same product, with the same request criteria, may vary depending on the origin of the request.
- The
book
price represent our (strong) recommendation on how to display a price and the extra charges, for a given booker, based on a mix of the property preferences, overiden by country laws etc.
Non-conditional charges in /orders
When using the /orders/preview and /orders/create endpoints, included
and excluded
extra charges are consolidated into non_conditional
charges.
- The distinction between
included
andexcluded
charges is no longer needed in the booking phase, as all extra charges that are mandatory and must be paid regardless of any conditions are grouped under thenon_conditional
category. non_conditional
represents the fees that are always applicable to the booking and included in thetotal
price.
(Exemption: incalculable
charges are excluded from the total
price).
Example: Preview response with extra charges
In the following orders/preview response the extra charge types are identified with these ids: 3, 142, 21 and 22.
{
"price": {
"base": {
"accommodation_currency": 162.98,
"booker_currency": null
},
"extra_charges": {
"conditional": [
{
"charge": 3,
"condition": 30,
"mode": "per_stay",
"percentage": null,
"total_amount": {
"accommodation_currency": 10,
"booker_currency": null
},
"unit_amount": null
}
],
"non_conditional": [
{
"charge": 142,
"chargeable_online": false,
"mode": "per_person_per_night",
"percentage": null,
"total_amount": {
"accommodation_currency": 6,
"booker_currency": null
},
"unit_amount": {
"accommodation_currency": 3,
"booker_currency": null
}
},
{
"charge": 21,
"chargeable_online": true,
"mode": "percentage",
"percentage": 9,
"total_amount": {
"accommodation_currency": 14.67,
"booker_currency": null
},
"unit_amount": null
},
{
"charge": 22, // City tax
"chargeable_online": false,
"mode": "percentage", // Applied as % of base price
"percentage": 7,
"total_amount": {
"accommodation_currency": 11.41,
"booker_currency": null
},
"unit_amount": null
}
]
},
"total": {
"accommodation_currency": 195.06,
"booker_currency": null
}
}
}
→ Call the accommodations/constants endpoint to get the name of each charge type ID (e.g., charge: 22 = City Tax).
For the given example, the accommodations/constants response retrieves:
[
{
"id": 3,
"name": {
"en-gb": "Restaurant"
}
},
{
"id": 21,
"name": {
"en-gb": "Babysitting/child services"
}
},
{
"id": 22,
"name": {
"en-gb": "Laundry"
}
},
{
"id": 142,
"name": {
"en-gb": "Child safety socket covers"
}
}
]
- Cache /accommodations/constants responses and refresh daily to reduce API traffic and ensure optimal performance.
The traveller may have to pay additional conditional or incalculable charges in addition to the total
price.
Included vs. excluded vs. conditional
Category | Description | Appears in ... |
---|---|---|
included | Required to show in advertised price. | book , total |
excluded | Not required to be included in price, display it separately. | Only in total |
conditional | Based on guest behaviour or context. | Not in price totals |
non_conditional | Always applied in orders. | Included in total |
Display tips
- Show
non_conditional
charges before checkout. - For accurate charge names, map
charge
IDs using /accommodations/constants endpoint.- Cache /accommodations/constants once per day to avoid redundant traffic.
- Conditional charges should be labelled as “might apply” and never added to totals.
- For fluctuating totals (due to currency or rounding), authorise a buffer (e.g. +1%) when processing payments.
Next steps
Looking to implement or optimise pricing display and booking flows? Here are some helpful resources: