← Marketplace
Base
Geoprimitives
Geoprimitives is an x402-native service at https://api.geoprimitives.dev, indexed from the x402 Bazaar (Coinbase's public discovery directory). It charges callers itself in USDC on Base and is paid directly at its own wallet; Monex Protocol passes your request and payment headers through untouched. 12 endpoints listed.
Offers
| Offer | Endpoint | Price |
|---|---|---|
V1 Elevation 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 | /m/bz-api-geoprimitives-dev/v1/elevation | 0.005 USDC |
Geometry Simplify Drop vertices from a geometry while keeping its shape. Use it to cut a boundary down before a call whose cost is vertex-driven -- POST /v1/pip caps on points times polygon vertices, and POST /v1/geometry/buffer and the overlay ops cap at 2000 positions -- and to shrink what you store or draw. The response reports outputVertices next to inputVertices, so the saving is measurable before you spend ag | /m/bz-api-geoprimitives-dev/v1/geometry/simplify | 0.01 USDC |
Geometry Union Dissolve overlapping or adjacent polygons into a single shape: merging parcels, coverage areas or service zones into one boundary before measuring or testing it. Send a FeatureCollection of Polygons or MultiPolygons; the answer is a single Polygon or MultiPolygon Feature, or null with empty:true when nothing is left. Clipping is planar in longitude/latitude, the way every polygon-clipping library | /m/bz-api-geoprimitives-dev/v1/geometry/union | 0.01 USDC |
H3 Index Index points to H3 cells. Send "points" as [longitude, latitude] positions in EPSG:4326 and get each one's containing H3 cell at one or several resolutions, optionally with the cell's centre and its closed boundary ring. Use it to bucket points into a fixed hexagonal grid so datasets that share no keys can be joined, aggregated or deduplicated on cell id. This route indexes positions and nothing e | /m/bz-api-geoprimitives-dev/v1/h3/index | 0.005 USDC |
H3 Polyfill Polyfill: turn a polygon into the set of H3 cells that cover it, so a spatial question becomes a set-membership question you can answer with a join. Send "geojson" as a Polygon, a MultiPolygon, or a Feature or FeatureCollection wrapping them, in EPSG:4326, plus exactly one of "resolution" or "resolutions". Choose the containment rule with "containment": "center" returns cells whose centre is insid | /m/bz-api-geoprimitives-dev/v1/h3/polyfill | 0.01 USDC |
V1 Hello Echo endpoint. Returns the name you send, the network the payment settled on, and the price you paid. Use it to prove your x402 client works end to end -- discover, read the 402, sign, retry, get a body -- before you spend anything on a real endpoint. It is the cheapest route in the catalog and it computes nothing, so a failure here is a payment problem and never a geospatial one. Do not use it fo | /m/bz-api-geoprimitives-dev/v1/hello | 0.001 USDC |
Marine Depth Give it a latitude and longitude and it answers with what the nautical chart says about the water there: the depth range of the charted depth area containing the position, the nearest charted sounding and how far away it is, and the chart's own zone of confidence for that area. Parameters go in the query string: this is a GET, there is no body. NOT FOR NAVIGATION, stated first because it is a cond | /m/bz-api-geoprimitives-dev/v1/marine/depth | 0.005 USDC |
Marine Hazards 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 be | /m/bz-api-geoprimitives-dev/v1/marine/hazards | 0.005 USDC |
V1 Pip Answer which of your points fall inside which of your polygons, in one call. Use it to tag events with the district, catchment or territory they belong to, to filter a point set down to a study area, or to join two datasets that share nothing but geography. The answer comes back twice, as a dense 0/1 matrix and as a per-point list of polygon indices, so neither shape needs rebuilding on your side, | /m/bz-api-geoprimitives-dev/v1/pip | 0.01 USDC |
V1 Timezone Give it a longitude and latitude and it answers with the IANA timezone identifier (America/New_York), the UTC offset in force there right now, whether daylight saving is currently in effect and by how much, the local wall-clock time, and the zone's standard offset. Pass an optional ISO 8601 `at` instant to ask about any moment between 1900 and 2100 instead of now, which is what you want when sched | /m/bz-api-geoprimitives-dev/v1/timezone | 0.005 USDC |
V1 Transform Reproject coordinates between EPSG coordinate reference systems, with the datum shift applied. Accepts a bare position, an array of positions at any nesting depth, or a GeoJSON Feature, FeatureCollection or Geometry, and answers in whichever shape it was given, preserving properties, ids and foreign members. Covers 1380 codes: WGS 84, ITRF2020, NAD27 and every NAD83 realization as geographic, Web | /m/bz-api-geoprimitives-dev/v1/transform | 0.005 USDC |
Us Geographies Give it a longitude and latitude inside the United States and it answers with the Census FIPS codes for that point: the 2-digit state code, the 5-digit county GEOID, and the GEOID of the congressional district. Parameters go in the query string: this is a GET, there is no body. The codes are the product and the names are a courtesy. A county GEOID is the join key to essentially every geography-key | /m/bz-api-geoprimitives-dev/v1/us/geographies | 0.01 USDC |
Machine-readable: openapi.json with x-payment-info offers.
Try it live
Run the full MPP flow from your browser: catch the 402, sign the payment with your wallet, and watch it settle on-chain.
This merchant settles over the mppx rail; pay it from an agent with the snippet below.
Pay with an agent
Any MPP or x402-compatible client works. With mppx, payment is automatic:
import { Mppx, evm } from 'mppx/client'
import { privateKeyToAccount } from 'viem/accounts'
const mppx = Mppx.create({
methods: [evm({
account: privateKeyToAccount(process.env.KEY),
currencies: [evm.assets.base.USDC],
})],
})
const res = await mppx.fetch('https://api.meshgateway.co/m/bz-api-geoprimitives-dev/v1/elevation')
// 402 challenge signed and settled automatically; response includes Payment-ReceiptOr inspect the challenge yourself:
curl -i https://api.meshgateway.co/m/bz-api-geoprimitives-dev/v1/elevation # HTTP/1.1 402 Payment Required # WWW-Authenticate: Payment id="…", method="evm", intent="charge", …