Problem
AdCP webhooks today cover sync_creatives task completion and media buy lifecycle events, but not creative state transitions that happen independently of a campaign. Examples buyer agents need to react to:
- Seller pulls an
approved creative back to pending_review on policy change
- Seller rejects a creative post-approval
- Seller purges a creative under a retention policy (see retention sub-issue)
- Creative is re-reviewed and the outcome flips
The only relevant language today is sales-agent-creative-capabilities.mdx:182: sellers "SHOULD notify the buyer when a previously approved creative is pulled back for re-review" — no schema, no delivery contract, no subscription model.
Proposed additions
- Formalize SHOULD → MUST for state-change notifications where the change is not initiated by the buyer.
- Define event schemas — at minimum:
creative.status_changed (old status, new status, reason, initiator)
creative.purged (retention-driven or policy-driven)
creative.reassignment_required (active assignments affected)
- Subscription model — buyer-account-level subscription, not per-buy. These events may fire long after any media buy has closed.
- Delivery semantics — align with existing webhook retry/ack rules in
docs/building/implementation/webhooks.mdx.
Questions to resolve
Context
Surfaced by #2254. The autonomous-agent use case makes this urgent: a buyer agent orchestrating campaigns across multiple sellers cannot rely on poll-on-every-use to know if a library asset is still valid.
Relates to #2254, #2253, epic lineage #1612-#1616.
Problem
AdCP webhooks today cover
sync_creativestask completion and media buy lifecycle events, but not creative state transitions that happen independently of a campaign. Examples buyer agents need to react to:approvedcreative back topending_reviewon policy changeThe only relevant language today is
sales-agent-creative-capabilities.mdx:182: sellers "SHOULD notify the buyer when a previously approved creative is pulled back for re-review" — no schema, no delivery contract, no subscription model.Proposed additions
creative.status_changed(old status, new status, reason, initiator)creative.purged(retention-driven or policy-driven)creative.reassignment_required(active assignments affected)docs/building/implementation/webhooks.mdx.Questions to resolve
creative.status_changedalso fire for buyer-initiated archives (redundant with the sync response), or only for seller-initiated transitions?Context
Surfaced by #2254. The autonomous-agent use case makes this urgent: a buyer agent orchestrating campaigns across multiple sellers cannot rely on poll-on-every-use to know if a library asset is still valid.
Relates to #2254, #2253, epic lineage #1612-#1616.