Context
Surfaced during review of #3307 (v2 creative formats RFC).
In v2, sales agents declare creative agents two ways under get_adcp_capabilities.creative:
creative_agents: [{ agent_url }] — the source-of-truth list
supported_formats: [...] — the resolved/flattened catalog buyers consume
Today these are independently declared, which means an adopter who adds a format to their creative agent can drift from the supported_formats literal on their sales agent and not realize buyers see stale capabilities.
Proposal
The v6 SDK auto-projects supported_formats by fetching each creative_agents[].agent_url, calling list_creative_formats (or the equivalent v2 capability surface), and unioning. Adopters declare creative_agents once; the SDK derives the catalog.
Manual override stays supported but is discouraged: if a seller wants to narrow what an upstream creative agent advertises (e.g., "I trust Flashtalking but only for hosted html5, not VAST"), they declare creative_agents: [{ agent_url, only_format_kinds?: [...] }] and the union is computed but filtered.
Worked example
The third-party-creative-agent flow added to v2-overview.mdx in #3307 documents the pattern from the buyer side. This issue is about the SDK behavior that makes that flow ergonomic for sellers:
// Seller declares once
const capabilities = {
creative: {
creative_agents: [
{ agent_url: "https://flashtalking.adcp" },
{ agent_url: "https://creative.example.adcp" }
]
// supported_formats auto-projected by SDK
}
}
vs. today:
// Seller declares twice (drift risk)
const capabilities = {
creative: {
creative_agents: [...],
supported_formats: [/* manually mirrored from each creative_agents[].agent_url */]
}
}
Open questions
- Does the union happen at SDK init / fetch time, or per-request? (Caching strategy.)
- What's the stale-cache TTL when the SDK can't reach a declared creative agent?
- Does the SDK surface the projection via a method that returns the resolved list, or does it just populate the capabilities response?
- For the narrowing use case: is
only_format_kinds the right shape, or do we want richer filter expressions (per-canonical narrowing, capability_id allowlists)?
Out of scope for the spec PR
This is SDK-side behavior, not a v2 spec change — creative_agents and supported_formats already exist with the right semantics. The spec just doesn't say "SDKs should auto-project," and adopters today declare both fields independently. Filing here so the SDK work is tracked separately from #3307.
Refs
Context
Surfaced during review of #3307 (v2 creative formats RFC).
In v2, sales agents declare creative agents two ways under
get_adcp_capabilities.creative:creative_agents: [{ agent_url }]— the source-of-truth listsupported_formats: [...]— the resolved/flattened catalog buyers consumeToday these are independently declared, which means an adopter who adds a format to their creative agent can drift from the
supported_formatsliteral on their sales agent and not realize buyers see stale capabilities.Proposal
The v6 SDK auto-projects
supported_formatsby fetching eachcreative_agents[].agent_url, callinglist_creative_formats(or the equivalent v2 capability surface), and unioning. Adopters declarecreative_agentsonce; the SDK derives the catalog.Manual override stays supported but is discouraged: if a seller wants to narrow what an upstream creative agent advertises (e.g., "I trust Flashtalking but only for hosted html5, not VAST"), they declare
creative_agents: [{ agent_url, only_format_kinds?: [...] }]and the union is computed but filtered.Worked example
The third-party-creative-agent flow added to v2-overview.mdx in #3307 documents the pattern from the buyer side. This issue is about the SDK behavior that makes that flow ergonomic for sellers:
vs. today:
Open questions
only_format_kindsthe right shape, or do we want richer filter expressions (per-canonical narrowing, capability_id allowlists)?Out of scope for the spec PR
This is SDK-side behavior, not a v2 spec change —
creative_agentsandsupported_formatsalready exist with the right semantics. The spec just doesn't say "SDKs should auto-project," and adopters today declare both fields independently. Filing here so the SDK work is tracked separately from #3307.Refs