Skip to content

v6 SDK: auto-project creative.supported_formats from creative_agents declarations #3594

@bokelley

Description

@bokelley

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions