Utility data for agents, paid per call
9 GET routes for the lookups agents make all day: US weather forecasts and alerts, US address geocoding and Census geographies, RDAP domain registration, DNS records, one-call domain intel and verifiable random numbers. Each call is paid with x402 in USDC on Base, from $0.001 to $0.01. No account, no API key.
| Route | Returns | Price | Free |
|---|---|---|---|
GET /v1/weather/forecastWeather forecast (NWS, 7 days) | US National Weather Service 7-day forecast for a lat/lon: about 14 day/night periods with temperature, precipitation chance, wind and text forecast. Example: /v1/weather/forecast?lat=38.8977&lon=-77.0365 | $0.005 | sample |
GET /v1/weather/hourlyHourly weather, next 48 h (NWS) | US National Weather Service hourly forecast for the next 48 hours at a lat/lon: temperature, dew point, humidity, precipitation chance, wind. Example: /v1/weather/hourly?lat=38.8977&lon=-77.0365 | $0.005 | sample |
GET /v1/weather/alertsActive weather alerts (NWS) | Active US National Weather Service watches, warnings and advisories for a lat/lon or a US state / marine area code. Example: /v1/weather/alerts?area=TX | $0.002 | sample |
GET /v1/geo/geocodeUS address geocode (Census) | US street address to lat/lon plus state, county, tract, block, place, congressional district and ZCTA from the US Census Geocoder. Example: /v1/geo/geocode?address=1600%20Pennsylvania%20Ave%20NW%2C%20Washington%2C%20DC%2020500 | $0.005 | sample |
GET /v1/geo/reverseReverse geocode to Census geographies | Lat/lon to US state, county, tract, block, place, congressional district and ZCTA (US Census Geocoder geographies). Example: /v1/geo/reverse?lat=30.2672&lon=-97.7431 | $0.003 | sample |
GET /v1/domain/rdap/:domainRDAP domain registration | Normalized RDAP record from the registry: registrar, created/updated/expiry dates, status codes, nameservers, DNSSEC. Example: /v1/domain/rdap/example.com | $0.005 | sample |
GET /v1/dns/:domainDNS lookup (DoH) | One DNS record type for a name (A, AAAA, MX, NS, TXT, CAA, SOA, CNAME) via DNS-over-HTTPS, normalized with parsed fields. Example: /v1/dns/example.com?type=MX | $0.001 | sample |
GET /v1/domain/:domainDomain intel (RDAP + DNS + email auth) | One call: RDAP summary, A/AAAA/MX/NS, SPF, DMARC and MTA-STS presence, and a link to the domain's Agent Exchange census record. Example: /v1/domain/example.com | $0.01 | sample |
GET /v1/fun/randomVerifiable random integers (drand) | Random integers in [min,max] derived from the latest drand beacon round, with the round, randomness and derivation so anyone can reproduce them. Example: /v1/fun/random?min=1&max=6&n=2 | $0.001 | sample |
Worked example: one DNS lookup for $0.001
1. Ask without paying. Every paid route answers 402 Payment Required before it looks at the parameters, with the terms in the body and the same JSON, base64, in the PAYMENT-REQUIRED header:
curl -i "https://utility.agentexchange.work/v1/dns/example.com?type=MX"
HTTP/2 402
payment-required: eyJ4NDAyVmVyc2lvbiI6Mi…
content-type: application/json
{
"x402Version": 2,
"error": "Payment required",
"resource": {
"url": "https://utility.agentexchange.work/v1/dns/example.com?type=MX",
"serviceName": "DNS record lookup",
"mimeType": "application/json"
},
"accepts": [
{
"scheme": "exact",
"network": "eip155:8453",
"amount": "1000",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"payTo": "0xc91cE6291eDC0713ec753BAFBA002506ffb2b95c",
"maxTimeoutSeconds": 300,
"extra": {
"name": "USD Coin",
"version": "2"
}
}
],
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"pathParams": {
"domain": "example.com"
},
"queryParams": {
"type": "MX"
}
}
},
"routeTemplate": "/v1/dns/:domain"
}
},
"message": "Pay $0.001 USDC on Base and retry with PAYMENT-SIGNATURE (v2) or X-PAYMENT (v1).",
"price": "$0.001"
}
2. Sign an EIP-3009 transferWithAuthorization for amount (1000 atomic units = $0.001 USDC) to payTo on Base. Any x402 client does this for you, for example @x402/fetch: await fetchWithPayment("https://utility.agentexchange.work/v1/dns/example.com?type=MX").
3. Resend the identical GET with PAYMENT-SIGNATURE (x402 v2) or X-PAYMENT (v1). The facilitator (PayAI) verifies and settles; the answer is 200 with a PAYMENT-RESPONSE receipt and JSON like the real sample:
{
"name": "example.com",
"type": "MX",
"status": "NOERROR",
"dnssec_validated": true,
"answers": [
{
"name": "example.com",
"type": "MX",
"ttl": 267,
"data": "0 .",
"parsed": {
"priority": 0,
"exchange": ".",
"null_mx": true
}
}
],
"route": "dns",
"price_usdc": 0.001,
"payment": {
"transaction": "0x…",
"network": "eip155:8453",
"payer": "0x…"
}
}
Rules that protect the buyer
- A request with a payment header but bad parameters answers
400before anything is verified or settled. So do weather points outside National Weather Service coverage and domains whose TLD has no RDAP server. - If the upstream fails after settlement the answer is
502 upstream_failed, and the same payment header is honoured once more within 10 minutes. - Every answer names its source, its URL and when it was fetched. Prices are the same in the 402s, the manifest, OpenAPI, pricing, llms.txt and the agent card, because they are generated from one table.
Sources
- Weather: US National Weather Service API (public domain).
- Geocoding: US Census Bureau Geocoder (public).
- RDAP: the IANA bootstrap and the registry server it names.
- DNS: Cloudflare 1.1.1.1 DNS over HTTPS.
- Randomness: drand (League of Entropy).