AIエージェントが普及しつつある昨今、エージェントがコンテンツやAPIへのアクセスに対して料金を払う仕組みとしてx402というプロトコルへの注目が高まっています。

x402 とは何か
x402 は、HTTP の仕様である「402 Payment Required」というステータスコードを利用した規格です。Coinbase やStripe・Cloudflare・Vercel といった企業が関わっています。
x402を採用することで、AIエージェントが自律的にページやAPIへのアクセスに支払いが必要かどうかを判別し、暗号通貨のウォレットが登録されていれば支払いまで進めることができるようになります。クライアントがリクエストを送ると、サーバーは 402 を返して「この額の USDC をここに払え」と伝えます。クライアントはオンチェーンで支払いを済ませ、証明を添えて同じリクエストを再送します。サーバーは確認してコンテンツを返す。この一往復で完結します。アカウントも API キーも必要ありません。
purl とは何か
このプロトコルや仕様を簡単に試せるコマンド「purl 」をStripeが先日リリースしました。

curl のx402決済支払い対応版と考えるとシンプルかなと思います。
purl は HTTP リクエストを投げて、途中で 402 が返ってきたら支払いを処理して、自動でリトライする。この一連のx402 でのフローをpurlコマンドが肩代わりしてくれます。
purlを試す
purlをmacOSで試す場合は簡単です。homebrewから追加しましょう。
brew install stripe/purl/purl
Homebrew がない環境ではシェルスクリプトでも入ります。
curl -fsSl https://www.purl.dev/install.sh | bash
インストール後に動作確認します。
purl -v
Usage が表示されれば準備完了です。
purlでテストウォレットを作る
purl で有料エンドポイントを叩くには、支払いに使うウォレットが必要です。「ウォレット」と聞くと MetaMask やコインチェックのようなものを想像するかもしれませんが、EVM ウォレットの実体は 32 バイトの秘密鍵です。アカウントもサービスも関係なく、ローカルで生成できます。
purl wallet add
以下のように進めます。
Wallet type:
> EVM (Ethereum, Base, Polygon, ...)
Create new or import existing?:
> Generate new key
Generated private key: 0xcf6496...
Address: 0xa8ca40...
Save this securely! You'll need it to recover your wallet.
Create password: (任意のパスワード)
Wallet name: test
✓ Wallet created: /Users/yourname/.purl/keystores/test.json
Address: 0xa8ca40...
Set as active wallet? yes
Wallet type は「EVM」を選択します(今回は Tempo は使いません)。「Generate new key」で秘密鍵と対応するアドレスがその場で生成されます。表示された秘密鍵はどこかに控えておきましょう。このウォレットを再インポートするときに必要になります。
残高を確認します。
purl balance
Network Balance
ethereum 0.000000 USDC
ethereum-sepolia 0.000000 USDC
base 0.000000 USDC
base-sepolia 0.000000 USDC
tempo 0.000000 USDC
tempo-moderato 0.000000 pathUSD
これでウォレットとして機能しそうですね。
テスト USDC を無料で手に入れる
Circle の Testnet Faucet にアクセスします。ここではテストネット上の USDC を無料で配布しています。本物のお金は不要です。
- トークンは「USDC」を選択
- Network は「Base Sepolia」を選択
- Wallet Address に
purl balanceで確認したアドレスを貼り付け - Submit を押す
数十秒から数分で届きます。届いたら確認します。
purl balance
Network Balance
base-sepolia 20.000000 USDC
base-sepolia に 20 USDC が入っていれば準備完了です。
実際に有料エンドポイントを叩く
purl.dev にテスト用のエンドポイントが用意されています。まず無料エンドポイントで purl が正常に動くか確認します。
purl https://www.purl.dev/test/free
{"message":"This endpoint is free!","timestamp":"...","network":"base-sepolia"}
次に有料エンドポイントの要件を確認します。inspect はリクエストを実際には投げず、402 の内容だけを読み取ります。
purl inspect https://www.purl.dev/test/paid
Payment Required (402)
Protocols: x402
Option 1: eip155:84532
Amount: 0.01 USDC (base-sepolia)
Asset: USDC (0x036CbD53842c5426634e7929541eC2318f3dCF7e)
Recipient: 0xc3128D86669e842573306CA82f60A005A41C44D4
Compatible: Yes (configured)
Base Sepolia で 0.01 USDC が必要で、自分のウォレットで対応可能と出ました。
--dry-run で支払いの内容を事前確認します。実際には送金しません。
purl --dry-run https://www.purl.dev/test/paid
[DRY RUN] Payment would be made:
Network: eip155:84532
Amount: 0.01 USDC
From: 0xa8ca40...
To: 0xc3128D...
Estimated Fee: 0
問題なければ本番実行します。
purl https://www.purl.dev/test/paid
パスワードを求められるので、purl wallet add で設定したものを入力します。
{
"message": "Payment verified! You have access to this endpoint.",
"timestamp": "2026-03-22T00:04:18.564Z",
"network": "base-sepolia",
"data": {
"foo": "bar",
"secret": "This is the protected content you paid for!"
}
}
コンテンツが返ってきました。残高を確認します。
purl balance
base-sepolia 19.990000 USDC
20.000000 から 19.990000 へ。0.01 USDC が消えています。確かに払いました。
purlでの支払いフローを整理する
purl がやっていたことを整理してみましょう。
まず https://www.purl.dev/test/paid に GET リクエストを送りました。サーバーは 402 を返して、「Base Sepolia の USDC 0.01 をこのアドレスに払ってくれ」という情報をレスポンスに含めています。
purl はその情報を読んで、ウォレットの秘密鍵で署名したトランザクションをブロックチェーン上に送信しました。支払いが完了したら、その証明(トランザクションのハッシュ等)を Authorization ヘッダーに含めて、同じエンドポイントへ再リクエストを投げます。
サーバー側は証明を検証して、正しければコンテンツを返す。この流れが x402 です。
従来の API 課金と違うのは、この全プロセスに「人間の判断」が入らない点です。アカウントも API キーもサブスクリプションも必要なく、支払いとアクセスが一つの HTTP のやりとりで完結します。AI エージェントがプログラムとして動く場合に、これが効いてきます。
まとめ
この記事でやったことは 4 ステップです。
brew install stripe/purl/purlで purl をインストールpurl wallet addでローカルに EVM ウォレットを生成する- faucet.circle.com で Base Sepolia の USDC を無料取得
purl https://www.purl.dev/test/paidで有料エンドポイントを呼び出す
x402 のサーバー側を実装してみたい場合は、Stripe の公式ドキュメント か x402.org のドキュメント が出発点になります。
これからの規格・仕様ではありますが、ウェブの新しい形・可能性として、ぜひお試しください。
