日本語

IFFフィールドガイド

連携する前に
x402 APIを確認。

支払い処理をつなぐ前に、支払い不要で取得・保存されたx402 v2エビデンスを読み、自分の役割に合う手順へ進んでください。

図解されたエビデンス例を読む

学習用サンプル · · ライブデータではありません

図解されたエビデンスカードを読む。

値が説明用の、静的な合成例です。リソースは実在するobservedカードやverifiedカードを表さず、このページを開いてもプロバイダーへのリクエストは発生しません。

説明用の値ライブエビデンスではありません
リソース
https://api.example.com/v1/resource
ティア
observed Observed from public sources. Ownership not verified. Not an IFF-verified Evidence Card. 公開情報源から観測されたもので、所有権は検証されておらず、IFFが検証したエビデンスカードではありません。
プロトコル
valid · x402 v2 プロトコル検査に合格しています。
支払いオプション
exact · eip155:8453 · synthetic token contract 0x…C3 · 1000 atomic units · payTo 0x…A1 合成値です。省略表記の識別子は表示専用であり、支払い指示には使えません。
鮮度
fresh at sample time 実際のカードには観測時刻と間隔が表示されます。利用前に再確認してください。
要件
current run: 4 observations 複数回の観測が一致しました。プロバイダーがその条件を選んだ理由は説明しません。

判断できること

実在するカードであれば、記載の支払いオプションを含むプロトコル上有効な支払い前チャレンジを、記載の観測時刻にモニターが記録したことを示します。

判断できないこと

このサンプルは、所有権、支払いの安全性、サービス提供、決済、プロバイダーの意図を立証しません。実在するレポート、署名、ログ証明もありません。

API利用者

使う前にエンドポイントを確認する。

ウォレット、APIキー、支払いなしで、IFFが観測した内容を確認できます。

用意するもの
APIリソースの正確なURL
得られるもの
利用可能な場合、保存済みの公開エビデンスカード
ライブ検索を開く
  1. ウェブサイトではなく、リソースパスを使う。

    ライブ検索を開き、完全なURLをx402 endpoint URLに貼り付けます。プロバイダーのホームページを指定しても、そのドメイン上の全APIは検索されません。

    リソースURLの例
    https://api.solmachina.com/v1/epoch

    このURLには2026年9月6日時点で公開エビデンスがありました。一例であり、推奨ではありません。

  2. 支払いネットワークを選び、「Inspect evidence」を実行する。

    Base、BSC、0G、Robinhood Chainを選ぶと、保存されたチャレンジ内のメインネットのオプションに絞り込まれます。All networksにはテストネットなども含まれます。プロバイダーは呼び出されず、選択でプロバイダーの受け入れ条件が変わることも、決済が証明されることもありません。

  3. 各ディメンションを個別に読む。

    所有権
    オリジンの管理権限は検証済みか。observedカードでも未検証の場合があります。
    プロトコル
    支払い不要のレスポンスがx402 v2検査に合格したか。支払い後の結果の検査ではありません。
    鮮度
    いつ観測され、現在も監視期間内にあるか。
    可用性
    サンプル数と期間を確認します。測定値がないことは合格ではありません。
各エビデンスフィールドを理解する

エージェント・アプリ開発者

支払い処理の前にエビデンスを確認する。

クライアントが受け取った要件と、IFFによる独立した観測を比較します。

用意するもの
x402 v2クライアントと支払いポリシー
得られるもの
支払い承認ではなく、比較判定
SDKガイドを開く
  1. プリフライトSDKをインストールする。

    Node 20以降またはモダンブラウザを使用します。IFF APIキーは不要です。

    ターミナル
    npm install @ifandonlyif/x402-preflight
  2. チェック済みのfetchを支払いクライアントに渡す。

    ラッパーは支払いライブラリが動作する前に402を確認します。ウォレットキーは持たず、支払いも行いません。

    TypeScript · 連携例
    import { wrapFetch } from "@ifandonlyif/x402-preflight";
    
    const preflightFetch = wrapFetch(fetch, {
      onDiverged: "throw",
      onStale: "strict",
      onUnobserved: "warn",
    });
    
    // Pass preflightFetch as your payment client's fetch.
    // Creating this function alone makes no request.

    完全な購入処理ではありません。代替:verify()、HTTP API、MCPコマンド。

  3. 不確実な状況をアプリでどう扱うか決める。

    consistent
    比較が一致しています。続行するかは、引き続き自身の支払いポリシーで判断します。
    diverged
    要件が異なります。この例では支払い処理へ進む前に例外を発生させます。
    stale
    観測が古い状態です。strictは古い観測と不一致なら例外を発生させ、一致なら警告だけを出します。
    unobserved
    比較可能な観測がありません。この例では警告を出しますが、自動的には停止しません。

エンドポイント所有者

管理権限を証明し、
運用を始める。

APIを使う手順です。新しいドメインは不要ですが、エンドポイントのオリジンの管理権限が必要です。

用意するもの
personal-sign対応のEthereum EOAウォレット(コントラクトウォレットは不可)、公開x402 v2エンドポイント、well-knownファイルへのアクセス権
得られるもの
検証成功後の所有者アクセス権
ウォレット認証を始める
  1. サーバーのログインチャレンジに署名する。

    ウォレット認証に従い、チャレンジを要求し、そのメッセージに署名して、アクセストークンとリフレッシュトークンを取得します。トークンは秘密にし、秘密鍵はIFFへ送らないでください。

  2. 正確なエンドポイントURLを登録する。

    アクセストークンとエンドポイント情報を添えてPOST /api/v3/endpointsを呼び出し、返されたclaim_attempt_idとownershipドキュメントを保存します。登録は申請の開始であり、所有者アクセス権は付与されません。

    公開HTTPSのポート443を使用し、認証情報、クエリ文字列、フラグメント、リダイレクトは含めないでください。

  3. 所有権ファイルを公開し、検証をキューに入れる。

    返されたownership.documentを、指定された正確なownership.verification_urlで配信します。通常は同じオリジン上の/.well-known/iff-trust.jsonです。チャレンジは24時間後に期限切れになります。

    1つのオリジンに複数のエンドポイントがある場合は、既存の申請を残し、claims形式で新しい申請を追加します。

    POST /api/v3/endpoints/:id/verify-ownershipを呼び出します。202はキュー投入であり、検証済みではありません。結果はGET /api/v3/endpointsで確認します。

  4. 監視エビデンスを待ち、通知を追加する。

    所有者アクセスと公開エビデンスは別です。verifiedティアの公開には、所有権の確認と少なくとも3回の合格観測が必要です。再確認に備え、所有権ファイルを公開し続けてください。

    検証後は、状態や要件の変更についてWebhookを設定できます。一度だけ表示されるシークレットを保存し、各配信の署名とタイムスタンプを検査し、再試行を重複排除してください。

リクエスト例と所有権ファイルのルールを見る

エビデンスのレビュー担当者

署名された内容を確認し、
信頼の判断と切り分ける。

実験的な署名付き検証結果エンベロープであるIFF Service Receipt v2を確認します。

用意するもの
レシートJSONまたは完全なAPIレスポンス。ピン留めには、独立した経路で取得した発行者情報
得られるもの
署名、発行者、時刻、バインディングそれぞれの検査結果
レシート検証を開く(英語)
  1. URLではなくJSONを読み込む。

    レシートエンベロープか完全なAPIレスポンスを貼り付けるか、JSONファイルを読み込みます。エンドポイントURLはライブ検索で確認してください。解析と署名検査はブラウザ内で動作し、発行者の確認ではIFFの公開鍵ディレクトリを取得する場合があります。

    レシートがない場合は、開発者にservice_receiptを含むIFFレスポンスを依頼してください。任意の直接API連携で要求できます。通常のレスポンスには含まれません。

  2. 有効な署名と、信頼できる発行者を分けて考える。

    署名が有効とは、埋め込まれた鍵が対象に署名したという意味で、ディレクトリとの一致は鍵を識別するだけです。独立したピン留めには、別の信頼できる経路で取得した発行者と完全なsha256:鍵フィンガープリントを指定してください。確認対象のレシートからコピーしてはいけません。

  3. 署名対象、時間範囲、バインディングを読む。

    署名されたURLと結果が期待どおりか確認します。有効な過去の署名でも、期限切れレシートの場合があります。単独のレシートでは、周囲のレスポンスが署名対象と一致することを立証できません。

    レシート署名だけでは、参照された観測、ログへの包含、チェーンアンカーは検証されません。

レシート仕様と検証範囲を読む

想定どおりに進まないとき

次の手順を確認する。

エビデンスがない場合と検査に失敗した場合では、対応が異なります。

検査に合格したら支払ってよいという意味ですか?

いいえ。プロトコルの有効性、所有権、鮮度、要件の一貫性、レシートの真正性はそれぞれ別の問いに答え、どれも有料サービスやその結果を保証しません。自身の支払いポリシーとリスク上限を維持してください。