AdCP 3.0 Proposal - This specification is under development for AdCP 3.0. Feedback welcome via GitHub Discussions.
Abstract
The Property Protocol defines a standard Model Context Protocol (MCP) and Agent-to-Agent (A2A) interface for property identity, authorization, data provision, and selection. This protocol enables publishers to declare properties and authorized agents, data providers to offer property intelligence, and buyers to select compliant property sets.Overview
The Property Protocol addresses four distinct concerns:| Concern | Question | Owner | Mechanism |
|---|---|---|---|
| Property Identity | What properties exist? | Publishers | adagents.json properties array |
| Sales Authorization | Who can sell this property? | Publishers | adagents.json authorized_agents |
| Property Data | What do we know about this property? | Data providers | Governance agents via get_adcp_capabilities |
| Property Selection | Which properties meet my requirements? | Buyers | Property lists with filters |
Property Data and Selection
Property data and selection use a stateful model:- Feature discovery: Agents advertise what they can evaluate via
get_adcp_capabilities - Property list management: CRUD operations for managed property lists with filters
- Brand manifests: Let agents automatically apply rules based on brand characteristics
- Webhook notifications: Real-time updates when resolved lists change
- Marketplace architecture: Multiple specialized agents as subscription services
get_property_list.
Core Concepts
Request Roles and Relationships
Every governance request involves two key roles:Orchestrator (Buyer Agent)
The platform or system making the API request to the governance agent. In AdCP documentation, this role is often called a “buyer agent” when operating in the media buying context.- Examples: DSP, trading desk platform, campaign management tool
- Responsibilities: Makes API calls, handles authentication, manages the technical interaction
- Account: Has technical credentials and API access to the governance agent
Principal
The entity on whose behalf the request is being made:- Examples: Advertiser (Nike), agency (Omnicom), brand team
- Responsibilities: Owns the campaign objectives and policy requirements
- Policies: May have custom thresholds, blocklists, or compliance requirements
Property Identification
Properties are identified using the standard AdCP property model:website, mobile_app, ctv_app, dooh, podcast, radio, streaming_audio. Properties may also declare supported_channels to indicate which advertising channels their inventory aligns with.
Property List References
For large property sets, use property list references instead of embedding properties:- Scale: Pass 50,000+ properties without payload bloat
- Updates: Lists evolve without changing requests
- Authorization: Token controls access to the list
Governance Agent Types
Compliance Agents
Specialized vendors providing property compliance intelligence:- Examples: Data integrity scoring, consent quality measurement
- Business Model: Subscription or per-query pricing
- Methodology: Published rubrics for transparency
Brand Safety Agents
Content classification and risk assessment:- Examples: Content categorization, brand safety scoring
- Coverage: May specialize by channel or geography
Quality Agents
Performance and fraud measurement:- Examples: Viewability prediction, IVT detection
- Integration: May correlate with campaign outcomes
Scoring and Data Privacy
Scores Are Internal
Critical design principle: Raw scores are NOT shared with buyers or downstream clients. This prevents data leakage. Governance agents maintain internal scoring models, but the protocol is designed around list management, not score exposure:- Buyers specify thresholds via
feature_requirements(e.g.,"min_value": 85) - Agents return pass/fail lists of properties that meet the thresholds
- Raw scores never leave the governance agent
- Score enumeration attacks (running lists with different thresholds to reverse-engineer scores)
- Competitive intelligence leakage
- Data arbitrage where buyers resell scoring data
What Buyers Receive
When callingget_property_list, buyers receive a compact list of identifiers (not full property objects) for efficiency:
Methodology Discovery
Theget_adcp_capabilities task returns information about what features an agent evaluates and their methodology, but NOT the underlying scores:
- Understand what an agent measures
- Compare methodologies across agents
- Set appropriate thresholds
Tasks
Discovery
get_adcp_capabilities
Discover what features a governance agent can evaluate. Use Cases:- Capability discovery: Understand what an agent can evaluate
- Marketplace browsing: Compare features across agents
- Integration planning: Know what filters are available before creating lists
Property List Management
create_property_list
Create a new property list with filters and optional brand manifest. Required Parameters:- At least one country in
countries_all(ISO 3166-1 alpha-2 code) - At least one channel in
channels_any(display, video, audio, etc.)
selection_type as the discriminator:
publisher_tags:{ "selection_type": "publisher_tags", "publisher_domain": "...", "tags": [...] }- tags scoped to publisherpublisher_ids:{ "selection_type": "publisher_ids", "publisher_domain": "...", "property_ids": [...] }- property IDs scoped to publisheridentifiers:{ "selection_type": "identifiers", "identifiers": [...] }- no publisher context needed- Omitted: Query the agent’s entire property database
countries_all: Property must have feature data for ALL listed countrieschannels_any: Property must support ANY of the listed channelsfeature_requirements: Property must pass ALL requirements (AND)
- Define compliant property sets with filters (country, channel, feature thresholds)
- Provide brand manifest for automatic rule application
- Register webhook URL for change notifications
update_property_list
Modify an existing property list. Use Cases:- Add or remove properties from base list
- Adjust filters based on campaign needs
- Update webhook URL
get_property_list
Retrieve a property list with resolved properties. Use Cases:- Get the current list of compliant properties after filters applied
- Cache resolved list for bid-time use
- Retrieve updated list after webhook notification
list_property_lists
List all property lists accessible to the authenticated principal.delete_property_list
Remove a property list.Validation
validate_property_delivery
Validates delivery records against a property list to determine compliance. Closes the loop between “what I wanted” and “what I got.” Performs two independent validations:- Property compliance: Is the identifier in the resolved property list?
- Supply path authorization: Was the sales agent authorized to sell that property? (optional, requires
sales_agent_url)
- Post-campaign validation: Verify impressions landed on compliant properties
- Supply path verification: Confirm sales agents were authorized by publishers
- Real-time monitoring: Check compliance rate during campaign execution
- Audit trails: Generate compliance reports for regulatory or brand safety reviews
compliant: Identifier is in the resolved property listnon_compliant: Identifier is NOT in the resolved property listnot_covered: Identifier recognized but governance agent has no data for it (e.g., property too new)unidentified: Identifier type not resolvable by this agent (e.g., detection failed, unsupported type)
sales_agent_url provided):
authorized: Sales agent is listed in publisher’s adagents.jsonunauthorized: Sales agent is NOT in publisher’s authorized_agents listunknown: Could not fetch or parse adagents.json
not_covered and unidentified records should be excluded when calculating compliance rates - you cannot penalize for detection gaps or coverage limitations. The distinction helps identify whether the gap is in the agent’s data coverage vs the identifier resolution.
Response Format: The response returns raw counts (compliant, non_compliant, not_covered, unidentified impressions). Consumers calculate rates as needed. Governance agents may optionally include an aggregate field with computed metrics (score, grade, label) - the format and meaning are agent-specific.
Typical Flows
Property List Flow
Property lists enable buyers to define and manage compliant property sets:- Create property list: Buyer defines list on governance agent with filters
- Resolve and iterate: Buyer calls
get_property_listto see resolved properties - Share list reference: Buyer provides
list_idto orchestrator/seller - Cache locally: Orchestrator/seller fetches and caches resolved properties
- Use at bid time: Orchestrator/seller uses local cache (no governance agent calls)
- Refresh periodically: Re-fetch based on
cache_valid_until(typically 1-24 hours)
Webhook and Caching Pattern
Webhooks provide notification that a property list has changed. The webhook payload contains a summary of changes, but you must callget_property_list to retrieve the actual updated properties.
-
Webhook-driven updates (recommended): Register a webhook URL when creating the property list. Re-fetch via
get_property_listwhen notified of changes. -
Polling with cache hints: Use
cache_valid_untilfromget_property_listresponses to schedule periodic re-fetches. Typical validity periods are 1-24 hours. - Hybrid approach: Use webhooks for immediate updates, with polling as a fallback safety net.
get_property_list response includes:
resolved_at: When the list was evaluatedcache_valid_until: When consumers should consider the cache stale
cache_valid_until without re-fetching.
Property Discovery Flow
- Define filters: Specify country, channel, quality thresholds when creating property list
- Resolve list: Call
get_property_listwithresolve=trueto get matching properties - Review candidates: Evaluate returned properties for fit
- Add to campaign: Include property list reference in media buy
Response Structure
All AdCP Governance responses follow a consistent structure:Core Response Fields
- message: Human-readable summary of the operation result
- context_id: Session continuity identifier for follow-up requests
- data: Task-specific payload (varies by task)
Protocol Transport
- MCP: Returns complete response as flat JSON object
- A2A: Returns as structured artifacts with message in text part, data in data part
- Data Consistency: Both protocols contain identical AdCP data structures
Error Handling
Error Codes
PROPERTY_NOT_FOUND: Property identifier not recognizedPROPERTY_NOT_MONITORED: Governance agent doesn’t cover this propertyPOLICY_NOT_FOUND: Referenced policy doesn’t existLIST_ACCESS_DENIED: Cannot access property list (auth failed)LIST_NOT_FOUND: Property list reference invalidMETHODOLOGY_NOT_SUPPORTED: Requested methodology version unavailablePARTIAL_RESULTS: Some properties couldn’t be evaluated
Partial Success
For bulk operations, the response may include partial results:Implementation Notes
Caching Architecture
Governance decisions are highly cacheable:Orchestrator-Side Caching
- Score cache: Store scores with TTL from
valid_untilfield - Decision cache: Pre-compute pass/fail for campaigns
- List cache: Cache property lists from
property_list_ref
Agent-Side Caching
- Profile cache: Maintain pre-computed property profiles
- Methodology cache: Cache scoring algorithm results
Performance Requirements
| Operation | Target Latency |
|---|---|
| Single property score | < 100ms |
| Bulk scoring (100 properties) | < 2s |
| Filter decision (cached) | < 5ms |
| Property discovery | < 5s |
Multi-Agent Strategies
Orchestrators may consult multiple governance agents:- Primary + Validation: Use primary agent, validate with secondary
- Specialization: Route by property type to specialist agents
- Consensus: Require multiple agents to agree
- Competitive: Track agent accuracy, weight by performance
Agent Discovery
There are two complementary discovery mechanisms:Publisher-Side Discovery via adagents.json
Publishers declare which governance agents have data about their properties using theproperty_features field in adagents.json:
property_features from the publisher’s adagents.json to find which agents have relevant data.
See the adagents.json Tech Spec for the complete discovery workflow.
Agent-Side Discovery via agent-card.json
Governance agents expose capabilities via.well-known/agent-card.json:
Detailed Capability Discovery
Useget_adcp_capabilities for detailed capability discovery:
Marketplace Architecture
The Property Protocol enables a marketplace of specialized data agents:Key Principles
- Buyer agent is source of truth: The buyer agent aggregates data from multiple specialized governance agents
- Seller sees one interface: Sellers interact only with the buyer agent using standard Property Protocol
- Subscription model: Each specialized agent is a paid service with its own features and coverage
- Webhook-driven updates: Specialized agents notify the buyer agent when property evaluations change
Multi-Agent Orchestration
A buyer agent can distribute a master property list to multiple specialized agents:Brand Manifest
Instead of specifying complex filters, buyers provide a brand manifest:- Consent agent: Applies COPPA requirements for children_under_13
- Brand safety agent: Filters to kids_family content, excludes violence/adult
- Sustainability agent: Applies any green media requirements
Integration with Media Buy Protocol
Property Lists in Media Buys
The Media Buy Protocol accepts property list references:Policy Compliance
Media buys can reference governance policies via property list references:Best Practices
- Cache aggressively: Property scores change slowly; cache for hours/days
- Bulk where possible: Use batch operations for planning, not per-property calls
- Pre-compute decisions: Build pass/fail lookups before bid-time
- Monitor coverage: Track which properties agents don’t cover
- Log methodology versions: For audit trails, record which scoring version was used
- Handle partial results: Not all properties will be scorable; plan for gaps
Next Steps
- See the adagents.json Tech Spec for property declaration and authorization
- See the get_adcp_capabilities task reference for capability discovery
- See the Property List Management for CRUD operations and webhooks
- See the validate_property_delivery task reference for post-campaign compliance validation