Skip to main content
AdCP includes comprehensive policy compliance features to ensure brand safety and regulatory compliance across all advertising operations. This document explains how publishers should implement and enforce policy checks throughout the media buying lifecycle.

Overview

Policy compliance in AdCP centers around the brand_manifest - a required description of the advertiser brand. This enables publishers to:
  • Filter inappropriate advertisers before showing inventory
  • Enforce category-specific restrictions
  • Maintain brand safety standards
  • Comply with regulatory requirements

Brand Manifest

All product discovery and media buy creation requests must include a brand_manifest that describes the advertiser brand:
{
  "name": "Nike",
  "url": "https://nike.com",
  "category": "athletic_apparel"
}
The manifest provides:
  • name: The advertiser/brand making the request
  • url: Brand’s primary website for verification
  • category (optional): Industry category for policy filtering
Combined with the brief field (which describes what’s being promoted), publishers have full context for policy decisions. For comprehensive guidance on briefs and brand information, see Brief Expectations.

Policy Check Implementation

Publishers must implement policy checks at two key points in the workflow:

1. During Product Discovery (get_products)

When a get_products request is received, the publisher should:
  1. Validate that the brand_manifest is present and meaningful
  2. Extract brand and category information
  3. Check against publisher policies
  4. Filter out unsuitable products
Example Policy Check Flow:
def check_brand_policy(brand_manifest: dict) -> PolicyResult:
    # Extract brand information
    brand_name = brand_manifest.get("name")
    brand_url = brand_manifest.get("url")
    category = brand_manifest.get("category")

    # Verify brand identity if needed
    if not verify_brand_domain(brand_name, brand_url):
        return PolicyResult(
            status="blocked",
            message="Brand verification failed"
        )

    # Check blocked categories
    if category in BLOCKED_CATEGORIES:
        return PolicyResult(
            status="blocked",
            message=f"{category} advertising is not permitted on this publisher"
        )

    # Check restricted categories
    if category in RESTRICTED_CATEGORIES:
        return PolicyResult(
            status="restricted",
            message=f"{category} advertising requires manual approval",
            contact="sales@publisher.com"
        )

    return PolicyResult(status="allowed", category=category)

2. During Media Buy Creation (create_media_buy)

When creating a media buy:
  1. Validate the brand_manifest against publisher policies
  2. Ensure consistency with the campaign brief
  3. Flag for manual review if needed
  4. Return appropriate errors for violations

Policy Compliance Responses

The protocol defines three compliance statuses:

allowed

The brand passes initial policy checks. Products are returned normally.
{
  "products": [...],
  "policy_compliance": {
    "status": "allowed"
  }
}

restricted

The brand category requires manual approval before products can be shown.
{
  "products": [],
  "policy_compliance": {
    "status": "restricted",
    "message": "Cryptocurrency advertising is restricted but may be approved on a case-by-case basis.",
    "contact": "sales@publisher.com"
  }
}

blocked

The brand category cannot be supported by this publisher.
{
  "products": [],
  "policy_compliance": {
    "status": "blocked",
    "message": "Publisher policy prohibits alcohol advertising without age verification capabilities."
  }
}

Creative Validation

All uploaded creatives should be validated against the declared brand_manifest:
  1. Automated Analysis: Use creative recognition to verify brand consistency
  2. Human Review: Manual verification for sensitive categories
  3. Continuous Monitoring: Ongoing checks during campaign delivery
This ensures:
  • Creative content matches the declared brand
  • No misleading or deceptive advertising
  • Brand safety for all parties

Common Policy Categories

Publishers typically implement restrictions for:

Blocked Categories

  • Illegal products or services
  • Prohibited content (varies by region)
  • Categories requiring special licensing

Restricted Categories (Manual Approval)

  • Alcohol (may require age-gating)
  • Gambling/Gaming
  • Cryptocurrency/Financial services
  • Political advertising
  • Healthcare/Pharmaceuticals
  • Dating services

Special Requirements

  • Political ads may require disclosure
  • Healthcare may need disclaimers
  • Financial services need compliance review

Implementation Best Practices

  1. Clear Communication: Provide specific reasons for restrictions
  2. Contact Information: Include sales contact for restricted categories
  3. Consistent Enforcement: Apply policies uniformly across all advertisers
  4. Documentation: Maintain clear policy documentation for advertisers
  5. Appeals Process: Allow advertisers to request policy exceptions

Error Handling

For policy violations during media buy creation:
{
  "error": {
    "code": "POLICY_VIOLATION",
    "message": "Brand category not permitted on this publisher",
    "field": "brand_manifest",
    "suggestion": "Contact publisher for category approval process"
  }
}

Integration with HITL

Policy decisions can trigger Human-in-the-Loop workflows:
  1. Restricted categories create pending_manual tasks
  2. Human reviewers assess the campaign
  3. Approval or rejection is communicated back
  4. Campaign proceeds or is terminated based on decision