Elevation that turns a route into a climb.

The height of the ground at every point you ask for. Send a route as one polyline and get it back as a clean profile, or send up to 512 points of your own. One unit either way, anywhere on Earth.

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

Real response · by bike1 unit

Bourg-d'Oisans to Alpe d'Huez

climbing
1,169m
high point
1,827m
by bike
45min
POST /elevation/v1 · one polyline of 872 points · samples: 256

12.1 km · 1,169 m up · 256 samples · 1 unit

Where it lands in your product.

Nobody ships an endpoint. They ship a route card with the climb under it, a ride log with honest metres of ascent, a course list sorted by how hard it is. This is what elevation looks like from the outside.

Map of the climb from Bourg-d'Oisans to Alpe d'Huez with the route drawn through its hairpins

Bourg-d'Oisans to Alpe d'Huez

12.1 km · 1,169 m up

© OpenStreetMap contributors

The climb, before the ride.

A route from the directions API, sent back as one polyline, comes back as 256 heights along it. Draw them under the map and a rider knows what the hairpins cost before clipping in.

Plan the route first
The Alpe d'Huez valley on the interactive map in the Outdoor style, with shaded relief and contour lines in 3D© OpenStreetMap contributors

The same ground, shaded on the map.

The heights the API returns come from the same terrain that shades the Outdoor style and lifts the 3D view. Numbers and picture agree because they are one dataset.

The Outdoor style

A ride being recorded, one GPS point every second

0 track points0 min
one polyline · 256 samples back
1unit for the whole ride

up to 1,000 samples
still 1 unit

One unit, however long the ride.

A track is thousands of points; the request is one polyline. The API resamples it into a clean, evenly spaced profile, 256 samples by default and up to a thousand, for one unit.

See what a month costs
climb.ts
const { elevations } = await rijwind.elevation({
  encodedPolyline: route.trip.legs[0].shape, samples: 256,
});

let climb = 0;
for (let i = 1; i < elevations.length; i++) {
  climb += Math.max(0, elevations[i].elevation - elevations[i - 1].elevation);
} // 1169 m for Alpe d'Huez

Route in, profile out, climb in three lines.

Heights are all the API returns. Total ascent, the grade of a segment or the steepest kilometre are a reduce over the array, which is also why a point-only request works the same way.

Read the elevation guide

Every answer has the same shape.

One array, one entry per point or per sample, each with its coordinates and a height. A points request and a route request come back looking identical, so the code that draws a profile draws both.

Every field, in the docs ↗
elevations · 256 samples
  1. {
  2. "elevations": [// one entry per sample, in order along the route
  3. { "lat": 45.055273, "lon": 6.029774, "elevation": 719.2 },// Bourg-d'Oisans, metres above sea level
  4. { "lat": 45.05495767183021, "lon": 6.030082393860183, "elevation": 718.9 },// the samples are evenly spaced, here 45 m apart
  5. …
  6. { "lat": 45.092159, "lon": 6.068641, "elevation": 1820.0 }// Alpe d'Huez, 1,101 m above the first sample; null where there is no ground, like open sea
  7. ]
  8. }

The short version.

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

ElevationHowever many points or samples it carries.
1 unit / request
Points modeYour own coordinates, one height each, same order back.
up to 512
Route modeOne encoded polyline in, evenly spaced heights out.
256 samples, up to 1,000
ResolutionOne worldwide terrain model, interpolated between grid points.
about 30 m
Coveragenull over open water, never a silent zero.
worldwide
Ascent, gradeThe response is heights only. A reduce over the array.
yours to compute
Finer national dataShort ramps narrower than the grid are smoothed.
not yet
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.

Elevation, answered.

What does the elevation API return?

The height of the ground above sea level, in metres, for each point you send. Either for a list of points of your own, or for evenly spaced samples along a route you send as one encoded polyline. Each answer carries the point's coordinates and its elevation, in the order you asked.

What is it for?

Climb profiles under a planned route, total ascent for a ride or a hike, gradient colouring on a map, the steepest kilometre of a course, sorting routes by how hard they are, and any feature where 'how high is this' or 'how much climbing is that' is the question.

How much does it cost?

One unit per request, whether it carries one point, five hundred points or a whole route. Units come from the same monthly pool as maps, geocoding and routing.

How do I get a profile for a whole ride?

Send the route's geometry as one encoded polyline, the same shape the directions API returns, and say how many samples you want: 256 by default, up to a thousand. The API spaces them evenly along the line and returns one height per sample, so a ten thousand point GPS track never has to be sent point by point.

How accurate is it?

Heights are sampled from a worldwide terrain model on a grid of about 30 metres, interpolated between grid points. Over a ride the total ascent is a solid number; the three rides on this page came out within a few percent of their published climbs. A single point on a steep slope can be off by a few metres, and a short ramp narrower than the grid is smoothed.

Where is it weakest?

Hairpins and cuttings. With samples 30 to 50 metres apart, a road that switchbacks up a slope can produce a steeper apparent grade between two neighbouring samples than the road ever has, because the straight line between them crosses the slope. Use ascent and the profile shape, and treat any single-segment grade with suspicion. There is also no finer national data yet and no depth for water.

Does it return ascent, descent or grade?

No, only heights. Ascent is the sum of the positive differences between neighbouring samples, grade is a difference divided by a distance, and both are three lines of code on your side, which also lets you choose your own smoothing.

What happens over the sea?

Where there is no ground the elevation is null rather than zero, so an offshore point never silently reads as sea level. Coastlines and lakes have heights like any other land.

Is there a free tier?

Yes. The free plan includes 10,000 units a month with no card and no sales call, which is 10,000 profiles if that is all you spend them on. 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.

Know the climb before the ride.

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

Bourg-d'Oisans to Alpe d'Huez, by bikeGet an API key
No credit card. No sales call. A spending cap you set yourself.Read the elevation guide