{
  "lang": "ja",
  "ページ": "https://x402-catalog-history.ai-business-surface.workers.dev/ja/is-x402-endpoint-alive",
  "title": "is this x402 endpoint alive — 無課金GET 3回で生存・価格・再現性を確かめる（実測）",
  "h1": "この x402 の相手は生きている？ — 無課金 GET 3回で判定する（8経路の実測）",
  "description": "is this x402 endpoint alive に答えるため、2026-10-19 に8つの有料経路へ支払いなしの GET を各3回投げました。24回すべて 402 で、本文は経路ごとに3回とも同一バイト数・同一SHA-256、accepts[0] は10項目、合計の宣言価格は 0.157 USDC。同じホストの 200（/ja 70,616 B）・404（3,213 B）・400（377 B）も測り、402 以外を「死んでいる」と誤判定しないための見分け方を数字で示します。",
  "検索語": "is this x402 endpoint alive",
  "読者の問い": "この x402 の相手は今生きているのか。払う前に、どこまで確かめられるのか。",
  "実測日": "2026-10-19 JST",
  "実測": {
    "caption": "x402 の生存確認（2026-10-19 JST・公開URLへの支払いなしGET・各3回）",
    "columns": [
      "経路",
      "3回の応答",
      "本文（3回とも同一）",
      "応答時間（3回）",
      "payment-required",
      "宣言価格（USDC）"
    ],
    "rows": [
      [
        "/gas",
        "402 / 402 / 402",
        "21,979 B",
        "724 / 472 / 172 ms",
        "5,464 B",
        "0.001"
      ],
      [
        "/random",
        "402 / 402 / 402",
        "16,297 B",
        "293 / 157 / 163 ms",
        "3,368 B",
        "0.001"
      ],
      [
        "/news",
        "402 / 402 / 402",
        "21,904 B",
        "297 / 182 / 182 ms",
        "4,344 B",
        "0.005"
      ],
      [
        "/markdown",
        "402 / 402 / 402",
        "19,313 B",
        "317 / 158 / 140 ms",
        "3,340 B",
        "0.01"
      ],
      [
        "/history",
        "402 / 402 / 402",
        "20,068 B",
        "271 / 158 / 201 ms",
        "2,952 B",
        "0.02"
      ],
      [
        "/price",
        "402 / 402 / 402",
        "29,037 B",
        "287 / 172 / 181 ms",
        "6,888 B",
        "0.02"
      ],
      [
        "/check",
        "402 / 402 / 402",
        "28,477 B",
        "236 / 178 / 159 ms",
        "5,664 B",
        "0.05"
      ],
      [
        "/reality",
        "402 / 402 / 402",
        "24,938 B",
        "291 / 194 / 161 ms",
        "4,660 B",
        "0.05"
      ]
    ],
    "note": "8経路・24回すべて 402。本文は経路ごとに3回とも同一バイト数・同一SHA-256でした。accepts[0] は scheme / network / maxAmountRequired / resource / description / mimeType / payTo / maxTimeoutSeconds / asset / extra の10項目、x402Version=1、network=base。宣言価格の合計は 0.157 USDC（支払っておらず、すべて未課金の宣言値）。応答時間は 140〜724 ms、中央値は 181 ms。"
  },
  "見出し": [
    "結論",
    "実測",
    "判定の手順",
    "402 以外の応答をどう読むか",
    "生存と納品は別",
    "誤判定しやすい点",
    "次の一歩"
  ],
  "本文": [
    {
      "見出し": "結論",
      "html": "<p>x402 の相手が生きているかは、<strong>支払わずに1回 GET し、402 と <code>payment-required</code> ヘッダが返るか</strong>で確かめられます。さらに本文の <code>accepts[0]</code> が読めて、<code>scheme / network / maxAmountRequired / resource / description / mimeType / payTo / maxTimeoutSeconds / asset / extra</code> の10項目を持っていれば、その URL は<strong>今この時点で x402 の支払い先として機能している</strong>と判断できます。今回の8経路は24回すべてこれに当てはまりました。</p><p>ただし<strong>「生きている」は「納品される」ではありません</strong>。402 は支払い条件の宣言であって、支払った後に何が返るかは別です。無料の <code>/status.json</code> を見ると47経路のうち<strong>34経路は納品記録が0件</strong>でした。生存確認と納品実績は、別の面で見る必要があります。</p>"
    },
    {
      "見出し": "実測",
      "html": "<table>\n<thead><tr><th>経路</th><th>3回の応答</th><th>本文（3回とも同一）</th><th>応答時間（3回）</th><th>payment-required</th><th>宣言価格（USDC）</th></tr></thead>\n<tbody>\n<tr><td><code>/gas</code></td><td>402 / 402 / 402</td><td>21,979 B</td><td>724 / 472 / 172 ms</td><td>5,464 B</td><td>0.001</td></tr>\n<tr><td><code>/random</code></td><td>402 / 402 / 402</td><td>16,297 B</td><td>293 / 157 / 163 ms</td><td>3,368 B</td><td>0.001</td></tr>\n<tr><td><code>/news</code></td><td>402 / 402 / 402</td><td>21,904 B</td><td>297 / 182 / 182 ms</td><td>4,344 B</td><td>0.005</td></tr>\n<tr><td><code>/markdown</code></td><td>402 / 402 / 402</td><td>19,313 B</td><td>317 / 158 / 140 ms</td><td>3,340 B</td><td>0.01</td></tr>\n<tr><td><code>/history</code></td><td>402 / 402 / 402</td><td>20,068 B</td><td>271 / 158 / 201 ms</td><td>2,952 B</td><td>0.02</td></tr>\n<tr><td><code>/price</code></td><td>402 / 402 / 402</td><td>29,037 B</td><td>287 / 172 / 181 ms</td><td>6,888 B</td><td>0.02</td></tr>\n<tr><td><code>/check</code></td><td>402 / 402 / 402</td><td>28,477 B</td><td>236 / 178 / 159 ms</td><td>5,664 B</td><td>0.05</td></tr>\n<tr><td><code>/reality</code></td><td>402 / 402 / 402</td><td>24,938 B</td><td>291 / 194 / 161 ms</td><td>4,660 B</td><td>0.05</td></tr>\n</tbody>\n</table>\n<p>同じ時刻に、同じホストの<strong>402 以外</strong>も測りました（すべて <code>Accept: application/json</code> で取得）。<code>/ja</code> は <strong>200・70,616 B・146 / 148 / 244 ms</strong>、<code>/health</code> は <strong>200・2,071 B・188 / 128 / 125 ms</strong>、<code>/status.json</code> は <strong>200・21,683 B・10,084 / 748 / 653 ms</strong>。存在しないパス <code>/no-such-path-alive-test</code> は <strong>404・3,213 B・125 / 124 / 116 ms</strong>（<code>error:not_found</code>）、<code>/gas?chains=nope</code> は <strong>400・377 B・114 / 413 / 125 ms</strong>（<code>error:invalid_chains</code>）でした。</p><p>402 の本文は 404 の<strong>約6.8倍</strong>、400 の<strong>約58倍</strong>あります。しかし <code>/ja</code> の 200 は 70,616 B で、どの 402 よりも大きい。<strong>本文の大きさだけでは、生きているかも、x402 かも判定できません</strong>。</p>"
    },
    {
      "見出し": "判定の手順",
      "html": "<ol>\n<li><strong>支払わずに GET する</strong>。ステータスとヘッダを保存します。<code>curl -s -D h.txt -o b.json 'https://TARGET/paid'</code>。</li>\n<li><strong>402 と <code>payment-required</code> ヘッダを確認する</strong>。<code>grep -i '^payment-required:' h.txt</code>。402 でもヘッダが無ければ、クライアントによっては支払い条件を読めません。</li>\n<li><strong>本文の <code>accepts[0]</code> を読む</strong>。<code>jq -r '.accepts[0] | [.scheme,.network,.maxAmountRequired,.payTo,.maxTimeoutSeconds] | @tsv' b.json</code>。10項目が揃い、金額・受取先・ネットワークが自分の想定と一致するかを見ます。</li>\n<li><strong>3回繰り返して本文の SHA-256 を比べる</strong>。今回の8経路は経路ごとに3回とも同一でした。<strong>同じなら、その時点の宣言は安定</strong>しています。動的な見積もりなら変わり得るので、その場合は金額と <code>payTo</code> だけを比べます。</li>\n<li><strong>5xx・タイムアウト・接続失敗は「判定不能」にする</strong>。死んだとも、変化なしとも決めません。時間を置いて再試行し、それでも続くなら別の経路を探します。</li>\n</ol>\n<pre><code>for i in 1 2 3; do\n  curl -s -D h$i.txt -o b$i.json \"https://TARGET/paid\"\n  sha256sum b$i.json\ndone\ngrep -i '^payment-required:' h1.txt | wc -c\njq -r '.accepts[0] | [.scheme,.network,.maxAmountRequired,.payTo] | @tsv' b1.json</code></pre>\n<p>この5ステップは<strong>すべて無料</strong>です。8経路を3回ずつ叩いても課金は0で、実測にかかった時間は合計数秒でした。価格の宣言を読むだけなら、これで足ります。</p>"
    },
    {
      "見出し": "402 以外の応答をどう読むか",
      "html": "<table>\n<thead><tr><th>応答</th><th>実測例</th><th>意味</th><th>次にすること</th></tr></thead>\n<tbody>\n<tr><td><strong>402</strong></td><td>8経路・21,979〜29,037 B</td><td>x402 の支払い先として生きている</td><td><code>accepts[0]</code> の金額・受取先を読む</td></tr>\n<tr><td><strong>200</strong></td><td><code>/ja</code> 70,616 B、<code>/health</code> 2,071 B</td><td>ホストは生きているが、その URL は x402 ではない</td><td>パスが正しいか、無料面ではないかを確認する</td></tr>\n<tr><td><strong>404</strong></td><td>3,213 B・<code>not_found</code></td><td>そのパスが無い。ホスト全体が死んだとは限らない</td><td>パス・掲載名・末尾のスラッシュを確認する</td></tr>\n<tr><td><strong>400</strong></td><td>377 B・<code>invalid_chains</code></td><td>生きていて、入力を課金前に検証している</td><td>パラメータを直す。支払いは起きていない</td></tr>\n<tr><td><strong>5xx / timeout</strong></td><td>今回は未取得</td><td>判定不能。死んだとは決められない</td><td>時間を置いて再試行し、記録に「不明」と残す</td></tr>\n</tbody>\n</table>\n<p><strong>200 は「生きている」ですが「x402 ではない」</strong>です。402 を期待して 200 が返ったら、まず URL を疑います。<strong>404 は「パスが無い」</strong>で、ホストの生死とは別です。同じホストの <code>/ja</code> が 200 を返しているなら、ホストは生きています。この切り分けをしないと、<strong>404 を「相手が死んだ」と誤記録</strong>してしまいます。</p>"
    },
    {
      "見出し": "生存と納品は別",
      "html": "<p>無料の <code>/status.json</code>（21,683 B）は<strong>47経路</strong>を持ち、<code>deliveries_observed</code> が1以上の経路は<strong>13</strong>、0件の経路は<strong>34</strong>でした。今回402を確認した8経路でも、<code>/history</code> 26件、<code>/price</code> 7件、<code>/gas</code> 6件、<code>/check</code> 5件、<code>/reality</code> 4件、<code>/random</code> 2件、<code>/news</code> 1件の記録があります。一方で <code>/markdown</code> はこの47経路の一覧に含まれていませんでした。</p><p>つまり<strong>402 が返ることは、その経路が買われた証拠でも、納品が成功した証拠でもありません</strong>。逆に、納品記録が0件でも 402 は返ります。<strong>「今払える状態か」は 402 で、「過去に納品されたか」は /status.json で</strong>見る、と面を分けてください。</p>"
    },
    {
      "見出し": "誤判定しやすい点",
      "html": "<ul>\n<li><strong>200 を「生きている x402」と読む</strong>。<code>/ja</code> は 200・70,616 B ですが、<code>accepts</code> はありません。無料ページであって、支払い先ではありません。</li>\n<li><strong>404 を「相手が死んだ」と読む</strong>。404 はパスが無いだけです。ホストが生きていれば、別のパスは 402 を返します。</li>\n<li><strong>1回の 402 で価格を確定する</strong>。今回の8経路は3回とも同一でしたが、動的な見積もりは変わり得ます。3回の本文 SHA-256 か、金額・<code>payTo</code> の一致を確認してください。</li>\n<li><strong>402 を納品保証と読む</strong>。/status.json の47経路中34経路は納品0件です。支払い後の本文・失敗時の返金は、別の実測が要ります。</li>\n<li><strong>timeout を「死んだ」と読む</strong>。判定不能です。再試行し、記録には「不明」と書きます。</li>\n</ul>"
    },
    {
      "見出し": "次の一歩",
      "html": "<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/watch-uptime\"><code>/ja/watch-uptime</code></a>、納品されないときの読み方は <a href=\"https://x402-catalog-history.ai-business-surface.workers.dev/ja/x402-payment-not-delivering\"><code>/ja/x402-payment-not-delivering</code></a> にあります。納品記録そのものは <a href=\"https://x402-catalog-history.ai-business-surface.workers.dev/status.json\"><code>/status.json</code></a>、価格の相場は <a href=\"https://x402-catalog-history.ai-business-surface.workers.dev/ja/price-benchmark\"><code>/ja/price-benchmark</code></a> で無料で読めます。</p><p><strong>未確認</strong>：支払い後の 200 本文・納品の質・返金・再試行は、この記事では取得していません（支払い・SMS・KYCを伴う操作はしていません）。数字はすべて「402 が返るところ、無料の 200 と 404 と 400 が返るところ」までの実測です。</p>"
    }
  ],
  "一覧": "https://x402-catalog-history.ai-business-surface.workers.dev/ja"
}
