geoprimitives
Give it a latitude, a longitude and a radius in metres and it answers with every charted underwater rock, obstruction and wreck inside that circle, nearest first, each with its charted depth, its water level effect, its name where the chart names it, and the geodesic distance from your position. Parameters go in the query string: this is a GET, there is no body. NOT FOR NAVIGATION, stated first because it is a condition of using the source. Derived from NOAA Electronic Navigational Charts and redistributed; not an official NOAA ENC, and it does not meet federal chart carriage regulations under 33 CFR 164 or SOLAS chapter V. Every response repeats this under `disclaimer`. NOAA and NOAA ENC are registered trademarks of NOAA, which does not endorse this service. COVERAGE is the same 65 cells as GET /v1/marine/depth: bands 3 to 5 over Sitka Sound; Kasaan Bay and Clarence Strait; Metlakatla, Ketchikan and Revillagigedo Channel; Juneau, Gastineau Channel and Lynn Canal; and Cordova with eastern Prince William Sound. Not statewide and not the whole coast. The check reads the coordinate, so it happens after payment; a position off the charts is refused with outside_coverage, which does not settle. Every response repeats the coverage under `coverage`. WHAT AN EMPTY ANSWER MEANS, because this is the one that can hurt: an empty list means the chart shows nothing there, not that the water is clear. Read the zone of confidence from GET /v1/marine/depth for the same position before you read anything into a clean result. Zones C, D and U mean the area was never fully searched and NOAA says so; in zone D large depth anomalies may be expected. Only three S-57 classes are searched -- UWTROC, OBSTRN and WRECKS -- so a charted danger that is a buoy, a cable, a fish haven area, a spoil ground or a restricted area is not in this store and will not appear. WHICH CHART ANSWERS, and why it is not just one: the largest-scale cell covering each part of the search wins, applied per location rather than once for the whole circle. A harbour cell ends at its own edge and the water a kilometre outside it is charted by the approach cell, so a search that fixed on one chart would drop those hazards silently. `cellsSearched` lists every cell that contributed, and each hazard names the cell it came from. Where two cells chart the same rock at a seam it is returned once. DEPTHS are metres below Mean Lower Low Water. A null depth is a hazard the chart gives no sounding for; read `waterLevel` instead, since an object that covers and uncovers, or is awash, has no single depth. `chartedAsArea` marks a wreck or obstruction the chart carries as an area rather than a point, in which case the position given is its centroid and the thing itself is larger. LIMITS: the radius runs from 1 to 5000 metres and defaults to 1000. A search may read 100 chart tiles, counted from the geometry before any read, so an over-wide request is refused for free rather than part-served; the widest legal radius needs at most 81, so the radius is the limit you meet and the tile count is a backstop. At most 200 hazards come back, nearest first, and the response says when it truncated. VINTAGE is a 2026-05-02 snapshot of charts NOAA reissues weekly; the cell edition and issue date that answered are in each hazard's cell and in `source`. For how deep the water is rather than what is in it, use GET /v1/marine/depth.
The wallet the 402 directs payment to. Its whole payment record — every payer, every chain — is on the merchant page.
Asset 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
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.
Pay 0.005 USDC on Base to 0x76A5…68FCe. The signed payment is good for 5 minutes.
- Paid to
- 0x76A5…68FCe
- 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": 57.0405,
"lon": -135.3421,
"radiusMetres": 250
}
},
"output": {
"type": "json",
"example": {
"notes": [
"A hazard with a null depth is one the chart gives no sounding for (VALSOU absent). Read its waterLevel instead: an object that covers and uncovers, or is awash, has no single depth."
],
"query": {
"lat": 57.0405,
"lon": -135.3421
},
"units": "metres",
"source": {
"url": "https://www.charts.noaa.gov/ENCs/",
"cell": null,
"units": "metres",
"rights": "Public domain (US government work, 17 U.S.C. 105). NOAA ENC is a registered trademark of NOAA.",
"dataset": "NOAA Electronic Navigational Charts, S-57 edition 3.1",
"release": "20260502",
"cellBand": null,
"cellScale": null,
"publisher": "NOAA Office of Coast Survey (IHO S-62 producer code 550)",
"cellIssued": null,
"cellUpdate": null,
"cellEdition": null,
"soundingDatum": "Mean Lower Low Water",
"horizontalDatum": "WGS 84"
},
"classes": [
"UWTROC",
"OBSTRN",
"WRECKS"
],
"hazards": [
{
"lat": 57.0403539,
"lon": -135.3438043,
"cell": "US5AK2NE",
"name": null,
"depth": 4.2,
"category": null,
"classCode": "UWTROC",
"className": "underwater rock",
"waterLevel": "always under water/submerged",
"chartedAsArea": false,
"distanceMetres": 104.73
},
{
"lat": 57.0390562,
"lon": -135.340454,
"cell": "US5AK2NE",
"name": "Mitchell Rock",
"depth": 1.5,
"category": null,
"classCode": "UWTROC",
"className": "underwater rock",
"waterLevel": "always under water/submerged",
"chartedAsArea": false,
"distanceMetres": 189.3
},
{
"lat": 57.0422918,
"lon": -135.3400117,
"cell": "US5AK2NE",
"name": null,
"depth": null,
"category": null,
"classCode": "UWTROC",
"className": "underwater rock",
"waterLevel": "covers and uncovers",
"chartedAsArea": false,
"distanceMetres": 236.4
}
],
"coverage": {
"areas": [
"Sitka Sound",
"Kasaan Bay and Clarence Strait",
"Metlakatla, Ketchikan and Revillagigedo Channel",
"Juneau, Gastineau Channel and Lynn Canal",
"Cordova and eastern Prince William Sound"
],
"bands": [
"coastal (band 3)",
"approach (band 4)",
"harbour (band 5)"
],
"cells": 65,
"reason": "The charts are the 65 NOAA ENC cells of usage bands 3 to 5 that cover five working areas of southeast and southcentral Alaska. This is not statewide and it is not the whole coast. The coverage check reads the coordinate, so it runs in the handler and after payment, not in front of the 402: a position off the charts 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 round trip. Check the coverage against this list first.",
"region": "Southeast and southcentral Alaska, 65 NOAA ENC cells",
"classes": [
"SOUNDG",
"DEPARE",
"DRGARE",
"UWTROC",
"OBSTRN",
"WRECKS",
"M_QUAL"
]
},
"tilesRead": 1,
"disclaimer": {
"origin": "https://www.charts.noaa.gov/ENCs/",
"vintage": "Chart data as held on 2026-05-02. NOAA reissues ENCs weekly for Notice to Mariners and this snapshot does not track them; the cell edition and issue date that answered are in \"source\" so you can compare against NOAA's own catalog.",
"statement": "Derived from NOAA ENC data and redistributed. This is NOT an official NOAA ENC and does NOT meet federal chart carriage regulations under 33 CFR 164 or SOLAS chapter V; only charts from NOAA or a certified NOAA ENC distributor do. Do not navigate on this answer.",
"surveyAge": "NOAA's own warning, repeated because it governs how much any of this is worth: much of the depth information on NOAA charts comes from surveys conducted before 1940 and the shoreline is more than 20 years old. The zone of confidence in every depth answer is the chart's own assessment of that, per area.",
"trademark": "NOAA and NOAA ENC are registered trademarks of the National Oceanic and Atmospheric Administration, which does not endorse this service.",
"notForNavigation": true
},
"hazardCount": 3,
"radiusMetres": 250,
"cellsSearched": [
"US5AK2NE"
],
"soundingDatum": "Mean Lower Low Water"
}
}
},
"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."
},
"radiusMetres": {
"type": "number",
"default": 1000,
"maximum": 5000,
"minimum": 1,
"description": "Search radius in metres, 1 to 5000. Omit for 1000. A wider search is refused rather than truncated silently."
}
},
"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:13Z
- Last indexed by Roundhouse
- 2026-09-20 17:50Z
- Last enriched (probe, favicon, geo)
- 2026-09-24 11:45Z
- x402 version
- 2
- Max timeout
- 300s
- Liveness probe
- HTTP 402
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.
Show the promptHide 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/marine/hazards, 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.