Skip to main content

Property Governance Tasks

AdCP 3.0 Proposal - These tasks are under development for AdCP 3.0.
Property governance uses a stateful model where all evaluation happens through property list management. Create lists with filters and brand manifests, then resolve them to get compliant properties.

Discovery

TaskPurposeResponse Time
get_adcp_capabilitiesDiscover agent capabilities~200ms
Use the protocol-level get_adcp_capabilities task to discover what features a governance agent can evaluate. See the governance section for details on the property_features array.

Property List Management

TaskPurposeResponse Time
create_property_listCreate a new property list~500ms
update_property_listModify an existing list~500ms
get_property_listRetrieve list with resolved properties~2-5s
list_property_listsList all property lists~500ms
delete_property_listDelete a property list~200ms
See Property List Management for complete CRUD documentation.

Validation

TaskPurposeResponse Time
validate_property_deliveryValidate delivery records against a list~1-5s
See validate_property_delivery for post-campaign compliance validation.

Task Selection Guide

Creating a Property List

Use create_property_list with filters and brand manifest:
{
  "tool": "create_property_list",
  "arguments": {
    "name": "Q1 Campaign - UK Premium",
    "base_properties": [
      {
        "selection_type": "publisher_tags",
        "publisher_domain": "raptive.com",
        "tags": ["premium_news"]
      }
    ],
    "filters": {
      "countries_all": ["UK"],
      "channels_any": ["display", "video"],
      "feature_requirements": [
        {
          "feature_id": "mfa_score",
          "min_value": 85,
          "max_value": 100
        },
        {
          "feature_id": "coppa_certified",
          "allowed_values": [true]
        }
      ]
    },
    "brand_manifest": {
      "name": "ToyBrand",
      "industry": "toys",
      "target_audience": "children_under_13"
    }
  }
}
Required filters: At least one country in countries_all and one channel in channels_any must be provided. Base properties: An array of property sources to evaluate. Each entry is a discriminated union with selection_type:
  • publisher_tags: { "selection_type": "publisher_tags", "publisher_domain": "...", "tags": [...] }
  • publisher_ids: { "selection_type": "publisher_ids", "publisher_domain": "...", "property_ids": [...] }
  • identifiers: { "selection_type": "identifiers", "identifiers": [...] }
  • Omitted: Query the agent’s entire property database
Filter logic (explicit in field names):
  • countries_all: Property must have feature data for ALL listed countries
  • channels_any: Property must support ANY of the listed channels
  • feature_requirements: Property must pass ALL requirements (AND)
Filters have two built-in fields (countries_all, channels_any) plus feature_requirements which reference features the agent provides (discovered via get_adcp_capabilities). For quantitative features, use min_value/max_value. For binary or categorical features, use allowed_values.

Getting Resolved Properties

Use get_property_list to retrieve the list with resolved identifiers:
{
  "tool": "get_property_list",
  "arguments": {
    "list_id": "pl_abc123",
    "resolve": true
  }
}
Response includes resolved identifiers. Note that raw scores are not returned - only identifiers that pass the filter thresholds are included:
{
  "list_id": "pl_abc123",
  "identifiers": [
    { "type": "domain", "value": "bbc.co.uk" },
    { "type": "domain", "value": "news.sky.com" }
  ],
  "cache_valid_until": "2026-01-04T17:15:00Z"
}
The auth_token for sharing with sellers is returned at creation time (from create_property_list). Store it securely - it’s only returned once.

Multi-Agent Integration

Create the same property list on multiple governance agents, then configure webhooks to aggregate results:
# Create lists on specialized agents
consent_list = consent_agent.create_property_list(
    name="Q1 - Consent",
    base_properties=master_list,
    brand_manifest=brand_manifest
)
consent_agent.update_property_list(
    list_id=consent_list.list_id,
    webhook_url="https://buyer.example.com/webhooks/consent"
)

scope3_list = scope3_agent.create_property_list(
    name="Q1 - Sustainability",
    base_properties=master_list,
    brand_manifest=brand_manifest
)
scope3_agent.update_property_list(
    list_id=scope3_list.list_id,
    webhook_url="https://buyer.example.com/webhooks/scope3"
)

# Buyer agent intersects results when webhooks fire