Last updated

Pricing in /orders endpoints

Discover how to retrieve and display product pricing information on orders pages effectively.


Pricing details in the order/preview

The /orders/preview endpoint provides detailed pricing information for the products included in the response.

Your application must present this information to travellers in a clear and consistent manner, adhering to all relevant laws and regulations, enabling them to make informed decisions before placing their orders.

Key fields

The product.price object in the /orders/preview response includes the following key components:

Field Description
Base priceThe fundamental price that excludes any extra_charges.
extra_chargesAdditional costs that are applied to the base price, categorised as follows:

- non-conditional: Charges that must be unconditionally paid and are included in the total price. (Exception: incalculable charges are excluded from the total price).

- conditional: Charges that only apply in certain conditions. These are always excluded from the base and total prices.
totalThe final amount the traveller needs to pay for the product calculated as the book price plus any non-conditional extra_charges.

- The total price is returned in both, the accommodation and booker currencies, which may differ slightly based on the currency used.

Currency representation:

  • All prices and amounts are displayed in both the accommodation_currency and the booker_currency.
  • If currency is not included in the request, the booker_currency value is null.

Example 1 - Different currencies

In the following example, the user is located in England, hence the booker currency defaults to Pounds (GBR).

The accommodation is priced in Euros (EUR) as this is located in Spain so the accommodation currency presents the amount in Euros (EUR).

{
...
"accommodation": {
            "id": xxxxxxxx,
            "currency": {
                "accommodation": "EUR",
                "booker": "GBP"
            },
            "price": {
                "base": {
                    "accommodation_currency": 82.57,
                    "booker_currency": 70.85
                },
                "extra_charges": {
                    "conditional": [],
                    "non_conditional": [
                        {
                            "charge": 21,
                            "total_amount": {
                                "accommodation_currency": 7.43,
                                "booker_currency": 6.38
                            }
                        },
                        {
                            "charge": 22,
                            "total_amount": {
                                "accommodation_currency": 2.00,
                                "booker_currency": 1.72
                            }
                        }
                    ]
                },
                "total": {
                    "accommodation_currency": 92.00,
                    "booker_currency": 78.95
                }

Example 2 - Extra charges

The products.price object offers similar pricing details for each product within the order, including a detailed breakdown of extra_charges (including conditional and non conditional)

  • All extra charges are grouped by charge type, that is identified by an Id. Examples of extra charges are: VAT, City Tax, etc.
  • In the following example the extra charge types are identified with these ids: 3, 142, 21 and 22.
          "id": "1000420_95127794_2_0_0",
          "policies": {
            "cancellation": [
              {
                "from": "now",
                "price": {
                  "accommodation_currency": 170,
                  "booker_currency": null
                }
              }
            ],
            "meal_plan": {
              "meals": [],
              "plan": "no_plan"
            }
          },
          "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,
                  "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,
                  "mode": "percentage",
                  "percentage": 9,
                  "total_amount": {
                    "accommodation_currency": 14.67,
                    "booker_currency": null
                  },
                  "unit_amount": null
                },
                {
                  "charge": 22,
                  "mode": "percentage",
                  "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 see the full list of charge type ids so you can identify each one. For this 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"
      },

How to display price information

On an order preview page

Prices, charges and currency

  • Display the price of the order using the price.total price.

  • Clearly indicate whether the price includes taxes and charges, and whether any additional charges may apply.

  • Display details of each non_conditional charge that applies to the order (using the data from the prices.extra_charges.non-conditional object). Do not combine charges into your own categories.

  • If the booker_currency and accommodation_currency are different:

    • Show the price clearly in both currencies.
    • Clearly state that if the exchange rate changes before the traveller completes the booking, they will pay a different price to the one shown.

For example:

Price Display

Deals

If you display a price that is discounted because a deal is available, you must show details of the deal. For example:

Deals Display

Note that, currently, you cannot obtain deal information from the orders/preview endpoint; you must obtain it from /accommodations/search or /accommodations/availability. (See Deals)

Conditional or incalculable charges

If the order includes either conditional charges, or incalculable non_conditional charges:

  • Show each charge explicitly with an appropriate explanation.
  • Indicate clearly that the price is not the total price.

For example:

Conditional Charges

On an order details page

Commissionable price

Price over which Booking.com would calculate Managed affiliate partner commission. This price is the sum of net_price and all commissionable extra charges.

  • This price is not the total price as it may not contains all the extra charges.
  • There are no simple rule to explain which charges are commissionable.

Example:

ChargeValueCommissionable
net_price60YES
city_tax10YES
vat20YES
service charge10NO



commissionable_price90
total_price100

Different pricing information across endpoints

The pricing information returned by the /orders/preview endpoint differs slightly from that provided by the /accommodation/ endpoints in the following ways:

Field Description
extra_chargesThe exclusive or inclusive categories used in the /accommodations/* responses are not applicable to the order process.

Instead, all exclusive or inclusive charges are defined as non-conditional.
book priceThis value is not included in the response.

See Prices (/accommodations) for more information.

Price variations

There may be slight discrepancies between the pricing presented in the /accommodations/availability response and that included in preview/order endpoint.

When discrepancies occur:

  • The price returned by the preview response should be the one utilised during the booking process.
  • It is advisable to notify travellers about these variations.

Example of price discrepancy

Below are examples of two responses with minor price differences:

Here’s a sample response from the /accommodation/availability endpoint:

                "price": {  
                    "base": 8485200.18,  
                    "book": 9622217.00,  
                    "extra_charges": {  
                        "conditional": [],  
                        "excluded": [],  
                        "included": [  
                            {  
                                "charge": 1,  
                                "mode": "percentage",  
                                "percentage": 5.00,  
                                "total_amount": 424260.01,  
                                "unit_amount": null  
                            },  
                            {  
                                "charge": 21,  
                                "mode": "percentage",  
                                "percentage": 8.00,  
                                "total_amount": 712756.81,  
                                "unit_amount": null  
                            }  
                        ]  
                    },  
                    "total": 9622217.00

In this case, the price discrepancy between the two endpoints is 0.20 cents.

Price
accommodation/availability
order/preview
Base price8485200.188485200.00
Total price9622217.009622216.80

Curious to know more?