@adcp/client 4.22.0 → 4.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/dist/lib/index.d.ts +2 -2
  2. package/dist/lib/index.d.ts.map +1 -1
  3. package/dist/lib/index.js.map +1 -1
  4. package/dist/lib/server/index.d.ts +1 -1
  5. package/dist/lib/server/index.d.ts.map +1 -1
  6. package/dist/lib/server/serve.d.ts +32 -4
  7. package/dist/lib/server/serve.d.ts.map +1 -1
  8. package/dist/lib/server/serve.js +12 -4
  9. package/dist/lib/server/serve.js.map +1 -1
  10. package/dist/lib/testing/compliance/comply.d.ts +22 -5
  11. package/dist/lib/testing/compliance/comply.d.ts.map +1 -1
  12. package/dist/lib/testing/compliance/comply.js +242 -276
  13. package/dist/lib/testing/compliance/comply.js.map +1 -1
  14. package/dist/lib/testing/compliance/index.d.ts +1 -0
  15. package/dist/lib/testing/compliance/index.d.ts.map +1 -1
  16. package/dist/lib/testing/compliance/index.js +6 -1
  17. package/dist/lib/testing/compliance/index.js.map +1 -1
  18. package/dist/lib/testing/compliance/platform-storyboards.d.ts +44 -0
  19. package/dist/lib/testing/compliance/platform-storyboards.d.ts.map +1 -0
  20. package/dist/lib/testing/compliance/platform-storyboards.js +230 -0
  21. package/dist/lib/testing/compliance/platform-storyboards.js.map +1 -0
  22. package/dist/lib/testing/compliance/storyboard-tracks.d.ts +2 -9
  23. package/dist/lib/testing/compliance/storyboard-tracks.d.ts.map +1 -1
  24. package/dist/lib/testing/compliance/storyboard-tracks.js +4 -44
  25. package/dist/lib/testing/compliance/storyboard-tracks.js.map +1 -1
  26. package/dist/lib/testing/index.d.ts +1 -1
  27. package/dist/lib/testing/index.d.ts.map +1 -1
  28. package/dist/lib/testing/index.js +6 -1
  29. package/dist/lib/testing/index.js.map +1 -1
  30. package/dist/lib/types/core.generated.d.ts +241 -2
  31. package/dist/lib/types/core.generated.d.ts.map +1 -1
  32. package/dist/lib/types/core.generated.js +1 -1
  33. package/dist/lib/types/schemas.generated.d.ts +3380 -3154
  34. package/dist/lib/types/schemas.generated.d.ts.map +1 -1
  35. package/dist/lib/types/schemas.generated.js +220 -115
  36. package/dist/lib/types/schemas.generated.js.map +1 -1
  37. package/dist/lib/types/tools.generated.d.ts +267 -74
  38. package/dist/lib/types/tools.generated.d.ts.map +1 -1
  39. package/dist/lib/version.d.ts +3 -3
  40. package/dist/lib/version.js +3 -3
  41. package/docs/guides/BUILD-AN-AGENT.md +5 -3
  42. package/docs/llms.txt +48 -32
  43. package/examples/signals-agent.ts +3 -2
  44. package/package.json +1 -1
  45. package/storyboards/audience_sync.yaml +18 -29
  46. package/storyboards/behavioral_analysis.yaml +40 -72
  47. package/storyboards/brand_rights.yaml +172 -75
  48. package/storyboards/campaign_governance_conditions.yaml +187 -0
  49. package/storyboards/campaign_governance_delivery.yaml +231 -0
  50. package/storyboards/campaign_governance_denied.yaml +135 -0
  51. package/storyboards/capability_discovery.yaml +106 -0
  52. package/storyboards/content_standards.yaml +251 -0
  53. package/storyboards/creative_ad_server.yaml +108 -16
  54. package/storyboards/creative_lifecycle.yaml +284 -0
  55. package/storyboards/creative_sales_agent.yaml +2 -6
  56. package/storyboards/creative_template.yaml +1 -5
  57. package/storyboards/error_compliance.yaml +105 -108
  58. package/storyboards/media_buy_catalog_creative.yaml +6 -4
  59. package/storyboards/media_buy_governance_escalation.yaml +9 -5
  60. package/storyboards/media_buy_guaranteed_approval.yaml +9 -7
  61. package/storyboards/media_buy_non_guaranteed.yaml +7 -6
  62. package/storyboards/media_buy_proposal_mode.yaml +9 -8
  63. package/storyboards/media_buy_seller.yaml +153 -165
  64. package/storyboards/media_buy_state_machine.yaml +100 -99
  65. package/storyboards/property_governance.yaml +239 -0
  66. package/storyboards/schema.yaml +2 -2
  67. package/storyboards/schema_validation.yaml +58 -51
  68. package/storyboards/si_session.yaml +99 -317
  69. package/storyboards/signal_marketplace.yaml +6 -5
  70. package/storyboards/signal_owned.yaml +5 -5
  71. package/storyboards/social_platform.yaml +274 -0
  72. package/storyboards/governance_content_standards.yaml +0 -213
  73. package/storyboards/governance_property_lists.yaml +0 -372
@@ -0,0 +1,251 @@
1
+ id: content_standards
2
+ version: "1.0.0"
3
+ title: "Content standards"
4
+ category: content_standards
5
+ summary: "Define creative quality rules, calibrate content against them, and validate that delivered ads met the standards."
6
+ track: governance
7
+ required_tools:
8
+ - list_content_standards
9
+
10
+ narrative: |
11
+ You run a governance agent that manages content standards — rules that define what
12
+ creative content is acceptable for a brand or campaign. Buyers create standards that
13
+ specify quality requirements, safety constraints, and brand compliance rules. Your
14
+ agent stores these standards, calibrates sample content against them, and validates
15
+ that delivered creatives met the requirements.
16
+
17
+ Content standards complement property governance. Property lists control where ads appear;
18
+ content standards control what the ads look like. Together they form a complete brand
19
+ safety framework.
20
+
21
+ This storyboard covers the full content standards lifecycle: defining standards, querying
22
+ them, calibrating content before launch, and validating delivery after the fact.
23
+
24
+ agent:
25
+ interaction_model: governance_agent
26
+ capabilities:
27
+ - content_standards
28
+ - creative_quality
29
+ examples:
30
+ - "Creative quality platforms"
31
+ - "Brand safety services"
32
+ - "Ad verification platforms"
33
+ - "GARM-aligned quality tools"
34
+
35
+ caller:
36
+ role: buyer_agent
37
+ example: "Pinnacle Agency (buyer)"
38
+
39
+ prerequisites:
40
+ description: |
41
+ The caller needs a brand identity and creative quality requirements. The test kit
42
+ provides a sample brand with visual assets for calibration.
43
+ test_kit: "test-kits/acme-outdoor.yaml"
44
+
45
+ phases:
46
+ - id: create_standards
47
+ title: "Define content standards"
48
+ narrative: |
49
+ The buyer creates content standards that define what creative content is acceptable.
50
+ Standards include quality requirements, safety constraints, and brand-specific rules.
51
+
52
+ steps:
53
+ - id: create_content_standards
54
+ title: "Create content standards"
55
+ narrative: |
56
+ The buyer defines a set of content standards. These rules will be used to
57
+ evaluate creatives before and after delivery.
58
+ task: create_content_standards
59
+ schema_ref: "content-standards/create-content-standards-request.json"
60
+ response_schema_ref: "content-standards/create-content-standards-response.json"
61
+ doc_ref: "/governance/content-standards/tasks/create_content_standards"
62
+ comply_scenario: governance_content_standards
63
+ stateful: true
64
+ expected: |
65
+ Return the created content standards:
66
+ - standards_id: platform-assigned identifier
67
+ - Rules registered with severity levels
68
+ - Status: active
69
+
70
+ sample_request:
71
+ brand:
72
+ domain: "acmeoutdoor.com"
73
+ name: "Acme Outdoor creative standards"
74
+ rules:
75
+ - category: "brand_safety"
76
+ description: "No violent or controversial imagery"
77
+ severity: "must"
78
+ - category: "quality"
79
+ description: "Minimum 72 DPI for display assets"
80
+ severity: "should"
81
+ - category: "brand_compliance"
82
+ description: "Brand colors must match palette within 5% tolerance"
83
+ severity: "must"
84
+
85
+ validations:
86
+ - check: response_schema
87
+ description: "Response matches create-content-standards-response.json schema"
88
+
89
+ - id: list_and_get
90
+ title: "Query content standards"
91
+ narrative: |
92
+ The buyer lists all content standards for the account and retrieves a specific
93
+ standard to inspect its rules.
94
+
95
+ steps:
96
+ - id: list_content_standards
97
+ title: "List all content standards"
98
+ narrative: |
99
+ The buyer lists all content standards for the brand. The response includes
100
+ standard metadata without full rule details.
101
+ task: list_content_standards
102
+ schema_ref: "content-standards/list-content-standards-request.json"
103
+ response_schema_ref: "content-standards/list-content-standards-response.json"
104
+ doc_ref: "/governance/content-standards/tasks/list_content_standards"
105
+ comply_scenario: governance_content_standards
106
+ stateful: true
107
+ expected: |
108
+ Return content standard summaries:
109
+ - Array of standards with standards_id, name, rule_count
110
+ - Status of each standard set
111
+
112
+ sample_request:
113
+ brand:
114
+ domain: "acmeoutdoor.com"
115
+
116
+ validations:
117
+ - check: response_schema
118
+ description: "Response matches list-content-standards-response.json schema"
119
+
120
+ - id: get_content_standards
121
+ title: "Get a specific content standard"
122
+ narrative: |
123
+ The buyer retrieves the full details of a specific content standard, including
124
+ all rules and their severity levels.
125
+ task: get_content_standards
126
+ schema_ref: "content-standards/get-content-standards-request.json"
127
+ response_schema_ref: "content-standards/get-content-standards-response.json"
128
+ doc_ref: "/governance/content-standards/tasks/get_content_standards"
129
+ comply_scenario: governance_content_standards
130
+ stateful: true
131
+ expected: |
132
+ Return the full content standard:
133
+ - standards_id, name
134
+ - All rules with categories, descriptions, and severity
135
+
136
+ sample_request:
137
+ standards_id: "cs_acme_creative_001"
138
+
139
+ validations:
140
+ - check: response_schema
141
+ description: "Response matches get-content-standards-response.json schema"
142
+
143
+ - id: update_standards
144
+ title: "Update content standards"
145
+ narrative: |
146
+ The buyer modifies existing content standards — adding rules, adjusting severity,
147
+ or removing obsolete constraints.
148
+
149
+ steps:
150
+ - id: update_content_standards
151
+ title: "Update content standards"
152
+ narrative: |
153
+ The buyer updates an existing content standard with new or modified rules.
154
+ task: update_content_standards
155
+ schema_ref: "content-standards/update-content-standards-request.json"
156
+ response_schema_ref: "content-standards/update-content-standards-response.json"
157
+ doc_ref: "/governance/content-standards/tasks/update_content_standards"
158
+ comply_scenario: governance_content_standards
159
+ stateful: true
160
+ expected: |
161
+ Return the updated content standard:
162
+ - Updated rule set
163
+ - Confirmation of changes applied
164
+
165
+ sample_request:
166
+ standards_id: "cs_acme_creative_001"
167
+ add_rules:
168
+ - category: "accessibility"
169
+ description: "All images must have alt text"
170
+ severity: "should"
171
+
172
+ validations:
173
+ - check: response_schema
174
+ description: "Response matches update-content-standards-response.json schema"
175
+
176
+ - id: calibration
177
+ title: "Calibrate content"
178
+ narrative: |
179
+ Before launching a campaign, the buyer calibrates sample creatives against the
180
+ content standards. This is a pre-flight check — does the creative meet the rules
181
+ before it goes live?
182
+
183
+ steps:
184
+ - id: calibrate_content
185
+ title: "Calibrate content against standards"
186
+ narrative: |
187
+ The buyer submits sample creative content for evaluation against the content
188
+ standards. The governance agent checks each rule and returns a calibration
189
+ report indicating pass/fail per rule.
190
+ task: calibrate_content
191
+ schema_ref: "content-standards/calibrate-content-request.json"
192
+ response_schema_ref: "content-standards/calibrate-content-response.json"
193
+ doc_ref: "/governance/content-standards/tasks/calibrate_content"
194
+ comply_scenario: governance_content_standards
195
+ stateful: true
196
+ expected: |
197
+ Return a calibration report:
198
+ - overall_pass: boolean
199
+ - Per-rule results with pass/fail and evidence
200
+ - Remediation guidance for failed rules
201
+
202
+ sample_request:
203
+ standards_id: "cs_acme_creative_001"
204
+ content:
205
+ creative_id: "display_trail_pro_300x250"
206
+ format: "display_300x250"
207
+ assets:
208
+ - asset_type: "image"
209
+ url: "https://cdn.pinnacle-agency.example/trail-pro-300x250.png"
210
+
211
+ validations:
212
+ - check: response_schema
213
+ description: "Response matches calibrate-content-response.json schema"
214
+
215
+ - id: delivery_validation
216
+ title: "Validate delivered content"
217
+ narrative: |
218
+ After the campaign runs, the buyer validates that the delivered creatives met the
219
+ content standards. The governance agent checks actual delivered content against
220
+ the rules and flags any violations.
221
+
222
+ steps:
223
+ - id: validate_content_delivery
224
+ title: "Validate content delivery compliance"
225
+ narrative: |
226
+ The buyer submits delivery data with creative references. The governance agent
227
+ evaluates the delivered content against the content standards and returns
228
+ a compliance report.
229
+ task: validate_content_delivery
230
+ schema_ref: "content-standards/validate-content-delivery-request.json"
231
+ response_schema_ref: "content-standards/validate-content-delivery-response.json"
232
+ doc_ref: "/governance/content-standards/tasks/validate_content_delivery"
233
+ comply_scenario: governance_content_standards
234
+ stateful: true
235
+ expected: |
236
+ Return validation results:
237
+ - compliant: boolean overall status
238
+ - Per-creative compliance status
239
+ - Violations with rule references and evidence
240
+
241
+ sample_request:
242
+ standards_id: "cs_acme_creative_001"
243
+ delivery:
244
+ - creative_id: "display_trail_pro_300x250"
245
+ impressions: 150000
246
+ - creative_id: "video_30s_trail_pro"
247
+ impressions: 75000
248
+
249
+ validations:
250
+ - check: response_schema
251
+ description: "Response matches validate-content-delivery-response.json schema"
@@ -1,15 +1,12 @@
1
1
  id: creative_ad_server
2
- version: "1.0.0"
2
+ version: "1.1.0"
3
3
  title: "Creative ad server"
4
4
  category: creative_ad_server
5
- summary: "Stateful ad server with pre-loaded creatives. Generates serving tags per media buy."
6
- platform_types:
7
- - creative_ad_server
8
-
5
+ summary: "Stateful ad server with pre-loaded creatives. Generates serving tags per media buy with pricing and billing."
9
6
  track: creative
10
7
  required_tools:
11
8
  - build_creative
12
- - sync_creatives
9
+
13
10
  narrative: |
14
11
  You run a creative ad server — think Innovid, Flashtalking, or CM360. Your clients
15
12
  have already uploaded their creatives through your UI. Buyers connect to browse your
@@ -19,6 +16,10 @@ narrative: |
19
16
  assets to you. Instead, they browse your library, pick creatives, and ask you to generate
20
17
  tags for specific placements. For a campaign with 25 media buys, you'll generate 25 tags.
21
18
 
19
+ If you charge for your services, pricing is part of the flow. The buyer's account
20
+ determines the rate card. list_creatives shows the applicable pricing, build_creative
21
+ returns the cost, and report_usage closes the billing loop after delivery.
22
+
22
23
  This storyboard walks through that flow from the buyer's perspective.
23
24
 
24
25
  agent:
@@ -40,6 +41,9 @@ prerequisites:
40
41
  platform's own UI or API. The buyer does not push assets — they browse and
41
42
  request tags for what's already there.
42
43
 
44
+ For pricing steps, the buyer must have an established account with the ad server.
45
+ The account's rate card determines creative pricing.
46
+
43
47
  phases:
44
48
  - id: browse_library
45
49
  title: "Browse the creative library"
@@ -48,16 +52,19 @@ phases:
48
52
  available for a campaign. They call list_creatives to browse concepts and
49
53
  individual creatives in your library.
50
54
 
51
- For an Innovid-like platform, this returns the advertiser's uploaded video
52
- creatives, display ads, and any other assets managed in the platform.
55
+ When the buyer provides an account and requests pricing, each creative
56
+ includes the applicable rate from the account's rate card.
53
57
 
54
58
  steps:
55
59
  - id: list_creatives
56
- title: "Browse available creatives"
60
+ title: "Browse available creatives with pricing"
57
61
  narrative: |
58
- The buyer asks: "What creatives do you have for this advertiser?" This is
59
- the primary entry point for ad server interactions — the buyer browses your
60
- library to find creatives to use in their media buys.
62
+ The buyer asks: "What creatives do you have for this advertiser, and what
63
+ do they cost?" This is the primary entry point for ad server interactions.
64
+
65
+ With include_pricing=true and an account reference, the response includes
66
+ pricing_options on each creative. Vendors may offer multiple options —
67
+ volume tiers, context-specific rates, or different models per product line.
61
68
  task: list_creatives
62
69
  schema_ref: "creative/list-creatives-request.json"
63
70
  response_schema_ref: "creative/list-creatives-response.json"
@@ -70,6 +77,26 @@ phases:
70
77
  - format_id referencing the creative's format
71
78
  - name and status (approved, pending_review, rejected)
72
79
  - concept_id grouping related creatives across sizes
80
+ - pricing_options array with pricing_option_id, model, rate, currency
81
+ (when include_pricing=true and account provided)
82
+
83
+ sample_request:
84
+ account:
85
+ account_id: "acct_acme_creative"
86
+ include_pricing: true
87
+ filters:
88
+ statuses:
89
+ - "approved"
90
+
91
+ validations:
92
+ - check: response_schema
93
+ description: "Response matches list-creatives-response.json schema"
94
+ - check: field_present
95
+ path: "creatives[0].pricing_options"
96
+ description: "First creative includes pricing_options from account rate card"
97
+ - check: field_present
98
+ path: "creatives[0].pricing_options[0].pricing_option_id"
99
+ description: "Pricing option includes pricing_option_id for billing reference"
73
100
 
74
101
  - id: list_output_formats
75
102
  title: "Check available output formats"
@@ -93,11 +120,13 @@ phases:
93
120
  narrative: |
94
121
  The buyer has selected creatives from your library and now needs serving tags
95
122
  for their media buys. They call build_creative for each media buy/package
96
- combination, passing the creative_id and the context needed to generate the
97
- right tag.
123
+ combination, passing the creative_id, account, and the context needed to
124
+ generate the right tag.
98
125
 
99
- This is the core of the ad server interaction: turning library creatives into
100
- traffickable tags.
126
+ When an account is provided, the response includes pricing fields the
127
+ pricing_option_id that was applied and the vendor_cost for this build.
128
+ For CPM-priced creatives, vendor_cost is zero at build time because cost
129
+ accrues when impressions are served.
101
130
 
102
131
  steps:
103
132
  - id: build_tag
@@ -109,6 +138,9 @@ phases:
109
138
  For Innovid, this produces a VAST tag for a CTV placement. For Flashtalking,
110
139
  this might produce an HTML tag for a display placement. The media_buy_id and
111
140
  package_id provide the trafficking context.
141
+
142
+ The response includes pricing_option_id and vendor_cost so the buyer knows
143
+ which rate applies and what the build cost (zero for CPM).
112
144
  task: build_creative
113
145
  schema_ref: "media-buy/build-creative-request.json"
114
146
  response_schema_ref: "media-buy/build-creative-response.json"
@@ -120,9 +152,14 @@ phases:
120
152
  - An HTML, JavaScript, or VAST asset containing the tag
121
153
  - The format_id matching the target format
122
154
  - Macro placeholders (CLICK_URL, CACHEBUSTER) if applicable
155
+ - pricing_option_id from the account's rate card
156
+ - vendor_cost (0 for CPM — cost accrues at serve time)
157
+ - currency (ISO 4217)
123
158
 
124
159
  sample_request:
125
160
  creative_id: "campaign_hero_video"
161
+ account:
162
+ account_id: "acct_acme_creative"
126
163
  target_format_id:
127
164
  agent_url: "https://your-ad-server.example.com"
128
165
  id: "vast_30s"
@@ -135,6 +172,9 @@ phases:
135
172
  - check: field_present
136
173
  path: "creative_manifest.assets"
137
174
  description: "Output includes a serving tag asset"
175
+ - check: field_present
176
+ path: "pricing_option_id"
177
+ description: "Response includes pricing_option_id"
138
178
 
139
179
  - id: track_delivery
140
180
  title: "Track creative delivery"
@@ -169,3 +209,55 @@ phases:
169
209
  validations:
170
210
  - check: response_schema
171
211
  description: "Response matches get-creative-delivery-response.json schema"
212
+
213
+ - id: report_billing
214
+ title: "Report usage for billing"
215
+ narrative: |
216
+ After delivery, the buyer reports creative usage to the ad server for billing
217
+ reconciliation. Each usage record includes the creative_id and pricing_option_id
218
+ from the build_creative response, along with impressions served and the computed
219
+ vendor_cost.
220
+
221
+ The ad server validates that the pricing_option_id matches its records. If the
222
+ IDs don't match, the record is rejected with a descriptive error.
223
+
224
+ steps:
225
+ - id: report_usage
226
+ title: "Report impressions and cost"
227
+ narrative: |
228
+ The buyer sends a usage report covering a billing period. Each record
229
+ includes the creative_id, pricing_option_id (from the build_creative
230
+ response), impressions served, and the computed vendor_cost. The ad server
231
+ verifies the rate matches its rate card and accepts the record.
232
+ task: report_usage
233
+ schema_ref: "account/report-usage-request.json"
234
+ response_schema_ref: "account/report-usage-response.json"
235
+ doc_ref: "/accounts/tasks/report_usage"
236
+ comply_scenario: creative_flow
237
+ stateful: true
238
+ expected: |
239
+ Response includes:
240
+ - accepted count (number of records successfully stored)
241
+ - errors array (empty if all records pass validation)
242
+
243
+ sample_request:
244
+ idempotency_key: "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
245
+ reporting_period:
246
+ start: "2026-03-01T00:00:00Z"
247
+ end: "2026-03-31T23:59:59Z"
248
+ usage:
249
+ - account:
250
+ account_id: "acct_acme_creative"
251
+ creative_id: "campaign_hero_video"
252
+ pricing_option_id: "po_vast_30s_cpm"
253
+ impressions: 2400000
254
+ vendor_cost: 1200.00
255
+ currency: "USD"
256
+
257
+ validations:
258
+ - check: response_schema
259
+ description: "Response matches report-usage-response.json schema"
260
+ - check: field_value
261
+ path: "accepted"
262
+ value: 1
263
+ description: "One usage record accepted"