Base URL
How a paid call works
- The client sends the request without payment.
- The server answers
402 Payment Requiredwith aPAYMENT-REQUIREDheader: price, asset (USDC), the supported networks and the receiving address. - The client picks a network, signs a USDC transfer authorization for that amount and repeats the request with a
PAYMENT-SIGNATUREheader. - The server verifies the signature, returns the data, and the transfer settles on the network the client chose. The
PAYMENT-RESPONSEheader carries the transaction.
Supported networks
Base and Arc. Every paid call is quoted on both at once; the client pays on the one it holds USDC on.
Arc is not in the x402 client libraries’ default asset table, so a buyer that wants to pay on Arc allows the asset once:
Endpoints
Prices are quoted by the server on every request and can change. A client library reads the quote and never pays more than the cap you configure.
Observation object
Every paid endpoint returns observations in this shape.string
The sha256 of the capture, hex. Also the id for
GET /observations/{id}.string
sha256: followed by the observation id.string
Coarse location as attested: a geohash of six characters, a cell of about 1.2 km by 0.6 km. Nothing finer is served.
string
ISO 8601 UTC time of capture.
object
The Merkle tree that contains this capture and its attestation on Base.
Spatial query
object
required
GeoJSON geometry.
Point with radius_m, or Polygon whose bounding box is at most 100 km².number
For a
Point: radius in metres, 1 to 5000. Defaults to 500.string
ISO 8601 start of the time window. Defaults to seven days before
to.string
ISO 8601 end of the time window. Defaults to now.
integer
Maximum observations to return, 1 to 1000. Defaults to
100. Results are ordered newest first.Example
200 with an empty observations array.
Observation by id
id is the sha256 of the capture, with or without the 0x prefix. Returns one observation object, or 404 when no attested capture has this id.
Provenance check
200 with "verified": false. To check independently, open anchor.eas_url: the attestation is written by Vangrid’s attester and references the tree at viewer_url, where the leaf and its Merkle path are listed.
Use it from an agent
The service describes itself for agents: an OpenAPI document athttps://data.vangrid.io/openapi.json and an x402 manifest at https://data.vangrid.io/.well-known/x402, with the price, the networks and the request schema of every paid endpoint.
For Claude, Cursor and other MCP clients, Vangrid ships an open source MCP server: github.com/vangrid-labs/bounty-mcp (MIT). It exposes these calls and bounties for agents as tools and pays from the agent’s own wallet, with a spending cap per call and per bounty. Node 20 or newer; the MCP client fetches the server from GitHub on first run.
Claude Desktop (claude_desktop_config.json) or Cursor (.cursor/mcp.json):
X402_NETWORK=auto pays on whichever of Base and Arc holds more USDC for the wallet; eip155:8453 or eip155:5042 fixes the network. Use a fresh wallet that holds only what the agent may spend. The repository README covers creating and funding it.
Data tools: vangrid_coverage_query, vangrid_observation, vangrid_verify_provenance. Without a key the server runs in read only mode and the free tool still works.

