x402 について
x402は、HTTP経由のオンチェーン決済を実装するためのツールキットです。複数言語のSDKとミドルウェアを買い手・売り手向けに提供し、APIやウェブコンテンツ、エージェントが利用するリソースの決済に加え、MCP連携にも対応します。
主な機能
- 01HTTP 402による決済フロー
- 02買い手と売り手向けのSDK
- 03ミドルウェアとHTTPクライアントラッパー
- 04複数のブロックチェーンネットワークに対応
- 05MCPクライアントとサーバー向けパッケージ
- 06定額制と従量制の決済方式
活用シーン
- 01APIで暗号資産の少額決済を受け付ける
- 02ウェブコンテンツにペイウォールを設ける
- 03エージェントがリソースの料金を支払う
- 04MCPツールに決済を要求する
MCP 対応
SDKにはMCPクライアントとサーバー向けの `@x402/mcp` があり、PythonのMCP連携も提供されています。MCPツールの決済フローに利用できます。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ tenequm/ skills --skill x402インストール後、Claude Code で/x402を入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
CHANGELOG.mdLICENSE.txtreferences/aptos-scheme.mdcore-concepts.mdevm-scheme.mdextensions.mdgo-sdk.mdlifecycle-hooks.mdnear-scheme.mdprotocol-spec.mdpython-sdk.mdstellar-scheme.mdsvm-scheme.mdtransports.mdtypescript-sdk.mdupto-scheme.mdxrpl-scheme.md詳細
x402 プロトコル開発
x402 は、HTTP の 402 Payment Required ステータスコードをプログラムによるオンチェーン決済に対応させるオープンスタンダード(Apache-2.0)です。Coinbase によって開発され、現在は x402 Foundation が管理しています。アカウント、セッション、API キーは不要です。クライアントは HTTP 経由で署名済みの暗号資産トランザクションを直接使って支払います。
使用する場面
- 暗号資産のマイクロペイメントを受け付ける有料 APIを構築する
- Web コンテンツやエンドポイントにペイウォールを追加する
- AI エージェントがリソースの料金を自律的に支払えるようにする
- 支払いが必要なMCP ツールを統合する
- エージェント間(A2A)の決済フローを構築する
- EVM(Base、Ethereum、MegaETH、Monad、Polygon、Stable、Arbitrum)、Solana、Stellar、Aptos、NEAR、XRPLでの決済に対応する
upto方式を使った使用量ベースの課金(LLM トークン、帯域幅、コンピューティング)を実装する- 外部のファシリテーターに依存せず、プロセス内ファシリテーター(セルフファシリテーション)を実行する
コアアーキテクチャ
すべての x402 決済には、次の 3 つの役割があります。
- リソースサーバー - エンドポイントを保護し、支払い要件とともに 402 を返します
- クライアント - 支払い承認に署名し、支払いヘッダーを付けてリクエストを再試行します
- ファシリテーター - 署名を検証し、オンチェーンでトランザクションを決済します
決済フロー(HTTP トランスポート):
Client -> GET /resource -> Server returns 402 + PAYMENT-REQUIRED header
Client -> signs payment -> retries with PAYMENT-SIGNATURE header
Server -> POST /verify to Facilitator -> POST /settle to Facilitator
Server -> returns 200 + PAYMENT-RESPONSE header + resource data
クイックスタート:販売者(TypeScript + Express)
import express from "express";
import { paymentMiddleware, x402ResourceServer } from "@x402/express";
import { ExactEvmScheme } from "@x402/evm/exact/server";
import { HTTPFacilitatorClient } from "@x402/core/server";
const app = express();
const payTo = "0xYourWalletAddress";
const facilitator = new HTTPFacilitatorClient({ url: "https://x402.org/facilitator" });
const server = new x402ResourceServer(facilitator)
.register("eip155:84532", new ExactEvmScheme());
app.use(
paymentMiddleware(
{
"GET /weather": {
accepts: [
{ scheme: "exact", price: "$0.001", network: "eip155:84532", payTo },
],
description: "Weather data",
mimeType: "application/json",
},
},
server,
),
);
app.get("/weather", (req, res) => {
res.json({ weather: "sunny", temperature: 70 });
});
app.listen(4021);
インストール:npm install @x402/express @x402/core @x402/evm
クイックスタート:購入者(TypeScript + Axios)
import { x402Client, wrapAxiosWithPayment } from "@x402/axios";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";
import axios from "axios";
const signer = privateKeyToAccount(process.env.EVM_PRIVATE_KEY as `0x${string}`);
const client = new x402Client();
registerExactEvmScheme(client, { signer });
const api = wrapAxiosWithPayment(axios.create(), client);
const response = await api.get("http://localhost:4021/weather");
// Payment handled automatically on 402 response
インストール:npm install @x402/axios @x402/evm viem
クイックスタート:販売者(Python + FastAPI)
from fastapi import FastAPI
from x402.http import FacilitatorConfig, HTTPFacilitatorClient, PaymentOption
from x402.http.middleware.fastapi import PaymentMiddlewareASGI
from x402.http.types import RouteConfig
from x402.mechanisms.evm.exact import ExactEvmServerScheme
from x402.server import x402ResourceServer
app = FastAPI()
facilitator = HTTPFacilitatorClient(FacilitatorConfig(url="https://x402.org/facilitator"))
server = x402ResourceServer(facilitator)
server.register("eip155:84532", ExactEvmServerScheme())
routes = {
"GET /weather": RouteConfig(
accepts=[PaymentOption(scheme="exact", pay_to="0xYourAddress", price="$0.001", network="eip155:84532")],
mime_type="application/json",
description="Weather data",
),
}
app.add_middleware(PaymentMiddlewareASGI, routes=routes, server=server)
@app.get("/weather")
async def get_weather():
return {"weather": "sunny", "temperature": 70}
インストール:pip install "x402[fastapi,evm]"
クイックスタート:販売者(Go + Gin)
import (
x402http "github.com/x402-foundation/x402/go/v2/http"
ginmw "github.com/x402-foundation/x402/go/v2/http/gin"
evm "github.com/x402-foundation/x402/go/v2/mechanisms/evm/exact/server"
)
facilitator := x402http.NewHTTPFacilitatorClient(&x402http.FacilitatorConfig{URL: facilitatorURL})
routes := x402http.RoutesConfig{
"GET /weather": {
Accepts: x402http.PaymentOptions{
{Scheme: "exact", Price: "$0.001", Network: "eip155:84532", PayTo: evmAddress},
},
Description: "Weather data",
MimeType: "application/json",
},
}
r.Use(ginmw.X402Payment(ginmw.Config{
Routes: routes,
Facilitator: facilitator,
Schemes: []ginmw.SchemeConfig{{Network: "eip155:84532", Server: evm.NewExactEvmScheme()}},
}))
インストール:go get github.com/x402-foundation/x402/go/v2
マルチネットワーク対応(EVM + Solana)
サーバーは複数のネットワークで同時に支払いを受け付けられます。
import { ExactEvmScheme } from "@x402/evm/exact/server";
import { ExactSvmScheme } from "@x402/svm/exact/server";
const server = new x402ResourceServer(facilitator)
.register("eip155:84532", new ExactEvmScheme())
.register("solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", new ExactSvmScheme());
// Route config with both networks
"GET /weather": {
accepts: [
{ scheme: "exact", price: "$0.001", network: "eip155:84532", payTo: evmAddress },
{ scheme: "exact", price: "$0.001", network: "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", payTo: svmAddress },
],
}
クライアントは両方の方式を登録し、サーバーの要件に応じて自動的に選択します。
const client = new x402Client();
registerExactEvmScheme(client, { signer: evmSigner });
registerExactSvmScheme(client, { signer: svmSigner });
対応ネットワーク
| ネットワーク | CAIP-2 ID | ステータス |
|---|---|---|
| Base Mainnet | eip155:8453 | メインネット |
| Base Sepolia | eip155:84532 | テストネット |
| MegaETH Mainnet | eip155:4326 | メインネット(MegaUSD がデフォルト、18 桁) |
| Solana Mainnet | solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp | メインネット |
| Solana Devnet | solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1 | テストネット |
| Stellar Mainnet | stellar:pubnet | メインネット(TypeScript SDK のみ) |
| Stellar Testnet | stellar:testnet | テストネット(TypeScript SDK のみ) |
| Aptos Mainnet | aptos:1 | メインネット(TypeScript SDK のみ) |
| Aptos Testnet | aptos:2 | テストネット(TypeScript SDK のみ) |
| Monad Mainnet | eip155:143 | メインネット |
| Polygon Mainnet | eip155:137 | メインネット |
| Polygon Amoy | eip155:80002 | テストネット |
| Stable Mainnet | eip155:988 | メインネット |
| Stable Testnet | eip155:2201 | テストネット |
| Arbitrum One | eip155:42161 | メインネット |
| Arbitrum Sepolia | eip155:421614 | テストネット |
| XDC Network Mainnet | eip155:50 | メインネット(USDC) |
| XDC Apothem Testnet | eip155:51 | テストネット(USDC) |
| Mezo Mainnet | eip155:31612 | メインネット(mUSD、18 桁、Permit2 + EIP-2612) |
| Mezo Testnet | eip155:31611 | テストネット(mUSD、Permit2 + EIP-2612) |
| Avalanche | eip155:43114 | 実行時の登録のみ(デフォルト資産なし、コミュニティのファシリテーター) |
| Radius Mainnet | eip155:723487 | メインネット(SBC がデフォルト) |
| Radius Testnet | eip155:72344 | テストネット(SBC がデフォルト) |
| ADI Chain | eip155:36900 | メインネット(USDC.e がデフォルト) |
| HPP Mainnet | eip155:190415 | メインネット(ブリッジされた USDC がデフォルト) |
| HPP Sepolia | eip155:181228 | テストネット(ブリッジされた USDC がデフォルト) |
| TON Mainnet | tvm:-239 | メインネット(jetton の送金、Python + TypeScript SDK) |
| TON Testnet | tvm:-3 | テストネット |
| Hedera Mainnet | hedera:mainnet | メインネット(HBAR + HTS トークン) |
| Hedera Testnet | hedera:testnet | テストネット |
| Algorand Mainnet | algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73k | メインネット(USDC ASA) |
| Algorand Testnet | algorand:SGO1GKSzyE7IEPItTxCByw9x8FmnrCDe | テストネット(USDC ASA) |
| Keeta Mainnet | keeta:21378 | メインネット(TypeScript SDK) |
| Keeta Testnet | keeta:1413829460 | テストネット(TypeScript SDK) |
| Concordium Mainnet | ccd:9dd9ca4d19e9393877d2c44b70f89acb | メインネット(ネイティブ CCD、6 桁、TypeScript SDK) |
| Concordium Testnet | ccd:4221332d34e1694168c2a0c0b3fd0f27 | テストネット(ネイティブ CCD、TypeScript SDK) |
| Igra Mainnet | eip155:38833 | メインネット(USDC、Permit2 のみ。EIP-3009 と EIP-2612 は非対応) |
| NEAR Mainnet | near:mainnet | メインネット(NEP-141 USDC、リレイヤーが手数料を負担、TypeScript SDK) |
| NEAR Testnet | near:testnet | テストネット(TypeScript SDK) |
| XRPL Mainnet | xrpl:0 | メインネット(XRP + IOU、手数料のスポンサーなし、TypeScript SDK) |
| XRPL Testnet | xrpl:1 | テストネット |
| XRPL Devnet | xrpl:2 | 開発ネット |
Algorand の CAIP-2 ID が変更されました。 参照値は、URL セーフな base64 形式のジェネシスハッシュを先頭から 32 文字に切り詰めたものです。以前のパディング付きフルハッシュ形式(
algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=)は一致しなくなりました。SDK は入力時にレガシー ID を正規化しますが、出力には切り詰めた形式を使用します。
デフォルトのファシリテーター(https://x402.org/facilitator)は、Base Sepolia、Solana Devnet、Algorand Testnet、Stellar Testnet、Aptos Testnet、Hedera Testnet、XRPL Testnet に対応しています。Base Sepolia では、exact、upto、および batch-settlement に加えて、builder-code、eip2612GasSponsoring、erc20ApprovalGasSponsoring の各拡張機能を通知します。
本番環境向けのデフォルトではありません。 上流プロジェクトは現在、パブリックな
x402.orgファシリテーターが開発環境およびテストネットのワークフロー向けであることを明示しています。本番環境のメインネットルートでデフォルトの経路として使用できるとは想定しないでください。本番環境向けの選択肢については、ファシリテーターのディレクトリを参照してください。
SDK パッケージ
TypeScript v2.20.0 (npm, GitHub)
| パッケージ | 用途 |
|---|---|
@x402/core | コア型、クライアント、サーバー、ファシリテーター |
@x402/evm | EVM の exact および upto スキーム(EIP-3009、Permit2)。upto は @x402/evm/upto/* サブパス経由で利用できます |
@x402/svm | Solana スキーム(SPL TransferChecked) |
@x402/stellar | Stellar スキーム(SEP-41 Soroban トークン転送) |
@x402/aptos | Aptos スキーム(Fungible Asset 転送) |
@x402/avm | Algorand(AVM)スキーム |
@x402/hedera | Hedera スキーム(HBAR および HTS の代替性トークン転送) |
@x402/tvm | TON スキーム(jetton 転送) |
@x402/keeta | Keeta スキーム(exact) |
@x402/concordium | Concordium スキーム(ネイティブ CCD、exact) |
@x402/near | NEAR スキーム(NEP-366 SignedDelegate および NEP-141 ft_transfer、リレイヤーが手数料を負担) |
@x402/xrpl | XRPL スキーム(支払人署名の Payment、手数料負担なし)。2.20.0 のタグが付いていますが、npm ではまだ公開されていません。ソースからビルドしてください |
@x402/express | Express ミドルウェア |
@x402/fastify | Fastify ミドルウェア |
@x402/hono | Hono エッジミドルウェア |
@x402/next | Next.js ミドルウェア |
@x402/axios | Axios インターセプター |
@x402/fetch | Fetch ラッパー |
@x402/paywall | ブラウザー用ペイウォール UI |
@x402/mcp | MCP クライアントおよびサーバー |
@x402/extensions | Bazaar、offer-receipt、payment-identifier、sign-in-with-x、ガス代の負担 |
Python v2.17.0 (PyPI, GitHub)
pip install "x402[httpx]" # Async HTTP client
pip install "x402[requests]" # Sync HTTP client
pip install "x402[fastapi]" # FastAPI server
pip install "x402[flask]" # Flask server
pip install "x402[evm]" # EVM support
pip install "x402[svm]" # Solana support
pip install "x402[tvm]" # TON support
pip install "x402[mcp]" # MCP integration
pip install "x402[extensions]" # Extensions (bazaar, gas sponsoring, etc.)
pip install "x402[all]" # Everything
便利なバンドル:clients(httpx + requests)、servers(flask + fastapi)、mechanisms(evm + svm + tvm)。
Go v2.20.0 (GitHub)
Go モジュールパスには /v2 サフィックスが付きます。.../x402/go だけのパスでは、タグ付きリリースを解決できなくなりました。
go get github.com/x402-foundation/x402/go/v2
Java(Java 17 以降、GitHub)
4 つ目の公式バインディング(PaymentFilter、FacilitatorClient、X402HttpClient)がリポジトリにあります。まだパッケージレジストリには公開されていません。ソースからビルドしてください。
主な概念
- クライアント/サーバー/ファシリテーター:すべての決済における3つの役割です。クライアントが署名し、サーバーが適用し、ファシリテーターがオンチェーンで決済します。
references/core-concepts.mdを参照してください。 - ウォレット:購入者と販売者にとって、決済手段であると同時にアイデンティティでもあります。
references/core-concepts.mdを参照してください。 - ネットワークとトークン:CAIP-2 識別子、EVM 上の EIP-3009 トークン、Solana 上の SPL、カスタムトークン設定です。
references/core-concepts.mdを参照してください。 - スキーム:決済方法です。
exact= 正確な金額を送金します。upto= 最大額を承認し、実際の利用額を決済します(出荷中の SDK は EVM Permit2 のみです。Solana 決済チャネルを介した SVM バインディングのドラフトは仕様策定段階です)。batch-settlement= リクエスト時に確定し、非同期で決済します。auth-capture= エスクロー/承認後にキャプチャし、無効化、返金、再請求を行います。references/evm-scheme.md、references/svm-scheme.md、references/stellar-scheme.md、references/upto-scheme.md、references/aptos-scheme.md、references/near-scheme.md、references/xrpl-scheme.md、references/protocol-spec.mdを参照してください。 - セルフファシリテーション:外部 URL を呼び出す代わりに、インプロセスのファシリテーターを実行します。
references/typescript-sdk.md、references/go-sdk.mdを参照してください。 - トランスポート:決済データの送信方法です(HTTP ヘッダー、MCP
_meta、A2A メタデータ)。references/transports.mdを参照してください。 - 拡張機能:オプション機能です(bazaar discovery、offer-receipt attestations、payment-identifier idempotency、sign-in-with-x auth、gas sponsoring、builder-code attribution、http-message-signatures、auth-hints)。
references/extensions.mdを参照してください。 - フック:クライアント/サーバー/ファシリテーターのライフサイクルコールバックです(TS、Python、Go)。
references/lifecycle-hooks.mdを参照してください。 - プロトコルの型:
PaymentRequired、PaymentPayload、SettlementResponseです。references/protocol-spec.mdを参照してください。 - カスタムトークン:USDC 以外のトークンには
registerMoneyParserを、EIP-3009 以外のトークンには Permit2 を使用します。references/evm-scheme.mdを参照してください。 - メインネットへのデプロイ:ファシリテーター URL、ネットワーク ID、ウォレットアドレスを切り替えます。
references/core-concepts.mdを参照してください。
参考資料
| ファイル | 内容 |
|---|---|
references/core-concepts.md | HTTP 402 の基盤、クライアント/サーバー/ファシリテーターの役割、ウォレット ID、ネットワーク、トークン、カスタムトークンの設定、動的登録、セルフホスト可能なファシリテーター、メインネットへのデプロイ |
references/protocol-spec.md | v2 プロトコルの型、決済フロー、ファシリテーター API、エラーコード |
references/typescript-sdk.md | サーバー、クライアント、MCP、ペイウォール、ファシリテーター向けの TypeScript SDK パターン |
references/python-sdk.md | サーバー、クライアント、MCP(サーバー+クライアント)、ファシリテーター向けの Python SDK パターン |
references/go-sdk.md | サーバー、クライアント、MCP、ファシリテーター、署名者、カスタムの金額パーサー向けの Go SDK パターン |
references/evm-scheme.md | EVM exact スキーム:EIP-3009、Permit2、デフォルトのアセット解決、registerMoneyParser、カスタムトークン |
references/svm-scheme.md | Solana exact スキーム:SPL TransferChecked、検証ルール、二重決済の軽減 |
references/stellar-scheme.md | Stellar exact スキーム:SEP-41 Soroban トークン転送、レジャーベースの有効期限、手数料のスポンサーシップ、TypeScript SDK のみ |
references/upto-scheme.md | Upto(使用量ベース)スキーム:最大金額を承認し、実際の使用量を決済します。EVM では Permit2 のみ |
references/aptos-scheme.md | Aptos exact スキーム:代替性アセットの転送、手数料支払者によるスポンサーシップ、TypeScript SDK のみ |
references/near-scheme.md | NEAR exact スキーム:NEP-366 SignedDelegate、NEP-141 ft_transfer、リレイヤーによるガスのスポンサーシップ、フルアクセスキーの要件、NEP-145 ストレージ登録 |
references/xrpl-scheme.md | XRPL exact スキーム:支払者が署名する Payment、手数料のスポンサーシップなし、明示的な AssetAmount の価格設定、sequence と ticketSequence |
references/transports.md | HTTP、MCP、A2A のトランスポート実装 |
references/extensions.md | Bazaar、payment-identifier、sign-in-with-x、ガスのスポンサーシップ(eip2612 + erc20)拡張 |
references/lifecycle-hooks.md | クライアント/サーバー/ファシリテーターのフック(TypeScript、Python、Go)、フックの連結、MCP フック |
公式リソース
- GitHub:https://github.com/x402-foundation/x402
- 仕様:https://github.com/x402-foundation/x402/tree/main/specs
- ドキュメント:https://docs.x402.org
- ウェブサイト:https://x402.org
- ファシリテーターの一覧 - 本番環境およびコミュニティのファシリテーター
- サードパーティ SDK - Rust(
x402-rs)、Java(Mogami)、Ruby(x402-rails)など、公式の3つのバインディング以外の SDK - サードパーティ拡張 - エコシステムの拡張パッケージ
- コミュニティ:Slack(http://slack.x402.org/)(プロジェクトは Discord から移行しました)
- Foundation Charter:https://github.com/x402-foundation/x402/tree/main/foundation