Last updated

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:

{
  "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 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:

  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

CheckWhat to do
No products or extra_charges in requestAdd "products" and "extra_charges" under extras in your search and availability call.
price.book or price.total missing from responseEnsure response includes the full price object: base, book, total, with extra_charges breakdown.
Duplicate or missing chargesUse included, excluded, conditional, and non_conditional exactly as defined; avoid manual adjustment.
Price discrepancies between availability and preview endpointsUse /orders/preview for the final price; label availability prices as estimated.
Unclear online payment amountUse price.chargeable_online and the chargeable_online values in extra_charges.non_conditional to inform the traveller.

Best practices

PracticeRecommendation
Display pricing clearlyShow price.book as the upfront price to travellers in search and availability results.
Use final pricesAlways rely on /orders/preview for the definitive final price and price.chargeable_online amounts.
Provide a full breakdownDisplay both price.book and price.total, and include an itemised list of extra_charges.
Manage expectationsLabel early-stage prices as “estimated” or “from” to make it clear they can change at checkout.
Handle rounding consistentlyApply 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: