adcp-governance · git:20260425.fcc9b5b · 2026-04-25 · sha256 b547a6637ecd263e
adcp-governance git:20260425.fcc9b5bA
Immutable. This exact content is served forever at /api/v1/blob/b547a6637ecd263e.
---
name: adcp-governance
description: Execute AdCP Governance Protocol operations with governance agents - manage property lists, collection lists, and content standards for brand safety and campaign compliance. Use when users want to create include/exclude lists, set up brand safety rules, or validate content delivery.
---
# AdCP Governance Protocol
This skill enables you to execute the AdCP Governance Protocol with governance agents. Covers three areas: property lists (site-level targeting), collection lists (program-level targeting), and content standards (brand safety rules).
> **Buyer-side basics** — idempotency replay, `oneOf` variants, async `status:'submitted'` polling, error recovery from `adcp_error.issues[]` — live in `skills/call-adcp-agent/SKILL.md`. This skill covers per-task semantics only.
## Overview
The Governance Protocol provides 17 standardized tasks across three areas:
### Property Lists
| Task | Purpose | Response Time |
|------|---------|---------------|
| `create_property_list` | Create include/exclude list | ~1s |
| `update_property_list` | Modify list filters/properties | ~1s |
| `get_property_list` | Retrieve list with optional resolution | ~1-5s |
| `list_property_lists` | List all accessible lists | ~1s |
| `delete_property_list` | Delete a list | ~1s |
### Collection Lists
| Task | Purpose | Response Time |
|------|---------|---------------|
| `create_collection_list` | Create program-level list | ~1s |
| `update_collection_list` | Modify list | ~1s |
| `get_collection_list` | Retrieve with optional resolution | ~1-5s |
| `list_collection_lists` | List all accessible lists | ~1s |
| `delete_collection_list` | Delete a list | ~1s |
### Content Standards
| Task | Purpose | Response Time |
|------|---------|---------------|
| `create_content_standards` | Create brand safety rules | ~1s |
| `get_content_standards` | Retrieve standards by ID | ~1s |
| `update_content_standards` | Modify rules | ~1s |
| `list_content_standards` | List all accessible standards | ~1s |
| `calibrate_content` | Test content against standards | ~5-30s |
| `get_media_buy_artifacts` | Get creatives for compliance review | ~5s |
| `validate_content_delivery` | Audit delivery compliance | ~10-60s |
## Typical Workflow
### Property Lists (site-level)
1. **Create list**: `create_property_list` with base properties and filters
2. **Resolve**: `get_property_list` with `resolve: true` to see matched properties
3. **Refine**: `update_property_list` to adjust filters
4. **Apply**: Reference `list_id` in `create_media_buy` targeting
### Collection Lists (program-level, CTV)
1. **Create list**: `create_collection_list` with distribution IDs or genre filters
2. **Resolve**: `get_collection_list` with `resolve: true` to see matched programs
3. **Apply**: Reference in campaign targeting for CTV brand safety
### Content Standards
1. **Create standards**: `create_content_standards` with rules
2. **Calibrate**: `calibrate_content` with test samples to validate configuration
3. **Monitor**: `get_media_buy_artifacts` + `validate_content_delivery` for ongoing compliance
---
## Task Reference
### create_property_list
Create a property list for brand safety and inventory targeting.
**Request:**
```json
{
"name": "Premium News Properties",
"description": "Tier 1 news publishers for brand campaigns",
"base_properties": [
{
"selection_type": "publisher_tags",
"publisher_domain": "publisher.com",
"tags": ["premium", "news"]
}
],
"filters": {
"countries_all": ["US", "GB"],
"channels_any": ["display", "video"]
},
"brand": {
"domain": "acmecorp.com"
}
}
```
**Key fields:**
- `name` (string, required): Human-readable name
- `description` (string, optional): Purpose of the list
- `base_properties` (array, optional): Property sources — `publisher_tags`, `publisher_ids`, or `identifiers`
- `filters` (object, optional): Resolution filters — `countries_all`, `channels_any`, `property_types`, `feature_requirements`, `exclude_identifiers`
- `brand` (object, optional): Brand reference for automatic rule inference
---
### update_property_list
Modify an existing property list.
**Request:**
```json
{
"list_id": "pl_abc123",
"filters": {
"countries_all": ["US", "GB", "DE"],
"channels_any": ["display", "video", "ctv"]
}
}
```
**Key fields:**
- `list_id` (string, required): Property list identifier
- `name`, `description` (string, optional): Update metadata
- `base_properties` (array, optional): Replace property sources
- `filters` (object, optional): Replace filter configuration
---
### get_property_list
Retrieve a property list with optional resolution.
**Request:**
```json
{
"list_id": "pl_abc123",
"resolve": true,
"max_results": 50
}
```
**Key fields:**
- `list_id` (string, required): Property list identifier
- `resolve` (boolean, optional): Resolve filters and return property identifiers (default: false)
- `max_results` (number, optional): Max properties when resolved
---
### list_property_lists
List all property lists accessible to the authenticated principal.
**Request:**
```json
{
"name_contains": "premium"
}
```
**Key fields:**
- `name_contains` (string, optional): Filter by name substring
- `max_results` (number, optional): Max results
---
### delete_property_list
Delete a property list.
**Request:**
```json
{
"list_id": "pl_abc123"
}
```
**Key fields:**
- `list_id` (string, required): Property list identifier to delete
---
### create_collection_list
Create a collection list for program-level brand safety (CTV, podcast, streaming).
**Request:**
```json
{
"name": "Family-Safe CTV Programs",
"description": "Programs suitable for family brand campaigns",
"base_collections": [
{
"selection_type": "publisher_genres",
"publisher_domain": "ctv-publisher.com",
"genres": ["family", "comedy"],
"genre_taxonomy": "iab_content_taxonomy_3.0"
}
],
"filters": {
"content_ratings_exclude": [
{ "system": "us_tv", "rating": "TV-MA" }
],
"kinds": ["series"]
},
"brand": {
"domain": "familybrand.com"
}
}
```
**Key fields:**
- `name` (string, required): Human-readable name
- `base_collections` (array, optional): Collection sources — `distribution_ids`, `publisher_collections`, or `publisher_genres`
- `filters` (object, optional): `content_ratings_exclude`, `content_ratings_include`, `genres_exclude`, `genres_include`, `kinds`, `production_quality`
- `brand` (object, optional): Brand reference
**Distribution identifier types:** `imdb_id`, `gracenote_id`, `eidr_id`
---
### update_collection_list
Modify an existing collection list.
**Request:**
```json
{
"list_id": "cl_abc123",
"filters": {
"content_ratings_exclude": [
{ "system": "us_tv", "rating": "TV-MA" },
{ "system": "us_tv", "rating": "TV-14" }
]
}
}
```
**Key fields:**
- `list_id` (string, required): Collection list identifier
- `base_collections`, `filters` (optional): Replace configuration
---
### get_collection_list
Retrieve a collection list with optional resolution.
**Request:**
```json
{
"list_id": "cl_abc123",
"resolve": true
}
```
**Key fields:**
- `list_id` (string, required): Collection list identifier
- `resolve` (boolean, optional): Resolve and return collection entries
- `max_results` (number, optional): Max collections when resolved
---
### list_collection_lists
List all collection lists accessible to the authenticated principal.
**Request:**
```json
{
"name_contains": "family"
}
```
---
### delete_collection_list
Delete a collection list.
**Request:**
```json
{
"list_id": "cl_abc123"
}
```
---
### create_content_standards
Create content standards (brand safety rules) for campaign compliance.
**Request:**
```json
{
"name": "Automotive Brand Safety",
"description": "Content rules for automotive brand campaigns",
"rules": [
{ "rule_type": "category", "action": "block", "value": "violence", "severity": "critical" },
{ "rule_type": "category", "action": "block", "value": "adult", "severity": "critical" },
{ "rule_type": "keyword", "action": "flag", "value": "accident", "severity": "medium" }
],
"brand": {
"domain": "automaker.com"
}
}
```
**Key fields:**
- `name` (string, required): Human-readable name
- `rules` (array, optional): Content rules — `rule_type`, `action` (allow/block/flag), `value`, `severity`
- `brand` (object, optional): Brand reference for automatic rule inference
---
### get_content_standards
Retrieve content standards by ID.
**Request:**
```json
{
"standards_id": "cs_abc123"
}
```
---
### update_content_standards
Modify existing content standards.
**Request:**
```json
{
"standards_id": "cs_abc123",
"rules": [
{ "rule_type": "category", "action": "block", "value": "violence", "severity": "critical" }
]
}
```
---
### list_content_standards
List all content standards accessible to the authenticated principal.
**Request:**
```json
{
"name_contains": "automotive"
}
```
---
### calibrate_content
Test content samples against content standards to validate configuration.
**Request:**
```json
{
"standards_id": "cs_abc123",
"samples": [
{ "url": "https://example.com/article1", "expected_result": "allow" },
{ "url": "https://example.com/article2", "expected_result": "block" },
{ "text": "Car crash injures three people", "expected_result": "block" }
]
}
```
**Key fields:**
- `standards_id` (string, required): Content standards to calibrate against
- `samples` (array, required): Content samples with `url` and/or `text`, and optional `expected_result`
---
### get_media_buy_artifacts
Get creative artifacts from a media buy for compliance review.
**Request:**
```json
{
"media_buy_id": "mb_abc123",
"sales_agent_url": "https://sales.publisher.com"
}
```
**Key fields:**
- `media_buy_id` (string, required): Media buy identifier
- `sales_agent_url` (string, required): Sales agent that owns the media buy
---
### validate_content_delivery
Validate delivered content against content standards.
**Request:**
```json
{
"standards_id": "cs_abc123",
"media_buy_id": "mb_abc123",
"sales_agent_url": "https://sales.publisher.com",
"date_range": {
"start": "2025-01-01",
"end": "2025-01-31"
}
}
```
**Key fields:**
- `standards_id` (string, required): Content standards to validate against
- `media_buy_id` (string, required): Media buy identifier
- `sales_agent_url` (string, required): Sales agent URL
- `date_range` (object, optional): Filter by delivery date range
---
## Key Concepts
### Property Lists vs Collection Lists
- **Property Lists**: Site-level targeting. Operates on publisher domains and properties (websites, apps, CTV apps). Use for "where" the ad appears.
- **Collection Lists**: Program-level targeting. Operates on shows, series, and content programs using distribution identifiers (IMDb, Gracenote, EIDR). Use for "what content" the ad appears alongside (primarily CTV).
### Content Standards vs Property/Collection Lists
- **Content Standards**: Rules-based evaluation of content quality, topics, and safety. Evaluates content dynamically.
- **Property/Collection Lists**: Pre-computed sets of approved or excluded inventory. Static targeting applied at campaign setup.
### Filter Resolution
Property and collection lists combine static selections with dynamic filters. Use `resolve: true` on get operations to see the final resolved set of properties or collections.
---
## Error Handling
Common error codes:
- `LIST_NOT_FOUND`: Invalid list_id
- `STANDARDS_NOT_FOUND`: Invalid standards_id
- `UNAUTHORIZED`: Not authorized to access this resource
- `VALIDATION_ERROR`: Invalid filter or rule configuration