Skip to content

feat: unified vendor pricing for creative, governance, and property lists#1937

Open
bokelley wants to merge 15 commits intomainfrom
bokelley/signals-corollaries
Open

feat: unified vendor pricing for creative, governance, and property lists#1937
bokelley wants to merge 15 commits intomainfrom
bokelley/signals-corollaries

Conversation

@bokelley
Copy link
Copy Markdown
Contributor

@bokelley bokelley commented Apr 6, 2026

Summary

  • Add pricing_options[] to creative agents (list_creatives, build_creative), property lists, and creative governance — consistent with how signals and content standards already handle pricing
  • Introduce shared vendor-pricing-option.json schema (cpm, percent_of_media, flat_fee) used by all vendor types. Deprecate signal-pricing-option.json as alias
  • Fix content standards pricing ref (was using 9-model product pricing, now uses 3-model vendor pricing)
  • Add creative_id and property_list_id to report_usage for billing reconciliation
  • Training agent: report_usage handler, pricing on list_creatives/build_creative, sandbox rate cards, validation
  • Spec, docs, storyboard, and training (S2/S3/C3) updated to match

Breaking: content-standards.json pricing_options changed from pricing-option.json (product-level, 9 models) to vendor-pricing-option.json (vendor-level, 3 models). This is a bug fix — governance vendors should not use publisher auction pricing.

Closes #1200

Test plan

  • Schema validation (7/7 passed)
  • Example validation (29/29 passed)
  • JSON schema blocks in docs (217/217 passed)
  • Composed schema validation (12/12 passed)
  • Server unit tests (1282 passed, including 17 new pricing tests)
  • Storyboard structure tests (23/23 passed)
  • Tool schema drift detection (16/16 passed)
  • TypeScript typecheck clean
  • Pre-commit hooks (unit tests + typecheck)
  • Pre-push hooks (version sync + Mintlify validation + accessibility)
  • CI

🤖 Generated with Claude Code

@bokelley bokelley force-pushed the bokelley/signals-corollaries branch from 23572a7 to bdca1f5 Compare April 6, 2026 07:45
bokelley and others added 5 commits April 6, 2026 12:26
…y list agents

Add pricing_options[] to creative agents, property lists, and creative
governance responses. Unify all vendor pricing under a shared
vendor-pricing-option.json schema (cpm, percent_of_media, flat_fee).

Schema changes:
- New vendor-pricing-option.json and creative-consumption.json schemas
- Deprecate signal-pricing-option.json as alias to vendor-pricing-option
- Add account + include_pricing to list_creatives request
- Add pricing_options[] to list_creatives response creative objects
- Add account to build_creative request
- Add pricing_option_id, vendor_cost, currency, consumption to build_creative response
- Add pricing fields to get_creative_features response
- Add pricing_options[] to property-list.json
- Fix content-standards.json pricing ref (was product pricing, now vendor pricing)
- Add creative_id and property_list_id to report_usage request

Training agent:
- list_creatives returns pricing_options when include_pricing + account provided
- build_creative returns pricing fields when account provided
- New report_usage handler with validation (required fields, non-negative values,
  creative_id/signal_agent_segment_id existence, pricing_option_id matching)
- Sandbox rate card with premium/standard tiers and format-aware CPM
- Session usage record limits (MAX_USAGE_RECORDS_PER_SESSION)

Documentation:
- Creative specification: new Pricing section with flow and models
- Implementation guide: pricing and statefulness section
- Task references: list_creatives and build_creative pricing fields
- report_usage: creative and property list usage examples and fields
- S2 Creative: pricing lab exercise, new assessment dimension (15%)
- S3 Signals: vendor pricing consistency callout
- Buyer track C3: creative pricing key concept

Storyboard:
- creative_ad_server.yaml extended with pricing discovery, build cost,
  and report_usage billing phase

Tests: 17 new tests covering list_creatives pricing, build_creative pricing,
report_usage handler (validation, partial success, signal validation)

Breaking: content-standards.json pricing_options changed from product
pricing (9 models) to vendor pricing (3 models: cpm, percent_of_media,
flat_fee). This is a bug fix — governance vendors should not use
publisher auction pricing models.

Closes #1200

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…tion

Add per_unit to the vendor pricing discriminated union: fixed price per
unit of work (format, image, token, variant, render, evaluation). Covers
transformation agents (per format adapted), AI generation (per image,
per token), and multi-variant rendering (per variant).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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>
@bokelley bokelley force-pushed the bokelley/signals-corollaries branch from ea28c03 to 230061c Compare April 6, 2026 16:27
bokelley and others added 10 commits April 6, 2026 12:38
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Update index.json signal-pricing description to include per_unit model
- Fix spec pricing-by-interaction-model table (add per_unit for transformation/generation)
- Add consumption assertion to build_creative pricing test
- Add tests for negative vendor_cost and negative impressions rejection

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Address implementer doc gaps identified by expert review:

- implementing-creative-agents.mdx: Full pricing walkthrough with JSON
  examples for each step (list_creatives → build_creative → report_usage).
  Both per_unit (transformation) and CPM (ad server) examples. Consumption
  field guidance table per agent type. Clarify vendor selects pricing
  option server-side (buyer does not pass pricing_option_id on request).

- build_creative.mdx: New "Paid build with pricing" section showing
  per_unit response with vendor_cost and consumption, plus CPM response
  with vendor_cost=0. Explicitly connects pricing_option_id to
  list_creatives discovery and report_usage reconciliation.

- index.mdx: New Step 9 in Maya walkthrough covering pricing and billing.
  Mentions rate cards, pricing_options, vendor_cost, report_usage, and
  that different agents price differently (CPM, per-format, per-image).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- list_creatives.mdx: change "selected" to "applied" for pricing_option_id
  since the vendor selects, not the buyer
- implementing-creative-agents.mdx: add bridging sentence before Step 3
  report_usage example explaining it shows CPM reporting (different from
  the per_unit build in Step 2)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- implementing-creative-agents.mdx: add note that transformation agents
  must implement list_creatives for pricing discovery
- buyer.mdx: add Creative agent pricing card to C3 reading list
- governance/creative/index.mdx: add Pricing section for governance agents
  that charge for evaluations (IAS, DoubleVerify use case)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… agents

Transformation and generation agents (Celtra, AI platforms) don't have a
creative library — they take assets in and produce output. Requiring them
to implement list_creatives just for pricing discovery was wrong.

Now list_creative_formats supports pricing_options[] on each format,
with include_pricing and account on the request. This is the natural
pricing surface for stateless agents: the format is the product.

- format.json: add pricing_options field
- list-creative-formats-request.json: add include_pricing + account
- specification.mdx: document both pricing discovery surfaces
- implementing-creative-agents.mdx: rewrite pricing guidance with
  discovery surface table by agent type, fix walkthrough to use
  list_creative_formats for transformation example
- creative-agent-pricing.md: remove "pricing lives on creatives not
  formats" language, document both surfaces

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Distinguish from format-level pricing on list_creative_formats which
is for transformation agents.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- S2 creative module: add exercise 5 (transformation agent pricing via
  list_creative_formats), update assessment dimension to cover both
  surfaces, fix exercise numbering
- Creative overview Step 9: mention both discovery surfaces (list_creatives
  for ad servers, list_creative_formats for transformation agents)
- Implementation guide: add Celtra to the "Both" row in pricing table
- Spec: fix stale pricing-by-interaction-model table (transformation and
  generation now correctly show list_creative_formats)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add rate card or similar pricing features to creative and governance agents

1 participant