Skip to main content

AAO ディレクトリ API

agenticadvertising.org の AAO ディレクトリは、オープンウェブ全体でパブリッシャー adagents.json ファイルをインデックスします。この API は、すべてのセールスエージェントオペレーターが同期時に必要とする 逆マップ を表示します:
「どのパブリッシャーが私のエージェントを認可したか?」
このエンドポイントなしでは、オペレーターはパブリッシャードメインリストを手動で保守し fetch_agent_authorizations をそれに対して呼ぶか、オープンウェブを自分でクロールしなければなりません。両方ともマネージドネットワークスケールでは実行不可能です(cafemedia だけで単一のマネージャーファイルの下に約 6,800 のパブリッシャードメインを委譲)。 このエンドポイントは ディスカバリー であり、認可 ではありません。パブリッシャー自身の adagents.json がトラストルートのままです。ディレクトリは、どのパブリッシャーを SDK のドメインごとプリミティブ(verify_agent_authorizationfetch_agent_authorizations)経由で直接検証すべきかを伝えます。

エンドポイント

{agent_url} はパーセントエンコードされなければなりません(MUST)。ディレクトリは、SDK が verify_agent_authorization で適用するのと同じ規約を使って、ルックアップキーを正準化します(小文字ホスト、デフォルトポート除去、パスコンポーネントの末尾スラッシュ正規化)。

クエリパラメーター

実例: 複数のステータス値でフィルター

TypeScript での同等物:
Python(requests)での同等物:
status パラメーターの OpenAPI フラグメント:
繰り返しキーが選ばれたのは、(a) それが URLSearchParams.append() と OpenAPI のデフォルト explode: true が生成するもので、(b) カンマを含みうる将来の値ときれいに合成し、(c) ディレクトリでパーサーの曖昧性を残さないからです。

実例: 完全な集合差分のため ?include=properties を要求

デフォルトレスポンスは properties_authorized を数としてのみ運びます。数の等価は集合の等価では ありません: 3 つのプロパティをローテートするパブリッシャーは数を変えないまま集合を完全に異なるものにし、数ベースの分岐検出器はそれを見られません。?include=propertiesPublisherEntry ごとに property_ids: list[string] フィールドを追加します — そのパブリッシャーの下でエージェントのセレクターが解決する正準 ID — 消費者がフェデレーテッド fetch_agent_authorizations 結果に対して集合として完全な集合差分を実行し、大きさの差分だけでなくローテーションを検出できるように。 フラグはデフォルトページペイロードを小さく保つためオプトインです。インライン ID はパブリッシャーごとのプロパティ数 × 約 16 バイト/ID を追加します。マネージドネットワーク親ファイル(約 6,800 パブリッシャー × 平均 1 プロパティ ≈ 追加 7 KB の ID)では、オーバーヘッドは小さいが非ゼロです。ページネーションセマンティクスは変わりません。

レスポンス

?include=properties では、各 PublisherEntry が追加で property_ids を運びます:

フィールドリファレンス

エンベロープ

PublisherEntry

discovery_method

ディレクトリは discovery_method: ads_txt_managerdomain のロウを返す前に managerdomain 安全ルールを検証します — これがオペレーターごとの ads.txt クロールに対するディレクトリの主な付加価値です。

status

unboundpendingunreachableno_properties意図的に v1 の一部でありません。ディレクトリは adagents.json が正常にフェッチされエージェントを参照するパブリッシャーのみをインデックスします。パブリッシャーが消えた場合、ディレクトリはトゥームストーンを返すのではなく結果からそれをドロップします(消費者は先のページに対する集合差分でメンバーシップを追跡)。

HTTP セマンティクス

エンドポイントは Cache-ControlETag を設定します。条件付き GETIf-None-Match)がワイヤーレベルのキャッシュメカニズムです。ボディの directory_indexed_at が消費者ロジックの鮮度アンカーです。

認証

V1 は未認証です。パブリッシャー adagents.json ファイルは公開です。逆マップは公開です。レート制限が IP ベースからアイデンティティベースに卒業する場合、パスはエージェントの公開 JWKS をキーとする RFC 9421 リクエスト署名を重ねる別の RFC です — エージェントはリクエストに署名することで agent_url を制御することを証明します。この RFC の範囲外。

ページネーション

カーソルは不透明です。置換可能な文字列として扱い、そのまま返してください。ディレクトリは通知なしにカーソル形式を変更してもよい(MAY)。消費者はカーソル内容を解析してはなりません(MUST NOT)。 カーソルは少なくとも 1 つのディレクトリリフレッシュサイクルの間有効なままです。それを過ぎると、ディレクトリは cursor_expired を伴う 400 または最初からの再走査を伴う 200 を返してもよい(MAY) — 両方とも適合。消費者は先のリクエストの実時間を記録し、24 時間より古いカーソルの使用を拒否すべきです(SHOULD)。

他のプリミティブとの関係

AAO ディレクトリは既存の SDK プリミティブを補完します: 最初の 2 つは、オペレーターが既にパブリッシャー集合を知っている質問に答えます。ディレクトリエンドポイントはオペレーターの実際の同期時の質問に答えます: 「私のパブリッシャー集合は何か?」 推奨ワークフロー:
  1. GET /v1/agents/{agent_url}/publishers を呼んでパブリッシャー集合を発見。
  2. レスポンスの各 publisher_domain について、オペレーターはトラストルートに対して再確認するためパブリッシャー自身の adagents.json に対して verify_agent_authorization を呼んでもよい(MAY)。ディレクトリの last_verified_at はクリティカルパスでのドメインごと検証の必要性を減らすが排除しない。
  3. レスポンスの properties_authorized / properties_total をオペレーター向けスコープサマリーに、signing_keys_pinned フラグをどのエージェントがパブリッシャーのピンに一致する JWKS を公開しなければならないかを表示するために使う。
  4. 分岐検出器(ディレクトリとパブリッシャーのライブ adagents.json が不一致のケースを捕捉)を実行するオペレーターは、?include=properties を要求し、ディレクトリの property_ids[] をフェデレーテッドフェッチに対して数ではなく集合として比較すべき(SHOULD)。N プロパティをローテートするパブリッシャーは両側で等しい数を生成する。集合比較のみがそれを捕捉する。

publisher_properties インライン解決との関係

マネージドネットワーク型親ファイル(adcp#4825 インライン解決ルール に従い)では、ディレクトリは publisher_domain でフィルターされた親ファイルのインライン properties[] から properties_total を計算します。このスケールでの厳格なフェデレーションは、ディレクトリリフレッシュごとパブリッシャーごとに N HTTP フェッチを要求します — オペレーターが持つのと同じスケール問題が 1 レイヤー上に移動しただけ。ディレクトリは仕様が承認するインライン解決ルールを使います。

範囲外(v1)

  • 認証。 公開エンドポイント、匿名レート制限。アイデンティティバウンドの制限は必要なら別の RFC で到達。
  • クロスディレクトリフェデレーション。 単一ディレクトリ。エンドポイント形状は、複数の AAO 互換ディレクトリがそれを実装できるよう定義されている。どのディレクトリをクエリするかのディスカバリーは今日は構成。
  • 新しい認可のプッシュ通知。 ポーリングベースの v1。
  • 完全なプロパティオブジェクトのインライン。 ?include=properties は解決された property_ids[] のみを返す — プロパティオブジェクト自体ではない。ID を持つ消費者は既存のドメインごとプリミティブ経由で詳細をフェッチできる。

関連項目