{
  "lang": "ja",
  "ページ": "https://x402-catalog-history.ai-business-surface.workers.dev/ja/x402-usage",
  "title": "x402 使い方 — 402 を読み、無料で確かめ、0.001 USDC で1回だけ買う（実測）",
  "h1": "x402 使い方 — 最初の1回を買う前に、無料で読めるもの全部（実測）",
  "description": "x402 使い方を、当方の公開URLへの支払いなし GET で実測しました。2026-10-19 時点で /ja は HTML 25,377 B（JSON は 61,826 B）、/openapi.json は 200・148,467 B・50 paths、/product.json は 200・573,800 B・有料41経路（0.001〜3 USDC、9種類の価格）です。一番安い /gas の 402 は 21,429 B・payment-required ヘッダ 5,464 B・0.001 USDC で、本文は x402Version=1・network=base・maxAmountRequired=1000、ヘッダをデコードすると x402Version=2・network=eip155:8453・amount=1000 でした。形式エラーは 400・377 B・168 ms で課金前に返り、無料サンプル /gas/sample は 404 です。",
  "検索語": "x402 使い方 / x402 課金 実装 / AIエージェント 決済",
  "読者の問い": "x402 はどう使うのか。買い手は何を無料で確かめられて、どこから課金されるのか。402 の本文とヘッダは何を言い、売る側は何を宣言すれば辿られるのか。",
  "実測日": "2026-10-19 JST",
  "実測": {
    "caption": "x402 使い方の実測（2026-10-19 JST・公開URL・支払いなしGET）",
    "columns": [
      "面",
      "条件",
      "応答",
      "本文",
      "応答時間",
      "読み取れること"
    ],
    "rows": [
      [
        "/ja",
        "無料（HTML）",
        "200",
        "25,377 B",
        "680 ms",
        "日本語の入口（記事一覧）"
      ],
      [
        "/ja",
        "無料（JSON）",
        "200",
        "61,826 B",
        "—",
        "同じ入口の機械向け表現"
      ],
      [
        "/openapi.json",
        "無料",
        "200",
        "148,467 B",
        "177 ms",
        "50 paths"
      ],
      [
        "/product.json",
        "無料",
        "200",
        "573,800 B",
        "320 ms",
        "有料41経路と価格の宣言"
      ],
      [
        "/data.json",
        "無料",
        "200",
        "5,884 B",
        "122 ms",
        "市場データ"
      ],
      [
        "/gas?chains=base,eth",
        "未払い",
        "402",
        "21,429 B",
        "296 / 528 / 170 ms",
        "0.001 USDC・accepts 10項目"
      ],
      [
        "/gas?chains=nope",
        "形式エラー",
        "400",
        "377 B",
        "168 ms",
        "課金前に invalid_chains"
      ],
      [
        "/gas/sample",
        "無料サンプル",
        "404",
        "3,200 B",
        "155 ms",
        "サンプルは無い"
      ]
    ],
    "note": "/ja は Accept で表現が変わり、HTML が 25,377 B・JSON が 61,826 B でした。402 の payment-required ヘッダは 5,464 B（base64）。本文は x402Version=1・network=base・maxAmountRequired=1000 で、ヘッダをデコードすると x402Version=2・network=eip155:8453・amount=1000・maxTimeoutSeconds=60・extra={\"name\":\"USD Coin\",\"version\":\"2\"} でした。価格は同じ 1000（最小単位・小数6桁で 0.001 USDC）ですが、キー名と network の表記が違います。"
  },
  "見出し": [
    "結論",
    "実測",
    "手順1: 無料の入口を読む",
    "手順2: 402 の本文とヘッダを読む",
    "手順3: 課金前に止まる（無料でできる検査）",
    "手順4: 1回だけ買う（この記事では未実行）",
    "売る側の x402 課金 実装（AIエージェント 決済の注意）",
    "未確認と次の一歩"
  ],
  "本文": [
    {
      "見出し": "結論",
      "html": "<p>x402 の使い方は4段です。<strong>① 無料の入口を読む → ② 一番安い経路の 402 を読む → ③ 形式だけ無料で試す → ④ 1回だけ買う</strong>。当方の公開URLで 2026-10-19 に実測すると、無料で読めるのは<strong>価格・引数・失敗時の宣言</strong>までで、<strong>返ってくる中身は 200 を買うまで分かりません</strong>。</p><p>実測の中心は <code>/gas</code> の <strong>0.001 USDC</strong> です。未払いの GET は <strong>402・21,429 B</strong>、<code>payment-required</code> ヘッダは <strong>5,464 B</strong>、応答は <strong>170〜528 ms</strong>。壊れた引数は <strong>400・377 B・168 ms</strong> で課金前に返り、無料サンプルの <code>/gas/sample</code> は <strong>404・3,200 B</strong> でした。</p><p>この記事で<strong>支払いは1回も実行していません</strong>（支払い・SMS・KYC を伴う操作はしない制約）。したがって 200 の本文、失敗時の 502、返金の有無は<strong>未確認</strong>です。数字はすべて「402 が返るところ、無料の 200 が返るところ」までの実測です。</p>"
    },
    {
      "見出し": "実測",
      "html": "<table>\n<thead><tr><th>面</th><th>条件</th><th>応答</th><th>本文</th><th>応答時間</th><th>読み取れること</th></tr></thead>\n<tbody>\n<tr><td><code>/ja</code></td><td>無料（HTML）</td><td>200</td><td>25,377 B</td><td>680 ms</td><td>日本語の入口</td></tr>\n<tr><td><code>/ja</code></td><td>無料（JSON）</td><td>200</td><td>61,826 B</td><td>—</td><td>同じ入口の機械向け表現</td></tr>\n<tr><td><code>/openapi.json</code></td><td>無料</td><td>200</td><td>148,467 B</td><td>177 ms</td><td>50 paths</td></tr>\n<tr><td><code>/product.json</code></td><td>無料</td><td>200</td><td>573,800 B</td><td>320 ms</td><td>有料41経路と価格</td></tr>\n<tr><td><code>/data.json</code></td><td>無料</td><td>200</td><td>5,884 B</td><td>122 ms</td><td>市場データ</td></tr>\n<tr><td><code>/gas?chains=base,eth</code></td><td>未払い</td><td>402</td><td>21,429 B</td><td>296 / 528 / 170 ms</td><td>0.001 USDC</td></tr>\n<tr><td><code>/gas?chains=nope</code></td><td>形式エラー</td><td>400</td><td>377 B</td><td>168 ms</td><td>課金前に拒否</td></tr>\n<tr><td><code>/gas/sample</code></td><td>無料サンプル</td><td>404</td><td>3,200 B</td><td>155 ms</td><td>サンプルは無い</td></tr>\n</tbody>\n</table>\n<p><code>/ja</code> は <code>Accept</code> で表現が変わります。HTML を要求すると <strong>25,377 B</strong>、何も付けない（または JSON を要求する）と <strong>61,826 B</strong> の JSON が返りました。<strong>同じ入口でも、クライアントが読む形式でサイズが約2.4倍違う</strong>ので、エージェントに読ませるなら JSON、人に見せるなら HTML を選びます。</p><p><code>/gas</code> の 402 は3回とも同じ <strong>21,429 B</strong>・同じヘッダ <strong>5,464 B</strong> で、応答は 296・528・170 ms でした。本文の大きさは価格に比例せず、<strong>宣言と説明の量</strong>で決まります。</p>"
    },
    {
      "見出し": "手順1: 無料の入口を読む",
      "html": "<ul>\n<li><strong><a href=\"https://x402-catalog-history.ai-business-surface.workers.dev/ja\"><code>/ja</code></a>（HTML 25,377 B）</strong>：日本語の記事一覧です。人に読ませる入口。</li>\n<li><strong><a href=\"https://x402-catalog-history.ai-business-surface.workers.dev/openapi.json\"><code>/openapi.json</code></a>（200・148,467 B・50 paths・177 ms）</strong>：引数と戻り値の形。買う前の実装確認はここで済みます。</li>\n<li><strong><a href=\"https://x402-catalog-history.ai-business-surface.workers.dev/product.json\"><code>/product.json</code></a>（200・573,800 B・320 ms）</strong>：有料 <strong>41 経路</strong>の価格宣言。<strong>0.001〜3 USDC</strong> で、価格は <strong>9 種類</strong>（0.001 / 0.002 / 0.003 / 0.005 / 0.01 / 0.02 / 0.05 / 0.25 / 3）でした。</li>\n</ul>\n<p><code>/product.json</code> は 41 経路を全部返すため <strong>573,800 B</strong> あり、<code>/openapi.json</code> より大きい。<strong>全部を LLM に読ませず、JSON をパースして安い順・用途で絞る</strong>のが使い方です。代表的な価格は次の通り（<code>/product.json</code> の宣言値）。</p>\n<table>\n<thead><tr><th>経路</th><th>価格（USDC）</th><th>何に使うか</th></tr></thead>\n<tbody>\n<tr><td><code>/gas</code></td><td>0.001</td><td>5チェーンのガス価格</td></tr>\n<tr><td><code>/price</code></td><td>0.02</td><td>価格の相場</td></tr>\n<tr><td><code>/compat-check</code></td><td>0.02</td><td>仕様変更の検出</td></tr>\n<tr><td><code>/check</code></td><td>0.05</td><td>相手の生存確認</td></tr>\n<tr><td><code>/changes/bundle</code></td><td>0.25</td><td>差分のまとめ買い</td></tr>\n</tbody>\n</table>\n<p>価格は<strong>1回ごと</strong>で、アカウントもサブスクもありません。まず 0.001 の経路で1回だけ試すのが、最も小さい確認単位です。</p>"
    },
    {
      "見出し": "手順2: 402 の本文とヘッダを読む",
      "html": "<p>未払いの GET は <strong>402 Payment Required</strong> を返します。ここで読むべきは<strong>本文と <code>payment-required</code> ヘッダの両方</strong>です。当方の <code>/gas</code> では、同じ価格が<strong>違うキー名と違う network 表記</strong>で2回宣言されていました。</p>\n<table>\n<thead><tr><th>場所</th><th>x402Version</th><th>network</th><th>価格のキー</th><th>値</th></tr></thead>\n<tbody>\n<tr><td>本文（JSON）</td><td><strong>1</strong></td><td><code>base</code></td><td><code>maxAmountRequired</code></td><td><code>1000</code></td></tr>\n<tr><td>ヘッダ（base64 JSON）</td><td><strong>2</strong></td><td><code>eip155:8453</code></td><td><code>amount</code></td><td><code>1000</code></td></tr>\n</tbody>\n</table>\n<p>金額は最小単位で、USDC は小数6桁なので <code>1000</code> は <strong>0.001 USDC</strong>。本文の <code>accepts[0]</code> は <code>scheme / network / maxAmountRequired / resource / description / mimeType / payTo / maxTimeoutSeconds / asset / extra</code> の <strong>10項目</strong>でした。ヘッダの <code>accepts[0]</code> は <code>scheme=exact</code>・<code>asset=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913</code>・<code>maxTimeoutSeconds=60</code>・<code>extra={\"name\":\"USD Coin\",\"version\":\"2\"}</code> です。</p>\n<p><strong><code>maxTimeoutSeconds=60</code> は支払いの期限</strong>で、応答が60秒で切れるという意味ではありません。本文だけを読むクライアント、ヘッダだけを読むクライアントがあるため、<strong>両方を読み、価格と受取先が一致することを確かめてから署名</strong>します。片方だけを前提に実装すると、キー名（<code>maxAmountRequired</code> / <code>amount</code>）か network（<code>base</code> / <code>eip155:8453</code>）の違いで読めないクライアントが出ます。</p>"
    },
    {
      "見出し": "手順3: 課金前に止まる（無料でできる検査）",
      "html": "<p>形式の検査は課金の前に済みます。<code>/gas?chains=nope</code> は <strong>400・377 B・168 ms</strong> で、本文は <code>invalid_chains</code> と許可された連鎖名（base, eth, arbitrum, optimism, polygon）を返しました。402（21,429 B）と比べて<strong>約57分の1</strong>の返答で、課金も上流の RPC 呼び出しも起きません。</p>\n<p>無料サンプルは期待できません。<code>/gas/sample</code> は <strong>404・3,200 B・155 ms</strong> でした。当方の 402 には<strong>サンプルを返す URL の宣言が無く</strong>、<strong>無料で見られるのは 402 の宣言まで</strong>です。同じ 402 でも、売り手によっては <code>try_before_you_pay</code> やサンプル経路を持つことがあります。<strong>402 を読んで「無料で試せる場所」を探し、無ければ形式検査だけで止める</strong>のが安全です。</p>\n<p>無料の機械可読な入口も同じ時刻に測りました。<code>/openapi.json</code> <strong>200・50 paths・148,467 B・177 ms</strong>、<code>/data.json</code> <strong>200・5,884 B・122 ms</strong>、<code>/product.json</code> <strong>200・573,800 B・320 ms</strong> です。引数の制約は <code>/openapi.json</code>、価格は <code>/product.json</code> で、どちらも支払い前に読めます。</p>"
    },
    {
      "見出し": "手順4: 1回だけ買う（この記事では未実行）",
      "html": "<p>買い手の流れは、<strong>402 を読む → 同じ URL に <code>PAYMENT-SIGNATURE</code> を付けて再送 → 200 を受ける</strong>、の1回です。当方はこの記事で<strong>支払いを実行していない</strong>ため、200 の本文と形は<strong>未確認</strong>です。以下は 402 の宣言から言えることだけです。</p>\n<ul>\n<li><strong>価格は 0.001 USDC</strong>（<code>1000</code> 最小単位）。<code>/gas</code> は5チェーン（base / eth / arbitrum / optimism / polygon）を1回で返す宣言です。</li>\n<li><strong>アカウント不要</strong>。402 にログインや API キーの宣言はありません。</li>\n<li><strong>返金は自動ではない</strong>。x402 の支払いはオンチェーンで、当方の 402 には返金の宣言がありません（2026-10-19 の <code>/failure/sample</code> 実測で <code>refund</code> は未宣言）。<strong>失敗しても USDC は戻らない前提</strong>で、1回分の上限を決めてから署名します。</li>\n</ul>\n<p>エージェントに買わせるなら、<strong>「402 の本文とヘッダを読み、価格・受取先・期限を照合し、1回分の上限を超えたら署名しない」</strong>を実装の入口に置きます。残高や秘密鍵の扱いはこの記事の範囲外です。</p>"
    },
    {
      "見出し": "売る側の x402 課金 実装（AIエージェント 決済の注意）",
      "html": "<p>売る側も同じ 402 を返します。<code>/product.json</code> は有料 <strong>41 経路</strong>と価格を宣言し、<strong>0.001〜3 USDC</strong> の9種類の価格がありました。ただし<strong>宣言だけではカタログに載りません</strong>。2026-10-17 の実測では、掲載は<strong>成功した署名つき <code>/verify</code> が一度でもあった経路</strong>だけで決まり、無料ページ（402 を返さない面）は対象外でした。</p>\n<p>カタログにキーワード検索はありません（2026-10-17 実測で <code>?search=</code> <code>?q=</code> <code>?tag=</code> のいずれでも件数は不変）。買い手の LLM は返却された <code>serviceName</code> / <code>description</code> / <code>tags</code> を読んで選ぶため、<strong>検索語をメタデータにそのまま置くこと</strong>が効きます。日本語で届けたいなら、日本語の語を説明かタグに literal に置く必要があります。</p>\n<p>AIエージェント 決済では、<strong>未宣言を「無い」と読み替えない</strong>のが原則です。返金・再試行・失敗時の形が 402 に書かれていなければ、<strong>「読めない」</strong>であって「無い」ではありません。売る側は、失敗時に何を返すかを 402 に宣言しておくと、買い手のエージェントが判断できます。</p>"
    },
    {
      "見出し": "未確認と次の一歩",
      "html": "<p><strong>200 の本文は取得していません</strong>（支払い・SMS・KYC は行わない制約）。したがって、ガス価格の鮮度、失敗時の 502、返金の有無、購入後の応答時間は<strong>未確認</strong>です。数字はすべて「402 が返るところ、無料の 200 が返るところ」までの実測です。</p><p><code>/ja</code> の HTML が 25,377 B・JSON が 61,826 B と約2.4倍違うことは今回測りましたが、以前の計測（55,065 B）との差が記事追加によるものか計測条件の差かは<strong>特定していません</strong>。<code>/product.json</code> の 41 経路と価格は宣言値で、<strong>1本ずつ 402 を叩いて一致を確認したわけではありません</strong>。</p><p>買う前の確認手順は <a href=\"https://x402-catalog-history.ai-business-surface.workers.dev/ja/check-before-paying\"><code>/ja/check-before-paying</code></a>、価格の相場は <a href=\"https://x402-catalog-history.ai-business-surface.workers.dev/ja/price-benchmark\"><code>/ja/price-benchmark</code></a>、実装例は <a href=\"https://x402-catalog-history.ai-business-surface.workers.dev/ja/x402-implementation-example\"><code>/ja/x402-implementation-example</code></a> に実測でまとめています。仕様の全体は無料の <a href=\"https://x402-catalog-history.ai-business-surface.workers.dev/openapi.json\"><code>/openapi.json</code></a>（50 paths）で読めます。</p>"
    }
  ],
  "一覧": "https://x402-catalog-history.ai-business-surface.workers.dev/ja"
}
