Skip to content

Creative lifecycle webhooks: formalize state-change notifications outside media buy lifecycle #2261

@bokelley

Description

@bokelley

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

  1. Formalize SHOULD → MUST for state-change notifications where the change is not initiated by the buyer.
  2. 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)
  3. Subscription model — buyer-account-level subscription, not per-buy. These events may fire long after any media buy has closed.
  4. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    claude-triagedIssue has been triaged by the Claude Code triage routine. Remove to re-triage.rfcProtocol change — auto-adds to roadmap board

    Type

    No type

    Projects

    Status

    No status

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions