api.curb.markets · x402 on X Layer
What an agent can buy about the shut hours
Curb sells what MarketClock and Scorecard know, one call at a time. Ask without paying and you get the price and a free preview. Pay from an OKX Agentic Wallet and you get the answer, with a receipt bound to the exact bytes you received.
Three priced routes
Each answers GET, or POST with the same parameters. Unpaid, it answers HTTP 402: the challenge is base64 in the PAYMENT-REQUIRED header, and a free preview is in the body. Try it here. Nothing is signed and nothing is paid.
Reading /.well-known/x402…
/v1/closure-calendar
/v1/accuracy-record
/v1/discount-curve
From an agent: quote, then pay
OKX's onchainos CLI does the whole buyer side. quote probes the route, decodes the 402, checks your balance and stores a payment id. It never signs. pay signs an EIP-3009 authorization in the Agentic Wallet's TEE, replays the request, and returns the answer once the OKX Broker settles.
pay asks you to confirm before it moves funds. Keep the raw response body if you want to check the receipt: the CLI prints the answer re-serialised with its keys sorted, and those are not the bytes the server sent.
onchainos payment quote "https://api.curb.markets/v1/closure-calendar?symbol=wTCENTx&horizonDays=7"
onchainos payment pay --payment-id <paymentId from the quote>
curl -si https://api.curb.markets/v1/closure-calendar
The first paid call
On 24 Sep at 11:56Z, the team's own Agentic Wallet paid one cent for a closure calendar through onchainos payment quote then pay. The API answered 200 once the OKX Broker settled. It is our wallet paying us: it proves the rail, not demand.
- Request
GET /v1/closure-calendar?symbol=wTCENTx&horizonDays=7- Settlement
- 0xe8740458…4de7 (opens OKLink)block 71,481,945 · status 1 · submitted by OKX's relayer
- Amount
- 10,000 units of USD₮0 ($0.01)
- From
- 0x055b…7105 (opens OKLink)the team's Agentic Wallet
- To
- 0x277c…6068 (opens OKLink)curb-revenue, receive-only
- Receipt
- /receipts/0xcee1ee75…817c.json (opens in a new tab)served immutable
What the receipt binds
The server hashes the exact bytes it delivered, then binds that hash to the payment.
responseDigest= sha256 of the 2,256 bytes sent0x902e20a0…0dec4freceiptId= keccak256(transaction‖responseDigest)0xcee1ee75…a9817c
Change one byte of the answer and the digest no longer matches. Pay for a different call and the id no longer matches. So a buyer holding the raw body can prove what it was sold, and for which payment.
On the OKX AI marketplace
Curb is registered as agent #13869, role ASP, from the team's Agentic Wallet. The listing is under review. It offers the same three routes as A2MCP services at the same prices, with no subscription and no free trial.
- Agent
- #13869 "Curb" · listing under review
- Registration
- 0xe2420407…ccc7 (opens OKLink)
onchainos agent get-agents --agent-ids 13869
Free routes
No payment and no key. Discovery, the cohort, the issuer's corporate actions, and the relay that carries mark/2's perpetual-futures leg.
- GET /.well-known/x402 (opens in a new tab) The priced routes and their terms, for discovery. The prices on this page are read from it.
- GET /v1/assets (opens in a new tab) The cohort MarketClock tracks, and which of it Scorecard can grade.
- GET /v1/corporate-actions?symbol= (opens in a new tab) Every version of the issuer's corporate actions for a symbol, cancelled and corrected ones included, newest first.
-
GET /v1/relay/binance/klines (opens in a new tab)
Closed one-minute Binance perpetual klines, the upstream bytes verbatim, with
x-curb-upstream-urlandx-curb-upstream-sha256. Binance refuses US hosts, so mark/2's keeper reads through it, and anyone elsewhere can refetch the same URL and compare hashes. - GET /healthz (opens in a new tab) Liveness, payments readiness, and how fresh the issuer and Scorecard reads are.