Authorized Properties
One of the foundational challenges in digital advertising is unauthorized resale - ensuring that sales agents are actually authorized to represent the advertising properties they claim to sell. AdCP solves this problem through a comprehensive authorization system that builds on the lessons learned from ads.txt in programmatic advertising.The Problem: Unauthorized Resale
Historical Context
In programmatic advertising, the Ads.txt initiative was created to solve a critical problem: unauthorized reselling of advertising inventory. Before ads.txt, bad actors could claim to represent popular websites and sell their inventory without permission, leading to:- Revenue theft: Publishers lost money to unauthorized sellers
- Brand safety issues: Buyers couldn’t verify legitimate inventory sources
- Market fragmentation: No way to distinguish authorized from unauthorized sellers
The Same Problem in AI-Powered Advertising
AdCP faces similar challenges as AI agents begin to buy and sell advertising programmatically:- AI sales agents may claim to represent properties they don’t actually control
- Buyer agents need to verify authorization before making purchases
- Publishers need a way to explicitly authorize specific sales agents
- Scale challenges: Manual verification doesn’t work for networks with thousands of properties
The Solution: AdCP Authorization System
AdCP prevents unauthorized resale through a two-part system:- Publisher Authorization: Publishers explicitly authorize sales agents via
adagents.json - Agent Discovery: Sales agents declare their authorized properties via
list_authorized_properties
How Publishers Authorize Sales Agents
Publishers authorize sales agents by hosting anadagents.json file at /.well-known/adagents.json on their domain. This file lists all authorized agents and their permissions.
Example adagents.json
Key Fields
- publishers: Identifies the publisher(s) for this domain
- authorized_agents: List of sales agents authorized to represent this property
- agent_id: Unique identifier for the sales agent (matches AdCP agent identity)
- authorization_scope: Defines what the agent is authorized to sell
- properties: Which properties/paths they can represent (”*” = all)
- product_categories: Which types of ads they can sell
- date ranges: When the authorization is valid
- verification: How the publisher verified the agent’s identity
How Sales Agents Share Authorized Properties
Sales agents use thelist_authorized_properties task to declare all properties they are authorized to represent. This serves multiple purposes:
- Transparency: Buyers can see what properties an agent represents
- Validation enablement: Provides the data buyers need to verify authorization
- Tag resolution: Enables efficient grouping of properties by tags
Property Declaration Example
Property Tags for Scale
For large networks representing thousands of properties, AdCP supports property tags to make the system manageable:- Products can reference
["local_radio", "midwest"]instead of listing hundreds of stations - Buyers use
list_authorized_propertiesto resolve tags to actual properties - Authorization validation works on the resolved properties
Authorization Validation Workflow
Here’s how a buyer agent validates that a sales agent is authorized to represent claimed properties:1. One-Time Setup
2. Product Validation
3. Ongoing Validation
- Cache adagents.json responses with reasonable TTL (e.g., 24 hours)
- Re-validate periodically for long-running campaigns
- Handle authorization changes gracefully (pause vs. reject)
Benefits of This Approach
For Publishers
- Explicit control over who can sell their inventory
- Granular permissions by property, date range, and product type
- Standard web hosting - no special infrastructure required
- Audit trail of authorized agents
For Sales Agents
- Clear authorization proof that buyers can verify
- Efficient tag-based grouping for large property portfolios
- Standardized declaration across all AdCP interactions
For Buyer Agents
- Automated verification of seller authorization
- Fraud prevention through cryptographic verification
- Confidence in purchases from verified inventory sources
- Scalable validation for large-scale automated buying
Security Considerations
Domain Verification
- HTTPS required: adagents.json must be served over HTTPS
- Domain ownership: Only domain owners can authorize agents for their properties
- Regular validation: Buyers should re-check authorization periodically
Authorization Scope
- Least privilege: Grant minimal necessary permissions
- Time bounds: Use start/end dates for temporary authorizations
- Property restrictions: Limit to specific paths or property types when appropriate
Error Handling
- Missing adagents.json: Treat as unauthorized (fail closed)
- Invalid JSON: Reject malformed authorization files
- Network errors: Implement retry logic with fallback policies
- Expired authorization: Handle gracefully in active campaigns
Integration with Product Discovery
Authorization validation integrates seamlessly with Product Discovery:- Discover products using
get_products - Validate authorization for properties referenced in products
- Proceed confidently with authorized inventory
- Flag unauthorized products for manual review
Technical Implementation
For complete technical details on implementing theadagents.json file format, including:
- File location and format requirements (
/.well-known/adagents.json) - JSON schema definitions and validation rules
- Mobile application and CTV implementation patterns
- Detailed property type specifications (website, mobile app, CTV, DOOH, podcast)
- Domain matching rules and wildcard patterns
- Validation code examples and error handling
- Security considerations and best practices
Related Documentation
list_authorized_properties- API reference for property discovery- Product Discovery - How authorization integrates with product discovery
- Properties Schema - Technical property data model
- adagents.json Tech Spec - Complete
adagents.jsonimplementation guide