Sign insoon (not available yet)Get an API keysoon (not available yet)
Matrix · Directions · Isochrones
Distance and duration matrices, on real road travel times.
Travel-time matrices, directions and isochrones across North America — request and response compatible with the openrouteservice API. Change the base URL, add a key, keep your code.
10% of Google's entry price per element, 5% of its traffic-aware tier, and matrices big enough to ask for in one call.
The endpoints, the limits, the error shapes to write retry logic against, and what this API deliberately does not have. Paste it into a coding agent, or read it as a reference.
Narrow on purpose. Each one is the same shape openrouteservice returns, so your parsing code doesn't change either.
Matrix
Hero
POST /v2/matrix/{profile}
priced by origins × destinations
Every origin to every destination, duration and distance, in one request. This is
the call Google charges five dollars a thousand for and caps at 625 elements — a
25 by 25 matrix.
Directions
POST /v2/directions/{profile}
10 elements per call
Geometry, turn-by-turn instructions, and alternative routes. Encoded polyline or
GeoJSON, whichever your map wants.
Isochrones
POST /v2/isochrones/{profile}
priced by how far it reaches
Everywhere reachable in fifteen minutes, as a polygon. Site selection, service-area
maps, “commute time” filters on a listings site.
Before you switch
What the price buys, and what it doesn't.
We would rather lose the sale than the customer. Three things you are trading away, stated plainly:
No live traffic
Durations come from speed profiles on the road network, not from cars on it right
now. If your product hinges on a minute-accurate ETA in rush hour, buy Google. If
you are planning a day’s work, comparing options, or ranking by travel time, you
will not miss it.
OpenStreetMap data
Excellent in metros, where most routing happens and where OpenStreetMap is often
better than commercial data. More variable on rural roads and brand-new
subdivisions. Every response carries the date of the map data behind it, so how
fresh your answer is stays something you can read rather than something you have
to take on trust.
Bring your own coordinates
There is no geocoder and no places database here. You send longitude and latitude,
we send back numbers. Most teams already have coordinates from the system that
created the address — if you don’t, geocode once and cache.
Measured, not asserted
Ninety thousand pairs in two and a half seconds.
One call, three hundred origins against three hundred destinations. The numbers below were measured against production and the workflow that produced them can be re-run by anyone; if they drift, they are meant to be caught.
900× the work at 12× the time. Cost grows far more slowly than size, right across the range — and the effect holds at every step of it, not just the ends: the step from the second-largest matrix here to the largest is nine times the work for five times the time. That is the argument for asking in one call rather than chunking.
The big matrices are the predictable ones. A 300 × 300 request varies by two percent between its typical and its slowest run. A 10 × 10 varies by eighty. At small sizes you are measuring the network, because the routing is trivial; at large sizes the routing dominates and the number settles down.
What these numbers are not. They are one caller sending requests one after another, ten samples per size, timed from the client so they include everything between your code and ours. They say nothing about behaviour under concurrent load, which has not been measured. They were taken on the shared machine the beta runs on and will change when it moves.
Already on openrouteservice?
The migration is one line.
The hosted free tier allows 500 matrix requests a day, and there is no paid plan above it to move up to. That is a generous place to prototype and nowhere to launch from. We speak the same protocol with a far higher ceiling.
Your existing client library, your existing request bodies, your existing parsing. Point it somewhere else — and note that this really is only the base URL. Worth knowing: openrouteservice is retiring its own old host on 28 September, so staying put is a base URL change too.
This API is the routing layer underneath Optimiciti, a route planner for dispatchers and small fleets. If what you actually need is "assign these 400 stops to these 12 vans," that problem is already solved over there — and an optimization endpoint is on the way here.