# Pricing troubleshooting

**If you experience problems when retrieving, calculating, or displaying prices, refer to the following common issues.**

## Prices missing or inconsistent

**Possible causes:**

* Request omitted extras: `["products", "extra_charges"]`, so detailed price breakdown is absent.


**How to resolve:**

* Always include "products" and "extra_charges" in the extras array for /accommodations/search and /accommodations/availability calls, to retrieve full pricing details.
* Verify that each product object contains `price.base`, `price.book`, `price.total`, and the `price.extra_charges` breakdown: conditional, included, excluded.


## Extra charges showing incorrectly or duplicated

**Possible causes:**

* Misinterpreting `extra_charges.included` vs `extra_charges.excluded` or `conditional`.
* Showing `included` charges twice, or not using the correct subset depending on context.


**How to resolve:**

* Use `price.book` to display the legally compliant displayed price (includes `base` + `included` charges).
* Use `price.total` to show the full payable amount that includes `non_conditional` charges.
* Present charge breakdown as defined in `extra_charges`, separating `included`, `excluded`, `conditional`, and `non_conditional` correctly.


### Price mismatch between endpoints

**Possible causes:**

* Endpoint rounding and timing differences: /accommodations/availability vs /orders/preview.
* Some fields (`price.book`) only appear in availability/search, not in /orders/preview


**How to resolve:**

* In the booking flow, rely on /orders/preview for final price (`total` price)
* In the selection phase (search or availability), label prices as “estimated” or “starting from” when using `price.book` from search/availability.


## Price mismatch between orders/preview and orders/create

When the price of a selected product has changed between the /orders/preview step and the /orders/create request, Demand API returns this message:


```json
{
  "request_id": "01gw6zjf8n3kvw68jt39g8kcxp",
  "errors": [
    {
      "id": "order_price_changed",
      "message": "Price changed for this order. Price for product '1050736001_377311511_0_2_0' has changed to '30.8988990825688'."
    }
  ]
}
```

**How to resolve:**

1. Always go back to /orders/preview and request a new token if the price has changed.
2. Use that new token in /orders/create.
3. Understand that **tokens expire after 15 minutes** to reduce the risk of price or availability changes.


Even within the token’s 15‑minute lifetime, there is no guarantee that the product will still be available or that its price will remain the same.

## Changes in availability

If availability changes for the selected product:

1. Re-check /accommodations/availability.
2. Choose a different product.
3. Preview again and create the order with the new token.


**Important consideration:**

The unavailable product may occasionally still be displayed in /accommodations/availability response if Demand API cache hasn't been updated yet.

* If this is the case, you should **manually remove this product on your end**, so it is not retrieved in results.


## Chargeable online amount unclear

**Possible causes:**

* Misreading `price.chargeable_online` vs `price.extra_charges.non_conditional[].chargeable_online`


**How to resolve:**

* Use `price.chargeable_online` from /orders/preview to know exactly what will be charged online in the Virtual Credit Card.
* If examining each non_conditional charge, check the `chargeable_online` boolean within `extra_charges.non_conditional[]`.


## Minor discrepancies between currencies or rounding

**Possible causes:**

* Currency conversions and rounding between `accommodation_currency` and `booker_currency`.


**How to resolve:**

* Display both currencies when applicable.
* Allow a small buffer during payment authorisation to accommodate rounding differences.
* Use consistent rounding logic from display through confirmation.


### Checklist

| Check | What to do |
|  --- | --- |
| No `products` or `extra_charges` in request | Add `"products"` and `"extra_charges"` under `extras` in your search and availability call. |
| `price.book` or `price.total` missing from response | Ensure response includes the full `price` object: `base`, `book`, `total`, with `extra_charges` breakdown. |
| Duplicate or missing charges | Use `included`, `excluded`, `conditional`, and `non_conditional` exactly as defined; avoid manual adjustment. |
| Price discrepancies between availability and preview endpoints | Use `/orders/preview` for the final price; label availability prices as estimated. |
| Unclear online payment amount | Use `price.chargeable_online` and the `chargeable_online` values in `extra_charges.non_conditional` to inform the traveller. |


## Best practices

| Practice | Recommendation |
|  --- | --- |
| Display pricing clearly | Show `price.book` as the upfront price to travellers in search and availability results. |
| Use final prices | Always rely on /orders/preview for the definitive final price and `price.chargeable_online` amounts. |
| Provide a full breakdown | Display both `price.book` and `price.total`, and include an itemised list of `extra_charges`. |
| Manage expectations | Label early-stage prices as “estimated” or “from” to make it clear they can change at checkout. |
| Handle rounding consistently | Apply the same rounding and currency conversion logic across search, availability, and booking flows. |


See more [Pricing best practices](/demand/docs/accommodations/prices-best-practices) in the dedicated section.

## Next steps

Looking to implement or optimise pricing display and booking flows? Here are some helpful resources:

* [Accommodation pricing guide](/demand/docs/accommodations/prices-accommodations)
* [Displaying pricing guide](/demand/docs/accommodations/display-prices)
* [Pricing and charges use cases](/demand/docs/accommodations/pricing-examples)
* [Extra charges calculation mode](/demand/docs/accommodations/charge-calculation)