Skip to main content
Common questions from teams building AdCP sales agents and integrations, with direct answers based on the specification.

Product Discovery

Q: Is hard targeting in a brief actually hard, and why use an overlay?

A: Yes. Sellers MUST apply explicit hard requirements even when they appear only in brief prose. Buyers should nevertheless put every fact with an AdCP representation in its structured field. targeting_overlay uses fewer tokens, is deterministic code rather than seller inference, and preserves exact semantics through forecasting, purchase, and readback. When a seller extracts hard targeting from the brief and the structured interpretation materially affects product eligibility, pricing, or forecasting, it MUST confirm that interpretation once in the discovery response’s targeting_resolution.brief_targeting. In other cases it SHOULD still confirm it as a best practice. This is especially useful for requests such as “US only, ages 18–44.” Absence of Product targeting resolution confirms an unchanged structured overlay for that product; absence of response-level confirmation does not confirm what was extracted from prose. Sellers do not repeat unchanged overlay values, which avoids echoing large inputs such as hundreds of postal codes.

Q: Does get_products require specific parameters like budget, dates, and objectives?

A: Use brief for objectives and semantic intent, filters for product characteristics, targeting_overlay for exact delivery constraints, and required_overlay_support for targeting dimensions that will be selected later. Dates and budget guidance may still be expressed in the brief or supported structured filter fields. For the AdCP 3.2 split lifecycle, use list_products for synchronous offer listing and request_proposals for brief-driven planning. Both share structured discovery criteria; stateful proposal creation requires an idempotency_key. Legacy get_products remains the 3.x compatibility facade. Example:

Q: How do I request specific audience targeting in get_products?

A: Put semantic audience intent in brief, but put exact delivery constraints in targeting_overlay. Use required_overlay_support for a dimension whose concrete values will be selected on packages later. Filters select product characteristics and the legacy targeting-like filter fields are deprecated. Example:
The seller interprets the brief and must also account for any structured overlay in availability, pricing, and forecasts. If it cannot execute the overlay exactly, it either omits the product or returns sparse targeting_resolution.modifications; selecting that request-scoped product accepts the disclosed changes.

Q: What does buying_mode: "wholesale" mean? We don’t expose a wholesale product feed.

A: In wholesale mode, buyers are requesting baseline products available without publisher curation or proposal generation. This does not make filters wholesale-only. Filters are hard product constraints in brief, wholesale, and refine; wholesale only changes the curation, response-timing, and feed-versioning behavior. If you don’t offer a wholesale product feed, return an error:
If you do offer wholesale access, return products matching the provided filters (format types, delivery type, etc.).

Q: Should buyers call list_creative_formats before or after get_products?

A: Neither for a new AdCP 3.2 workflow. Sales-agent list_creative_formats is deprecated. Call get_products and read each product’s canonical format_options[]; those declarations express what that product can deliver in the current account and inventory context. If a creative must be produced, find a compatible creative agent through the registry and confirm its get_adcp_capabilities.creative.supported_formats[]. Select the matching agent-local capability_id when calling build_creative.

Policy Compliance

Q: How do publishers know if there’s an ad policy issue (alcohol, adult content, etc.)?

A: Publishers extract advertiser identity from the brand field:
  1. Extract advertiser info from the brand’s brand.json (resolved via brand.domain)
  2. Check what’s being promoted from the brief text
  3. Apply policy rules based on your publisher policies
  4. Return appropriate response:
    • Allowed: Return products normally
    • Blocked: Return empty products array with policy explanation
    • Restricted: Indicate manual approval needed
Example blocked response:
See Policy Compliance for complete implementation guidance.

Q: Is the advertiser’s name always shared?

A: Yes, the brand field is required in both get_products and create_media_buy. It provides the advertiser identity needed for:
  • Policy compliance checks
  • Business relationship management (KYC)
  • Billing and reporting
Brand references are simple:
The brand’s brand.json (resolved from the domain) provides category and other identity data for automated policy filtering.

Schema and Fields

Q: Why is the filters parameter called an “object”?

A: Because it’s a nested JSON object with multiple optional fields:
It’s not a single filter—it’s a collection of filter criteria for product catalog search.

Q: What replaces format_ids and ad units?

A: AdCP uses protocol-agnostic terminology:
  • format_options: Product-bound canonical creative contracts, including kind and constraints
  • Ad units: Platform-specific terminology (such as a 300×250 banner placement)
Canonical declarations are portable across platforms. A publisher option can be referenced by {publisher_domain, format_option_id}; a creative agent separately assigns an agent-local capability_id to a producible contract. Match the declarations, not the identifiers.

Q: How do I specify what’s being promoted?

A: There are two mechanisms depending on the context:
  • Advertiser identitybrand.domain (required on get_products and create_media_buy, resolves via /.well-known/brand.json)
  • What’s being promoted → Described in the brief field for product discovery, or provided via a catalog on creatives
For product discovery:
For catalog-driven creatives, reference a synced catalog:
test=false

Brief Processing

Q: What if buyers provide incomplete briefs?

A: Publishers should request clarification when critical information is missing:
This maintains a conversational, helpful approach while gathering needed context.

Q: Should we always ask for clarification or just return products?

A: It depends on your publisher strategy:
  • High-touch approach: Request clarification for incomplete briefs, engage conversationally
  • Self-service approach: Return best-guess products based on available information
Both are valid. Consider your target buyer personas and automation level.

Workflow and Integration

Q: When should brand be required vs optional?

A: According to the current spec:
  • Required in both get_products AND create_media_buy
Best practice: Always require it. Policy checking should happen during discovery, not at purchase time.

Q: Can buyers cache product responses?

A: Products represent inventory availability which changes over time. Recommendations:
  • Brief-based discovery: Don’t cache—products are contextually matched to the brief
  • Standard catalog: Can cache for short periods (5-15 minutes) if your catalog is stable
  • Product details: Cache product_id mappings but revalidate availability before purchase

Q: How do we handle large product catalogs (1000+ products)?

A: Use property_tags instead of full properties arrays:
Buyers can discover the agent’s portfolio via get_adcp_capabilities, which returns the publisher domains and primary channels the agent represents. This keeps responses lightweight while maintaining full validation capability.

Testing and Validation

Q: How do we test policy compliance?

A: Create test cases with known restricted categories:

Q: What should we test in integration testing?

A: Key scenarios to cover:
  1. No brief + filters → Standard catalog
  2. Brief provided → AI-matched products with brief_relevance
  3. Blocked advertiser → Policy error
  4. Incomplete brief → Clarification request
  5. No products match → Helpful alternative suggestions
  6. Format filtering → Only matching formats returned

Common Pitfalls

Q: Why aren’t my format filters working?

A: In AdCP 3.2, filter on canonical format kinds or exact format-option references:

Q: Why do my products not include brief_relevance?

A: brief_relevance is only included when a brief parameter is provided. Standard catalog requests (no brief) don’t include this field since products aren’t contextually matched.

Q: Should I validate authorization in get_products?

A: Yes! Buyer agents must validate sales agent authorization before purchasing:
  1. Get properties from products (or resolve property_tags)
  2. Fetch /.well-known/adagents.json from each publisher_domain
  3. Verify the sales agent URL appears in authorized_agents
  4. Reject products from unauthorized agents
See Authorization Validation for complete requirements.

Terminology

Q: What’s the difference between “product” and “package”?

A:
  • Product: A sellable unit of inventory from the publisher (returned by get_products)
  • Package: A buyer’s selection from available products, sent in create_media_buy
Products describe what’s available. Packages describe what you’re buying.

Q: What’s the difference between “delivery” and “distribution”?

A:
  • Delivery type: "guaranteed" vs "non_guaranteed" (whether impressions are guaranteed)
  • Distribution: How creatives are distributed to ad servers (covered by creative agents, not media buying)

Q: What’s “TMP” / “Trusted Match Protocol”?

A: The Trusted Match Protocol (TMP) is AdCP’s real-time execution layer. It determines which pre-negotiated packages activate at impression time using two structurally separated operations: Context Match (content relevance, no user identity) and Identity Match (user eligibility, no page context). The publisher joins both responses locally. TMP enables cross-publisher frequency capping, brand suitability, and audience targeting across web, mobile, CTV, AI assistants, and retail media. You may also see references to AXE (Agentic eXecution Engine) — that was TMP’s predecessor. Existing AXE integrations still work, but new implementations should use TMP. See AXE documentation for legacy reference.

Need More Help?

If your question isn’t answered here:
  1. Check the Task Reference for detailed API documentation
  2. Review Brief Expectations for discovery guidance
  3. See Media Products for product model details
  4. Open a GitHub issue for specification clarifications
This FAQ is updated regularly based on implementer feedback.