Open Topo Data

Geocoding API · Elevation data · Terrain · GPS coordinates · Topography

TL;DR

Open Topo Data provides a free elevation API. Submit GPS coordinates (latitude, longitude) and get elevation in meters above sea level. Supports multiple global and regional datasets: ETOPO1 (global 1-arc-minute), NED 10m (US only), NZ DEM (New Zealand), and more. Up to 100 locations per request. No API key required.

Quick start: https://api.opentopodata.org/v1/etopo1?locations=40.71,-74.00

No API key needed — free elevation data!

How to Use This API

1. Get Elevation for a Single Point

Get elevation for Manhattan (lat=40.71, lon=-74.00) using the global ETOPO1 dataset:

https://api.opentopodata.org/v1/etopo1?locations=40.71,-74.00

2. Multiple Locations in One Request

Get elevations for several points (up to 100):

https://api.opentopodata.org/v1/etopo1?locations=40.71,-74.00|48.85,2.35|35.68,139.76

3. Use US-Specific NED 10m Dataset

Higher resolution (10m) for locations within the United States:

https://api.opentopodata.org/v1/ned10m?locations=40.71,-74.00

4. JavaScript — Elevation Profile Along a Path

// Generate elevation profile for a hiking trail
const points = '46.85,-121.76|46.86,-121.75|46.87,-121.74|46.88,-121.73';
fetch(`https://api.opentopodata.org/v1/ned10m?locations=${points}`)
  .then(r => r.json())
  .then(data => {
    data.results.forEach((r, i) => {
      console.log(`Point ${i + 1}: ${r.elevation}m`);
    });
    const avg = data.results.reduce((s, r) => s + r.elevation, 0) / data.results.length;
    console.log(`Average elevation: ${avg.toFixed(1)}m`);
  });

5. Python — Mountain Elevation Check

import requests

peaks = [
    ('Everest', 27.99, 86.93),
    ('Kilimanjaro', -3.07, 37.35),
    ('Fuji', 35.36, 138.73),
    ('Denali', 63.07, -151.01),
]

locations = '|'.join(f'{lat},{lon}' for _, lat, lon in peaks)
resp = requests.get(
    'https://api.opentopodata.org/v1/etopo1',
    params={'locations': locations}
).json()

for (name, _, _), result in zip(peaks, resp['results']):
    print(f"{name}: {result['elevation']}m (dataset: {resp['dataset']})")
Manhattan elevation: https://api.opentopodata.org/v1/etopo1?locations=40.71,-74.00

Frequently Asked Questions

What elevation datasets are available?
etopo1 — global 1-arc-minute (~1.8km), ned10m — US only 10m resolution, nzdem — New Zealand 8m resolution, mapzen — global (various resolutions). Each dataset has different geographic coverage and resolution.
How many locations can I query per request?
Up to 100 locations per request, separated by vertical bars (|). For more than 100 locations, make multiple requests.
What coordinate system does the API use?
WGS84 latitude/longitude (EPSG:4326). Latitude first, then longitude. Negative values for south and west. Decimal degrees format.
What units is elevation returned in?
Elevation is returned in meters above sea level. Negative values indicate below sea level. The API response includes a status field for each result (OK or DATA_MISSING).
Is there a rate limit?
Open Topo Data is free for reasonable use. The hosted version is a community resource. For high-volume applications, consider self-hosting using the open-source code.
Can I use this for hiking/trail apps?
Yes — the NED 10m dataset is great for US hiking elevation profiles. For global trails, ETOPO1 provides reasonable accuracy for most outdoor applications. Generate elevation profiles along trail coordinates.

API Details

API URL
https://api.opentopodata.org/v1/{dataset}
Documentation
opentopodata.org
Category
Geocoding
Authentication
Not Required
Datasets
etopo1 (global), ned10m (US), nzdem (NZ), mapzen (global)

What You Can Build