Skip to content

Commit 230061c

Browse files
bokelleyclaude
andcommitted
docs: remove single-option hedging from creative pricing
Creative vendors offer multiple pricing options per creative: volume tiers, context-specific rates (premium vs standard), different models per product line (CPM for rich media, per-unit for social variants). Updated all docs, schemas, and training to reflect this rather than hedging with "typically a single option." Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 0e19355 commit 230061c

8 files changed

Lines changed: 26 additions & 34 deletions

File tree

docs/creative/specification.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ Creative agents that charge for their services expose pricing through the same d
192192
### Pricing flow
193193

194194
1. **Account setup** — rate card agreed. Determines pricing for all subsequent operations.
195-
2. **Discovery**`list_creatives` with `account` and `include_pricing: true` returns `pricing_options[]` on each creative. For creative agents with predetermined rate cards, this typically contains a single option. The pattern is the same as signals (`get_signals` returns `pricing_options[]`) and content standards.
195+
2. **Discovery**`list_creatives` with `account` and `include_pricing: true` returns `pricing_options[]` on each creative. Vendors may offer multiple options (volume tiers, context-specific rates, different models per product line). Same pattern as signals and content standards.
196196
3. **Build**`build_creative` with `account`. The agent computes the cost and returns `pricing_option_id`, `vendor_cost`, `currency`, and `consumption` in the response.
197197
4. **Report**`report_usage` with `creative_id` and `pricing_option_id` for reconciliation.
198198

@@ -294,7 +294,7 @@ Browse and filter creative assets in a creative library. Implemented by any agen
294294
- Agents SHOULD support filtering by `concept_ids` and `format_ids` when the platform organizes creatives into concepts
295295
- Agents MAY include dynamic content variable definitions when `include_variables=true`
296296
- Agents MAY include a lightweight delivery snapshot when `include_snapshot=true`. The snapshot provides lifetime impressions and last-served date for operational use — detailed analytics belong in `get_creative_delivery`.
297-
- When `account` and `include_pricing=true` are provided, agents that charge MUST include `pricing_options` on each creative — an array of [`vendor-pricing-option`](https://adcontextprotocol.org/schemas/latest/core/vendor-pricing-option.json) objects. For agents with predetermined rate cards, this typically contains a single option.
297+
- When `account` and `include_pricing=true` are provided, agents that charge MUST include `pricing_options` on each creative — an array of [`vendor-pricing-option`](https://adcontextprotocol.org/schemas/latest/core/vendor-pricing-option.json) objects. Vendors may offer multiple options per creative (volume tiers, context-specific rates, different pricing models).
298298

299299
**Account requirements:**
300300
- Creative agents that charge for their services MUST implement the [Accounts Protocol](/docs/accounts/overview). This applies to any creative agent with pricing — ad servers, generation platforms, and transformation agents that bill for usage.

docs/creative/task-reference/list_creatives.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ The response provides creative data with optional enrichment:
183183
| `snapshot` | object | Delivery snapshot (when `include_snapshot=true`) |
184184
| `snapshot_unavailable_reason` | string | Why snapshot is missing — `SNAPSHOT_UNSUPPORTED`, `SNAPSHOT_TEMPORARILY_UNAVAILABLE`, or `SNAPSHOT_PERMISSION_DENIED` |
185185
| `items` | array | Items for multi-asset formats (when `include_items=true`) |
186-
| `pricing_options` | [VendorPricingOption](/docs/creative/specification#pricing)[] | Pricing options for this creative (when `include_pricing=true` and `account` provided). Same pattern as `get_signals` and `list_content_standards`. For agents with predetermined rate cards, this typically contains a single option. |
186+
| `pricing_options` | [VendorPricingOption](/docs/creative/specification#pricing)[] | Pricing options for this creative (when `include_pricing=true` and `account` provided). Vendors may offer multiple options (volume tiers, context-specific rates, different models per product line). Same pattern as `get_signals` and `list_content_standards`. |
187187

188188
### Pricing
189189

@@ -202,7 +202,7 @@ When `include_pricing=true` and `account` is provided, each creative includes `p
202202
}
203203
```
204204

205-
The buyer passes the selected `pricing_option_id` in `report_usage` for billing verification. This is the same pattern used by [signals](/docs/signals/tasks/get_signals) and [content standards](/docs/governance/content-standards/index). For creative agents with predetermined rate cards, the array typically contains a single option.
205+
The buyer passes the selected `pricing_option_id` in `report_usage` for billing verification. Vendors may offer multiple options — volume/commitment tiers, context-specific rates (premium vs. standard placements), or entirely different pricing models for different product lines. This is the same pattern used by [signals](/docs/signals/tasks/get_signals) and [content standards](/docs/governance/content-standards/index).
206206

207207
### Delivery snapshot
208208

docs/learning/specialist/creative.mdx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,7 @@ Passing earns the **AdCP specialist — Creative** credential.
121121

122122
All vendor services use the same pattern: `pricing_options[]` on discovery responses, `pricing_option_id` in `report_usage`. Signals, content standards, creative agents, and property list agents all follow this.
123123

124-
In practice, signal providers typically offer multiple options (CPM vs. percent-of-media) for the buyer to choose from. Creative agents with predetermined rate cards typically return a single-element array. The protocol surface is the same — the difference is how many options are in the array.
125-
126-
For signals, the buyer selects a pricing option at activation time (`activate_signal`). For creative agents, the account's rate card has already resolved the option — there is nothing to select.
124+
Vendors often offer multiple pricing options per creative — volume/commitment tiers (lower CPM at higher spend), context-specific rates (premium vs. standard placements), or different pricing models for different product lines (CPM for rich media, per-unit for social variants). The buyer selects the appropriate `pricing_option_id` and passes it in `report_usage`.
127125
</Note>
128126

129127
### Cross-platform skills

docs/learning/specialist/signals.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ If your company works in the "not yet" areas, you can still publish the **audien
3737
- Reason about the signals ecosystem — who provides data, who consumes it, and how authorization works
3838

3939
<Note>
40-
**Vendor pricing is consistent across protocols** — All vendor services use `pricing_options[]` on discovery responses and `pricing_option_id` in `report_usage`. Signals agents typically offer multiple options (CPM vs. percent-of-media). Creative agents with predetermined rate cards typically return a single option. The pattern is the same. See [S2: Creative mastery](/docs/learning/specialist/creative) for the creative pricing model.
40+
**Vendor pricing is consistent across protocols** — All vendor services use `pricing_options[]` on discovery responses and `pricing_option_id` in `report_usage`. Vendors may offer multiple options — volume tiers, context-specific rates, or different models per product line. Signals, creative, content standards, and property list agents all follow the same pattern. See [S2: Creative mastery](/docs/learning/specialist/creative) for the creative pricing model.
4141
</Note>
4242

4343
## Prerequisite reading

docs/storyboards/creative_ad_server.yaml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,8 @@ phases:
6060
do they cost?" This is the primary entry point for ad server interactions.
6161
6262
With include_pricing=true and an account reference, the response includes
63-
pricing_options on each creative — the available rates from the account's
64-
rate card. For agents with predetermined rate cards, this is typically a
65-
single-element array.
63+
pricing_options on each creative. Vendors may offer multiple options —
64+
volume tiers, context-specific rates, or different models per product line.
6665
task: list_creatives
6766
schema_ref: "creative/list-creatives-request.json"
6867
response_schema_ref: "creative/list-creatives-response.json"

specs/creative-agent-pricing.md

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -33,29 +33,25 @@ All vendor services use the same pattern: `pricing_options[]` on discovery respo
3333
| Creative governance | `get_creative_features` → pricing in response | `standards_id` |
3434
| Rights | `get_rights``pricing_options[]` per right | `rights_id` |
3535

36-
In practice, signal providers typically offer multiple options (CPM vs. percent-of-media).
37-
Creative agents with predetermined rate cards typically return a single-element array.
38-
The protocol surface is the same.
36+
Vendors commonly offer multiple options per item — volume/commitment tiers, context-specific
37+
rates (premium vs. standard placements), or different pricing models for different product
38+
lines (CPM for rich media, per-unit for social variants).
3939

4040
## Design
4141

42-
### Core principle: rate cards are predetermined per account
42+
### Core principle: pricing is account-scoped
4343

44-
Creative pricing is established when the account is set up — it's a contractual
45-
relationship, not a per-call negotiation. The buyer doesn't shop for a price on each
46-
build. The account's rate card determines what applies.
44+
Creative pricing is scoped to the account relationship. The account's rate card
45+
determines the available options. `list_creatives` returns `pricing_options[]` reflecting
46+
the account's negotiated rates.
4747

48-
This means `list_creatives` returns the **one pricing option that applies** to the
49-
requesting account's rate card for each creative. There's nothing to choose. The agent
50-
computed the applicable rate from the account relationship.
48+
Creative vendors commonly offer multiple options per creative:
49+
- **Volume/commitment tiers** — lower CPM at higher spend commitments
50+
- **Context-specific rates** — premium placements vs. standard
51+
- **Product-line pricing** — CPM for rich media, per-unit for social variants
5152

52-
The pricing object represents the **current applicable rate** for the account. The agent
53-
may adjust this as volume thresholds are crossed (e.g., tiered rate cards). The
54-
`build_creative` response is always authoritative — what it returns is what you owe.
55-
56-
Signals are different because a data provider may genuinely offer the same segment as CPM
57-
or percent-of-media, and the buyer picks based on campaign economics. Creative vendors
58-
don't work that way — you negotiate a rate card, and that's what you pay.
53+
The `build_creative` response is authoritative — `vendor_cost` is what the buyer owes
54+
for that specific build, computed from the selected pricing option.
5955

6056
### Core principle: if you charge, you're stateful
6157

@@ -436,10 +432,9 @@ Include a brief conceptual section in the pricing lab:
436432
- All vendor services use `pricing_options[]` on discovery responses and
437433
`pricing_option_id` in `report_usage`. Signals, content standards, creative agents,
438434
and property list agents all follow this pattern.
439-
- Signal providers typically offer multiple options (CPM vs. percent-of-media).
440-
Creative agents with predetermined rate cards typically return a single option.
441-
The protocol surface is the same — the difference is how many options are in the
442-
array.
435+
- Vendors commonly offer multiple options — volume tiers, context-specific rates,
436+
or different models per product line (CPM for rich media, per-unit for social
437+
variants).
443438

444439
**Assessment dimensions:**
445440

static/schemas/source/core/vendor-pricing-option.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"$schema": "http://json-schema.org/draft-07/schema#",
33
"$id": "/schemas/core/vendor-pricing-option.json",
44
"title": "Vendor Pricing Option",
5-
"description": "A pricing option offered by a vendor agent (signals, creative, governance). Combines pricing_option_id with the pricing model fields. Pass pricing_option_id in report_usage for billing verification. For signals agents, get_signals returns an array of options and the buyer selects one at activation. For creative agents, list_creatives returns the single option determined by the account's rate card.",
5+
"description": "A pricing option offered by a vendor agent (signals, creative, governance). Combines pricing_option_id with the pricing model fields. Pass pricing_option_id in report_usage for billing verification. All vendor discovery responses return pricing_options as an array — vendors may offer multiple options (volume tiers, context-specific rates, different models per product line).",
66
"allOf": [
77
{
88
"type": "object",

static/schemas/source/creative/list-creatives-response.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@
216216
},
217217
"pricing_options": {
218218
"type": "array",
219-
"description": "Pricing options for this creative. Present when the request included include_pricing=true and account. For creative agents with predetermined rate cards, this typically contains a single option. The buyer passes the selected pricing_option_id in report_usage.",
219+
"description": "Pricing options for this creative. Present when the request included include_pricing=true and account. Vendors may offer multiple options (volume tiers, context-specific rates, different models per product line). The buyer passes the selected pricing_option_id in report_usage.",
220220
"items": {
221221
"$ref": "/schemas/core/vendor-pricing-option.json"
222222
},

0 commit comments

Comments
 (0)