{
  "lang": "ja",
  "ページ": "https://x402-catalog-history.ai-business-surface.workers.dev/ja/monitor-x402-endpoint-uptime",
  "title": "monitor x402 endpoint uptime を払わずに測る — 10回×3経路で見えた429の境界",
  "h1": "monitor x402 endpoint uptime — 監視を買う前に、無料のポーリングで分かること（実測）",
  "description": "x402 の端点を監視したいとき、/watch は 0.02 USDC、/watchlist は最大10本で 0.05 USDC。2026-10-20 に支払いなしで /gas・/watch・/check を各10回叩くと、/gas は 10/10 が 402、/watch と /check は 6回目まで 402 で 7回目から 429（rate_limited・242〜246 B）でした。ただし別の機会には /watch を7回連続で叩いて全部 402 で、上限は固定の6回/分とは断定できません。402 の支払条件6項目の指紋は安定（/gas a6e0abe9…・/watch 1e9cf81e…・/check ff13e087…）なのに、/watch と /check の本文SHAは4種類に割れました。無料 /status.json は 26,875 B・69経路で、監視2経路の納品は 0 件です。",
  "検索語": "monitor x402 endpoint uptime",
  "読者の問い": "x402 の端点を監視したい。買う前に、無料のポーリングで何がどこまで分かるのか。",
  "実測日": "2026-10-20 JST",
  "実測": {
    "caption": "monitor x402 endpoint uptime の実測（2026-10-20 JST・公開URLへの支払いなしGET）",
    "columns": [
      "リクエスト",
      "応答",
      "大きさ",
      "応答時間",
      "分かったこと"
    ],
    "rows": [
      [
        "/gas?chains=base を10回",
        "402×10",
        "24,318 B（毎回同一）",
        "392〜1,021 ms（中央値438）",
        "429 なし。本文SHAも10回同一"
      ],
      [
        "/watch?url=<自サイト /ja> を10回",
        "402×6 → 429×4",
        "27,330 B／242 B",
        "155〜1,009 ms（中央値428）",
        "6回目まで402、7回目から429"
      ],
      [
        "/check?url=<自サイト /ja> を10回",
        "402×6 → 429×4",
        "32,578 B／237 B",
        "125〜642 ms（中央値422）",
        "同じ境目。2経路とも同時に429"
      ],
      [
        "/watch（url なし）",
        "402",
        "27,330 B",
        "561 ms",
        "url 付きと同サイズ。対象の検査は課金前でない"
      ],
      [
        "/watch?url=not-a-url",
        "400",
        "271 B",
        "144 ms",
        "invalid_url。取得なし・無料"
      ],
      [
        "/watch?url=http://127.0.0.1/",
        "400",
        "351 B",
        "143 ms",
        "blocked_target（loopback）。無料"
      ],
      [
        "/watchlist?urls=<11本>",
        "400",
        "191 B",
        "149 ms",
        "too_many_urls。上限10本を課金前に拒否"
      ],
      [
        "/watch?id=nope",
        "404",
        "595 B",
        "245 ms",
        "unknown_watch_id。無料"
      ],
      [
        "/status.json",
        "200",
        "26,875 B",
        "8,484 ms",
        "69経路。/watch・/watchlist は deliveries_observed=0"
      ]
    ],
    "note": "10回のポーリングは /gas・/watch・/check を1回ずつ交互に投げた（合計30リクエスト）。応答時間は wall clock。/watch と /check の 402 は accepts[0] の scheme・network・asset・amount・payTo・maxTimeoutSeconds を連結した指紋が 402 の間は同一（/watch 1e9cf81e…・/check ff13e087…）だったが、本文全体の SHA-256 は 402 が6回あったうち4種類に分かれた。可変フィールドは特定していない。"
  },
  "見出し": [
    "結論",
    "実測",
    "429 の境界 — 無料ポーリングの上限",
    "監視に使える指紋はどれか",
    "払うか、自分で回すか",
    "未確認",
    "次の一歩"
  ],
  "本文": [
    {
      "見出し": "結論",
      "html": "<p>x402 の端点を「監視」したいとき、買い手に選択肢は2つあります。<strong>① /watch（0.02 USDC/回）・/watchlist（最大10本 0.05 USDC/回）を買う</strong>か、<strong>② 対象の 402 を自分で定期的に取り、支払条件の6項目を保存する</strong>かです。この記事は②で何が観測できるかを、2026-10-20 に <code>/gas</code>・<code>/watch</code>・<code>/check</code> を各10回叩いて測った結果です。</p><p>分かったことは3つです。<strong>第一に、無料の 402 取得は「6回で止まる」ことがある</strong>。10回のうち /watch と /check は6回目まで 402、7回目から <strong>429（rate_limited・242〜246 B）</strong> でした。ただし同じ /watch を別の機会に7回連続で叩くと<strong>全部 402</strong> で、<strong>固定の6回/分とは断定できません</strong>。<strong>第二に、監視の指紋に使うのは本文SHAではなく支払条件6項目</strong>。本文SHAは /watch と /check で4種類に割れましたが、6項目の指紋は安定でした。<strong>第三に、無料 /status.json で監視2経路の納品は0件</strong>（69経路中）。買う前に相手の実績を見る、という意味では材料がまだありません。</p><p>価格を回数で割ると、5分ごとの監視は <strong>288回/日＝5.76 USDC/日</strong>（30日で172.8 USDC）です。0.02 は「1回の確認」には安いですが、<strong>高頻度の稼働監視には向きません</strong>。</p>"
    },
    {
      "見出し": "実測",
      "html": "<table>\n<thead><tr><th>リクエスト</th><th>応答</th><th>大きさ</th><th>応答時間</th><th>分かったこと</th></tr></thead>\n<tbody>\n<tr><td><code>/gas?chains=base</code> を10回</td><td>402×10</td><td>24,318 B（毎回同一）</td><td>392〜1,021 ms（中央値438）</td><td>429 なし。本文SHAも10回同一</td></tr>\n<tr><td><code>/watch?url=&lt;自サイト /ja&gt;</code> を10回</td><td>402×6 → 429×4</td><td>27,330 B／242 B</td><td>155〜1,009 ms（中央値428）</td><td>6回目まで402、7回目から429</td></tr>\n<tr><td><code>/check?url=&lt;自サイト /ja&gt;</code> を10回</td><td>402×6 → 429×4</td><td>32,578 B／237 B</td><td>125〜642 ms（中央値422）</td><td>同じ境目。2経路とも同時に429</td></tr>\n<tr><td><code>/watch</code>（url なし）</td><td>402</td><td>27,330 B</td><td>561 ms</td><td>url 付きと同サイズ。対象の検査は課金前でない</td></tr>\n<tr><td><code>/watch?url=not-a-url</code></td><td>400</td><td>271 B</td><td>144 ms</td><td><code>invalid_url</code>。取得なし・無料</td></tr>\n<tr><td><code>/watch?url=http://127.0.0.1/</code></td><td>400</td><td>351 B</td><td>143 ms</td><td><code>blocked_target</code>（loopback）。無料</td></tr>\n<tr><td><code>/watchlist?urls=&lt;11本&gt;</code></td><td>400</td><td>191 B</td><td>149 ms</td><td><code>too_many_urls</code>。上限10本を課金前に拒否</td></tr>\n<tr><td><code>/watch?id=nope</code></td><td>404</td><td>595 B</td><td>245 ms</td><td><code>unknown_watch_id</code>。無料</td></tr>\n<tr><td><code>/status.json</code></td><td>200</td><td>26,875 B</td><td>8,484 ms</td><td>69経路。監視2経路は納品0件</td></tr>\n</tbody>\n</table>\n<p>応答時間の中央値は3経路とも 422〜438 ms に収まりました。最小は /check の 125 ms、最大は /gas の 1,021 ms です。<strong>1回あたりの遅さは問題になりません</strong>。効くのは回数制限の方でした。</p>"
    },
    {
      "見出し": "429 の境界 — 無料ポーリングの上限",
      "html": "<p>10回のポーリングで、/watch と /check は<strong>6回目まで 402、7回目から 429</strong> になりました。429 の本文は <strong>242〜246 B</strong> で <code>error=rate_limited</code>、<code>retry</code> フィールドはありませんでした。429 になると <code>accepts[0]</code> も返らないため、<strong>その回は「条件が変わっていない」ことを確認できません</strong>。監視の記録としては「未観測」と分けて残す必要があります。</p><p>ただし、この「6回」を固定値として扱うのは危険です。同じ <code>/watch?url=https://example.com/</code> を<strong>別の機会に7回連続</strong>で叩くと、<strong>7回とも 402</strong> でした。したがって観測できたのは「短時間に連続で叩くと、どこかで 429 になる」ことだけで、<strong>正確な窓・バースト許容量・経路ごとの差は未確認</strong>です（KV ベースの窓と推測していますが、確かめていません）。</p><p>自分で監視を回すなら、<strong>429 を失敗ではなく「間隔を空けろ」の信号として扱う</strong>のが実務的です。429 が返ったら次を 60 秒以上待ち、その回は「未観測」として記録し、連続して429が続くなら間隔を広げます。<strong>429 を『変化なし』に丸めないこと</strong>が、監視の信頼性を決めます。</p>"
    },
    {
      "見出し": "監視に使える指紋はどれか",
      "html": "<p>402 の本文全体を SHA-256 にすると、/watch と /check は<strong>6回の 402 のうち4種類</strong>に割れました。同じ 27,330 B・32,578 B のまま中身が違うため、<strong>本文SHAは「条件が変わった」の検出には使えません</strong>。一方、<code>accepts[0]</code> の <strong>scheme・network・asset・amount・payTo・maxTimeoutSeconds の6項目</strong>だけを連結した指紋は、402 の間は同一でした（/gas <code>a6e0abe9…</code>・/watch <code>1e9cf81e…</code>・/check <code>ff13e087…</code>）。/gas は本文SHAも10回同一だったので、<strong>経路によって本文の安定性が違う</strong>ことも分かります。</p><pre><code>curl -s \"https://TARGET/paid\" \\\n  | jq -c '{scheme:.accepts[0].scheme,network:.accepts[0].network,asset:.accepts[0].asset,amount:.accepts[0].maxAmountRequired,payTo:.accepts[0].payTo,maxTimeoutSeconds:.accepts[0].maxTimeoutSeconds}' \\\n  | sha256sum</code></pre>\n<p>この指紋を毎回保存し、<strong>前回と違えば差分</strong>、<strong>429・タイムアウト・5xx なら未観測</strong>として記録します。6項目は /watch が返す差分の対象と同じなので、<strong>買わなくても同じ変化は検出できます</strong>。買うお金で変わるのは、基準の保存・差分の整形・並列取得・履歴の保持です。</p><p>なお <code>/watch</code> は url を付けても付けなくても <strong>同じ 27,330 B の 402</strong> を返しました。対象URLの形式検査（<code>invalid_url</code>・<code>blocked_target</code>）は 400 で無料ですが、<strong>「そのURLが実際に監視できるか」は支払うまで分かりません</strong>。<code>/watchlist</code> の11本は <code>too_many_urls</code> で 400、存在しない <code>id</code> は 404 で、いずれも無料です。</p>"
    },
    {
      "見出し": "払うか、自分で回すか",
      "html": "<ul>\n<li><strong>自分で回す（0 USDC）</strong>：対象が数本、確認は5〜15分間隔で十分、履歴は自分のファイルに残せばよい。/gas のように本文SHAが安定する経路なら、本文の一致だけでも変化を検出できる。429 は「未観測」として間隔を空ける。</li>\n<li><strong>/watch を買う（0.02/回）</strong>：基準の保存と差分の整形を相手に任せたい1本がある。60秒キャッシュ・5秒タイムアウト・リダイレクト3回も向こう持ち。5分ごとの常時監視には<strong>288回/日＝5.76 USDC/日</strong>かかる。</li>\n<li><strong>/watchlist を買う（0.05/回）</strong>：10本を1コールにまとめると1本あたり0.005で、/watch を10回（0.20）より安い。11本以上は課金前に 400。ただし監視2経路の納品記録はまだ0件で、200 の本文の形・差分の精度は未確認。</li>\n</ul>\n<p>判断は「監視の頻度 × 本数」で決まります。<strong>1日に数回の確認なら自分で回す方が安く、10本をまとめて高頻度に回すなら /watchlist の方が安い</strong>。どちらも 429 に当たるので、<strong>監視間隔は相手のレート制限の内側に置く</strong>のが前提です。</p>"
    },
    {
      "見出し": "未確認",
      "html": "<ul>\n<li><strong>429 の正確な窓</strong>：10回中6回で429、別の7回は全部402。固定の「6回/分」ではない。経路別・IP別・KVの反映遅延のどれが効いているかは未特定。</li>\n<li><strong>402 本文が割れる理由</strong>：/watch と /check で本文SHAが4種類になったが、どのフィールドが可変かは特定していない。1.1秒間隔の2回では本文が完全一致したため、時間依存ではない可能性がある。</li>\n<li><strong>200 の本文</strong>：支払っていないので、/watch の差分の形・<code>observed</code>/<code>indeterminate</code> の実際の返り方・履歴の有無は未取得。</li>\n<li><strong>429 の待ち時間</strong>：本文に <code>retry</code> は無かったが、<code>Retry-After</code> ヘッダの有無は取得していない。</li>\n</ul>\n<p>この記事の数字はすべて<strong>支払いなしの GET</strong> です。決済・送金・入金は1回も実行していません。</p>"
    },
    {
      "見出し": "次の一歩",
      "html": "<p>監視を買う側の判断は <a href=\"https://x402-catalog-history.ai-business-surface.workers.dev/ja/watch-uptime\"><code>/ja/watch-uptime</code></a>（/watch 0.02・/watchlist 0.05 の宣言）、払う前の確認は <a href=\"https://x402-catalog-history.ai-business-surface.workers.dev/ja/check-before-paying\"><code>/ja/check-before-paying</code></a>、402 の読み方は <a href=\"https://x402-catalog-history.ai-business-surface.workers.dev/ja/is-x402-endpoint-alive\"><code>/ja/is-x402-endpoint-alive</code></a> に実測でまとめています。監視2経路の納品記録は <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/product.json\"><code>/product.json</code></a> で無料で読めます。</p>"
    }
  ],
  "一覧": "https://x402-catalog-history.ai-business-surface.workers.dev/ja"
}
