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 theprice.extra_charges
breakdown: conditional, included, excluded.
Extra charges showing incorrectly or duplicated
Possible causes:
- Misinterpreting
extra_charges.included
vsextra_charges.excluded
orconditional
. - 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 (includesbase
+included
charges). - Use
price.total
to show the full payable amount that includesnon_conditional
charges. - Present charge breakdown as defined in
extra_charges
, separatingincluded
,excluded
,conditional
, andnon_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:
{
"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:
- Always go back to /orders/preview and request a new token if the price has changed.
- Use that new token in /orders/create.
- Understand that tokens expire after 20 minutes to reduce the risk of price or availability changes.
Even within the token’s 20‑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:
- Re-check /accommodations/availability.
- Choose a different product.
- 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
vsprice.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 withinextra_charges.non_conditional[]
.
Minor discrepancies between currencies or rounding
Possible causes:
- Currency conversions and rounding between
accommodation_currency
andbooker_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 in the dedicated section.
Next steps
Looking to implement or optimise pricing display and booking flows? Here are some helpful resources: