In select markets, Booking.com collects per person charges (such as city tax) from guests during the booking process. When this happens, the property no longer needs to collect these charges from guests at check-in.
This change is reflected in the API responses as follows:
- Payment Details API: The
is_already_collected_from_guestfield changes fromFALSEtoTRUE. - Reservations API (PCP 2.0) OTA: The
Typeattribute changes fromExclusivetoInclusive. - Reservations API (PCP 2.0) B.XML: The
includedattribute changes fromnotoyes.
The tax amount remains visible in the response regardless of who collects it. Only the collection responsibility changes, not the visibility of the charge.
The following table summarizes the key fields and values that indicate who collects per person charges:
| Reservations API (PCP 2.0) OTA | Reservations API (PCP 2.0) B.XML | Payment Details API | |
|---|---|---|---|
| Key field | Tax[@Code="3"] Type | included | is_already_collected_from_guest |
| Collected by property | Type="Exclusive" | included="no" | FALSE |
| Collected by Booking.com | Type="Inclusive" | included="yes" | TRUE |
| Scope | Per room, within PriceDetails | Per room, within price_details | Per room, within price_breakdown.charges[] |
The property collects the city tax from guests at check-in:
<PriceDetails>
<Tax Amount="1200"
ChargeFrequency="21"
Code="3"
CurrencyCode="EUR"
DecimalPlaces="2"
Type="Exclusive">
<TaxDescription>
<Text>City tax (5.5%)</Text>
</TaxDescription>
</Tax>
</PriceDetails>The property collects the city tax from guests at check-in:
<price_details>
<guest>
<extracomponent amount="12"
currency="EUR"
included="no"
per_night="yes"
per_person="yes"
percentage="no"
text="City tax" />
</guest>
</price_details>Starting with API version 1.1 (accept-version: 1.1), the response includes applicable_rate (the rate used to calculate the charge) and applicable_type (how the charge applies). Partners on version 1.0 will not see these fields.
The property collects the city tax from guests at check-in:
{
"total_amount_to_collect_at_property": {
"currency": "EUR",
"value": "1200",
"decimals": 2
},
"price_breakdown": [{
"charges": [{
"type": "City tax",
"amount": {
"currency": "EUR",
"value": "1200",
"decimals": 2
},
"is_already_collected_from_guest": "FALSE",
"is_included_total_partner_payout": "FALSE",
"applicable_rate": null,
"applicable_type": [
"PER_PERSON"
]
}]
}]
}The tax amount remains visible in both cases — it is the collection responsibility that changes, not the visibility. The value + decimals pattern means: "value": "1200" with "decimals": 2 = 12.00 EUR.