Skip to content

Fares & transfers

Turn on Include Pricing in the debug UI. For an API request, add:

{ "includePricing": true }

Standard pricing uses second class for trains.

To request first-class train fares, add:

{ "includePricing": true, "pricingOptions": { "travelClass": "FIRST_CLASS" } }

SECOND_CLASS is the default. Use FIRST_CLASS to compare first-class fares for a train journey, such as Utrecht Centraal → Driebergen-Zeist. Display the price returned for the selected journey.

pricingOptions.age currently selects the 65+ tariff for flex services that have a separate senior tariff. Regular bus, tram, metro and train fares use standard pricing; general child and senior discounts are not currently applied. Bravoflex has the same configured adult and senior base fare.

For a supported flex service, include the traveller’s age:

{ "includePricing": true, "pricingOptions": { "age": 70 } }

Try Breda Airport → UMCG Hoofdingang, Groningen with Include Pricing and Use Flexible Routing enabled. Open a journey with Bravoflex, buses and a train transfer, then click its price.

Open this search in I’m Planner
Opens for the next weekday at 10:00 in your local time.

The search link compares regular public transport with Bravoflex connections.

The example below combines Bravoflex to Sint Willebrord, bus 162 to Etten-Leur, trains via Zwolle to Groningen, and bus 6 to UMCG. Its breakdown shows:

  • A separate fare for each flex, bus and train leg.
  • Any discounts returned for the selected journey. BravoFlex keeps its fare and the following regular leg’s entrance rate; this connection does not automatically receive a flex transfer discount.
  • Langeafstandskorting on the connecting train: the train fares are calculated together, with the saving shown on the affected leg.
  • The total fare for the whole journey.
Bravoflex, bus 162, connecting trains and bus 6, with the fare breakdown and Langeafstandskorting.
See what makes up the fare

Bravoflex, bus 162, connecting trains and bus 6, with the fare breakdown and Langeafstandskorting.

The screenshot illustrates the breakdown layout; current searches can return different amounts and discounts. The first-mile flex entrance-rate waiver applies only to eligible U-OV Flex and HWGO belbus products followed by regular public transport within 35 minutes, excluding train boundaries. Use the returned discounts rather than deriving them from the presence of a flex leg. See the pricing changelog.

Prices arrive in cents. Divide by 100 and use the returned currency:

const fare = trip.pricingInfo;
const price = fare
? new Intl.NumberFormat('nl-NL', {
style: 'currency', currency: fare.currency
}).format((fare.totalPrice ?? 0) / 100)
: 'Fare unavailable';

Use Fare unavailable when pricing is absent. If any leg has status UNKNOWN, label the total Partial fare. Discounts include their own description and amount for your breakdown.

Some train transfers include a check-out/check-in instruction. Use pricingInfo.transferInstruction to place it between the indicated legs. This helps the traveller know where to switch check-in systems.

On a journey from Utrecht to Venray, change at Nijmegen: check out with NS and check in with Arriva before continuing.
Check out, then check in

On a journey from Utrecht to Venray, change at Nijmegen: check out with NS and check in with Arriva before continuing.