Lat / lng → elevation.
Global, in one call.
Per-point height above sea level for any coordinate on Earth. Up to 500 points per request, metric or imperial, flat array or GeoJSON LineString output.
Backed by a global 30-metre DEM (Tilezen blend — SRTM 1-arcsec for most of the world, ASTER + GMTED2010 for the poles). The same data Valhalla uses for routing-with-elevation, served at /v1/elevation. 1 credit per request — pack up to 500 points in to amortize. Inline on Places results too via ?include=elevation.
Four ways to ask for elevation
All backed by the same global 30 m DEM. All deterministic — same query, same heights, every time.
Single point
One lat/lng → one height. The simplest case — a quick lookup for any address or coordinate.
GET /v1/elevation?points=38.8977,-77.0365
Route profile (up to 500 points)
Pipe-separated points along a path get heights in a single round-trip. Build elevation charts for trails, bike routes, drone flight plans.
GET /v1/elevation?points=lat1,lng1|lat2,lng2|…&format=geojson
Metric or imperial
Default returns metres. Pass ?units=imperial for feet — same precision, same data, no client-side conversion.
GET /v1/elevation?points=…&units=imperial
Inline on Places
Pass ?include=elevation on any /v1/places call to get an ele field on every result — no second round-trip when you're already fetching POIs.
GET /v1/places?q=hotel&country=US&include=elevation
What's actually behind the heights
The DEM is a global Tilezen tileset: SRTM 1-arcsecond (NASA's 2000 Shuttle Radar Topography Mission) covers landmass from 60°S to 60°N — most of the world's people and terrain. ASTER GDEM v3 (JPL/METI) covers the high-latitude bands above 60°. GMTED2010 fills the polar gaps. All open-data, public-domain or equivalent licences.
Horizontal grid spacing is 1 arc-second — roughly 30 m at the equator, finer closer to the poles. Vertical accuracy is ±16 m for SRTM-covered areas (better in flat terrain, looser in mountains and forest canopy). Querying outside the loaded tile band returns null for that point.
Served from Valhalla's /height internally, with the same tiles loaded on Seattle (primary) and arbnode (HA backup). Bilinear interpolation between the 4 grid neighbours gives sub-cell precision.
Try it on a real elevation profile
Pick a famous route — Mt Everest summit traverse, Death Valley to Mt Whitney, a Pacific Crest segment — and see the elevations plotted as a chart. No signup.
Open the live demo →Three lines of code
Same call, three languages. SDKs at version 1.16.0 on PyPI and npm.
# point or path → heights, one call curl "https://csv2geo.com/api/v1/elevation?points=38.8977,-77.0365|39.7392,-104.9903&api_key=geo_live_..."
from csv2geo import Client c = Client("geo_live_...") r = c.elevation([ (38.8977, -77.0365), (39.7392, -104.9903)]) for p in r["results"]: print(p["elevation_m"])
import { Client } from "csv2geo-sdk"; const c = new Client("geo_live_..."); const r = await c.elevation([ [38.8977, -77.0365], [39.7392, -104.9903]]); r.results.forEach(p => console.log(p.elevation_m));
What people build with it
The patterns we see most often in real apps.
Hiking & biking route profiles
Plot elevation gain across a GPX track. 500 points covers most day hikes; longer routes resample down to the cap.
Drone & aviation planning
Validate flight paths stay clear of terrain. Cross-check waypoint altitudes against ground elevation before takeoff.
Solar siting
Combine with sun-angle calculations to estimate insolation and ridge-shadow hours. Free DEM substrate beats commercial pixel sources.
Real-estate & insurance
Surface elevation alongside addresses for flood-zone / coastal-risk context. Combines naturally with aerial imagery for full property picture.
Agriculture & land use
Slope and aspect derived from a 3-point sample tells you whether a parcel drains, is south-facing, or holds water.
POI enrichment
Pass ?include=elevation on any /v1/places search and skip the second call entirely.