Skip to content

Publisher-declared formats vs agent-deliverable formats: list_creative_formats(publisher_domain) returns a superset no single agent can fulfil #6094

Description

@bokelley

Summary

#4620 made the publisher's adagents.json catalog the authoritative answer to "what formats does this property support." Implementing the consumer side surfaced a gap that #4620 didn't need to resolve: a publisher-declared format is not necessarily a format any authorized sales agent can actually deliver, and the protocol has no way to express the difference.

I don't see a mechanism for this today — if one exists, point me at it and this becomes a docs ask rather than a spec one.

The gap

Two different questions get the same answer shape:

  • adagents.json#/formats[]the publisher declares this unit exists and is sellable. Canonical format_kind + params, property-scoped via applies_to_property_ids / applies_to_property_tags, optionally bound to placements.
  • What a sales agent can executethis can physically traffic. Determined by the agent's ad server: the placements it has access to, and the creative types those placements accept.

These diverge routinely, in both directions:

  • A publisher declares a seller-built multi-state unit (the spec(creative): add multi_state_display and page_takeover canonical formats (premium web display) #5972 category). The agent selling that publisher's inventory reaches it through an ad server with no execution path for it — no placement, no creative template, no rendering integration. The publisher is telling the truth; the agent still cannot sell it.
  • An ad-server placement accepts a size or creative type the publisher never declared. Trafficable, undeclared.
  • One publisher, several authorized agents, different ad-server footprints — so the deliverable subset differs per agent, while the declared set is shared.

Why it bites

  1. A buyer resolving list_creative_formats(publisher_domain=...) gets a superset of what any one agent can fulfil. The failure shows up late — a rejected create_media_buy, or a creative that validates against the declaration and then has nowhere to serve.
  2. The safe agent-side workaround defeats Property-scoped format declarations — authoritative source for 'what formats does <property> support' #4620. If agents defensively omit publisher-declared formats they can't execute and re-declare only their own product-inline format_options[], we are back to N copies of the same truth with drift — the exact problem Property-scoped format declarations — authoritative source for 'what formats does <property> support' #4620 set out to fix.
  3. Multi-publisher products have no defined eligibility rule. A product spanning two publisher domains: is the eligible format set the union of their declared catalogs, or the intersection? The spec doesn't say, and the two readings are meaningfully different for a curator or network product. This one is answerable independently of everything else above, and probably should be.

Questions

Q1 — Multi-publisher eligibility (normative). Union or intersection for a product spanning multiple publisher domains? Placement-bound formats make this sharper: if placements[] binds formats to property_ids / property_tags, is eligibility computed at the property level and then unioned, or is the publisher-level catalog the unit?

Q2 — Who owns the deliverability delta? Three readings, and I'd like the WG to pick one rather than leave it to implementations:

  • (a) Out of protocol scope. The publisher catalog is advisory — "what exists" — and the purchasable set is whatever appears in a product's format_options[]. Cheap, and mostly matches what implementations will do anyway, but it needs to be stated normatively in the docs, because Property-scoped format declarations — authoritative source for 'what formats does <property> support' #4620's framing ("authoritative source") reads as purchasable today.
  • (b) Declare it per agent in adagents.json. An authorized_agents[] entry carries a supported/unsupported format subset. Keeps one file authoritative; makes the publisher responsible for maintaining facts about someone else's ad server, which seems wrong.
  • (c) Report it agent-side. list_creative_formats responses distinguish publisher-declared from sellable-by-this-agent, so the agent answers for its own capability and the publisher still owns the declaration.

My read is (a) + (c): make the advisory/purchasable boundary normative in docs, and give the agent-side response enough provenance that a buyer agent can tell "the publisher says this exists" from "I can sell you this." That keeps the catalog authoritative for what it's genuinely authoritative about, and puts deliverability with the party that knows it.

Q3 — Provenance on format results. Related to (c) and useful regardless: should list_creative_formats results carry where each entry came from — publisher-hosted adagents.json, AAO mirror, or agent/product declaration? #4620 specced the resolution order (publisher-hosted → AAO mirror → fail-closed) but the result doesn't say which rung answered. A buyer treating a community-mirrored catalog the same as a publisher-hosted one is trusting a different thing.

Two smaller asks from the same implementation

Commercial terms are not format facts. Encoding a premium publisher's spec sheets, the material that most wanted to end up in the format schema was commercial: creative lead times, swap limits, approval SLAs. Those belong at product/negotiation level — they change per deal, and baking them into a format declaration laminates one seller's current manual process into a structural contract buyers validate against. Encoders reach for the format schema because it is the only structured place on offer. Worth a normative "format declarations describe the creative, not the terms of trade" line in the canonical-formats docs.

Classification convergence. Two independent expert encodings of the same publisher's spec material, by people who knew the spec, initially disagreed: one misclassification (a docking-video unit encoded as custom when its buyer deliverable was plain video_hosted), two source conflicts silently resolved in opposite directions, one format missed entirely. #5972 §5 documents the two boundaries that matter (multi_state_display vs responsive_creative; anything tag-delivered is display_tag regardless of behavioral richness) in prose, which is necessary and not sufficient — prose guidance did not converge two experts. Worth conformance fixtures: a set of realistic publisher spec descriptions with their expected canonical classification, so independent encoders and codegen consumers can check themselves. #4591 (conformance storyboard track) is closed — is there a home for classification fixtures, or should that be its own issue?

If classification stays this divergent, the catalog's authority erodes for a subtler reason than deliverability: two agents encode the same publisher unit two ways, and buyers can't tell it's the same unit.

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    claude-triagedIssue has been triaged by the Claude Code triage routine. Remove to re-triage.creativeneeds-wg-reviewBlocked on a working-group decision — surface in WG meeting agendasrfcProtocol change — auto-adds to roadmap boardspec / protocol

    Type

    No type

    Projects

    Status
    No status

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions