POST /v2/price-checks when your workflow needs a cost estimate or approval before booking.
The request uses the route, vehicles, and service options. A price check does not need a VIN, but order creation still follows the vehicle identity rules.
Sandbox prices, distances, and times only demonstrate the API response. They do not predict production results.
Check a route
Send the route and service choices you intend to use for the order. This complete request omits vehicle identifiers and pickup availability, which are not required for a price check:orders:write. Indicative pickup and delivery times in the response are planning estimates for the price calculation. They are not order ETAs, agreed windows, or delivery commitments.
Read the result
An available response contains the complete price breakdown.
EUR.
additional_fees_cents is signed. It is negative when agreed discounts or price corrections on the order outweigh its surcharges. total_cents is always the amount to pay, so add the fields rather than assuming each one raises the total.
The ordered_for field repeats the business you priced for. It is null when the price is for your own account.
Use the distance
distance_meters is the driving distance that the price calculation uses for the route. Bahn’s per-km prices use this distance rounded up to whole kilometers. Use it when you calculate your own derived prices, so your calculation uses exactly the same distance as Bahn’s. The value is null when no driving distance is available for the route.
The order creation response carries distance_meters in the same way. Bahn does not store the value on the order, and later order reads do not contain it, so store it on your side when you need it.
Price for another business
Skip this section unless your credential is an ordering channel. The price depends on which customer the transport belongs to, so an ordering channel must price for the same business it will order for. Send the sameordered_for value in the price check and in the order that follows, or leave the field out of both when the transport is your own. Read Platform ordering for the details.
Create the order
The price check returns a calculation. It has no ID or expiry workflow, and the order request does not refer back to it. Order creation calculates the price again. Always use the accepted price from the created order as the order price. You can create an order without a price check.Handle a custom quote result
Acustom_quote_required response has a null price. It can still contain estimated pickup and delivery times, so do not treat it as an invalid route.
Contact support@bahnexpress.com if you want to request a custom quote. Bahn does not guarantee that it can provide one.