geoprimitives

Send a polyline as an array of [longitude, latitude] positions and it answers with elevations sampled at equal geodesic spacing along it, from the USGS 3D Elevation Program seamless DEM, plus the cumulative gain and loss and the minimum and maximum. One call for a whole route rather than one call per point: 2000 samples cost what two cost. COVERAGE is the state of Alaska, whole, and nothing else yet; see GET /v1/elevation for the full statement, which this route shares and repeats under `coverage` on every response. Every sample is checked against the coverage before a tile is read, and a profile with any sample outside Alaska is refused with outside_coverage naming the sample. That check reads coordinates, so it runs after payment like the rest of the handler; the refusal does not settle and nothing is charged, but it costs a signature and a second round trip. Canada is not served even where USGS publishes pixels over it, for the licensing reason stated there. SAMPLING: samples are placed at equal geodesic distance (GRS 80) along the polyline, each on the great circle of its segment, the first at the first position and the last at the last. Omit `samples` to sample every 60 m, the native pixel height, up to 2000; pass it to choose the count. Each sample is bilinear over the four pixel centres around it by default, or `nearest` for the raster's own values; the response names the method. The source is the 2 arc-second product USGS publishes for Alaska, about 62 m north to south, so asking for spacing much under 60 m buys interpolation rather than information. VOIDS inside the line: gaps in the USGS footprint, the Canadian side of the border and water beyond the county limit are void. A sample whose window is entirely void is null in the list and counted in `stats.voidSamples`; gain and loss are summed over consecutive non-null samples so a crossing of void water is not a descent to zero and back. Inshore water is 0 in some USGS blocks rather than void, so a line across a bay may read 0 m there, which is the source's value; see GET /v1/elevation. A profile that is void throughout is refused with no_data and not charged. SOURCE, VINTAGE, DATUMS AND ACCURACY are those of GET /v1/elevation: USGS 3DEP, public domain, NAVD88 metres, NAD83 horizontal read as WGS 84, IFSAR-derived in Alaska with metre-level vertical accuracy on open ground. Gain and loss over a 2 arc-second surface are an estimate of the terrain's, not of a track's: fine structure narrower than a pixel is not in the data. Limits: 500 positions in the polyline, 2000 samples, 1000 km of length, 512 elevation tiles read per call (about 2000 km of profile at the coarsest sampling; a 100 km profile at native spacing reads about 40), and a 1 MiB body. All are checked before a tile is read.

TradingLiveeip155:8453Exactvia cdp
ElevationProfileDem3depAlaska
Calls · 30d
1→ 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.010
Listed price
As published in the catalog. Always read the live 402 before paying.
1
Calls · 30d
Upstream's own call count for this endpoint, not ours.
1
Unique payers · 30d
Last called 2026-08-21 17:25Z
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.01USDC≈ $0.01 USD
on Base · exact scheme

Pay 0.01 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
10000 smallest units
The catalog’s raw entry
[
  {
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "extra": {
      "name": "USD Coin",
      "version": "2"
    },
    "payTo": "0x76A51b5Dd3729950B3b60c17f19252d221968FCe",
    "amount": "10000",
    "scheme": "exact",
    "network": "eip155:8453",
    "maxTimeoutSeconds": 300
  }
]

Extensions

{
  "bazaar": {
    "info": {
      "input": {
        "body": {
          "samples": 5,
          "coordinates": [
            [
              -149.8997,
              61.2181
            ],
            [
              -149.8397,
              61.2081
            ]
          ]
        },
        "type": "http",
        "method": "POST",
        "bodyType": "json"
      },
      "output": {
        "type": "json",
        "example": {
          "notes": [],
          "stats": {
            "maxMetres": 37.525,
            "minMetres": 30.598,
            "gainMetres": 9.733,
            "lossMetres": 5.204,
            "voidSamples": 0
          },
          "units": "metres",
          "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": null,
            "verticalDatum": "NAVD88",
            "horizontalDatum": "NAD83",
            "pixelArcSeconds": 2,
            "usgsPublishedRange": [
              "2013",
              "20260611"
            ]
          },
          "samples": [
            {
              "lat": 61.2181,
              "lon": -149.8997,
              "elevation": 31.763,
              "distanceMetres": 0
            },
            {
              "lat": 61.2156025,
              "lon": -149.8846964,
              "elevation": 34.569,
              "distanceMetres": 852.95
            },
            {
              "lat": 61.2131033,
              "lon": -149.8696952,
              "elevation": 30.598,
              "distanceMetres": 1705.89
            },
            {
              "lat": 61.2106025,
              "lon": -149.8546964,
              "elevation": 37.525,
              "distanceMetres": 2558.84
            },
            {
              "lat": 61.2081,
              "lon": -149.8397,
              "elevation": 36.292,
              "distanceMetres": 3411.78
            }
          ],
          "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"
            ]
          },
          "geometry": "Samples are spaced equally by geodesic distance (GRS 80) along the polyline; each lies on the great circle of its segment.",
          "tilesRead": 3,
          "sampleCount": 5,
          "lengthMetres": 3411.78,
          "interpolation": "bilinear",
          "spacingMetres": 852.95,
          "verticalDatum": "NAVD88"
        }
      }
    },
    "schema": {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "input"
      ],
      "properties": {
        "input": {
          "type": "object",
          "required": [
            "type",
            "method",
            "bodyType",
            "body"
          ],
          "properties": {
            "body": {
              "type": "object",
              "required": [
                "coordinates"
              ],
              "properties": {
                "samples": {
                  "type": "integer",
                  "maximum": 2000,
                  "minimum": 2,
                  "description": "How many samples to return, equally spaced along the line including both ends. Omit for one every 60 m, capped at 2000."
                },
                "coordinates": {
                  "type": "array",
                  "items": {
                    "type": "array",
                    "items": {
                      "type": "number"
                    },
                    "maxItems": 3,
                    "minItems": 2,
                    "description": "[longitude, latitude] in EPSG:4326; a third element is ignored."
                  },
                  "maxItems": 500,
                  "minItems": 2,
                  "description": "The polyline, in order. At least two distinct positions."
                },
                "interpolation": {
                  "enum": [
                    "bilinear",
                    "nearest"
                  ],
                  "type": "string",
                  "default": "bilinear",
                  "description": "bilinear (default) or nearest, as on GET /v1/elevation."
                }
              },
              "additionalProperties": false
            },
            "type": {
              "type": "string",
              "const": "http"
            },
            "method": {
              "enum": [
                "POST"
              ],
              "type": "string"
            },
            "bodyType": {
              "enum": [
                "json",
                "form-data",
                "text"
              ],
              "type": "string"
            }
          },
          "additionalProperties": false
        },
        "output": {
          "type": "object",
          "required": [
            "type"
          ],
          "properties": {
            "type": {
              "type": "string"
            },
            "example": {
              "type": "object"
            }
          }
        }
      }
    }
  }
}

Provenance

Seen in the source catalog
2026-08-21 17:25Z
Last indexed by Roundhouse
2026-09-20 17:20Z
Last enriched (probe, favicon, geo)
2026-09-24 08:15Z
x402 version
2
Max timeout
300s
Liveness probe
HTTP 404
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/profile, 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.