adagents.json, shows you the verdict, and records the properties the publisher declares under it.
The set of domains you declare, with what Apostra resolves under them, is your coverage. The property roster
is the read of that coverage.
This page explains how a domain is checked, what the setup checklist and the roster show, and how the public listing
domain is served. To change the set, see Re-checking a publisher in your coverage.
Which domain is which
Your brand domain,operatorDomain, says who is selling. Your publisher domains say what is being sold. They often
differ. A network sells other companies’ sites, and its brand domain is not one of them. A brand domain is never
coverage. Which domain is which explains the third domain, the one your account is registered under, and
when it decides whether your brand domain can be verified.
Only account admins can declare, replace or remove publisher domains, and declare or retract properties. Other
members can read coverage and re-check a publisher.
Set your publisher domains
save_coverage declares the domains. add and remove change the domains you name, and domains replaces the whole
set. Re-checking a publisher in your coverage
has the rules for each.
- Declaring a domain starts its check. Apostra reads the publisher’s
adagents.jsonstraight away instead of waiting for the next scheduled check. Read your coverage again to see the result. - Declaring a domain again re-checks it, unless its last completed check was less than 10 minutes ago. Inside that
window the call changes nothing: the domain keeps its current status and no new fetch starts. After you fix a
publisher’s file, declare the domain again, or use
refresh, to get a fresh answer without waiting. - A
domainsreplace starts checks for at most 20 domains, the ones never checked or past the 10 minutes. The scheduled check covers the rest. domains: []declares an empty set and removes every domain you declared. Domains Apostra crawled or discovered for you stay.- A seller with no declared domain cannot go live. The
publisher_domainsstep in the setup checklist stays a blocker until at least one domain is declared.
How a domain’s status reads
Each declared domain has a status in your setup checklist and insearch and get with kind: "coverage". Coverage
reads call it status.
Two fields sit under
status. adagentsStatus says whether the file was read, and authorizationReason says why a
domain is not authorized.
What each reason means lists every
authorizationReason and the
change that fixes it. Authorizing Apostra in a publisher’s adagents.json gives the
entry the publisher adds.
When the whole set goes back to Checking
Publishers authorize one agent URL for your whole Storefront, so the check restarts when that URL changes. Apostra re-checks every domain when the Storefront moves between selling only through sales agents you connected and having Apostra run a source, and when a Storefront that only uses your own agents changes which agents it uses or their URLs. Adding a second source Apostra runs does not change the URL, and does not restart anything.What blocks go-live and what does not
- A missing declaration is a blocker, as above.
- Publisher authorization is advice. Setup shows
publisher_authorizationas partial while any domain is not authorized, and it never blocks go-live or a transaction. - Product publisher domains is a warning that counts the products buyers can receive that name no publisher domain or name one you have not declared. Draft, archived and other hidden products do not count. Declare the domain, fix the domain in the ad server or other source and refresh the catalog, or archive the product.
- A domain that does not exist, or that Apostra could not reach, shows in the
publisher_domainsstep as a note. The step stays partial and is not a blocker. - A Storefront that sells through a platform connection, such as Meta or TikTok, has no publisher authorization step.
What buyers see
Declaring a domain does not change your Storefront’s name, operator identity or buyer-facing profile. A buyer reading a product withget_products sees publisher_properties, the publisher domains the product covers. A product that
carries real coverage keeps it. A run-of-network product that names only a placeholder domain shows the properties
your Apostra-run sales agent is authorized to sell, so buyers see what they are buying.
The property roster
The roster is the seller view of coverage: each domain with the properties the publisher declares under it, its authorization, and what Apostra resolved from the publisher’s file. Apostra never invents a property. The roster holds what the publisher declares and what you declare yourself. Read it in either of two ways.get({ "kind": "coverage" })returns the whole roster, andsearch({ "kind": "coverage" })lists and filters it.open_page({ "page": "property_roster" })opens the Property Roster page, where you add domains, re-check a publisher and see each publisher’s creative formats.
search takes a query that matches a domain or any property under it by name, property_id or identifier value, and
a filter with authorization to list only domains with one verdict. A search for a property’s name, such as
“Example News” below, finds the domain it sits under.
total is how many domains you have declared, and verified is how many of them authorize you. provenance on a
domain is declared, crawled or discovered.
A partial read is not a missing domain
A read of a large network does not always carry every property.partialRoster: true says it left rows out. Then an
absence is not evidence that a site is missing, and a search that matched nothing is not evidence that you do not sell
it. Read propertyCount, the number of properties the domain actually has, and not the length of properties. Search
for the specific domain or property, or open the Property Roster page, before you decide a site is not covered.
Whether one property is authorized
Each property carries its ownauthorization. Read grain before you act on status. A publisher authorizes agents in
its domain’s adagents.json, and that is where Apostra resolves the verdict, so grain is domain.
unauthorizedis definite. The domain does not authorize your agent, so nothing under it can be sold, however many properties the file declares.authorizedis inherited from the domain. A publisher can map an agent to only some of the properties it declares. Apostra does not prove a positive against the selector for that one property.unknownmeans no publisher declaration backs the property. It is usually a property you declared yourself. It stays on your roster and cannot read as authorized until the publisher’s file declares it.
authorization.reason is the reason on the domain, so the fix travels with the property.
Storefronts where authorization does not apply
coverageApplies is false for a Storefront that sells through a platform connection such as Meta, Google or TikTok.
Its selling rights come from that connection, no adagents.json will resolve for it, and every domain reads as not
authorized. That is not a problem to fix. Do not publish a file to change it.
What changes when a publisher’s file changes
Apostra replaces a domain’s publisher-declared properties with the latest file. A property the new file no longer declares leaves the live roster. A publisher whoseadagents.json is gone loses its declared properties from the roster
until the file returns, and a file that leaves out the properties key changes nothing. A property you declared
yourself stays through all of these, shown as your declaration and visibly not backed by the publisher. If the file
declares the same property later, the publisher’s record takes over its identity and your claim stays recorded on it.
Declare a property before the publisher does
declareProperties on save_coverage records a property you sell under a domain you already declared. Give a
property_id, an identifier or a name, because the roster never invents an identity. It carries
provenance: "seller_declared" and stays distinct from publisher-declared properties.
Re-checking a publisher in your coverage has the
rules for it and for retracting a claim.
Creative formats on the roster
The Property Roster page also shows the creative formats each publisher declares. They are not in thecoverage
reads. A format is a canonical format_kind with its params, with no agent URL, and each one keeps its provenance
and the roster properties it applies to.
- Formats come from the AgenticAdvertising.org (AAO) registry’s publisher lookup, which also holds registry
declarations for platforms that publish no file of their own. When that lookup is unavailable, a
formats[]the publisher’s live file declares keeps the catalog current. A catalog the registry returns holds precedence once it is available again. A registry declaration never authorizes your sales agent. - Each format shows its provenance,
publisher_adagentsfor the publisher’s own declaration oraao_registry. - A declaration with no property scope applies to every property under the publisher. A scoped one applies to a
property when its
property_idis listed or one of its tags overlaps. - The format catalog has its own freshness,
formatCatalogSyncedAt. It is separate from the file check’slastSyncedAt. When neither lookup gives a complete catalog, the roster keeps the last good one and does not treat the failure as an empty catalog. - On the page, Create product opens the product task with that format already selected. Choose the ad server and the exact inventory, choose the delivery formats that source reports, then Review product and Create draft product. A format the publisher gave no stable ID shows Format needs an ID and cannot be attached yet.
- Review property mapping means the full publisher roster was checked and no property matches the format. Check inventory mapping means the roster view did not carry enough properties to prove either way, so use it instead of treating the format as unavailable.
Public listing domain
A public listing domain is the verified hostname where your approved public listing is served. It is separate from your publisher domains. Set it up in Public distribution on the Public profile page, whichopen_page({ "page": "listing" }) opens.
Choose a domain for Public distribution has the DNS records and
the check.
The page has four steps: Identity, What you do, Listed on Apostra and Public distribution. A Storefront
that has not published shows Not listed yet. Turning Listed on Apostra off, after a confirmation, takes the
Storefront off Apostra and the public web until you publish again. Public distribution needs the Distribution add-on and
a verified domain, and verifying a domain needs the listing to be published on Apostra first. A verified domain does not
publish anything: choose Make it public to take Public distribution live. A Demo Storefront counts only the first
two steps toward being Demo ready.
How the domain is served
- A hostname serves the last revision that passed its checks. When you publish a replacement revision, the verified one stays live until the replacement passes.
- Anything unverified is not served. A draft, a private listing, a suspended or expired registration, and a
revision that was never verified all fail closed. Apostra returns
404for them and410for a revoked listing. - Apostra rechecks the hostname on a schedule: DNS, HTTPS, ownership and the publication’s identity. Serving stops when verification expires or the listing stops being public.
Each hostname also answers
/.well-known/interchange-discovery-registration with a routing proof.
OpenAI Apps domain verification
The ChatGPT app destination needs Public distribution live first. Its domain-ownership step stores the challenge token OpenAI gives you on your hostname registration. Apostra then serves it as plain text, with caching off, at:save_seller and its
distribution input:
confirmReplace: true, and removing one, with openaiChallengeToken: null, needs
confirmRemove: true. A replacement invalidates the previous value at once, and Apostra records publication,
replacement and removal events in an audit history. get({ "kind": "distribution" }) returns whether a token is set and
the status of its latest check, never the token. The check asks whether your hostname returns the exact value. It does
not call OpenAI and does not claim that OpenAI has verified the domain.
Related
- Re-checking a publisher in your coverage declares, removes and re-checks domains.
- Authorizing Apostra in a publisher’s adagents.json gives the entry a publisher adds.
- Which domain is which separates your registered, brand and publisher domains.
- Seller readiness reads the setup checklist and the go-live verdict.