Campaign Governance specification
Status: Request for Comments Last Updated: March 2026 The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119. This document defines the data models, validation logic, and integration patterns for Campaign Governance.Campaign plan
The campaign plan is the source of truth for all validation. Plans are pushed to the governance agent viasync_plans and define the plan parameters for a campaign — budget limits, channels, flight dates, and plan markets. The governance agent resolves applicable policies from the brand’s compliance configuration. Plans can also reference registry policies directly via policy_ids and include campaign-specific rules via custom_policies.
Budget authority levels
Channel mix targets
Themix_targets field defines acceptable allocation ranges. The governance agent validates that aggregate spend across all media buys stays within these ranges. A create_media_buy that would push video spend above 70% of total budget triggers a conditions or escalated status.
Delegations
Plans can include adelegations array that specifies which agents are authorized to execute against the plan and with what constraints. This makes the principal-agent relationship between brand and agency explicit in the protocol.
When delegations are present, the governance agent validates that the
caller URL in check_governance matches a delegation’s agent_url before approving actions. Matching is by exact URI comparison (case-sensitive, after normalization per RFC 3986). An agent requesting a media buy in France must have a delegation that includes France in its markets. An agent with execute_only authority cannot reallocate budget between channels.
When delegations are absent, the governance agent does not restrict which agents can act on the plan.
Portfolio governance
For holding companies and multi-brand organizations, a plan can include aportfolio object that defines cross-brand constraints. Portfolio plans govern member plans — any action validated against a member plan is also validated against the portfolio plan’s constraints.
total_budget_cap: Maximum aggregate spend across all member plans. The governance agent tracks committed budget across all member plans and denies actions that would exceed the cap.shared_policy_ids: Registry policies enforced across all member plans, regardless of individual brand compliance configuration. Corporate-level regulations that no brand team can override.shared_exclusions: Natural language exclusion rules applied to all member plans.
member_plan_id that the governance agent does not yet recognize, the governance agent SHOULD accept the portfolio plan and begin enforcing portfolio constraints as member plans are synced. This allows portfolio plans to be synced before their member plans without requiring a specific ordering.
Concurrency: An orchestrator may send
create_media_buy requests to multiple sellers simultaneously, each triggering a committed check. Budget checks are point-in-time and do not reserve budget, so concurrent approvals may together exceed the plan budget. The governance agent detects overspend at outcome reporting time. To prevent concurrent overspend, use delegations with per-agent budget_limit to partition the budget across executing agents.Brand compliance configuration
Compliance policies live at the brand level, not in individual campaign plans. The brand’s policy team configures the brand’s compliance profile, and the governance agent resolves it when processing plans for that brand.The schema and hosting mechanism for brand compliance configuration are under development by the AgenticAdvertising.org Governance Working Group. The following describes the conceptual model; implementations may vary.
- Registry policies: References to standardized policies in the AdCP policy registry, identified by ID. Each reference MAY include configuration parameters that customize the policy for the brand.
- Custom policies: Brand-specific rules expressed as natural language strings, evaluated by the governance agent using the same approach as prompt-based policies.
Policy registry
The policy registry is a community-maintained library of standardized, machine-readable advertising compliance policies. Brands reference policies by ID rather than writing their own. The registry covers three categories:
Each policy in the registry has an ID, applicable jurisdictions, a description, and machine-readable rules that governance agents can evaluate programmatically. Policies are versioned as regulations change; brand references MAY pin a specific version, and unversioned references resolve to the current version. The registry format and hosting mechanism are under development by the AgenticAdvertising.org Governance Working Group.
This model follows the pattern established by IEEE 7012 (Machine Readable Personal Privacy Terms), which maintains a neutral roster of standardized agreements that parties reference rather than draft individually.
Policy resolution
Policies are declared directly on the plan viapolicy_ids and custom_policies. When a plan is synced, the governance agent resolves the active policy set:
- Load registry policies referenced by
policy_ids - Intersect with the plan’s
countriesandregions— only policies applicable to the plan’s markets are active - Include all
custom_policies(these apply regardless of geography)
countries and regions fields also serve as geo enforcement: the governance agent MUST reject media buys targeting markets outside the plan’s allowed geography. A plan with regions: ["US-MA"] rejects buys not explicitly targeting Massachusetts, even if they are otherwise compliant. These fields use the same ISO codes and semantics as product-filters, offerings, and create_media_buy.
The resolved policy set is what the governance agent evaluates during check_governance. For the brand_policy and regulatory_compliance categories, the governance agent validates against this resolved set.
If the plan has no policy_ids or custom_policies, the governance agent operates with an empty policy set for policy-based categories. Other categories (budget_authority, strategic_alignment, etc.) still apply based on the plan’s parameters.
State tracking
The governance agent tracks state at two levels:- Plan level: Total budget committed, channel allocation percentages, plan status
- Campaign level: Per-
buyer_campaign_refcommitted budget, active media buy references, validation history
check_governance checks budget authority, it considers all campaigns tied to the plan. When report_plan_outcome reports a seller confirmation, the governance agent commits the budget from the seller’s actual amount — not the requested amount.
Plan status
When status is
suspended, the governance agent MUST reject all check_governance and report_plan_outcome requests with a CAMPAIGN_SUSPENDED error until the escalation is resolved.
Budget tracking
Budget is committed based on confirmed outcomes, not validated actions. The flow:check_governancewithbinding: "proposed"checks whether the proposed spend fits within the plan. No budget is committed yet.- The orchestrator executes the action with the seller.
report_plan_outcomereports the seller’s confirmed amount. The governance agent commits this amount to the plan budget.
committed approval validates the seller’s planned delivery against the plan but does not commit budget. Budget is only committed when the orchestrator calls report_plan_outcome with the seller’s confirmed response.
Budget checks are point-in-time: check_governance validates against the current committed total but does not reserve budget. If multiple agents execute concurrently against the same plan, two checks could both pass and the combined outcomes could exceed the authorized budget. The governance agent detects overspend at outcome reporting time and returns a budget_authority finding. To prevent concurrent overspend, use delegations with per-agent budget_limit to partition the budget across executing agents.
Drift detection
The audit log includesdrift_metrics that surface aggregate governance trends over the plan’s lifetime:
Organizations can set thresholds on drift metrics. When a metric crosses its threshold, the governance agent SHOULD include a finding (severity
warning) on the next governance check:
escalation_rate_min catches oversight erosion; an escalation_rate_max catches policy miscalibration. A human_override_rate_max catches a governance agent whose recommendations are consistently wrong. All threshold fields are optional.
Plan amendments
Callingsync_plans with an existing plan_id updates the plan (upsert). The governance agent increments plan_version and applies the new parameters immediately. Active media buys that were approved under the previous plan version are not automatically re-validated — the governance agent evaluates them against the updated plan on the next check_governance call (e.g., the next delivery check). If an amendment reduces the budget below the currently committed amount, the governance agent flags this as a finding on the next governance check.
Validation logic
The governance agent evaluates each validation category independently:- If any category has status
failedand the failure is correctable, the status isconditionswith suggested fixes - If any category has status
failedand the failure is not correctable by the caller, the status isdenied - If all categories pass but the overall risk profile warrants human review, the status is
escalated - If all categories pass, the status is
approved
conditions array is only present when the status is conditions. Each condition identifies a specific field, its current value, a suggested value, and the reason for the change.
Finding confidence
Governance findings include an optionalconfidence score (0-1) and uncertainty_reason that distinguish certain violations from ambiguous ones:
- High confidence (0.9+): The finding is definitive. A GDPR violation on a campaign explicitly targeting EU users.
- Medium confidence (0.6-0.9): The finding depends on context the governance agent cannot fully resolve. Audience segments that may include minors, geo targeting that partially overlaps regulated jurisdictions.
- Low confidence (below 0.6): The finding is speculative. The governance agent flags it for human review rather than acting on it autonomously.
Phase inference
The governance agent infers the validation phase from thetool parameter in check_governance:
Phase context is cumulative. During purchase, the governance agent considers what was discovered during discovery.
The
check_id returned by check_governance is used by report_plan_outcome to link the seller’s response back to the validated action.
Capability declaration
Governance agents declare their Campaign Governance support inget_adcp_capabilities:
Integration with create_media_buy
The buyer includes plan_id and buyer_campaign_ref as first-class fields on the create_media_buy request. These fields tell the seller which governance plan applies, enabling seller-side governance checks.
planned_delivery — what the seller will actually run:
planned_delivery is the seller’s interpretation of the request — the actual delivery parameters they will use. It serves two purposes:
- Governance checks — When the account has
governance_agents, the seller sendsplanned_deliveryto the governance agent(s) for verification before confirming the media buy. - Transparency — The buyer can compare
planned_deliveryagainst what they requested to catch discrepancies early, before delivery begins.
Governance checks
Campaign Governance’s buyer-side validation has a trust limitation: the buyer’s orchestrator grades its own homework. An LLM agent could hallucinate governance approval, skip validation, or misrepresent what was validated. Seller-side governance checks close this gap by giving sellers an independent way to confirm that purchases are approved. The seller POSTs to the buyer’sgovernance_agents URLs when media buy events occur. The governance agent maintains all state and correlates requests by plan_id + media_buy_id — the seller does not need to track governance history or chain IDs across calls.
Setup
The buyer registersgovernance_agents when syncing accounts with the seller. Each agent includes authentication credentials so the governance agent can verify the seller’s identity:
check_governance. The governance agent MUST verify that the Bearer token matches a registered credential for the account associated with the plan_id, and MUST reject requests with unrecognized or mismatched credentials.
Governance modes
The governance agent’s operating mode can be set per-plan via themode field in sync_plans, defaulting to enforce. Mode is not exposed to sellers via sync_accounts — the seller calls check_governance and acts on the response status. It does not need to know whether the governance agent is in audit, advisory, or enforce mode. This avoids requiring account re-syncs when the mode changes and prevents sellers from adjusting behavior based on mode.
Default is
enforce. Organizations can start in audit mode to build confidence in the governance agent’s calibration before enabling enforcement.
In audit mode, the governance agent still performs full evaluation and returns findings — the only difference is that the status is always approved. This produces a complete audit trail that the organization can review to assess false positive rates and calibrate policies before going live.
In advisory mode, the governance agent returns the real status it would have returned under enforcement. The check response includes a mode field so auditors can distinguish “denied in advisory mode (action proceeded)” from “denied in enforce mode (action blocked).”
In all modes, delegation violations, credential mismatches, and other authorization checks are logged as findings. In audit and advisory modes, these findings do not block the action — they are recorded for review. Only in enforce mode are authorization violations blocking.
Governance context
Thepayload field in check_governance is opaque — it carries the full tool arguments for whatever tool is being checked. Different tools use different field names and structures for the same concepts (budget, countries, channels, flight dates). Without a standard extraction point, every governance agent must implement multi-format heuristics to find these values.
The optional governance_context field solves this by providing a canonical shape for governance-relevant fields. The caller (orchestrator or seller) extracts budget, countries, channels, and flight dates from the tool payload into governance_context before calling check_governance. The governance agent validates against this known structure instead of parsing the payload directly.
When governance_context is present, the governance agent SHOULD use it for plan validation. When absent, the agent falls back to inspecting payload. Callers SHOULD include governance_context for proposed checks where the payload structure varies by tool. For committed checks, planned_delivery already provides a canonical structure and governance_context is not needed.
The governance_context condition field paths use the prefix governance_context. (e.g., governance_context.total_budget.amount) so they remain stable regardless of the original payload structure.
Governance phases
Governance checks cover the full media buy lifecycle through three phases:
The
phase field defaults to purchase if omitted, so existing implementations continue to work without changes.
The governance agent maintains all state and correlates requests by plan_id + media_buy_id. The seller does not chain check IDs or track conversation history — it posts what happened, and the governance agent looks up context.
Purchase phase
When the seller receives acreate_media_buy request on an account with governance_agents:
- The seller interprets the request and determines its
planned_delivery. - The seller calls
check_governancewithphase: "purchase", theplan_id, andplanned_delivery. - The governance agent validates the planned delivery against the campaign plan.
- If
approved, the seller confirms the media buy. - If
denied, the seller rejects the media buy with anGOVERNANCE_DENIEDerror. - If
conditions, the seller adjusts its planned delivery to meet the conditions and re-verifies, or rejects.
Modification phase
When the seller receives anupdate_media_buy request:
- The seller interprets the update and determines the new
planned_delivery. - The seller calls
check_governancewithphase: "modification", the updatedplanned_delivery, and amodification_summary. - The governance agent looks up the media buy by
plan_id+media_buy_idand evaluates the changes against the plan. - If
approved, the seller confirms the update. - If
deniedorconditions, the seller follows the same flow as purchase phase.
reallocation_threshold might be auto-approved, while a large budget increase or new geo market might require stricter scrutiny.
Delivery phase
The seller callscheck_governance with phase: "delivery" periodically during active delivery. This creates a direct reporting channel between the seller and the buyer’s governance agent.
- The seller collects delivery metrics for the reporting period.
- The seller calls
check_governancewithphase: "delivery", the currentplanned_delivery, anddelivery_metrics. - If
approved, the response includesnext_check— when the seller should report again. - If
denied, the seller pauses delivery immediately. - If
conditions, the seller adjusts delivery (e.g., slow pacing, shift geo targeting) and re-verifies immediately.
next_check in the purchase approval response. If the purchase response has no next_check, the governance agent does not expect delivery reports.
The governance agent controls the reporting cadence through next_check. It can tighten the cadence (shorter intervals) when it detects drift or conditions, and relax it (longer intervals) when delivery is stable. The governance agent MAY treat a missed next_check deadline as a finding on the next delivery check.
Verification examples
Purchase request:next_check field signals that the governance agent expects delivery reporting. If absent, no delivery reports are expected.
Denied (purchase):
Enforcement
Whengovernance_agents is present on the account, the seller MUST call check_governance before confirming any media buy. The buyer provided the endpoints specifically so that purchases are independently verified — skipping it defeats the purpose.
When governance_agents is absent, the seller processes media buy requests normally. The buyer-side governance loop (check_governance(binding: proposed) -> execute -> report_plan_outcome) still applies, but there is no seller-side verification.
Sellers MUST NOT require governance checks as a prerequisite for all accounts. A seller that refuses to process media buys from accounts without governance_agents would break interoperability with buyers who do not use Campaign Governance.
The delivery phase is optional even when purchase phase governance is used. A seller MAY support purchase approval without ongoing delivery reporting. The governance agent indicates whether it expects delivery reports through the presence of next_check in the purchase response.
If the governance agent is unreachable (timeout, network error), the seller MUST NOT proceed with the media buy. Governance checks are a prerequisite for confirming purchases on accounts with registered governance_agents. The seller SHOULD retry the check after a brief delay and reject the media buy with a GOVERNANCE_UNAVAILABLE error if the agent remains unreachable.
When the orchestrator receives GOVERNANCE_UNAVAILABLE from a seller, it SHOULD retry the create_media_buy after a delay. If the governance agent remains unavailable, the orchestrator SHOULD escalate to a human rather than attempting alternative sellers — the governance outage affects all sellers on the same account. A prior proposed approval from the orchestrator does not substitute for the seller’s committed check; the seller validates independently and cannot use the orchestrator’s approval.
Performance expectations
Governance agent implementations SHOULD respond tocheck_governance calls within 5 seconds for proposed checks and 10 seconds for committed checks. Sellers SHOULD configure appropriate timeouts and treat timeouts the same as unavailability (retry, then reject with GOVERNANCE_UNAVAILABLE).
Wire format
The seller calls each governance agent at its registered URL using MCP over HTTP (Streamable HTTP transport). The request is an MCPtools/call invocation with tool name check_governance and the request arguments as the tool input. Authentication uses the Bearer token from the agent’s authentication.credentials in the Authorization header.
Multi-agent composition
Accounts MAY register multiple governance agents via thegovernance_agents array on sync_accounts, each responsible for different validation categories. For example, one agent handles budget authority and strategic alignment while another handles regulatory compliance and brand policy.
When multiple governance agents are registered, the seller MUST call each agent whose categories overlap with the action being validated. All applicable agents must approve for the action to proceed (unanimous approval). If any agent returns denied or escalated, the action is blocked.
For accounts with a single governance agent, pass a one-element array.
Governance checks and the governance loop
Governance checks complement the buyer-side governance loop, they do not replace it:
The
delivery phase gives the governance agent real-time visibility into what sellers are actually delivering. The buyer-side report_plan_outcome depends on the orchestrator reporting honestly; the delivery phase gets reports directly from the seller.
The buyer-side and seller-side governance checks MAY be handled by the same agent or by separate agents. The protocol does not prescribe the relationship — only that the seller can call the governance_agents URLs registered on the account.
Orchestrator integration pattern
The governance check is a synchronous call in the orchestrator’s action loop. The orchestrator callscheck_governance with binding: "proposed" before sending requests to sellers. Seller-side governance checks use binding: "committed" and are transparent to the orchestrator — the orchestrator sends the same create_media_buy request regardless of whether governance checks are configured. Modification and delivery phase checks happen between the seller and governance agent, independent of the orchestrator’s governance loop.
Audit trail
Every plan maintains an ordered audit trail of all validated actions and reported outcomes, retrievable viaget_plan_audit_logs. The trail includes:
- Check ID, timestamp, and tool
- The status and category evaluations
- Outcome status and committed budget
- Any findings from outcome reports
- Any escalations and their resolutions
- The human approver identity (when escalated)
- Delivery metrics over time
Conformance testing
A conformance test suite for governance agent implementations is planned. Test vectors provide structured input/output pairs — a plan, a set of policies, acheck_governance request, and the expected response status and findings. Governance agents can run these vectors to verify that their policy evaluation produces consistent results.
The policy registry’s exemplars (pass/fail scenarios per policy) provide the raw material. Test vectors formalize these into executable assertions that any governance agent can validate against. The AdCP client test library will include these vectors as part of its standard test suite.