402 Payment Required を返し、accepts: [...] フィールドを付けて受け入れ可能なチェーン / 資産 / 価格を列挙します;クライアントはローカルで承認を署名し(EVM では Permit2 / EIP-712、Solana では SPL トークン転送の承認)、base64 でエンコードされたエンベロープを PAYMENT-SIGNATURE ヘッダーに入れて再送します。サーバーが検証した後、実際にチェーン上で決済を行い、ビジネス結果を返します。
Ace Data Cloud の X402 クライアントは、ターゲット API を直接呼び出し、リアルタイムで返された402 Payment Requiredとacceptsを価格と署名の根拠として使用します。Facilitator の支払い能力は/.well-known/x402で検証できます。
@acedatacloud/sdk と acedatacloud は、paymentHandler フックを公開しています:SDK 自身が発行したリクエストが 402 を受け取ったとき、注入したハンドラーを呼び出して PAYMENT-SIGNATURE ヘッダーを取得し、元のリクエストを再送します。@acedatacloud/x402-client / acedatacloud-x402 を SDK と組み合わせることで、全体のプロセスはビジネスコードに対して完全に透明です——あなたはただ client.openai.chat.completions.create(...) を使うだけで、トークンモードと全く同じように見えますが、基盤は呼び出しに応じた支払いで、事前にチャージする必要はありません。
本文:
- TS 側の「トークンなし + X402 ハンドラー注入」リンクを実際に通してみました(T12 検証)
- EVM / Solana の二つの署名リンクの違いを列挙しました
viemプライベートキー方式、ブラウザウォレット方式、PythonEVMAccountSignerモードの三つの適応を示しましたpreferScheme/prefer_schemeという落とし穴になりやすいフィールドを明確にしました
一、プロトコル概要(必見)
成功した X402 呼び出しには 3 回の HTTP RTT が関与します:PAYMENT-SIGNATURE ヘッダーに入れられます。構造(抜粋):
x402Version: 2 で、accepted オブジェクトを使って今回選択した scheme と network(CAIP-2 表示)を宣言します。
preferScheme / prefer_scheme は、サーバーが複数のスキームを同時に提供する場合に好みを選択するために使用されます。サーバーが exact のみを公開している場合、このフィールドは無視されます;upto を設定してもサーバーが公開していなければ、最初の一致項目にフォールバックします。
二、TypeScript:ブラウザウォレット + サーバー viem の二つの使い方
インストール
createX402PaymentHandler 完全署名
(ctx) => Promise<{ headers: Record<string, string> }> で、SDK の paymentHandler フックの署名と一致します。
用法 1:ブラウザ(MetaMask / WalletConnect)
MaxUint256、チェーンに書き込まれます);二回目は X402 エンベロープの EIP-712 署名(チェーンには載せず、facilitator の検証用)。その後の呼び出しでは二回目の署名のみが必要で、体験上は「一回署名をクリック → 結果を取得」となります。
用法 2:Node サーバー + viem プライベートキー(バックエンド / CLI に適した)
@acedatacloud/x402-client は TS 側でEIP-1193 プロバイダーのみを受け入れます——それはプライベートキーを直接管理しません。Node / CLI シナリオでは、標準的な方法は viem を使用してプライベートキーを WalletClient に包み、次に @ethereumjs/util または viem 内部の EIP-1193 アダプタを使用します。
viem の EIP-1193 適合が不十分だと感じる場合は、より低レベルのsignEVMUptoPaymentを使用して、accepts → signed envelope → PAYMENT-SIGNATURE headerのルートを自分でつなげて、SDK フックをスキップすることもできます。ただし、プロトコルのアップグレードを自分で管理する手間を省くために、createX402PaymentHandlerを優先することをお勧めします。
用法 3:Solana
exact scheme**のみが公開されているため、Solana 上では preferScheme は機能しません。
三、Python:私钥模式
Python のacedatacloud-x402 は直接私钥で署名する方法を採用しており(EIP-1193 抽象なし)、サーバーサイド / タスクエグゼキューターに適しています。
インストール
EVM(Base / Skale)
Solana
一度きりの承認(EVM 初回のみ)
EVM Base 上の X402 は Permit2 を使用し、ウォレットが USDC に対して Permit2 コントラクトに一度MaxUint256 の承認を行う必要があります。acedatacloud-x402 には approve_permit2 が内蔵されています:
四、実際の実行検証
テスト目標:TS SDK がトークンを渡さず、X402 ハンドラーを注入し、正常にリクエストを構築して発起できること(真のチェーン上の USDC を消費しない軽量検証)。apiTokenを渡さなかったため、SDK の構築はエラーを報告しない、X402 モードが確かにトークンの合法的な代替品であることを証明します。createX402PaymentHandlerが返すのは関数(フック)で、SDK は402を受け取ったときのみ呼び出します。- 実際のチェーン上での支払いが通るエンドツーエンドテストは、実際の USDC の引き落としが関与するため、このチュートリアルには含まれていません。詳細は X402 集成ガイド の e2e サンプルを参照してください。
Python 側のcreate_x402_payment_handlerも同様の検証を行っており —— 関数の戻り値は呼び出し可能で、payment_handler=...を注入した際にAceDataCloud(...)の構築がエラーを報告しません。両方の意味が一致しています。

