Last updated

Step 9 - Create charges

Use the Charges API to create and update taxes and fees that apply at the property level and room level, specify their configuration details, and set up different configurations for different dates.

Prerequisites

You must have the following:

  • A property ID by completing step 2 successfully.
  • A unit ID by completing step 3 successfully.

Create charges

POST
https://supply-xml.booking.com/charges-api/properties/{property_id}/charges

Before creating or updating a charge, you must identify the charge_key corresponding to the charge you want to create or update.

Use the Charges meta endpoint to retrieve the list of supported charge types and their details.

Path parameters

The following table describes the elements you must specify in the path:

ElementDescriptionTypeRequired/
Optional
Notes
property_idSpecifies the unique ID of the property.integerrequired

Request body parameters

The following table describes the elements you can add in the request body:

All parameters are required unless otherwise noted.

ElementDescription
property_chargesCharges that apply across the property. At least one charge must be present between property_charges and room_charges.
> charge_keyContains the attributes that uniquely identifies a charge. If you change the value of a field within the charge key, you are not modifying an existing charge's value but creating a separate charge.
>> typeSpecifies the charge type. For a list of supported charge types, see the meta endpoint.
>> guest_originSpecifies the guest origin as specified by guests when they make the booking.
>> travel_purposeSpecifies the travel purpose as specified by guests when they make the booking. Possible values are: ANY, LEISURE, BUSINESS.
> charge_periodsContains the various configurations for the charge through time.
>> applicableContains the date range for this charge period.
>>> fromSpecifies the start date for this charge period. It may be in the past if it is the current active charge. Uses the ISO 8601 date format (YYYY-MM-DD) and is relative to the timezone of the property.
>>> to[Optional] Specifies the end date for this charge period (inclusive). The date is relative to the property's timezone. If null or undefined, the current charge period extends forever. Uses the ISO 8601 date format (YYYY-MM-DD).
>> configuration[Optional] Contains the charge configuration for this period. If specified as null, it clears the charge for the specific period.
>>> amountContains details about the charge price.
>>>> valueSpecifies the value of the charge. Required unless mode is INCALCULABLE Interpreted as an absolute value or percentage depending on mode. Absolute values are in the property's configured currency. Any value set for an INCALCULABLE charge is ignored.
>>>> baseOnly applies when mode is PERCENTAGE. Specifies the value the percentage applies to. Required when mode is PERCENTAGE (otherwise rejected). See the section on Understanding Percentage charges.
>>>> modeSpecifies the mode used for this charge. For possible values, see Understanding Charge modes.
>>>> excludedSpecifies if the charge is included or excluded from the room rate. This corresponds to the similarly named field in extranet. But is different from the included/excluded within the Reservations API.
room_chargesContains the room specific charges. Overrides the same charge specified at the property level. Can be an empty array.
Note that CITYTAX / VAT / TAX should be applied at the property level and not at the room level. If specified, the API ignores setting these at the room level.
> room_idSpecifies the Room ID the charges apply to.
> chargesContains the attributes charges apply to.
>> charge_keyContains the attributes that uniquely identifies a charge. If you change the value of a field within the charge key, you are not modifying an existing charge's value but creating a separate charge.
>>> typeSpecifies the type of charge.
>>> guest_originSpecifies the guest origin as specified by guests when they make the booking.
>>> travel_purposeSpecifies the travel purpose as specified by guests when they make the booking. Possible values are: ANY, LEISURE, BUSINESS
When determining which charge to use at checkout, the narrowest/most specific charge key is used. For example, if a LEISURE guest books at a property that has both an LEISURE and ANY charge key (with the same charge type), only the LEISURE charge is applied.
>> charge_periodsContains the various configurations for the charge through time.
>>> applicableContains the date range for this charge period. Dates are inclusive and must not overlap.
>>>> fromSpecifies the start date for this charge period. It may be in the past if it is the current active charge.
Uses the ISO 8601 date format (YYYY-MM-DD) and is relative to the timezone of the property.
>>>> to[Optional] Specifies the end date for this charge period (inclusive). The date is relative to the property's timezone. If null or undefined, the current charge period extends forever.
Uses the ISO 8601 date format (YYYY-MM-DD).
>>> configuration[Optional] Contains the charge configuration for this period. If specified as null, it clears the charge for the specific period.
>>>> amountContains details about the charge price.
>>>>> valueSpecifies the value of the charge. Required unless mode is INCALCULABLE. Interpreted as an absolute value or percentage depending on mode. Absolute values are in the property's configured currency. Any value set for an INCALCULABLE charge is ignored.
>>>>> baseOnly applies when mode is PERCENTAGE. Specifies the value the percentage applies to. Required when mode is PERCENTAGE (otherwise rejected). See the section on Understanding Percentage charges.
>>>>> modeSpecifies the mode used for this charge. For possible values, see Understanding Charge modes.
>>>> excludedSpecifies if the charge is included or excluded from the room rate. This corresponds to the similarly named field in extranet. But is different from the included/excluded within the Reservations API.

Request body example

The following is a request body example:

{
  "property_charges": [
    {
      "charge_key": {
        "type": "CLEANINGFEE",
        "guest_origin": "ANY",
        "travel_purpose": "ANY"
      },
      "charge_periods": [
        {
          "applicable": {
            "from": "2025-09-10"
          },
          "configuration": {
            "amount": {
              "value": 20.00,
              "base": [],
              "mode": "PER_STAY"
            },
            "excluded": true
          }
        }
      ]
    },
    {
      "charge_key": {
        "type": "CITYTAX",
        "guest_origin": "ANY",
        "travel_purpose": "ANY"
      },
      "charge_periods": [
        {
          "applicable": {
            "from": "2025-09-10"
          },
          "configuration": {
            "amount": {
              "value": 20.00,
              "base": [],
              "mode": "PER_PERSON_PER_NIGHT"
            },
            "excluded": true
          }
        }
      ]
    }
  ],
 "room_charges": [
        {
            "room_id": "1479536101",
            "charges": [
                {
                    "charge_key": {
                        "type": "DESTINATIONTAX",
                        "guest_origin": "ANY",
                        "travel_purpose": "LEISURE"
                    },
                    "charge_periods": [
                        {
                            "applicable": {
                                "from": "2025-09-10"
                            },
                            "configuration": {
                                "amount": {
                                    "value": 1.99,
                                    "base": [],
                                    "mode": "PER_PERSON_PER_NIGHT"
                                },
                                "excluded": false
                            }
                        }
                    ]
                }
            ]
        }
    ]
}

Response body example

The following is a successful response body example:

{
    "warnings": [],
    "errors": [],
    "meta": {
        "ruid": "XXXXXXXXXXXXXXXXXXXXX"
    }
}