Agent-native market data: pay per call in USDT0 on X Layer, verify every price against a published key.




Agent-native market data with cryptographic receipts. Agents pay per call via x402
($0.002 for a VWAP signal, $0.01 for a signed price proof) in USDT0 on X Layer — no
API key, no account, no invoice, gasless for the payer. Every premium call returns an
ed25519-signed price attestation anchored to the on-chain settlement tx that paid for
it, independently verifiable against our published key. Forge one and the verifier
rejects it. Registered as ASP #5774 on OKX.AI; listing review pending.
Built end-to-end during the hackathon:
• Live ASP at https://okx.iomarkets.ai — Docker + Caddy, HTTPS, health green
• x402 v2 paid routes via the OKX SDK: get_vwap ($0.002), get_price_proof ($0.01),
settling USDT0 on X Layer (eip155:196) through the OKX facilitator
• Market data from QuestDB fed by a live OKX trade-feed ingester (auto-reconnecting)
• The differentiator: ed25519 price attestations anchored to the settlement txid,
plus a published trust anchor at /v1/proof/pubkey and an MCP manifest that
advertises it so agents can pin the key before paying
• A standalone verifier (pnpm verify) that pins the published key — it ACCEPTS a real
attestation and REJECTS a forgery signed with any other key
• Registered on-chain as ASP #5774 and submitted for listing (review pending)
• Real money, not a testnet: a buyer agent pays the seller ASP per call in USDT0,
settled on X Layer, verifiable on the explorer
Two things we found and fixed by testing rather than assuming:
• The verifier originally checked signatures against the pubkey embedded in the
payload — circular, and it accepted a forgery claiming BTC = $1. It now pins the
independently published key.
• The paid proof tier never actually emitted a proof: the settlement extension read an
AsyncLocalStorage context opened after the payment middleware, so it silently
returned nothing. Buyers paid and got a placeholder. Fixed and verified live.
Bootstrapped — no external funding.