Publisher / seller track (B1–B4)
Members only — Requires Basics credential (A1–A3). Four modules, ~105 minutes total.
Is this track for you?
AdCP gives publishers a single endpoint that AI buyer agents can use to discover your inventory, negotiate and create media buys, and pull delivery data — without a sales call, a custom API integration, or giving up your direct deal terms. One implementation; always-on access for buyers that operate autonomously.
Engineers and ad tech builders should do B1–B4. Anyone else can pick the modules above and skip the rest.
What you’ll build toward
- B4 is a build project: you create a working sales agent that handles real buyer queries — product discovery, media buy creation, creative specs, and delivery reporting
- The agent is validated against AdCP storyboards, not just reviewed manually
- Completing B1–B4 (plus A1–A3) earns the AdCP practitioner credential
B1: Designing your product catalog
~20 min | Prerequisite: A3 How a hosted sales agent works: product discovery, catalog integration, capability advertising. Walkthrough of designing your product catalog — including collections and installments for content-centric inventory like podcasts, CTV series, and live events — and configuring what buyers can discover about you.Reading list
Product discovery
How buyer agents discover publisher inventory through
get_products.get_products task
Task reference: request schema, response schema, and examples.
Media products
How to structure products: formats, pricing, targeting, and availability.
Collections and installments
Model content-centric inventory: podcasts, CTV series, live events, and episodic content.
sync_catalogs task
Catalog synchronization: 13 catalog types, feed field mappings.
Capability discovery
How agents advertise their capabilities so other agents can discover what they offer.
Seller setup
How to publish seller identity, property relationships, signing keys, and publisher authorization files.
Version negotiation
Advertise your supported
adcp.major_versions; reject mismatched requests with VERSION_UNSUPPORTED.Authorized properties
How publishers declare and authorize their properties for agentic transactions.
Media buy lifecycle
The state machine sellers must honor:
pending_creatives → pending_start → active → paused/completed.Key concepts
- Sales agent role — your always-on, AI-powered sales team that responds to buyer queries
- Product catalog design — products, formats, pricing models, targeting options, availability, and shows/episodes for content-centric inventory
- Catalog integration —
sync_catalogsfor product data, 13 catalog types, feed field mappings - Capability advertising —
get_adcp_capabilitiesso buyers know what you support - Seller identity setup — publish
brand.jsonfor the organization operating the sales agent andadagents.jsonfor publisher authorization; buyers use both to verify who operates the sales path and whether the publisher authorizes it - Object-presence capability principle — capabilities are declared by the presence of an object, not by booleans. If you support a feature, include the object; if you don’t, omit it. Buyers check for the object, not for
"feature": true. - Version advertising — declare
adcp.major_versionsso multi-version buyers can migrate on their own schedule; validate incomingadcp_major_versionand returnVERSION_UNSUPPORTEDwhen out of range - Lifecycle commitments —
create_media_buyMAY returnpending_creativesorpending_start; MUST transitionpending_start→activewhen the flight date arrives, and notify orchestrators via webhook. Rejection is only valid from the pending states - Reporting declaration — every product MUST include
reporting_capabilities(metrics, dimensions, cadence, measurement windows). Presence of this object declaresget_media_buy_deliverysupport
Start B1 with Addie
“I’d like to start certification module B1.”
B2: Creative specifications and format support
~20 min | Prerequisite: B1 Deep dive on canonicalProduct.format_options[] and publisher adagents.json.formats[], including how buyers discover what your inventory accepts. Guide to structuring creative specs, handling incoming creatives, and brand compliance.
Reading list
Brief expectations
What buyer briefs look like and how to structure products so agents can match them.
Example briefs
Real examples of product discovery queries from buyer agents.
Canonical formats
How publisher, product, and creative-agent declarations work.
Creative formats
Format definitions, technical specs, and the renders structure.
Implementing standard formats
Standard format IDs and how to implement them consistently.
Product refinement
How buyer agents refine searches and negotiate product parameters.
Key concepts
- Format declarations — Product
format_options[]tells buyers what each sellable product accepts - Format vs manifest — the format is what you accept, the manifest is what gets delivered
- Handling incoming creatives —
sync_creativesandbuild_creativevalidation and approval - Brand compliance — understanding incoming brand.json, disclosure positions
Start B2 with Addie
“I’d like to start certification module B2.”
B3: Measurement, signals, and optimization
~35 min | Prerequisite: B2 How to expose delivery data, measurement signals, and optimization levers through your sales agent. Integration with measurement platforms, audience handling, and account management.Reading list
get_media_buy_delivery task
Delivery metrics: impressions, spend, completion rates, and performance data.
Reporting Core obligation lifecycle
See exactly when obligations exist and how
expected_at is derived.get_reporting_status task
Project obligations, immutable revisions, health, and retained reporting history.
Broadcast measurement windows
Follow the declared Live/C3/C7 progression and its delivery fields.
Signals overview
The signals protocol: audience segments, contextual signals, measurement data.
Trusted Match Protocol
How publishers support impression-time execution for buyer use cases like cross-publisher frequency capping.
TMP Router architecture
Deployment, fan-out, and provider configuration for publishers.
get_signals task
Signal discovery: what measurement data is available and how to expose it.
activate_signal task
Enabling specific measurement on a campaign.
Accounts overview
The commercial layer: advertisers, operators, authentication, and billing.
Campaign governance
Seller-side governance checks: validate buyer purchases before executing them.
check_governance task
The governance validation task: intent checks, execution checks, statuses, and planned delivery.
Key concepts
- Delivery reporting — accurate metrics via
get_media_buy_delivery, plus durable obligations and missing-first-report detection throughreporting.coreandget_reporting_status - Signals framework —
get_signalsandactivate_signalreplace fragmented measurement vendor integrations - Audience handling —
sync_audiencesfor accepting buyer audience data - Execution integration — publishers participate in TMP by sending Context Match requests (page content + available packages) and Identity Match requests (user token + package IDs) to the TMP Router, then joining the results locally. This enables cross-publisher frequency capping and impression-time activation without exposing user identity and page context to the buyer simultaneously. TMP is an experimental surface in AdCP 3.0 (feature id
trusted_match.core); execution and privacy details may change between 3.x releases with at least 6 weeks’ notice. - Account management —
sync_accounts,list_accountsfor managing buyer relationships - Seller-side governance — when a buyer account has
governance_agents(synced viasync_governance), callcheck_governancewithgovernance_context+purchase_type+planned_deliverybefore confirming media buys - Planned delivery — describe what you will actually deliver; the governance agent validates it against the buyer’s plan
Exact B3 reporting references
Broadcast C3/C7 windows
C3 and C7 are common broadcast window IDs, not protocol-defined deadlines. The seller’s product is authoritative: read each entry inreporting_capabilities.measurement_windows[], especially window_id,
duration_days, expected_availability_days, and is_guarantee_basis.
duration_days describes accumulation; expected_availability_days also
includes vendor processing. Do not infer availability from the string c3 or
c7 alone.
The exact delivery progression is documented in
Measurement maturation windows.
Read by_package[].measurement_window, supersedes_window, is_final, and
finalized_at; a wider window uses notification_type: "window_update".
The guarantee basis is the product’s declared window, not automatically C7.
Reporting-obligation lifecycle
The configuration generation creates the reporting clock; accepting a media buy does not. The seller commits an obligation independently of report data atperiod.end, before its first revision, and exposes it in the first ledger
snapshot strictly after that boundary. Both sides derive:
reporting_obligation_id,
the immutable configuration identity (delivery_config_id plus
delivery_config_version), report_definition_id, period, expected_at,
schedule, health, production_status, revision_count, and issues[].
Before expected_at, an obligation with no revision is waiting. Once due,
it is delayed only while the seller’s advertised
automated_recovery_window_seconds is running, then becomes
action_required. A published zero-row revision is a report;
production_status: "published" and revision_count distinguish it from a
missing revision. get_reporting_status is authoritative; reporting
notifications are optional wake-ups.
Exercises
Given sample Context Match and Identity Match responses, determine which packages the publisher activates and what targeting key-values to set. Broadcast delivery reporting: Given a broadcast product that declares C3 and C7 entries with explicitduration_days, expected_availability_days,
and is_guarantee_basis, inspect a provisional delivery row with
measurement_window: "c3" and is_final: false. Use the product’s declared
timing—not the window names—to explain what is available, whether C7 is due,
and how a later window_update should supersede C3 without making the
provisional row look like underdelivery.
Reliable reporting (10–15 minutes): Run
reporting_core_lifecycle_probe against the sales sandbox. Save the complete
configuration, period, obligation ID, expected_at, and recovery deadline
returned by prepare; make a four-row observation table for waiting, delayed,
zero-row, and missing-obligation states. Read the same obligation before its
first revision, advance it beyond its SLA, and publish the explicit zero-row
revision. Reset with prepare, run omit_obligation, and show that the
returned expected period is absent from the complete periods result even
though your saved configuration requires it. Submit the table plus a short
explanation of the authoritative read and optional doorbells. Common errors
Addie will flag: starting the clock at buy acceptance, treating zero rows as no
report, trusting the seller’s returned obligations as the denominator, or
using a notification as proof of ledger state.
Start B3 with Addie
“I’d like to start certification module B3.”
B4: Build project — your first sales agent
~45 min | Prerequisite: B3 Create a working sales agent that responds to real buyer queries. Point your AI coding assistant (Claude Code, Cursor, Copilot) at thebuild-seller-agent skill file — it generates an agent validated against AdCP storyboards, with optional comply_test_controller scaffolding for deterministic lifecycle testing in sandbox mode. The skill tested is specifying correct AdCP behavior.
What you’ll build
- Product catalog with at least 3 products and
sync_catalogssupport, each product declaringreporting_capabilities get_adcp_capabilitiesthat declaresadcp.major_versionsand validatesadcp_major_versionon incoming requests — including a truthfulcapabilities.idempotency.replay_ttl_secondsdeclaration- Creative format support for at least 2 formats
- Handles
get_products,create_media_buy,sync_creatives,get_media_buy_delivery - Account setup via
sync_accounts - Well-known discovery files:
brand.jsonfor the sales-agent operator’s identity, endpoint declarations, and signing-key discovery;adagents.jsonfor publisher properties and agent authorization - Proper error responses for invalid requests — including
VERSION_UNSUPPORTED,GOVERNANCE_DENIED,TERMS_REJECTED,IDEMPOTENCY_CONFLICT, andIDEMPOTENCY_EXPIREDwhere applicable - Idempotency enforcement on every mutating request: reject missing or malformed
idempotency_keywithINVALID_REQUESTbefore touching business logic; cache only on success; scope per authenticated agent - Lifecycle transitions: seller moves media buys through
pending_creatives→pending_start→activeand notifies via webhook on each transition
How you’ll validate
Run themedia_buy_seller storyboard against your running agent:
Specialisms you can claim
Declaremedia_buy in supported_protocols and choose the specialism that matches your inventory model. Each specialism has a compliance storyboard at /compliance/{version}/specialisms/{id}/ that verifies your claim:
sales-guaranteed— guaranteed with human IO approvalsales-non-guaranteed— auction-basedsales-proposal-mode— deprecated in 3.1; usesales-guaranteed+media_buy.supports_proposals: trueinsteadsales-catalog-driven— catalog-driven commerce with conversion trackingsales-broadcast-tv— broadcast linear TVsales-dooh— non-guaranteed digital out-of-home venue and screen inventorysales-social— social platform with self-service flows
Assessment rubric
Passing threshold: 70%.
Any AI coding assistant is welcome (Claude, Cursor, Copilot, etc.). The skill tested is: “Can you specify correct AdCP behavior?”
Start B4 with Addie
“I’d like to start certification module B4.”
What’s next
After completing B1–B4, you’ve earned the AdCP practitioner credential. From here you can pursue specialist modules:- S1: Media buy — transaction flows, pricing, orchestration
- S2: Creative — asset workflows, format compliance
- S3: Signals — measurement, attribution, optimization
- S4: Governance — brand safety, campaign governance, compliance, policy registry
- S5: Sponsored Intelligence — conversational brand experiences