Route optimisation that gives the afternoon back.

Hand over the stops, get back the order that visits them in the least time, plus the turn-by-turn route through them. Start and end stay where you put them; everything in between is solved.

10,000 units free every month. No credit card, no sales call.

Real response · by bike9 stops = 9 units
  1. DDepot
  2. 1IJburg
  3. 2Jordaan
  4. 3Zuidas
  5. 4Oost
  6. 5De Pijp
  7. 6Amstelstation
  8. 7Museumplein
  9. DDepot
whole round
47.4km
on the road
2 h 56

Seven drops in the order they were typed in.

POST /optimized-route/v1 · 9 locations · costing: bicycle

input order · 47.4 km · 2 h 56

Where it lands in your product.

Nobody ships an endpoint. They ship a run sheet a rider can follow, a van that is back before the school run, a field-service app that stops asking engineers to plan their own day. This is what a solved order looks like from the outside.

Map of Amsterdam with a bike route through eight stops in the order they were entered, criss-crossing the cityAs entered47.4 km · 2 h 56
Map of Amsterdam with the same eight stops in the optimised order, one clean loopOptimised31.7 km · 2 h
56 minand 15.7 km saved, same seven drops
© OpenStreetMap contributors

Same drops, a shorter day.

Seven drops around Amsterdam, entered in the order they came in. The solved order visits the same seven and comes home almost an hour earlier. This is one real round, measured, not drawn.

The same road graph, routed
Run sheet · Tuesday, by bike
  1. 1Oost19 min
  2. 2IJburg24 min
  3. 3Amstelstation27 min
  4. 4De Pijp11 min
  5. 5Zuidas11 min
  6. 6Museumplein11 min
  7. 7Jordaan10 min
  8. DBack at the depot7 min

The run sheet, ready to hand over.

The response comes back in the solved order with a leg per hop, so the list your rider follows is the response itself: next stop, minutes to get there, repeat.

Then navigate each leg

A round gaining stops, solved once each morning

2units for 2 stops, solved

1 unit per stop, up to 20
the matrix alone would be 4

One unit per stop, once a day.

An optimisation costs one unit per stop, up to twenty stops a request. Solving it yourself would start with the full travel-time matrix, which is stops squared.

See what a month costs
round.ts
const { trip } = await rijwind.optimizedRoute({
  locations: [depot, ...drops, depot],
  costing: 'bicycle',
});

// the solved order, as your own stop ids
const order = trip.locations.map((l) => drops[l.originalIndex - 1]);

It is a route with the order solved.

The response has the shape of a plain route, with your stops echoed back in the solved order and an originalIndex on each. Swap the endpoint and the code that draws the line does not change.

Read the quickstart

A route, with the order solved.

The response is a plain route: your stops echoed back in the solved order, each carrying the index it had in your request, then a summary and a leg per hop. The code you already have for drawing a route draws this one.

Every field, in the docs ↗
trip · 9 locations
  1. {
  2. "trip": {// same shape as a plain route
  3. "locations": [// your stops, in the solved order
  4. { "lat": 52.3868, "lon": 4.877, "originalIndex": 0 },// originalIndex: which of your inputs this was
  5. { "lat": 52.363, "lon": 4.93, "originalIndex": 4 },// so input stop 4 (Oost) is now first
  6. … 7 more, ending at originalIndex 8// first and last stay fixed
  7. ],
  8. "summary": { "length": 31.689, "time": 7203.661, … },// the whole round: kilometres and seconds
  9. "legs": [ … ],// 8 legs, each with its shape and manoeuvres
  10. "units": "kilometers"
  11. }
  12. }

The short version.

Everything a developer scans a product page for, in one place, without the adjectives.

OptimisationNine locations is nine units. Start and end count.
1 unit / stop
Per requestFirst and last stay fixed; everything between is reordered.
2 to 20 stops
ProfilesEach with its own rules, not a speed multiplier.
car · bike · foot
Time windows, capacities, fleetsOne vehicle, one order. Build your scheduler on top.
no
Live traffic in the solveDurations come from the road graph. Rijwind Traffic is a separate map layer.
no
OutputSame shape as directions, stops in solved order with originalIndex.
a route
Free tierHard cap. No card, no sales call.
10,000 units / month
Paid plansOne unit pool across maps, geocoding and routing, plus a spending cap you set.
from €5 / month
ProcessingNo US-controlled provider in the request path. DPA and sub-processor list published.
EU, end to end

Numbers as of September 2026. The pricing page has the full ladder.

Route optimisation, answered.

What does route optimisation do?

You give it a start, an end and the stops in between; it returns the order that visits all of them in the least travel time, together with the full route through them. The first and last locations stay where you put them, so a round that starts and ends at the depot stays a round.

How is it different from routing through the stops in order?

Plain routing visits the stops in the order you gave them. Optimisation chooses the order. On the round on this page that is the difference between 47 and 32 kilometres for the same seven drops, because the entered order hopped back and forth across the city.

How much does it cost?

One unit per location in the request, from the same monthly pool as maps, geocoding and routing. Nine locations is nine units. Solving the order yourself would start with a travel-time matrix, which costs the square of that.

How many stops can one request have?

Between two and twenty locations, start and end included. Larger rounds are usually split by area or by vehicle first, then each part is optimised on its own.

Can it handle time windows, capacities or several vehicles?

No. It solves the visiting order for one vehicle with no constraints beyond start and end. If you need delivery windows, load limits or a fleet, this is the building block under that logic, not the whole scheduler.

Which travel profiles are supported?

Car, bicycle and pedestrian, each with its own rules, so a bike round is solved on the roads a bike can use.

Are the times traffic-aware?

No. Durations come from the road graph (speed limits, road class, surface and turn costs), not from live traffic. Rijwind Traffic is a separate live layer for your map and does not feed into the solved order today.

What comes back exactly?

The same shape as a plain route: your locations in the solved order, each with the index it had in your request, a summary with total distance and time, and a leg per hop with its geometry and manoeuvres.

Is there a free tier?

Yes. The free plan includes 10,000 units a month with no card and no sales call, which is a nine-stop round a thousand times over. It is a hard cap, so a runaway loop cannot produce a bill.

Where are my requests processed?

In the European Union, end to end. No part of the request path touches a US-controlled provider, which is what makes the GDPR and data-residency conversation short. We publish a DPA and a full sub-processor list.

Solve tomorrow's round tonight.

Ten thousand units a month, free. The same key covers maps, search and routing when you get to them.

Depot, 12 drops, back to the depot, by bikeGet an API key
No credit card. No sales call. A spending cap you set yourself.Read the quickstart