adagents.json, brand.json or an agent card. See
Buyer agents for that workflow.
Storefront operator vs. publisher domains
A storefront has one operator domain: the legal or operating entity that runs that storefront. Choose its scope to match the storefront. A regional storefront uses the regional entity’s domain, and a storefront that is truly group-wide uses the parent group’s domain. Create separate storefronts when regions need separate operators, commercial rules or administration. The sites and titles sold through that storefront remain publisher domains. They do not replace the operator domain. Each publisher authorizes the sales agent in its ownadagents.json. Those files can be small pointers to one centrally maintained
document, so a group does not need to copy the same full configuration into every
title’s file. Which domain is which explains how the operator domain is
verified.
The three documents
Three identity documents matter, each owned and published by a different party. The AAO registry is not one of them; see below.The
brand.json that lists an agent belongs to whoever runs that agent. An agency
named as operator on a buyer’s account is a different party: it does not list or
vouch for the buying agent that calls you. To verify a signed request, find the
agent’s keys from the agent’s own URL; see Verifying our signed
requests.The
ads.txt managerdomain entry is a legacy one-hop bridge. A network-managed
publisher that hosts no adagents.json of its own, such as a Raptive or CafeMedia
managed domain, delegates to its manager’s file. Apostra resolves this automatically.
Publisher adagents.json entry covers how the file is
found and what each authorization reason means.The AAO registry is not a document
The registry is a source and compute layer over those documents. It does four things:- Computes compliance. It grades an agent’s self-declared capabilities against AAO
test storyboards and publishes a verdict:
passing,pending,degradedorfailing. The agent does not publish this. The registry computes it. - Hosts a community mirror of a publisher’s
adagents.jsonso a publisher that has not published is still discoverable. A community mirror lists no authorized agents. It exists to be found, never to authorize. An empty mirror is not a denial. - Hosts publisher-managed AAO copies when a publisher chooses an AAO-hosted setup.
The publisher still proves authority from its own domain by serving an
authoritative_locationstub that points at the AAO-hosted document. - Carries discovery metadata (
discovery_method,hosting.mode) saying whether a record is owner-published or a community fallback.
format_kind and format_options declarations under the
publisher domain, for example Snapchat’s under snapchat.com. An adapter does not
create a separate Apostra creative-agent URL or format namespace. Tenant-local
templates such as Figma frames use only their base format_kind; they do not create a
synthetic publisher catalog. AudioStack likewise uses the standard audio_hosted kind
directly, with an exact duration in params.duration_ms_exact when needed, and has no
separate AudioStack format namespace. For retail-media technology platforms, the
retailer owns the publisher catalog under the retailer’s domain. The technology
vendor’s domain is not a substitute.
A self-published document always supersedes the community fallback, and the registry
resolves that. AAO-hosted records converge only after the publisher-origin well-known
URL is reachable and verifies the hosted document. Apostra trusts what the registry
returns, and uses the hosting metadata to explain which setup state a record is in.
Gates vs. signals
An agent being AAO-compliant (“did it pass the test suite?”) is a different question from an agent being authorized to sell a publisher’s inventory (“does that publisher’sadagents.json list it?”). They have different owners, different documents
and different consequences.
One thing blocks setup: agent registration. Everything else is a signal during setup
and product authoring.
- Authorization is publisher-controlled. A sales agent must be registered with
AAO before it can be connected as an inventory source. Publisher authorization is
separate: that publisher’s
adagents.jsonsays which agent may sell which properties. Apostra resolves it and shows a warning when it is missing. It does not block a source connection, product authoring or activation. - AAO compliance informs. The registry’s compliance verdict is advisory. A non-passing verdict shows as a prominent warning, but it does not stop your storefront going live or transacting. You can sell while compliance is still pending.
So “your AAO compliance is pending” does not mean “you cannot go live”. It is an
advisory you can act on at your own pace. “This publisher has not authorized the agent”
is a publisher-owned authorization problem to fix before you depend on that inventory.
It is not a reason to stop setup or product drafting.
Registering your agent with AAO
Only a sales agent you connect yourself needs to be in the AAO registry. If Apostra hosts your agent (a Storefront account), there is nothing to do. If you connect your own agent, the registry must be able to find it, in one of two ways. Neither needs a paid AAO membership:- Declare it on your own domain. List the agent in the
agentsof yourbrand.json, or in yourtrust.json. - Add a community entry for it in the AAO registry, with an AgenticAdvertising.org account.
Why Apostra asks for AAO, and what it does with it
Apostra reads the registry to confirm that an agent you connect is a real, registered participant, to show you its compliance verdict as a signal, and to discover the publishers and brands tied to your domain. It does not use the registry as an Apostra allowlist. The registry is the source of truth, and Apostra shows what it says.What Apostra publishes for you, and what it never will
Apostra reads your inventory identity (your formats, placements and AdCP collections) live from theadagents.json you publish, and shows it, so a publisher
that is in the registry is discoverable. You publish upstream and Apostra picks it up:
host your own adagents.json and brand.json, and Apostra reads them live. Re-check a
domain after you update the file. Apostra reads a brand’s corporate hierarchy
(house, keller_type and parent_brand) and shows it. It does not use it to drive
business rules such as rate cards across a brand family.
Apostra never touches your authorization. It does not mint or edit the
authorized_agents[] in your adagents.json. Granting an agent the right to sell your
inventory is always your act, made in your own document.
Identity Apostra reads; authorization Apostra only ever references.If the registry reports
hosting.mode: "aao_hosted" for a publisher that has started
self-hosting, check the publisher-origin well-known URL first. The queried domain’s
https://<publisher>/.well-known/adagents.json must be crawler-accessible and must
return either the full file or a valid pointer to the authoritative file. A JSON file
that only works from a browser, only works on www.<publisher>, or blocks non-browser
crawlers is not treated as validated self-hosting.
How networks and managed publishers are represented
A network or SSP that sells across many publisher domains it does not own, and a publisher that hosts no file of its own, still fit this model through delegation, not self-declaration. A network cannot host a file on its own domain claiming it sells someone else’s inventory, because authorization is always the domain owner’s act. Instead:- The network publishes one manager
adagents.jsonon a domain it controls, listing its agent or agents and the publishers it represents. This is theadagents.jsonmodel applied to the network’s own domain. - Each publisher delegates to the network, in any one of these ways:
- an
ads.txtMANAGERDOMAIN=<network-domain>line, a one-line delegation, with the publisher hosting noadagents.jsonof its own (the Raptive and CafeMedia pattern); - an
authoritative_locationpointer in the publisher’s ownadagents.jsonthat redirects one hop to the network’s centrally hosted file; or - a
delegatedorad_networkdelegation_typeentry in the publisher’sadagents.json(see the glossary).
- an
Changing from a modular source to an external agent
Replacing a modular source with your own external sales agent changes which publisher authorization applies. It does not retroactively make the modular source an Apostra authorization case. A modular source needs publisheradagents.json authorization only
when its module or execution path exposes a publisher-facing agent URL. Once an
external AdCP sales agent becomes the source, publishers authorize that external agent’s
URL before the seller depends on that inventory.
A modular source’s spreadsheet contract stays with the modular source, including its
legacy collection identifiers and net impressions-capacity fields. Those inputs do not
change this authorization boundary. See Modular source pages.
More generally, for source families that sell publisher inventory through an agent URL,
the URL a publisher authorizes depends on the storefront’s source model. If the seller
connects its ad server directly to Apostra and uses Apostra’s hosted storefront agent,
publishers authorize the canonical Apostra storefront agent URL, https://interchange.io.
Linked storefront inventory uses the upstream storefront’s own authorization model.
For network-managed publishers, put that authorization in the manager’s file and have
publishers delegate to it through MANAGERDOMAIN or authoritative_location. If a
publisher also hosts a direct adagents.json that points somewhere else, that direct
file can shadow the manager-domain fallback. The fix is to restore delegation: make the
publisher file point to the same manager file, or remove the publisher file so its
ads.txt MANAGERDOMAIN delegation is used.
The delegation itself, that one ads.txt line or adagents.json entry, is the
publisher’s authorization act, and it is the only step that has to start with the
domain owner. A network can guide its publishers to add it, but Apostra never mints it
for them. A network cannot make itself authorized for inventory whose owner has not
delegated.
Related
- Publisher adagents.json entry says what to put in a publisher’s file and what each authorization reason means.
- Which domain is which explains the registered, brand and publisher domains.
- Connect an agent covers registering and connecting a sales agent.