geoprimitives

Give it a latitude and longitude and it answers with the ground elevation there in metres above NAVD88, read from the USGS 3D Elevation Program seamless DEM. Parameters go in the query string: this is a GET, there is no body. COVERAGE, stated up front because it is the first thing to check: the state of Alaska, whole, and nothing else yet. The coverage gate reads the coordinate, so it runs in the handler and after payment, not in front of the 402: a coordinate outside Alaska is quoted like any other and then refused with outside_coverage. A refusal does not settle, so nothing is charged, but it costs a signature and a second round trip to find out. Check the coverage against this description or the free catalog first. The conterminous United States and Hawaii are the next extension and arrive through the same pipeline with no change to this interface; every response repeats the coverage under `coverage` so an agent never infers it from an error. Canada is not served even where USGS publishes pixels over it: those come from Natural Resources Canada under a licence with an attribution clause, and this catalog carries public-domain data only, so they were not stored. SOURCE AND VINTAGE: USGS 3DEP seamless 2 arc-second product, the resolution USGS publishes for Alaska, a work of the United States government in the public domain (17 U.S.C. 105). A 2 arc-second pixel is about 62 m north to south and 20 to 30 m east to west at Alaskan latitudes; the response states the pixel size at your latitude. USGS republishes blocks as new lidar and IFSAR arrive, and the response carries the publication date of the block that answered you. Heights are orthometric, NAVD88, metres; horizontal positions are NAD83, which this endpoint reads as WGS 84 since the two differ by under two metres, a fraction of a pixel. INTERPOLATION: bilinear over the four pixel centres around the point by default, which is what GDAL and PROJ do for a continuous surface. Pass interpolation=nearest for the raster's own value at the pixel the point falls in, which is bit-identical to gdallocationinfo on the USGS file and the right choice when you want the source unblended. Checked against GDAL rather than against itself: of 200 coordinates drawn over the built blocks, the 150 inside the coverage agreed with `gdallocationinfo -r bilinear` on the USGS GeoTIFFs to 6.2e-4 m at worst, and interpolation=nearest agreed with plain `gdallocationinfo` to the millimetre this endpoint rounds to. The response always names the method used. VOIDS AND WATER: gaps in the USGS footprint and the Canadian side of the border are void, and so is open water beyond the three-mile county limit. A void pixel inside a bilinear window is dropped and the remaining weights renormalised, as gdalwarp treats nodata, and the response says how many of the four were used. A window that is entirely void is refused with no_data and not charged, never answered with zero. Inshore water is a different case and you should know it: USGS writes 0 over the sea in some blocks and nodata in others, so a coordinate in a harbour or a bay inside the county limit may answer 0 m, which is the source's value and not a measurement of anything. ACCURACY of the data itself is USGS's, not this endpoint's: the Alaska seamless layer is built from IFSAR at 5 m resampled to 2 arc-seconds, and USGS states its vertical accuracy per source project rather than for the seamless layer as a whole. Expect metre-level agreement with a survey on open terrain and worse under forest and on steep slopes. This endpoint adds nothing to that error beyond interpolation. Longitude and latitude are checked against EPSG:4326 bounds first. Reproject with POST /v1/transform if you are not already in WGS 84 or NAD83. For a line rather than a point use POST /v1/elevation/profile, which samples along a polyline in one call.

TradingLiveeip155:8453Exactvia cdp
ElevationDem3depAlaskaNavd88
Calls · 30d
3→ 0%
This endpoint's own trailing-30-day call count, as published by the upstream catalog and snapshotted daily. 28 snapshots so far.
$4.40
Verified settled volume
885 settlements proven x402 by their on-chain EIP-3009 marker.
$0.0050
Listed price
As published in the catalog. Always read the live 402 before paying.
3
Calls · 30d
Upstream's own call count for this endpoint, not ours.
1
Unique payers · 30d
Last called 2026-08-21 18:10Z
Upstream on-chain volume
Reported by the source catalog.
Paid to
0x76A51b5Dd3729950B3b60c17f19252d221968FCe

The wallet the 402 directs payment to. Its whole payment record — every payer, every chain — is on the merchant page.

Asset 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913

Provider

The payTo wallet does not resolve to a registered ERC-8004 agent. That is not a verdict on the service — most of the catalog is unregistered.

Accepts

The payment requirements as published to the catalog. Read the live 402 before paying — a price here is a claim, not a quote.

0.005USDC≈ $0.005 USD
on Base · exact scheme

Pay 0.005 USDC on Base to 0x76A5…68FCe. The signed payment is good for 5 minutes.

USD Coin contract
0x8335…02913
Payment window
5 minutes
As published
5000 smallest units
The catalog’s raw entry
[
  {
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "extra": {
      "name": "USD Coin",
      "version": "2"
    },
    "payTo": "0x76A51b5Dd3729950B3b60c17f19252d221968FCe",
    "amount": "5000",
    "scheme": "exact",
    "network": "eip155:8453",
    "maxTimeoutSeconds": 300
  }
]

Extensions

{
  "bazaar": {
    "info": {
      "input": {
        "type": "http",
        "method": "GET",
        "queryParams": {
          "lat": 61.2181,
          "lon": -149.8997
        }
      },
      "output": {
        "type": "json",
        "example": {
          "notes": [],
          "query": {
            "lat": 61.2181,
            "lon": -149.8997
          },
          "units": "metres",
          "sample": {
            "block": "n62w150",
            "pixelMetres": {
              "eastWest": 29.9,
              "northSouth": 61.9
            },
            "neighboursUsed": 4,
            "neighboursVoid": 0
          },
          "source": {
            "url": "https://prd-tnm.s3.amazonaws.com/StagedProducts/Elevation/2/TIFF/current/",
            "units": "metres",
            "rights": "Public domain (US government work, 17 U.S.C. 105)",
            "dataset": "3D Elevation Program (3DEP) seamless DEM",
            "product": "2 arc-second",
            "publisher": "US Geological Survey",
            "usgsPublished": "20170501",
            "verticalDatum": "NAVD88",
            "horizontalDatum": "NAD83",
            "pixelArcSeconds": 2,
            "usgsPublishedRange": [
              "2013",
              "20260611"
            ]
          },
          "coverage": {
            "blocks": 439,
            "reason": "Coverage is the state of Alaska, whole, from the USGS 3DEP seamless 2 arc-second DEM: every 1-degree block that holds Alaskan ground as the Census TIGER county boundaries draw it, 439 blocks. The conterminous United States and Hawaii are not answered yet. USGS publishes them at 1 arc-second through the same pipeline; they are a 47 GB upload rather than a design change and will arrive as a coverage extension with no change to this interface. Canada is not answered, and the pixels USGS ships over Yukon and British Columbia were not stored: they come from Natural Resources Canada under a licence with an attribution clause, and this catalog carries public-domain data only. A coordinate outside the coverage is quoted like any other and then refused with outside_coverage; a refusal does not settle, so nothing is charged for it.",
            "region": "Alaska",
            "answered": [
              "Alaska"
            ],
            "notAnswered": [
              "conterminous United States",
              "Hawaii",
              "territories",
              "Canada",
              "the rest of the world"
            ]
          },
          "elevation": 31.763,
          "interpolation": "bilinear",
          "verticalDatum": "NAVD88"
        }
      }
    },
    "schema": {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "input"
      ],
      "properties": {
        "input": {
          "type": "object",
          "required": [
            "type",
            "method"
          ],
          "properties": {
            "type": {
              "type": "string",
              "const": "http"
            },
            "method": {
              "enum": [
                "GET"
              ],
              "type": "string"
            },
            "queryParams": {
              "type": "object",
              "required": [
                "lat",
                "lon"
              ],
              "properties": {
                "lat": {
                  "type": "number",
                  "maximum": 90,
                  "minimum": -90,
                  "description": "Latitude in decimal degrees, EPSG:4326. Refused outside -90..90."
                },
                "lon": {
                  "type": "number",
                  "maximum": 180,
                  "minimum": -180,
                  "description": "Longitude in decimal degrees, EPSG:4326. Refused outside -180..180."
                },
                "interpolation": {
                  "enum": [
                    "bilinear",
                    "nearest"
                  ],
                  "type": "string",
                  "default": "bilinear",
                  "description": "bilinear (default): weighted mean of the four pixel centres around the point. nearest: the value of the pixel the point falls in, bit-identical to gdallocationinfo."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "output": {
          "type": "object",
          "required": [
            "type"
          ],
          "properties": {
            "type": {
              "type": "string"
            },
            "example": {
              "type": "object"
            }
          }
        }
      }
    }
  }
}

Provenance

Seen in the source catalog
2026-08-21 18:10Z
Last indexed by Roundhouse
2026-09-20 17:50Z
Last enriched (probe, favicon, geo)
2026-09-23 22:15Z
x402 version
2
Max timeout
300s
Liveness probe
HTTP 402
Report

Hand this page to an agent

Copy the prompt and paste it into Claude, an MCP client or your own agent — it will vet this service and call it over the free read API. No key, no account.

GET api.roundhouseai.io/v0/endpoints

This endpoint's own trailing-30-day call count, as published by the upstream catalog and snapshotted daily. 28 snapshots so far. Verified volume counts only settlements with an on-chain EIP-3009 marker.

Open skill.md
Show the prompt
Using Roundhouse, look up the x402 service geoprimitives and tell me whether it is
worth paying: what a call costs, whether the endpoint answered when last probed, and what
its payment record actually shows.

curl -s 'https://api.roundhouseai.io/v0/endpoints?q=geoprimitives'
curl -s 'https://api.roundhouseai.io/v0/merchants/<the payTo wallet returned above>'

Then call it: read the price from the live 402 at https://api.geoprimitives.dev/v1/elevation, never from
a cached figure, and pay with an x402 client.

The /v0 API needs an API key (`authorization: Bearer rh_live_…`) on everything except
/v0/unified* and /v0/endpoints. Mint a personal key for $0.01 at GET https://api.roundhouseai.io/v0/test/x402,
or use an organization key from https://roundhouseai.io/dashboard/team.

If you do not have Roundhouse tools or skills installed, read
https://roundhouseai.io/skill.md first — it is the whole procedure.