Topo API
For AI assistants, see the Topo MCP server page.
The terrain and outdoor data behind Topo mode on the PublicGIS map, as plain JSON. Free for everyone, no account needed.
Start in one line
curl 'https://www.publicgis.com/api/topo/v1/terrain?lat=46.8529&lng=-121.7604'
Every answer is JSON with the same shape: data holds the answer, sources names where it came from, and request_id identifies the call. Coordinates are WGS84 decimal degrees, and every elevation and distance is in meters.
Free plan and limits
| Plan | Requests a minute | Credits a day | How |
|---|---|---|---|
| Free, no key | 30 | 1,000 | Just call it. Counted per address. |
| Free key | 120 | 10,000 | Send Authorization: Bearer pgt_... or X-API-Key. Counted per key. |
Each endpoint costs the credits shown below. Search allows 20 requests a minute, the full location report 10, and place, weather, snow, water, fires, land and maps 30 each, because they lean on shared public services. Every successful response carries RateLimit-Remaining and X-Credits-Remaining headers; when you hit a limit you get status 429 with Retry-After. A request that fails after the limit check, such as a place with no forecast, still uses its credits. Daily credits reset at midnight UTC. The same limits cover the API and the MCP server together. GET /api/topo/v1/usage shows where you stand.
Get a free key
Endpoints
- Elevation at points:
/api/topo/v1/elevation - Terrain at a point:
/api/topo/v1/terrain - Elevation profile of a path:
/api/topo/v1/profile - Terrain statistics for an area:
/api/topo/v1/area - Describe a place:
/api/topo/v1/place - Search places:
/api/topo/v1/search - Named features near a point:
/api/topo/v1/features - Weather forecast and alerts:
/api/topo/v1/weather - Snow depth nearby:
/api/topo/v1/snow - Streamflow and tides:
/api/topo/v1/water - Wildfires, smoke and air quality:
/api/topo/v1/fires - Land, access and rules:
/api/topo/v1/land - Geology:
/api/topo/v1/geology - Topographic maps:
/api/topo/v1/maps - Sun and moon:
/api/topo/v1/sky - Coordinates, grid references and compass:
/api/topo/v1/grid - Everything at a point:
/api/topo/v1/report
GET endpoints take query parameters. A list of points is written lat,lng|lat,lng, or as a Google encoded polyline in path. POST endpoints also take a JSON body with the same names, or a GeoJSON geometry or Feature (a LineString or MultiPoint for points, a Polygon for an area).
GET POST /api/topo/v1/elevation
Ground elevation in meters for up to 500 points, from the same lidar and 3DEP terrain models the map uses (1 m lidar where it exists in the US, 10 m elsewhere in the US, about 30 m worldwide).
1 credit per 100 points ◦ MCP tool get_elevation
| Parameter | Type | Meaning |
|---|---|---|
points required | points | Points as objects with lat and lng. |
curl 'https://www.publicgis.com/api/topo/v1/elevation?points=46.8529,-121.7604|44.2706,-71.3033'
GET /api/topo/v1/terrain
Elevation, slope (degrees and percent grade), aspect (the compass direction the slope faces) and local relief within 1 km with the highest and lowest points, computed from lidar and 3DEP terrain models. open_water is true, with a note, where the point is sea-level water with no ground height.
2 credits ◦ MCP tool get_terrain
| Parameter | Type | Meaning |
|---|---|---|
lat required | number | Latitude in decimal degrees (WGS84). |
lng required | number | Longitude in decimal degrees (WGS84). |
curl 'https://www.publicgis.com/api/topo/v1/terrain?lat=46.8529&lng=-121.7604'
GET POST /api/topo/v1/profile
Distance, total climb and descent (rises under 2 m ignored), low and high points, average grade, steepest 50 m stretch, an estimated hiking time (Tobler's hiking function) and evenly spaced elevation samples along a path of up to 5,000 points and 500 km.
3 credits ◦ MCP tool get_elevation_profile
| Parameter | Type | Meaning |
|---|---|---|
points required | points | Path vertices in order, as objects with lat and lng. |
samples | integer | How many evenly spaced samples to return (2 to 1000). |
curl 'https://www.publicgis.com/api/topo/v1/profile?points=46.7867,-121.7353|46.8529,-121.7604&samples=50'
GET POST /api/topo/v1/area
Elevation range and mean, slope statistics with the share of ground in each steepness class, and the share facing each compass direction, for a bounding box or polygon of up to 100 square km.
5 credits ◦ MCP tool get_area_terrain
| Parameter | Type | Meaning |
|---|---|---|
bbox | array | west, south, east, north in decimal degrees. |
polygon | points | Polygon ring as objects with lat and lng (not closed). |
curl 'https://www.publicgis.com/api/topo/v1/area?bbox=-121.80,46.83,-121.72,46.87'
GET /api/topo/v1/place
What is at a point: the nearest town and its direction, county and state, the 12 digit USGS watershed (HUC12), the USGS 7.5 minute quad, and named features nearby (summits, lakes, streams, springs, gaps and more) with distance and bearing. Names and quads cover the United States; town, county and state work worldwide.
3 credits ◦ MCP tool describe_place
| Parameter | Type | Meaning |
|---|---|---|
lat required | number | Latitude in decimal degrees (WGS84). |
lng required | number | Longitude in decimal degrees (WGS84). |
curl 'https://www.publicgis.com/api/topo/v1/place?lat=46.8529&lng=-121.7604'
GET /api/topo/v1/search
Find towns, summits, lakes, streams, trails, parks and addresses by name. Pass lat and lng to prefer results near a point. Returns up to 8 results with coordinates.
2 credits ◦ MCP tool search_places
| Parameter | Type | Meaning |
|---|---|---|
q required | string | What to look for, for example "Mount Rainier" or "Bear Creek, MN". |
lat | number | Optional latitude to prefer nearby results. |
lng | number | Optional longitude to prefer nearby results. |
curl 'https://www.publicgis.com/api/topo/v1/search?q=Half%20Dome'
GET /api/topo/v1/features
USGS named features (GNIS) within a radius, nearest first: summits, lakes, streams, springs, falls, gaps, ridges, valleys, glaciers, mines, trails and more. Filter by class, for example Spring or Summit. United States only.
1 credit ◦ MCP tool find_named_features
| Parameter | Type | Meaning |
|---|---|---|
lat required | number | Latitude in decimal degrees (WGS84). |
lng required | number | Longitude in decimal degrees (WGS84). |
radius_m | integer | Search radius in meters (100 to 50,000). |
feature_class | string | Optional GNIS class such as Summit, Lake, Stream, Spring, Falls, Gap, Ridge, Valley, Glacier, Mine, Trail, Cliff, Arch, Basin, Flat. |
limit | integer |
curl 'https://www.publicgis.com/api/topo/v1/features?lat=46.8529&lng=-121.7604&feature_class=Glacier&radius_m=8000'
GET /api/topo/v1/weather
National Weather Service forecast for the next 7 days at a US point (2.5 km grid), active watches and warnings, and how much colder or warmer the exact spot should be than the forecast because of its height (standard lapse rate of 6.5 °C per km).
2 credits ◦ MCP tool get_weather
| Parameter | Type | Meaning |
|---|---|---|
lat required | number | Latitude in decimal degrees (WGS84). |
lng required | number | Longitude in decimal degrees (WGS84). |
curl 'https://www.publicgis.com/api/topo/v1/weather?lat=46.8529&lng=-121.7604'
GET /api/topo/v1/snow
The nearest NRCS SNOTEL mountain weather stations within 60 km with their latest hourly snow depth, snow water equivalent and air temperature, elevation, distance and direction. Western US and Alaska.
2 credits ◦ MCP tool get_snow
| Parameter | Type | Meaning |
|---|---|---|
lat required | number | Latitude in decimal degrees (WGS84). |
lng required | number | Longitude in decimal degrees (WGS84). |
curl 'https://www.publicgis.com/api/topo/v1/snow?lat=45.60&lng=-110.90'
GET /api/topo/v1/water
Up to five of the nearest active USGS stream gauges within 30 km with the latest flow (cubic feet per second), gage height and water temperature, plus the next high and low tides at the nearest NOAA tide station within 25 km. United States.
2 credits ◦ MCP tool get_water
| Parameter | Type | Meaning |
|---|---|---|
lat required | number | Latitude in decimal degrees (WGS84). |
lng required | number | Longitude in decimal degrees (WGS84). |
curl 'https://www.publicgis.com/api/topo/v1/water?lat=39.75&lng=-105.22'
GET /api/topo/v1/fires
Active wildfires within 50 miles, about 80 km (name, acres, percent contained, discovery date, distance and direction), whether the point is inside a current fire perimeter, satellite smoke overhead, and the current EPA AirNow air quality category. United States.
2 credits ◦ MCP tool get_fires_and_smoke
| Parameter | Type | Meaning |
|---|---|---|
lat required | number | Latitude in decimal degrees (WGS84). |
lng required | number | Longitude in decimal degrees (WGS84). |
curl 'https://www.publicgis.com/api/topo/v1/fires?lat=45.60&lng=-110.90'
GET /api/topo/v1/land
Who manages the land and whether the public can enter (PAD-US), which directions a different landowner or designation starts within 61 m (200 ft), the township, range and section (PLSS), drone airspace (FAA LAANC ceiling, security restrictions, national parks, the nearest public-use airport within 5 miles), Forest Service roads and trails open to motor vehicles within 400 m, and Forest Service trailheads and campgrounds nearby. United States.
3 credits ◦ MCP tool get_land
| Parameter | Type | Meaning |
|---|---|---|
lat required | number | Latitude in decimal degrees (WGS84). |
lng required | number | Longitude in decimal degrees (WGS84). |
curl 'https://www.publicgis.com/api/topo/v1/land?lat=38.90&lng=-110.00'
GET /api/topo/v1/geology
The mapped rock or sediment unit at a point: name, rock type, geologic age in words and millions of years, a description, and the source geologic map. Worldwide, best in the United States.
1 credit ◦ MCP tool get_geology
| Parameter | Type | Meaning |
|---|---|---|
lat required | number | Latitude in decimal degrees (WGS84). |
lng required | number | Longitude in decimal degrees (WGS84). |
curl 'https://www.publicgis.com/api/topo/v1/geology?lat=38.62&lng=-109.60'
GET /api/topo/v1/maps
Every USGS historical topographic map covering a point (1880s to 2000s, with year, scale and GeoPDF and GeoTIFF download links) and the current US Topo map. United States.
2 credits ◦ MCP tool find_topo_maps
| Parameter | Type | Meaning |
|---|---|---|
lat required | number | Latitude in decimal degrees (WGS84). |
lng required | number | Longitude in decimal degrees (WGS84). |
curl 'https://www.publicgis.com/api/topo/v1/maps?lat=46.8529&lng=-121.7604'
GET /api/topo/v1/sky
Sunrise, sunset, solar noon, civil, nautical and astronomical twilight, golden hours, day length, moonrise, moonset and moon phase with the next full and new moon, for a date at a point, in the point's local time zone. Worldwide.
1 credit ◦ MCP tool get_sun_and_moon
| Parameter | Type | Meaning |
|---|---|---|
lat required | number | Latitude in decimal degrees (WGS84). |
lng required | number | Longitude in decimal degrees (WGS84). |
date | string | Local date YYYY-MM-DD; defaults to today at the point. |
curl 'https://www.publicgis.com/api/topo/v1/sky?lat=46.8529&lng=-121.7604&date=2026-10-03'
GET /api/topo/v1/grid
The point in decimal degrees, degrees minutes seconds, UTM, MGRS and US National Grid, plus magnetic declination and inclination from the World Magnetic Model 2025, for map and compass work. Worldwide.
1 credit ◦ MCP tool get_grid_reference
| Parameter | Type | Meaning |
|---|---|---|
lat required | number | Latitude in decimal degrees (WGS84). |
lng required | number | Longitude in decimal degrees (WGS84). |
curl 'https://www.publicgis.com/api/topo/v1/grid?lat=46.8529&lng=-121.7604'
GET /api/topo/v1/report
One call for the full terrain and outdoors picture at a point: terrain, place names, land and access, geology, weather, snow, water, wildfires and air, sun and moon, and grid references. Sections that a source could not answer in time are listed in unavailable.
15 credits ◦ MCP tool get_location_report
| Parameter | Type | Meaning |
|---|---|---|
lat required | number | Latitude in decimal degrees (WGS84). |
lng required | number | Longitude in decimal degrees (WGS84). |
curl 'https://www.publicgis.com/api/topo/v1/report?lat=45.60&lng=-110.90'
GET /api/topo/v1/usage
Your plan, limits and what you have used today. Free.
POST /api/topo/v1/keys
Create a free key with a JSON body {"name":"My app","email":"optional","accept_terms":true}. Up to 3 keys per address a day. The key is shown once; PublicGIS stores only a hash.
Errors
Errors look like {"error":{"code":"bad_request","message":"lat: 95 is greater than the maximum of 85"},"request_id":"req_..."}. Codes: bad_request (400), invalid_key (401), not_found and no_data (404), method_not_allowed (405), too_large (413), rate_limited (429), upstream_unavailable (502) when a public source does not answer in time, and busy (503).
API terms
- The Topo API and MCP server are free to use, including in commercial projects, within the limits above.
- Show the sources: credit PublicGIS and the providers listed in each answer's
sourceswhere you show the data. - Every value is an estimate from public data. It is not a survey, a flood, avalanche, airspace or engineering determination, or a navigation device. Check conditions on the ground and with the official source before you rely on it.
- Do not use many keys or addresses to get around the limits, and do not copy the data in bulk. Ask if you need more.
- There is no uptime promise. Limits and endpoints may change; breaking changes get a new version path.
- We keep counts of calls per key and per day, the key's name and optional email, and a daily scrambled code for keyless callers instead of their address. Requests are not sold or shared.
- Questions: privacy@publicgis.com.
Open the map in Topo mode ◦ Topo API ◦ Topo MCP ◦ Parcel API ◦ Parcel MCP ◦ Terms ◦ Privacy ◦ llms.txt