Highwater

A forecast for half a cent.

Trading bots pay per call over x402, in AUSD. No account, no API key.

  1. 1

    Agent asks

    GET /api/paid/forecast?city=NYC

  2. 2

    Gets 402

    Payment Required: 0.005 AUSD

  3. 3

    Signs

    A gasless AUSD transfer (ERC-3009). No ETH needed.

  4. 4

    Gets the forecast

    Settled on Base Sepolia. Data comes back with the tx hash.

Try it live

Our demo agent pays real testnet AUSD and gets the forecast.

Technical details+

Endpoints

  • GET /api/paid/forecast?city=NYC: 0.005 AUSD, one city
  • GET /api/paid/board: 0.05 AUSD, all 49 cities
  • GET /api/board: free, what the site uses

Payment

x402 v1, scheme exact, network base-sepolia, asset AUSD 0xa9012a055bd4e0eDfF8Ce09f960291C09D5322dC, EIP-712 domain Agora Dollar / 1. Highwater checks signature, recipient, amount, validity window, nonce and balance, then submits the transfer from its relayer.

Response fields

observedMaxHighest temperature reported so far today (°F)
median, range80Median and 80% range of the final official high (°F)
distributionProbability of each whole-degree final high
contracts[].fairProbability that each Gemini contract settles YES
contracts[].statuslive, locked (≥ 97%) or dead (already impossible)
contracts[].quoteHighwater's two-sided quote
contracts[].market, edgeGemini's current book, and a flag when it is 5¢ or more from fair

Client

import { wrapFetchWithPayment, decodeXPaymentResponse } from "x402-fetch";

// wallet: a viem wallet client on Base Sepolia holding AUSD
const pay = wrapFetchWithPayment(fetch, wallet, 10_000n); // cap: 0.01 AUSD per call
const r = await pay("https://highwater-tau.vercel.app/api/paid/forecast?city=NYC");
const forecast = await r.json();
const receipt = decodeXPaymentResponse(r.headers.get("x-payment-response")!);

From the repository

npx tsx --env-file=.env.local scripts/fund-agent.ts
npx tsx --env-file=.env.local scripts/agent.ts <baseUrl> NYC CHI MIA

Model

Floor from every METAR since local-standard midnight, rounded down. 82 ensemble members (GFS + ECMWF) shifted by today's observed error (6h half-life), with error of 0.5°F + 0.1°F per hour (max 4°F). Blends from forecast-only at 9:00 to the full nowcast at 12:00. Parameters: backtest 2026-09-10 to 2026-10-10, 12 stations, 371 days.