ETH perpetual snapshot
# the 402 offer, no payment involved
curl -si https://provider-x402.subethalabs.com/v1/eth/snapshot \
| grep -i payment-requiredAn API can be perfectly good and still be unreachable — not because of the data, but because it settles on a rail your wallet does not hold. The Router takes a payment on one rail and pays the provider on another. Two legs, two separate funds. No swap, no bridge.
Hackathon-stage implementation on testnet. Unaudited, not production. Both legs settle for real on chain today, and the Router is reachable as a hosted MCP endpoint.
Paid APIs are converging on pricing per call over HTTP 402. How you pay has not converged: x402 exact on one chain, MPP tempo charge on another, each with its own asset.
You need the exact asset, on the exact chain, that each provider demands. Two providers, two rails, two funded wallets — before you read a single byte.
The Router pays the provider on theirs, from its own prefunded balance, and hands back the provider's response unchanged.
Self-hosted market-data providers we run. You need no wallet, no account and no permission from us to see the payment contract — an unauthenticated request returns the whole offer in the open.
# the 402 offer, no payment involved
curl -si https://provider-x402.subethalabs.com/v1/eth/snapshot \
| grep -i payment-required# the 402 challenge, no payment involved
curl -si https://provider-mpp.subethalabs.com/v1/eth/snapshot \
| grep -i www-authenticateBoth answer GET /v1/eth/snapshot and publish /health and /manifest. Payment is testnet; the market data is a read-only mainnet reference and is not an executable quote. Neither provider is operated by Hyperliquid or Uniswap.
The Router converts nothing. It takes a payment on the inbound rail and makes a separate payment on the outbound rail, each prefunded on its own chain. Calling it a swap or a bridge would be wrong.
The Router reads the provider's live offer before quoting, so the price you approve is bound to the offer that will actually be paid.
Nothing moves on a conversational turn alone. Approval is bound to one quote, and an offer that changes after approval is refused.
The inbound leg settles on the rail you already hold, against the Router's own address on that chain.
A separate payment, from the Router's prefunded balance on the provider's chain. The two legs are never exchanged for one another.
A durable journal records each purchase. Repeat or concurrent requests re-send neither leg, and an uncertain outcome stays uncertain rather than retrying blindly.
Stated narrowly on purpose, so the parts that are still being built are not mistaken for the parts that work.
Both serve their 402 over HTTPS and can be inspected by anyone, without a wallet.
x402 exact on Base Sepolia and MPP tempo charge on Tempo Moderato, each settled end to end against the live providers.
The outbound leg — the Router paying a provider on the provider's own rail — settles for real.
The inbound leg settles on chain with real funds: a caller holding only Base Sepolia USDC reaches a provider that only takes MPP. Both legs are recorded, on two different networks.
Discover, quote, approve and pay through the Router, over local stdio or the hosted HTTP endpoint. Both have settled real payments.
One line of setup, with nothing to clone and no key to place. The Router never holds the caller's key — you sign locally and it receives only the signed credential.
Paying the Router through SubEtha's own private rail, rather than x402. This one still runs against a synthetic counterparty, so the privacy claim is not yet settled on chain the way the x402 leg is.
Finality (deciding when a payment is canonical) is not implemented, and the existing chat UI has not been verified against this end to end. Both are listed here rather than left for you to discover.
The Router runs as an MCP server you can register with Claude Code. Nothing to clone, no install, and no key to place anywhere — you sign each payment locally and the Router receives only the signed credential.
purchase costs anything.The Router holds no key of yours. Its source reads no private key, from the environment or anywhere else, so a hosted Router cannot spend a caller's funds.
Two things worth knowing before you try it.
Leave a few seconds between payments. The public x402 facilitator collides with its own pending transactions when calls arrive back to back — measured at 2 failures in 20 with no gap, and 0 in 15 with a three second gap.
You may see paid_data_unavailable. That means the payment went through but fetching the data did not, so the funds did move. The Router does not retry on its own, because a blind retry is how you pay twice. Retrying the call works. Our own production check hit this on the first attempt and succeeded on the second.
No. Nothing is converted and nothing crosses a chain. The Router receives a payment on one rail and makes a separate, independently funded payment on the other. The two legs are never exchanged for one another, which is why the balances on each chain have to be prefunded.
Both legs. A caller paying over x402 on Base Sepolia reaches a provider that only accepts MPP on Tempo, and both payments are recorded on their own chains. What is still synthetic is the SubEtha inbound rail specifically — paying the Router privately, through SubEtha rather than x402 — so that part of the privacy story is not yet settled on chain.
No. You sign each payment locally and the Router receives only the signed credential. Its source reads no private key, from the environment or anywhere else, so the hosted Router cannot spend a caller's funds even though it settles their payments.
Not to read the offer. An unauthenticated GET returns the entire 402 challenge — price, asset, chain, recipient — and that is what the buttons above fetch live. You only need testnet funds on the matching rail if you want to actually pay and receive the data.
Approval is bound to one specific quote. A conversational turn alone moves nothing, and if the provider's offer changes between quoting and paying, the purchase is refused rather than paid at the new terms.
A durable journal records each purchase, so repeat or concurrent requests re-send neither leg. An outcome that cannot be confirmed is kept as uncertain rather than retried blindly, since a blind retry is how you pay twice.
No. It is a hackathon-stage implementation on testnet, unaudited, and not operated as a service. The market data the providers return is a read-only mainnet reference and is not an executable quote.
We were building SubEtha — private machine payments for x402, settled on zERC20 — and kept hitting the same wall from the other side: a payment method is only as useful as the set of APIs that accept it. Routing is what makes a rail worth holding. The privacy work and this are the same problem approached from two ends.
APIの品質に問題がなくても、決済レールが手持ちと違うだけで到達できません。Routerはあるレールで支払いを受け取り、別のレールでプロバイダに支払います。2つのレグは独立した支払いで、交換もブリッジもしません。
ハッカソン段階の実装です。未監査・テストネット限定・非本番。両レグとも実決済がオンチェーンで成立しており、ホスト済みMCPエンドポイントから利用できます。
有料APIは HTTP 402 で1回ごとに課金する形に収束しつつあります。収束していないのは支払い方法です。あるチェーンでは x402 exact、別のチェーンでは MPP tempo charge、資産もそれぞれ違います。
プロバイダごとに、要求されるチェーンの、要求される資産が要ります。プロバイダが2つならレールも2つ、資金を入れたウォレットも2つ。データを1バイト読む前の話です。
Routerが自分の事前資金でプロバイダ側のレールに支払い、プロバイダの応答をそのまま返します。
当方が自前でホストしているマーケットデータ提供元です。ウォレットもアカウントも許可も不要——認証なしのリクエストで、支払い条件がそのまま返ります。
# 402の提示内容。支払いは発生しません
curl -si https://provider-x402.subethalabs.com/v1/eth/snapshot \
| grep -i payment-required# 402チャレンジ。支払いは発生しません
curl -si https://provider-mpp.subethalabs.com/v1/eth/snapshot \
| grep -i www-authenticateどちらも GET /v1/eth/snapshot で応答し、/health と /manifest を公開しています。決済はテストネット、市場データはメインネットの読み取り専用の参照値で、約定可能な気配値ではありません。Hyperliquid・Uniswap が運営するものでもありません。
Routerは資産を変換しません。受信レールで支払いを受け取り、送信レールで別の支払いを行います。各レールはそれぞれのチェーンで事前に資金供給されており、交換やブリッジと説明するのは誤りです。
見積もりの前にプロバイダの実提示を読むため、承認する金額は実際に支払われる提示に束縛されます。
会話のやり取りだけでは何も動きません。承認は1つの見積もりに束縛され、承認後に提示が変われば拒否します。
受信レグは、あなたが既に持っているレール上で、そのチェーンにあるRouterのアドレスに対して成立します。
プロバイダ側チェーンにあるRouterの事前資金からの、別個の支払いです。2つのレグが互いに交換されることはありません。
各購入は耐久的な journal に記録されます。再送・並行要求でもどちらのレグも再実行されず、結果が不確かな場合は不確かなまま保持します。
構築中の部分が、動いている部分と混同されないよう、意図的に狭く記載しています。
どちらも HTTPS で402を返し、ウォレットなしで誰でも検証できます。
Base Sepolia の x402 exact と Tempo Moderato の MPP tempo charge を、公開プロバイダに対して端から端まで通しています。
送信レグ——Routerがプロバイダ側のレールで支払う部分——は実決済が成立しています。
受信レグが実資金でオンチェーン成立します。Base Sepolia の USDC しか持たない呼び出し側が、MPPしか受け付けないプロバイダに到達できます。両レグとも別々のネットワーク上に記録が残ります。
Router経由での発見・見積・承認・支払い。ローカルのstdioと、ホスト版のHTTPの両方で実決済が成立しています。
セットアップは1行。cloneも鍵の事前配置も不要です。Routerは呼び出し側の鍵を持たず、署名は手元で作られ、サーバには署名済みのcredentialだけが届きます。
x402ではなく、SubEtha自身の秘匿レールでRouterに支払う部分です。ここは依然として合成の相手に対して動作するため、秘匿性の主張はx402レグのようにはオンチェーンで成立していません。
finality(どの時点で決済を確定とみなすか)は未実装で、既存のchat UIとの端から端までの検証も行っていません。後から気づくより先に書いておきます。
RouterはMCPサーバとして動いており、Claude Codeに登録できます。cloneもインストールも、鍵をどこかに置く必要もありません。支払いごとの署名は手元で作られ、Routerには署名済みのcredentialだけが届きます。
purchase だけです。Routerは利用者の鍵を持ちません。ソースは環境変数を含めどこからも秘密鍵を読まないため、ホスト版のRouterが呼び出し側の資金を動かすことはできません。
試す前に知っておくとよいことが2つあります。
決済は数秒空けてください。 公開の x402 facilitator は、連続して呼ぶと自分の保留中トランザクションと衝突します(実測で、間隔なしでは20回中2回失敗、3秒空けると15回中0回)。
paid_data_unavailable が返ることがあります。 支払いは成立したがデータ取得に失敗した状態で、資金は動いています。安易な再送は二重払いにつながるため、Routerは自動では再試行しません。呼び直せば通ります。私たち自身の本番確認でも1回目がこれで、2回目は成功しました。
いいえ。何も変換せず、チェーンを跨ぎもしません。あるレールで支払いを受け取り、別のレールで独立に資金手当てされた支払いを行います。2つのレグが互いに交換されることはなく、だからこそ各チェーン上の残高を事前に用意しておく必要があります。
両レグです。Base Sepolia の x402 で支払う呼び出し側が、Tempo の MPP しか受け付けないプロバイダに到達し、それぞれのチェーンに記録が残ります。まだ合成なのは SubEtha の受信レール——x402 ではなく SubEtha 経由で秘匿的にRouterへ支払う部分——であり、秘匿性に関してはその分がまだオンチェーンで成立していません。
いいえ。署名は手元で作られ、Routerには署名済みのcredentialだけが届きます。ソースは環境変数を含めどこからも秘密鍵を読まないため、決済を仲介していても、ホスト版のRouterが呼び出し側の資金を動かすことはできません。
提示を読むだけなら不要です。認証なしの GET で402チャレンジ全体——金額・資産・チェーン・受取先——がそのまま返り、上のボタンはそれを実際に取得しています。実際に支払ってデータを受け取る場合のみ、該当レールのテストネット資金が必要です。
承認は特定の見積もり1つに束縛されます。会話のやり取りだけでは何も動かず、見積もりから支払いまでの間にプロバイダの提示が変われば、新しい条件で支払うのではなく拒否します。
各購入は耐久的な journal に記録されるため、再送・並行要求でもどちらのレグも再実行されません。確認できない結果は不確かなまま保持します。安易な再試行こそが二重払いの原因だからです。
いいえ。ハッカソン段階のテストネット実装で、未監査、サービスとして運用してもいません。プロバイダが返すマーケットデータは読み取り専用のメインネット参照値であり、執行可能な気配値ではありません。
私たちは SubEtha——x402 の秘匿マシン決済を zERC20 で精算する仕組み——を作っていて、反対側から同じ壁にぶつかりました。決済手段の有用性は、それを受け付けるAPIの数で決まります。ルーティングは、そのレールを持つ価値を成立させる部分です。秘匿性の取り組みとこれは、同じ問題を両端から見たものです。