Skip to content

Understanding per person charges collection

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_guest field changes from FALSE to TRUE.
  • Reservations API (PCP 2.0) OTA: The Type attribute changes from Exclusive to Inclusive.
  • Reservations API (PCP 2.0) B.XML: The included attribute changes from no to yes.

The tax amount remains visible in the response regardless of who collects it. Only the collection responsibility changes, not the visibility of the charge.

What changes per API

The following table summarizes the key fields and values that indicate who collects per person charges:

Reservations API (PCP 2.0) OTAReservations API (PCP 2.0) B.XMLPayment Details API
Key fieldTax[@Code="3"] Typeincludedis_already_collected_from_guest
Collected by propertyType="Exclusive"included="no"FALSE
Collected by Booking.comType="Inclusive"included="yes"TRUE
ScopePer room, within PriceDetailsPer room, within price_detailsPer room, within price_breakdown.charges[]

Payload examples

Reservations API (PCP 2.0) — OTA

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>

Reservations API (PCP 2.0) — B.XML

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>

Payment Details API — JSON

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"
      ]
    }]
  }]
}
Reading the amount

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.