# 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) 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[]` |


## Payload examples

### Reservations API (PCP 2.0) — OTA

Collected by property
The property collects the city tax from guests at check-in:


```xml
<PriceDetails>
  <Tax Amount="1200"
       ChargeFrequency="21"
       Code="3"
       CurrencyCode="EUR"
       DecimalPlaces="2"
       Type="Exclusive">
    <TaxDescription>
      <Text>City tax (5.5%)</Text>
    </TaxDescription>
  </Tax>
</PriceDetails>
```

Collected by Booking.com
Booking.com collects the city tax from guests. The property collects nothing at check-in.

The `Type` attribute changes from `Exclusive` to `Inclusive`:


```xml
<PriceDetails>
  <Tax Amount="1200"
       ChargeFrequency="21"
       Code="3"
       CurrencyCode="EUR"
       DecimalPlaces="2"
       Type="Inclusive">
    <TaxDescription>
      <Text>City tax (5.5%)</Text>
    </TaxDescription>
  </Tax>
</PriceDetails>
```

### Reservations API (PCP 2.0) — B.XML

Collected by property
The property collects the city tax from guests at check-in:


```xml
<price_details>
  <guest>
    <extracomponent amount="12"
      currency="EUR"
      included="no"
      per_night="yes"
      per_person="yes"
      percentage="no"
      text="City tax" />
  </guest>
</price_details>
```

Collected by Booking.com
Booking.com collects the city tax from guests. The property collects nothing at check-in.

The `included` attribute changes from `no` to `yes`:


```xml
<price_details>
  <guest>
    <extracomponent amount="12"
      currency="EUR"
      included="yes"
      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.

Collected by property
The property collects the city tax from guests at check-in:


```json
{
  "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"
      ]
    }]
  }]
}
```

Collected by Booking.com
Booking.com collects the city tax from guests. The property collects nothing at check-in.

The `is_already_collected_from_guest` field changes from `FALSE` to `TRUE`:


```json
{
  "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": "TRUE",
      "is_included_total_partner_payout": "TRUE",
      "applicable_rate": null,
      "applicable_type": [
        "PER_PERSON"
      ]
    }]
  }]
}
```

In this scenario, the `is_included_total_partner_payout` field also changes to `TRUE` because Booking.com collects the tax and includes it in the partner's payout. In the "Collected by property" scenario, this field is `FALSE` because the property collects the tax directly from the guest — the money doesn't go through Booking.com.

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**.