check_governance
Experimental. Campaign governance (
sync_plans, check_governance, report_plan_outcome, get_plan_audit_logs) is part of AdCP 3.0 as an experimental surface — it may change between 3.x releases with at least 6 weeks’ notice. Sellers implementing it MUST declare governance.campaign in experimental_features. See experimental status for the full contract.
The governance agent maintains all state. Callers do not chain check IDs or track conversation history — they post the action, and the governance agent correlates by
plan_id. On subsequent lifecycle checks, callers include governance_context from the prior response for continuity.
An account binds to one governance agent (see sync_governance and One governance agent per account). All lifecycle calls for a governed action go to that same agent.
Check types
Intent checks (orchestrator)
The orchestrator callscheck_governance with tool and payload before sending a tool call to a seller. The governance agent evaluates the intended action against the campaign plan.
- Orchestrator decides to call a seller tool (e.g.,
create_media_buy) - Orchestrator calls
check_governancewith the tool name and full payload - If
approved, orchestrator sends the tool call to the seller - If
denied, orchestrator does not send the tool call - If
conditions, orchestrator adjusts the payload and re-callscheck_governance - If the governance agent needs human review, the task goes async and eventually resolves to
approvedordenied
Execution checks (seller)
The seller callscheck_governance with governance_context and planned_delivery when processing a request on an account that has a governance agent configured (set via sync_governance). Execution checks are always binding — if the governance agent denies, the seller must not proceed.
Before executing the check, the seller verifies the signed governance_context token that arrived on the protocol envelope from the buyer. The buyer produces an intent-phase token (per the JWS profile); the seller’s own execution check produces the purchase/modification/delivery-phase tokens bound to the assigned media_buy_id for the rest of the lifecycle.
Sellers can adopt committed governance checks incrementally:
- Level 1: Purchase only — One call per
create_media_buy. The minimum viable integration. - Level 2: + Modification — One call per
update_media_buy. - Level 3: + Delivery reporting — Periodic calls during active delivery.
Invocation requirement
When a governance agent is configured on the plan, buyer agents MUST invokecheck_governance before every spend-commit request (create_media_buy, update_media_buy, acquire_rights, update_rights, activate_signal, build_creative) — full stop. There is no dollar floor, no anomaly threshold, and no cold-start exemption; every commit goes through the governance agent. The buyer-side call is an intent check (tool + payload), which produces an intent-phase governance_context token the buyer attaches to its request to the seller. The governance agent decides internally whether to auto-approve, apply conditions, deny, or escalate to human review per the plan’s budget.reallocation_threshold and human_review_required fields.
Seller-side enforcement makes the MUST real through the signed governance_context token: a seller receiving a spend-commit for a plan with a configured governance agent MUST require a valid, in-date intent-phase token (phase: "intent", sub equal to the plan_id, aud addressed to this seller), and MUST reject with PERMISSION_DENIED otherwise. The seller then performs its own execution check — calling check_governance with planned_delivery and the received governance_context — which produces the purchase-phase token bound to the newly assigned media_buy_id for the rest of the lifecycle. A buyer that skips the intent check cannot produce a valid intent token, so the commit is rejected before the seller ever reaches its execution check.
When no governance agent is configured on the plan, check_governance invocation is neither required nor meaningful — there is nothing to call. Sellers MAY refuse to transact on plans lacking a configured governance agent as a matter of their own commercial policy.
See the specification for the full definition, including audit requirements, seller-side retention MUSTs, and interaction with idempotency.
Status values
Expiration
expires_at is present when the verdict is approved or conditions. A lapsed approval is no approval — the caller must re-call check_governance before proceeding.
Conditions
When theverdict is conditions, the caller MUST re-call check_governance with adjusted parameters before proceeding. Conditions with a required_value are machine-actionable — the caller can programmatically apply the value. Conditions without a required_value are advisory — the caller should interpret the reason and adjust accordingly.
Governance agents SHOULD return denied (not conditions) after 3 unsuccessful re-calls for the same action. This prevents infinite negotiation loops, particularly for seller-side checks where the seller has no visibility into the campaign plan.
Human review
When the governance agent determines that human review is required (e.g., the action exceeds the plan’sreallocation_threshold, or the plan carries human_review_required: true), it handles the escalation internally. The check_governance task goes async — the caller receives standard async task lifecycle statuses (submitted, working) and eventually gets approved or denied once the human acts. The caller does not need special handling for this case beyond supporting async tasks (see task lifecycle).
For committed checks (seller-side), the seller sets a timeout. If the governance agent does not respond within the timeout, the seller treats it as denied and returns an error to the orchestrator. The orchestrator can re-initiate the media buy after the governance agent resolves.
Linking to outcomes
The response includes acheck_id. Use this in report_plan_outcome to link outcomes to the governance check that authorized them.
When the governance agent is unavailable
If the governance agent is configured and the caller cannot reach it (timeout, network error), the caller MUST NOT proceed. Governance is a gate — when the gate is unreachable, the default is halt. The caller SHOULD retry with backoff and report the failure upstream.Delivery cadence
The presence ofnext_check in a response is the signal that the governance agent expects ongoing delivery reporting. The seller SHOULD call no later than the next_check time. The governance agent MAY treat a missed deadline as a finding on the next delivery check.
Request
Intent check (orchestrator checking before sending to seller)
check_governance call, the governance agent extracts what it needs from payload. The response includes a governance_context string that the caller attaches to the protocol envelope and includes on all subsequent governance calls for this governed action. In 3.0 the governance agent MUST emit a compact JWS signed per the AdCP JWS profile so sellers can verify authenticity, authorization scope, and freshness (the 15-step seller checklist). The token also carries a required plan_hash audit-layer claim — see Plan binding and audit for canonicalization rules, retention obligations, and the eleven reference vectors governance-agent implementers SHOULD validate against before shipping.
Intent check (rights license)
Execution check — purchase
Execution check — modification
Execution check — delivery
Response
approved (intent check)
create_media_buy to the seller before expires_at.
approved (execution check — purchase with delivery opt-in)
next_check signals that the governance agent expects delivery reporting starting at that time.
approved (execution check — delivery)
next_check.
denied (intent check)
denied (execution check — delivery geo drift)
conditions (execution check — purchase)
check_governance with the updated parameters before proceeding.
conditions (execution check — delivery overpacing)
check_governance immediately. The next_check is set closer than normal so the governance agent can verify the correction.
Fields
Request
Delivery metrics
Response
Error codes
Related tasks
sync_plans— The plan this governance check validates againstreport_plan_outcome— Report what happened after the action was confirmedget_plan_audit_logs— View plan state and audit trail