Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .changeset/creative-governance.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
"adcontextprotocol": minor
---

Add `get_creative_features` task for creative governance

Introduces the creative analog of `get_property_features` — a general-purpose task for evaluating creatives and returning feature values. Supports security scanning, creative quality assessment, content categorization, and any other creative evaluation through the same feature-based pattern used by property governance.

New schemas:
- `get-creative-features-request.json` — accepts a creative manifest and optional feature_ids filter
- `get-creative-features-response.json` — returns feature results with discriminated union (success/error)
- `creative-feature-result.json` — individual feature evaluation (value, confidence, expires_at, etc.)

Also adds `creative_features` to the governance section of `get_adcp_capabilities` response, allowing agents to advertise which creative features they can evaluate.
14 changes: 14 additions & 0 deletions docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,13 @@
]
}
]
},
{
"group": "Creative Governance",
"pages": [
"docs/governance/creative/index",
"docs/governance/creative/get_creative_features"
]
}
]
},
Expand Down Expand Up @@ -593,6 +600,13 @@
]
}
]
},
{
"group": "Creative Governance",
"pages": [
"docs/governance/creative/index",
"docs/governance/creative/get_creative_features"
]
}
]
},
Expand Down
172 changes: 172 additions & 0 deletions docs/governance/creative/get_creative_features.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
---
title: get_creative_features
---

# get_creative_features

<Info>
**AdCP 3.0 Proposal** - This task is under development for AdCP 3.0.
</Info>

Evaluates a creative manifest and returns feature values from a creative governance agent. The creative analog of `get_property_features`.

## Use cases

- **Security scanning**: Detect malware, auto-redirects, credential harvesting, cloaking
- **Creative quality**: Evaluate brand consistency, platform optimization, guideline adherence
- **Content categorization**: Classify creative content against IAB Content Taxonomy or other standards
- **Accessibility**: Check WCAG compliance, screen reader compatibility

## Request

```json
{
"$schema": "/schemas/creative/get-creative-features-request.json",
"creative_manifest": {
"format_id": {
"agent_url": "https://creative.adcontextprotocol.org",
"id": "html5-display-300x250"
},
"assets": {
"creative_html": {
"url": "https://cdn.agency.com/creative/abc123.html"
}
}
},
"feature_ids": ["auto_redirect", "credential_harvest", "cloaking"]
}
```

### Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `creative_manifest` | object | Yes | Creative manifest with `format_id` and `assets` |
| `feature_ids` | string[] | No | Filter to specific features. If omitted, evaluates all features the agent supports. |

## Response

<CodeGroup>
```json Security scanner (clean)
{
"$schema": "/schemas/creative/get-creative-features-response.json",
"results": [
{ "feature_id": "auto_redirect", "value": false },
{ "feature_id": "credential_harvest", "value": false },
{ "feature_id": "cloaking", "value": false }
],
"detail_url": "https://scanner.example.com/reports/ctx_abc123"
}
```

```json Security scanner (threat detected)
{
"$schema": "/schemas/creative/get-creative-features-response.json",
"results": [
{ "feature_id": "auto_redirect", "value": true, "confidence": 0.97 },
{ "feature_id": "credential_harvest", "value": true, "confidence": 0.91 },
{ "feature_id": "cloaking", "value": false }
],
"detail_url": "https://scanner.example.com/reports/ctx_def456"
}
```

```json Creative quality platform
{
"$schema": "/schemas/creative/get-creative-features-response.json",
"results": [
{ "feature_id": "brand_consistency", "value": 87, "unit": "percentage" },
{ "feature_id": "platform_optimized", "value": true },
{ "feature_id": "creative_quality_score", "value": 92, "unit": "score" }
],
"detail_url": "https://quality.example.com/reports/ctx_ghi789"
}
```

```json Content categorizer
{
"$schema": "/schemas/creative/get-creative-features-response.json",
"results": [
{ "feature_id": "iab_casinos_gambling", "value": true, "confidence": 0.95 },
{ "feature_id": "iab_automotive", "value": false, "confidence": 0.12 }
],
"detail_url": "https://categorizer.example.com/reports/ctx_jkl012"
}
```
</CodeGroup>

### Response fields

| Field | Description |
|-------|-------------|
| `results` | Array of feature evaluation results |
| `results[].feature_id` | Which feature was evaluated |
| `results[].value` | Feature value: boolean (binary), number (quantitative), or string (categorical) |
| `results[].confidence` | Confidence score (0-1), when applicable |
| `results[].unit` | Unit for quantitative values (e.g., `percentage`, `score`) |
| `results[].expires_at` | When this evaluation expires and should be refreshed |
| `results[].measured_at` | When this feature was evaluated |
| `results[].methodology_version` | Version of methodology used |
| `results[].details` | Vendor-specific details |
| `detail_url` | URL to vendor's full assessment. Access-controlled by the vendor. |

### Error response

```json
{
"errors": [
{
"code": "CREATIVE_INACCESSIBLE",
"message": "Could not retrieve creative assets for evaluation"
}
]
}
```

## Async evaluation

Some evaluations (e.g., sandboxed malware scanning) take time. The agent returns `status: "working"` and delivers results via webhook when complete. This uses the standard [async task pattern](/docs/building/implementation/async-operations) — no custom status values needed.

## Orchestrator logic

The orchestrator applies feature requirements on the client side, the same way property list feature requirements work:

```javascript
const result = await agent.getCreativeFeatures({
creative_manifest: manifest
});

if (result.errors) {
// Handle error - reject or retry
return;
}

// Apply security requirements
const threats = result.results.filter(
f => ['auto_redirect', 'credential_harvest', 'cloaking'].includes(f.feature_id)
&& f.value === true
);
if (threats.length > 0) {
// Reject - security threat detected
return;
}

// Apply quality requirements
const quality = result.results.find(f => f.feature_id === 'brand_consistency');
if (quality && quality.value < 80) {
// Reject - below quality threshold
return;
}
```

## Relationship to property governance

Creative governance follows the same pattern as property governance:

| Concept | Property governance | Creative governance |
|---------|-------------------|-------------------|
| **What's evaluated** | Properties (websites, apps) | Creatives (manifests) |
| **Feature declarations** | `governance.property_features` | `governance.creative_features` |
| **Evaluation task** | `get_property_features` | `get_creative_features` |
| **Feature values** | `property-feature-value` schema | Same fields (value, confidence, expires_at, etc.) |
| **Detailed intelligence** | Behind `detail_url` / `methodology_url` | Behind `detail_url` / `methodology_url` |
157 changes: 157 additions & 0 deletions docs/governance/creative/index.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
---
title: Creative Governance
sidebarTitle: Overview
---

<Info>
**AdCP 3.0 Proposal** - This protocol is under development for AdCP 3.0. Feedback welcome via [GitHub Discussions](https://github.com/adcontextprotocol/adcp/discussions).
</Info>

Creative Governance standardizes how creatives are evaluated by specialized governance agents. It applies the same feature-based pattern as [Property Governance](../property/index) — agents declare features they can evaluate, accept creative manifests, and return feature values.

## Overview

Creative governance agents evaluate creatives and return feature values. Different agents evaluate different features:

| Agent type | Example features | Feature type |
|------------|-----------------|--------------|
| **Security scanner** | `auto_redirect`, `credential_harvest`, `cloaking` | Binary |
| **Creative quality** | `brand_consistency`, `platform_optimized`, `creative_quality_score` | Quantitative, binary |
| **Content categorization** | `iab_casinos_gambling`, `iab_automotive` | Binary (with confidence) |

The protocol doesn't define a fixed feature taxonomy. Vendors declare what they evaluate via [`get_adcp_capabilities`](/docs/protocol/get_adcp_capabilities) and compete on coverage.

## How it works

### 1. Agent declares features

A creative governance agent advertises its capabilities using the same feature definition pattern as property governance:

<CodeGroup>
```json Security scanner
{
"governance": {
"creative_features": [
{
"feature_id": "auto_redirect",
"type": "binary",
"description": "Unauthorized navigation away from publisher context without user interaction",
"methodology_url": "https://scanner.example.com/methodology"
},
{
"feature_id": "credential_harvest",
"type": "binary",
"description": "Phishing techniques to gather user credentials or PII",
"methodology_url": "https://scanner.example.com/methodology"
},
{
"feature_id": "cloaking",
"type": "binary",
"description": "Creative masks or misrepresents content to evade detection",
"methodology_url": "https://scanner.example.com/methodology"
}
]
}
}
```

```json Creative quality platform
{
"governance": {
"creative_features": [
{
"feature_id": "brand_consistency",
"type": "quantitative",
"range": { "min": 0, "max": 100 },
"description": "Adherence to brand guidelines including logo placement, colors, and typography",
"methodology_url": "https://quality.example.com/methodology"
},
{
"feature_id": "platform_optimized",
"type": "binary",
"description": "Creative meets platform-specific best practices (aspect ratio, text overlay limits)",
"methodology_url": "https://quality.example.com/methodology"
}
]
}
}
```

```json Content categorizer
{
"governance": {
"creative_features": [
{
"feature_id": "iab_casinos_gambling",
"type": "binary",
"description": "Creative contains casinos or gambling content (IAB Content Taxonomy 3.1, ID 181)",
"methodology_url": "https://categorizer.example.com/methodology"
},
{
"feature_id": "iab_automotive",
"type": "binary",
"description": "Creative contains automotive content (IAB Content Taxonomy 3.1, ID 1)",
"methodology_url": "https://categorizer.example.com/methodology"
}
]
}
}
```
</CodeGroup>

### 2. Orchestrator evaluates a creative

The orchestrator calls [`get_creative_features`](./get_creative_features) with a creative manifest:

```json
{
"creative_manifest": {
"format_id": {
"agent_url": "https://creative.adcontextprotocol.org",
"id": "html5-display-300x250"
},
"assets": {
"creative_html": {
"url": "https://cdn.agency.com/creative/abc123.html"
}
}
}
}
```

### 3. Agent returns feature values

The agent evaluates the creative and returns feature values. The response shape is the same regardless of agent type:

```json
{
"results": [
{ "feature_id": "auto_redirect", "value": true, "confidence": 0.97 },
{ "feature_id": "credential_harvest", "value": false },
{ "feature_id": "cloaking", "value": false }
],
"detail_url": "https://scanner.example.com/reports/ctx_abc123"
}
```

### 4. Orchestrator applies requirements

The orchestrator evaluates the feature values against buyer-defined requirements — the same pattern as property list feature requirements:

- Security: reject if `auto_redirect` is `true`
- Quality: reject if `brand_consistency` is below 80
- Categorization: reject if `iab_casinos_gambling` is `true` and campaign excludes gambling

## Design principles

**Reuses existing patterns.** Creative governance follows the same feature-based model as property governance. Agents declare features, return values, and keep detailed intelligence behind `detail_url` and `methodology_url`.

**Vendor-agnostic features.** The protocol doesn't define which features exist. Vendors declare their own feature catalogs. A security vendor and a creative quality vendor both use `get_creative_features` — the protocol doesn't need to know the difference.

**Opaque results.** Feature values on the wire are pass/fail (binary) or scores (quantitative). Detailed methodology, detection techniques, and threat intelligence stay behind the vendor's access-controlled URLs.

**Orchestrator decides.** Agents return values, orchestrators evaluate against requirements. The separation of measurement from decision-making is the same as property governance.

## Async evaluation

If evaluation takes time (e.g., sandboxed execution for malware scanning), the agent returns `status: "working"` and delivers results via the standard webhook mechanism. No custom status values or webhook events needed — the existing [async task pattern](/docs/building/implementation/async-operations) handles this.
2 changes: 1 addition & 1 deletion docs/governance/overview.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ The Governance Protocol covers four distinct governance domains:
| **[Property Governance](./property/index)** | Where ads can run | Property lists, compliance filtering, adagents.json authorization |
| **[Brand Protocol](/docs/brand-protocol/index)** | Brand identity & agents | brand.json discovery, brand agent authorization |
| **[Content Standards](./content-standards/index)** | Brand suitability | Privacy-preserving content evaluation, calibration, validation |
| **Creative Governance** | What creatives are compliant | Format validation, content moderation, accessibility |
| **[Creative Governance](./creative/index)** | What creatives are safe and effective | Security scanning, creative quality, content categorization via `get_creative_features` |
| **Campaign Governance** | What can be bought | Budget controls, approval workflows, policy compliance |

Each domain has specialized governance agents that provide data, filtering, and scoring capabilities.
Expand Down
Loading