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 field - a required reference to 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

All product discovery and media buy creation requests must include a brand field that identifies the advertiser brand:
{
  "brand": {
    "domain": "acmecorp.com"
  }
}
The brand domain is used to look up the brand’s published identity (via brand.json), which provides:
  • Brand name and identity for verification
  • Industry category for policy filtering
  • Brand assets for creative compliance
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 field 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: dict) -> PolicyResult:
    # Look up brand identity from domain
    domain = brand.get("domain")
    brand_identity = fetch_brand_json(domain)

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

    category = brand_identity.get("category")

    # 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 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 identity:
  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",
    "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