In display-ad systems, brand safety mostly happens after the fact: an ad runs, a verification vendor flags it, the buyer gets a report. On agent surfaces, the verification can happen before the ad becomes an impression — because the verifiable artifacts the check needs (the sponsor's manifest, the broadcast feed, the content's provenance headers) are all at known paths and fetchable at decision time.
Post-hoc verification was designed for an environment where ads loaded fast, in volumes too high to inspect each one, into pages with stable, long-lived content. None of those assumptions hold on agent surfaces:
Post-hoc verification arrives too late on a surface that exists for an instant.
Before the agent renders an ad, the verification step answers four questions:
/.well-known/agent-ad.json. Confirm it parses, matches the advertiser identity in the candidate, and is active according to the manifest/feed status./.well-known/abf.json + /.well-known/abf-index.json). Confirm the candidate ad is in the current eligibility window, with the expected ranking signals intact.If all four return true, the placement is safe to render. If any returns false, the agent rejects the placement and moves to the next candidate or to no-ad.
The whole check is mechanical, takes one round of fetches against stable known paths, and runs before the ad is rendered.
| Path | What the check reads from it |
|---|---|
/.well-known/agent-ad.json | Sponsor identity, attestation method, declared category and placement constraints |
/.well-known/abf.json | Current eligibility of the candidate ad signal |
/.well-known/abf-index.json | Index of currently-active signals, for fast lookup |
| Response headers of surrounding content | FCS provenance — what model, what publisher, what signature |
All four are public. None require an account, an API key, or a per-request authentication step. The verification flow is symmetric across implementations.
OpenAI Ads enforces its own ad policies before ads enter the system, and provides brand-safety controls in the Ads Manager dashboard. That is buyer-side policy enforcement on a single platform.
Pre-render verification, as described here, is the runtime check on the agent's side, independent of which ad system the candidate came from. It runs against public artifacts the candidate exposes, so it does not require a per-platform integration — an agent runtime that adopts ABF-style verification can apply the same check to candidates from any ad system that publishes the necessary artifacts.
OpenAI Ads handles policy enforcement on its surface. Pre-render verification handles runtime check on agent surfaces. They are complementary, not competing.
The verification step does not select ads — that is the relevance function's job (see sister page). The relevance function produces a ranked candidate set; verification runs against the top candidates in order, accepting the first one that passes all four checks.
If the top candidate fails verification, a conservative runtime can move to the next candidate or render no ad. This is a recommendation, not a normative rule of the ABF spec — it lets pre-render verification be conservative without breaking the agent's response.
Three things an agent runtime does:
A reference verification flow, including failure-mode handling and retry policy, will live in the ABF integration guide at /docs/abf/ (dedicated brand-safety docs to be drafted separately).