@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.
- package/dist/lib/index.d.ts +2 -2
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/server/index.d.ts +1 -1
- package/dist/lib/server/index.d.ts.map +1 -1
- package/dist/lib/server/serve.d.ts +32 -4
- package/dist/lib/server/serve.d.ts.map +1 -1
- package/dist/lib/server/serve.js +12 -4
- package/dist/lib/server/serve.js.map +1 -1
- package/dist/lib/testing/compliance/comply.d.ts +22 -5
- package/dist/lib/testing/compliance/comply.d.ts.map +1 -1
- package/dist/lib/testing/compliance/comply.js +242 -276
- package/dist/lib/testing/compliance/comply.js.map +1 -1
- package/dist/lib/testing/compliance/index.d.ts +1 -0
- package/dist/lib/testing/compliance/index.d.ts.map +1 -1
- package/dist/lib/testing/compliance/index.js +6 -1
- package/dist/lib/testing/compliance/index.js.map +1 -1
- package/dist/lib/testing/compliance/platform-storyboards.d.ts +44 -0
- package/dist/lib/testing/compliance/platform-storyboards.d.ts.map +1 -0
- package/dist/lib/testing/compliance/platform-storyboards.js +230 -0
- package/dist/lib/testing/compliance/platform-storyboards.js.map +1 -0
- package/dist/lib/testing/compliance/storyboard-tracks.d.ts +2 -9
- package/dist/lib/testing/compliance/storyboard-tracks.d.ts.map +1 -1
- package/dist/lib/testing/compliance/storyboard-tracks.js +4 -44
- package/dist/lib/testing/compliance/storyboard-tracks.js.map +1 -1
- package/dist/lib/testing/index.d.ts +1 -1
- package/dist/lib/testing/index.d.ts.map +1 -1
- package/dist/lib/testing/index.js +6 -1
- package/dist/lib/testing/index.js.map +1 -1
- package/dist/lib/types/core.generated.d.ts +241 -2
- package/dist/lib/types/core.generated.d.ts.map +1 -1
- package/dist/lib/types/core.generated.js +1 -1
- package/dist/lib/types/schemas.generated.d.ts +3380 -3154
- package/dist/lib/types/schemas.generated.d.ts.map +1 -1
- package/dist/lib/types/schemas.generated.js +220 -115
- package/dist/lib/types/schemas.generated.js.map +1 -1
- package/dist/lib/types/tools.generated.d.ts +267 -74
- package/dist/lib/types/tools.generated.d.ts.map +1 -1
- package/dist/lib/version.d.ts +3 -3
- package/dist/lib/version.js +3 -3
- package/docs/guides/BUILD-AN-AGENT.md +5 -3
- package/docs/llms.txt +48 -32
- package/examples/signals-agent.ts +3 -2
- package/package.json +1 -1
- package/storyboards/audience_sync.yaml +18 -29
- package/storyboards/behavioral_analysis.yaml +40 -72
- package/storyboards/brand_rights.yaml +172 -75
- package/storyboards/campaign_governance_conditions.yaml +187 -0
- package/storyboards/campaign_governance_delivery.yaml +231 -0
- package/storyboards/campaign_governance_denied.yaml +135 -0
- package/storyboards/capability_discovery.yaml +106 -0
- package/storyboards/content_standards.yaml +251 -0
- package/storyboards/creative_ad_server.yaml +108 -16
- package/storyboards/creative_lifecycle.yaml +284 -0
- package/storyboards/creative_sales_agent.yaml +2 -6
- package/storyboards/creative_template.yaml +1 -5
- package/storyboards/error_compliance.yaml +105 -108
- package/storyboards/media_buy_catalog_creative.yaml +6 -4
- package/storyboards/media_buy_governance_escalation.yaml +9 -5
- package/storyboards/media_buy_guaranteed_approval.yaml +9 -7
- package/storyboards/media_buy_non_guaranteed.yaml +7 -6
- package/storyboards/media_buy_proposal_mode.yaml +9 -8
- package/storyboards/media_buy_seller.yaml +153 -165
- package/storyboards/media_buy_state_machine.yaml +100 -99
- package/storyboards/property_governance.yaml +239 -0
- package/storyboards/schema.yaml +2 -2
- package/storyboards/schema_validation.yaml +58 -51
- package/storyboards/si_session.yaml +99 -317
- package/storyboards/signal_marketplace.yaml +6 -5
- package/storyboards/signal_owned.yaml +5 -5
- package/storyboards/social_platform.yaml +274 -0
- package/storyboards/governance_content_standards.yaml +0 -213
- package/storyboards/governance_property_lists.yaml +0 -372
|
@@ -1,131 +1,228 @@
|
|
|
1
1
|
id: brand_rights
|
|
2
2
|
version: "1.0.0"
|
|
3
|
-
title: "Brand rights
|
|
3
|
+
title: "Brand identity and rights licensing"
|
|
4
4
|
category: brand_rights
|
|
5
|
-
summary: "
|
|
5
|
+
summary: "Brand agent that serves identity assets and licenses rights for AI-generated content."
|
|
6
6
|
track: core
|
|
7
7
|
required_tools:
|
|
8
8
|
- get_brand_identity
|
|
9
9
|
|
|
10
10
|
narrative: |
|
|
11
|
-
You run a brand
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
You run a brand agent — a system that holds brand identity data (logos, colors, fonts,
|
|
12
|
+
tone of voice) and licenses rights for AI-generated content. A buyer agent connects to
|
|
13
|
+
discover your brand identity, browse available rights, acquire licenses, manage them over
|
|
14
|
+
time, and submit generated creatives for brand approval.
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
Brand agents are the bridge between brand owners and generative AI. When a DSP or
|
|
17
|
+
creative platform wants to generate an ad for your brand, they call your brand agent
|
|
18
|
+
to get the identity guidelines, license the right to generate content, and then submit
|
|
19
|
+
the result for approval before it goes live.
|
|
20
20
|
|
|
21
|
-
This storyboard
|
|
22
|
-
|
|
21
|
+
This storyboard covers the full brand rights lifecycle: discovering the brand, browsing
|
|
22
|
+
rights, acquiring a license, managing it, and approving generated content.
|
|
23
23
|
|
|
24
24
|
agent:
|
|
25
|
-
interaction_model:
|
|
25
|
+
interaction_model: brand_rights_holder
|
|
26
26
|
capabilities:
|
|
27
27
|
- brand_identity
|
|
28
|
-
-
|
|
28
|
+
- rights_licensing
|
|
29
29
|
examples:
|
|
30
|
-
- "
|
|
31
|
-
- "
|
|
32
|
-
- "Brand
|
|
30
|
+
- "Rights management platforms"
|
|
31
|
+
- "Talent agencies"
|
|
32
|
+
- "Brand licensing services"
|
|
33
|
+
- "Enterprise brand portals"
|
|
33
34
|
|
|
34
35
|
caller:
|
|
35
36
|
role: buyer_agent
|
|
36
|
-
example: "Agency
|
|
37
|
+
example: "Pinnacle Agency (creative buyer)"
|
|
37
38
|
|
|
38
39
|
prerequisites:
|
|
39
40
|
description: |
|
|
40
|
-
The caller needs
|
|
41
|
-
|
|
41
|
+
The caller needs brand context for identity discovery and campaign parameters for
|
|
42
|
+
rights acquisition. The test kit provides a sample brand with visual identity assets.
|
|
43
|
+
test_kit: "test-kits/acme-outdoor.yaml"
|
|
42
44
|
|
|
43
45
|
phases:
|
|
44
|
-
- id:
|
|
45
|
-
title: "Brand
|
|
46
|
+
- id: identity_discovery
|
|
47
|
+
title: "Brand identity discovery"
|
|
46
48
|
narrative: |
|
|
47
|
-
The
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
The buyer retrieves the brand's public identity — logos, colors, fonts, tone of
|
|
50
|
+
voice, and visual guidelines. This is the foundation for any generative content:
|
|
51
|
+
the buyer needs to know what the brand looks like and sounds like before generating
|
|
52
|
+
anything.
|
|
51
53
|
|
|
52
54
|
steps:
|
|
53
55
|
- id: get_brand_identity
|
|
54
56
|
title: "Retrieve brand identity"
|
|
55
57
|
narrative: |
|
|
56
|
-
The
|
|
57
|
-
|
|
58
|
-
|
|
58
|
+
The buyer calls get_brand_identity to retrieve the brand's visual and verbal
|
|
59
|
+
identity. Public-tier access returns basic assets. Authorized access (after
|
|
60
|
+
account linking) provides high-resolution assets, voice configs, and detailed
|
|
61
|
+
tone guidelines.
|
|
59
62
|
task: get_brand_identity
|
|
63
|
+
schema_ref: "brand/get-brand-identity-request.json"
|
|
64
|
+
response_schema_ref: "brand/get-brand-identity-response.json"
|
|
65
|
+
doc_ref: "/brand-protocol/tasks/get_brand_identity"
|
|
60
66
|
stateful: false
|
|
61
67
|
expected: |
|
|
62
|
-
Return
|
|
63
|
-
-
|
|
64
|
-
-
|
|
65
|
-
-
|
|
66
|
-
-
|
|
68
|
+
Return brand identity data:
|
|
69
|
+
- Logos at multiple resolutions
|
|
70
|
+
- Brand colors (primary, secondary, accent)
|
|
71
|
+
- Typography (fonts, weights, sizes)
|
|
72
|
+
- Tone of voice guidelines
|
|
73
|
+
- Visual style guidelines
|
|
67
74
|
|
|
68
75
|
sample_request:
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
brand_domain: "example.com"
|
|
76
|
+
brand:
|
|
77
|
+
domain: "acmeoutdoor.com"
|
|
72
78
|
|
|
73
79
|
validations:
|
|
74
|
-
- check:
|
|
75
|
-
|
|
76
|
-
description: "Response includes the brand name"
|
|
77
|
-
- check: field_present
|
|
78
|
-
path: "brand_domain"
|
|
79
|
-
description: "Response includes the brand domain"
|
|
80
|
+
- check: response_schema
|
|
81
|
+
description: "Response matches get-brand-identity-response.json schema"
|
|
80
82
|
|
|
83
|
+
- id: rights_search
|
|
84
|
+
title: "Browse available rights"
|
|
85
|
+
narrative: |
|
|
86
|
+
The buyer discovers what rights are available for licensing. Rights define what
|
|
87
|
+
generative content can be created — image generation, video synthesis, voice
|
|
88
|
+
cloning, copy writing — and at what terms.
|
|
89
|
+
|
|
90
|
+
steps:
|
|
81
91
|
- id: get_rights
|
|
82
|
-
title: "
|
|
83
|
-
requires_tool: get_rights
|
|
92
|
+
title: "Discover available rights"
|
|
84
93
|
narrative: |
|
|
85
|
-
The
|
|
86
|
-
|
|
87
|
-
|
|
94
|
+
The buyer calls get_rights to see what content generation rights the brand
|
|
95
|
+
offers. Each right specifies the type of content, pricing, duration, and
|
|
96
|
+
any constraints (impression caps, geo restrictions, etc.).
|
|
88
97
|
task: get_rights
|
|
98
|
+
schema_ref: "brand/get-rights-request.json"
|
|
99
|
+
response_schema_ref: "brand/get-rights-response.json"
|
|
100
|
+
doc_ref: "/brand-protocol/tasks/get_rights"
|
|
89
101
|
stateful: false
|
|
90
102
|
expected: |
|
|
91
|
-
Return
|
|
92
|
-
-
|
|
93
|
-
-
|
|
103
|
+
Return available rights with pricing:
|
|
104
|
+
- Right types (image_generation, video_synthesis, copy_writing, etc.)
|
|
105
|
+
- Pricing options per right
|
|
106
|
+
- Duration and renewal terms
|
|
107
|
+
- Usage constraints (impression caps, geo restrictions)
|
|
94
108
|
|
|
95
109
|
sample_request:
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
brand_domain: "example.com"
|
|
110
|
+
brand:
|
|
111
|
+
domain: "acmeoutdoor.com"
|
|
99
112
|
|
|
100
113
|
validations:
|
|
101
|
-
- check:
|
|
102
|
-
|
|
103
|
-
description: "Response includes a rights array"
|
|
114
|
+
- check: response_schema
|
|
115
|
+
description: "Response matches get-rights-response.json schema"
|
|
104
116
|
|
|
117
|
+
- id: rights_acquisition
|
|
118
|
+
title: "Acquire a rights license"
|
|
119
|
+
narrative: |
|
|
120
|
+
The buyer selects a right and acquires a license. This is the contractual commitment —
|
|
121
|
+
the buyer pays for the right to generate content of a specific type for a defined
|
|
122
|
+
period. The brand agent issues generation credentials.
|
|
123
|
+
|
|
124
|
+
steps:
|
|
105
125
|
- id: acquire_rights
|
|
106
|
-
title: "
|
|
107
|
-
requires_tool: acquire_rights
|
|
126
|
+
title: "Purchase a rights license"
|
|
108
127
|
narrative: |
|
|
109
|
-
The
|
|
110
|
-
|
|
111
|
-
returns
|
|
128
|
+
The buyer acquires a specific right by selecting a pricing option and providing
|
|
129
|
+
campaign context. The brand agent validates the request, processes payment,
|
|
130
|
+
and returns a rights grant with generation credentials.
|
|
112
131
|
task: acquire_rights
|
|
132
|
+
schema_ref: "brand/acquire-rights-request.json"
|
|
133
|
+
response_schema_ref: "brand/acquire-rights-response.json"
|
|
134
|
+
doc_ref: "/brand-protocol/tasks/acquire_rights"
|
|
135
|
+
stateful: true
|
|
136
|
+
expected: |
|
|
137
|
+
Return the acquired rights grant:
|
|
138
|
+
- rights_grant_id: unique identifier
|
|
139
|
+
- status: active
|
|
140
|
+
- Generation credentials
|
|
141
|
+
- Expiration date and usage limits
|
|
142
|
+
- Terms and constraints
|
|
143
|
+
|
|
144
|
+
sample_request:
|
|
145
|
+
brand:
|
|
146
|
+
domain: "acmeoutdoor.com"
|
|
147
|
+
right_type: "image_generation"
|
|
148
|
+
pricing_option_id: "standard_monthly"
|
|
149
|
+
campaign:
|
|
150
|
+
name: "Acme Outdoor Summer 2026"
|
|
151
|
+
start_date: "2026-04-01"
|
|
152
|
+
end_date: "2026-06-30"
|
|
153
|
+
|
|
154
|
+
validations:
|
|
155
|
+
- check: response_schema
|
|
156
|
+
description: "Response matches acquire-rights-response.json schema"
|
|
157
|
+
|
|
158
|
+
- id: rights_management
|
|
159
|
+
title: "Manage rights"
|
|
160
|
+
narrative: |
|
|
161
|
+
The buyer modifies an existing rights grant — extending the end date, adjusting
|
|
162
|
+
impression caps, or pausing generation while keeping the license active.
|
|
163
|
+
|
|
164
|
+
steps:
|
|
165
|
+
- id: update_rights
|
|
166
|
+
title: "Modify an existing rights grant"
|
|
167
|
+
narrative: |
|
|
168
|
+
The buyer updates an active rights grant. Changes may include extending the
|
|
169
|
+
duration, increasing impression caps, or pausing/resuming generation. The
|
|
170
|
+
brand agent re-issues credentials if necessary.
|
|
171
|
+
task: update_rights
|
|
172
|
+
schema_ref: "brand/update-rights-request.json"
|
|
173
|
+
response_schema_ref: "brand/update-rights-response.json"
|
|
174
|
+
doc_ref: "/brand-protocol/tasks/update_rights"
|
|
175
|
+
stateful: true
|
|
176
|
+
expected: |
|
|
177
|
+
Return the updated rights grant:
|
|
178
|
+
- Updated expiration or caps
|
|
179
|
+
- New generation credentials if changed
|
|
180
|
+
- Status confirmation
|
|
181
|
+
|
|
182
|
+
sample_request:
|
|
183
|
+
rights_grant_id: "rg_acme_summer_2026"
|
|
184
|
+
updates:
|
|
185
|
+
end_date: "2026-09-30"
|
|
186
|
+
impression_cap: 5000000
|
|
187
|
+
|
|
188
|
+
validations:
|
|
189
|
+
- check: response_schema
|
|
190
|
+
description: "Response matches update-rights-response.json schema"
|
|
191
|
+
|
|
192
|
+
- id: creative_approval
|
|
193
|
+
title: "Creative approval"
|
|
194
|
+
narrative: |
|
|
195
|
+
After generating content using the licensed rights, the buyer submits the creative
|
|
196
|
+
for brand approval. The brand agent reviews the generated content against brand
|
|
197
|
+
guidelines and either approves, requests changes, or rejects it.
|
|
198
|
+
|
|
199
|
+
steps:
|
|
200
|
+
- id: creative_approval
|
|
201
|
+
title: "Submit generated creative for brand approval"
|
|
202
|
+
narrative: |
|
|
203
|
+
The buyer submits a generated creative for the brand's review. The brand agent
|
|
204
|
+
evaluates it against identity guidelines, tone of voice, and any contractual
|
|
205
|
+
constraints from the rights grant.
|
|
206
|
+
task: creative_approval
|
|
207
|
+
schema_ref: "brand/creative-approval-request.json"
|
|
208
|
+
response_schema_ref: "brand/creative-approval-response.json"
|
|
209
|
+
doc_ref: "/brand-protocol/walkthrough-rights-licensing"
|
|
113
210
|
stateful: true
|
|
114
211
|
expected: |
|
|
115
|
-
Return
|
|
116
|
-
-
|
|
117
|
-
-
|
|
118
|
-
-
|
|
119
|
-
- dry_run: true when the request was a preview
|
|
212
|
+
Return an approval decision:
|
|
213
|
+
- decision: approved, changes_requested, or rejected
|
|
214
|
+
- Feedback on brand compliance
|
|
215
|
+
- Specific issues if changes requested or rejected
|
|
120
216
|
|
|
121
217
|
sample_request:
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
218
|
+
rights_grant_id: "rg_acme_summer_2026"
|
|
219
|
+
creative:
|
|
220
|
+
creative_id: "gen_trail_pro_display"
|
|
221
|
+
format: "display_300x250"
|
|
222
|
+
assets:
|
|
223
|
+
- asset_type: "image"
|
|
224
|
+
url: "https://cdn.pinnacle-agency.example/gen-trail-pro-300x250.png"
|
|
127
225
|
|
|
128
226
|
validations:
|
|
129
|
-
- check:
|
|
130
|
-
|
|
131
|
-
description: "Response includes acquisition status"
|
|
227
|
+
- check: response_schema
|
|
228
|
+
description: "Response matches creative-approval-response.json schema"
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
id: campaign_governance_conditions
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Campaign governance — conditional approval"
|
|
4
|
+
category: campaign_governance_conditions
|
|
5
|
+
summary: "Governance agent approves a media buy with conditions. Buyer re-checks after meeting the conditions."
|
|
6
|
+
track: campaign_governance
|
|
7
|
+
required_tools:
|
|
8
|
+
- sync_plans
|
|
9
|
+
- check_governance
|
|
10
|
+
|
|
11
|
+
narrative: |
|
|
12
|
+
The buyer's governance agent evaluates a media buy that falls within spending authority but
|
|
13
|
+
triggers policy conditions — for example, the buy targets a channel that requires weekly
|
|
14
|
+
reporting, or the creative format requires brand safety review.
|
|
15
|
+
|
|
16
|
+
The governance agent returns approved_with_conditions, attaching conditions the buyer must
|
|
17
|
+
honor during the campaign. The buyer can proceed with the media buy by passing the
|
|
18
|
+
governance context, but the conditions are binding.
|
|
19
|
+
|
|
20
|
+
This storyboard tests the middle path between outright approval and denial: the buy is
|
|
21
|
+
allowed, but with strings attached.
|
|
22
|
+
|
|
23
|
+
agent:
|
|
24
|
+
interaction_model: media_buy_seller
|
|
25
|
+
capabilities:
|
|
26
|
+
- sells_media
|
|
27
|
+
- governance_aware
|
|
28
|
+
examples:
|
|
29
|
+
- "Publisher platform with governance support"
|
|
30
|
+
- "SSP that respects governance checks"
|
|
31
|
+
|
|
32
|
+
caller:
|
|
33
|
+
role: buyer_agent
|
|
34
|
+
example: "Pinnacle Agency (buyer)"
|
|
35
|
+
|
|
36
|
+
prerequisites:
|
|
37
|
+
description: |
|
|
38
|
+
The caller needs a brand identity, operator credentials, and a governance agent URL.
|
|
39
|
+
The governance plan defines policy conditions that trigger on specific buy parameters.
|
|
40
|
+
test_kit: "test-kits/acme-outdoor.yaml"
|
|
41
|
+
|
|
42
|
+
phases:
|
|
43
|
+
- id: plan_registration
|
|
44
|
+
title: "Register governance plan with policy conditions"
|
|
45
|
+
narrative: |
|
|
46
|
+
The buyer registers a governance plan that allows the agent full spending authority
|
|
47
|
+
but attaches policy conditions for specific channels or formats. Buys that trigger
|
|
48
|
+
these policies are approved with conditions rather than denied.
|
|
49
|
+
|
|
50
|
+
steps:
|
|
51
|
+
- id: sync_plans
|
|
52
|
+
title: "Register a governance plan with policy conditions"
|
|
53
|
+
narrative: |
|
|
54
|
+
The buyer's governance agent registers a plan with full spending authority but
|
|
55
|
+
custom policies that require weekly reporting for CTV buys and brand safety
|
|
56
|
+
review for user-generated content placements.
|
|
57
|
+
task: sync_plans
|
|
58
|
+
schema_ref: "governance/sync-plans-request.json"
|
|
59
|
+
response_schema_ref: "governance/sync-plans-response.json"
|
|
60
|
+
doc_ref: "/governance/campaign/tasks/sync_plans"
|
|
61
|
+
comply_scenario: campaign_governance_conditions
|
|
62
|
+
stateful: true
|
|
63
|
+
expected: |
|
|
64
|
+
Acknowledge the governance plan:
|
|
65
|
+
- plan_id: identifier for this governance plan
|
|
66
|
+
- authority_level: agent_full
|
|
67
|
+
- custom_policies: policy conditions registered
|
|
68
|
+
|
|
69
|
+
sample_request:
|
|
70
|
+
plans:
|
|
71
|
+
- plan_name: "Acme Outdoor conditional governance"
|
|
72
|
+
brand:
|
|
73
|
+
domain: "acmeoutdoor.com"
|
|
74
|
+
operator: "pinnacle-agency.com"
|
|
75
|
+
authority_level: "agent_full"
|
|
76
|
+
custom_policies:
|
|
77
|
+
- "CTV buys require weekly delivery reporting"
|
|
78
|
+
- "UGC placements require brand safety review before go-live"
|
|
79
|
+
|
|
80
|
+
validations:
|
|
81
|
+
- check: response_schema
|
|
82
|
+
description: "Response matches sync-plans-response.json schema"
|
|
83
|
+
|
|
84
|
+
- id: governance_check_conditions
|
|
85
|
+
title: "Governance check — approved with conditions"
|
|
86
|
+
narrative: |
|
|
87
|
+
The buyer proposes a media buy that includes CTV inventory. The governance agent
|
|
88
|
+
approves the buy but attaches the weekly reporting condition from the plan. The
|
|
89
|
+
buyer receives a governance context that encodes these conditions.
|
|
90
|
+
|
|
91
|
+
steps:
|
|
92
|
+
- id: check_governance_conditions
|
|
93
|
+
title: "Pre-buy governance check (approved with conditions)"
|
|
94
|
+
narrative: |
|
|
95
|
+
The buyer calls check_governance with a media buy that includes CTV products.
|
|
96
|
+
The governance agent approves the buy but attaches conditions: weekly delivery
|
|
97
|
+
reporting is required for the CTV line items.
|
|
98
|
+
task: check_governance
|
|
99
|
+
schema_ref: "governance/check-governance-request.json"
|
|
100
|
+
response_schema_ref: "governance/check-governance-response.json"
|
|
101
|
+
doc_ref: "/governance/campaign/tasks/check_governance"
|
|
102
|
+
comply_scenario: campaign_governance_conditions
|
|
103
|
+
stateful: true
|
|
104
|
+
expected: |
|
|
105
|
+
Return an approved governance decision with conditions:
|
|
106
|
+
- decision: approved
|
|
107
|
+
- conditions: array of requirements the buyer must honor
|
|
108
|
+
- e.g., "Weekly delivery reporting required for CTV line items"
|
|
109
|
+
- governance_context: token the buyer passes to create_media_buy
|
|
110
|
+
- findings: may include should-severity findings noting the conditions
|
|
111
|
+
|
|
112
|
+
sample_request:
|
|
113
|
+
plan_id: "gov_acme_conditional"
|
|
114
|
+
binding:
|
|
115
|
+
type: "media_buy"
|
|
116
|
+
account:
|
|
117
|
+
brand:
|
|
118
|
+
domain: "acmeoutdoor.com"
|
|
119
|
+
operator: "pinnacle-agency.com"
|
|
120
|
+
total_budget: 40000
|
|
121
|
+
packages:
|
|
122
|
+
- product_id: "sports_ctv_q2"
|
|
123
|
+
budget: 25000
|
|
124
|
+
- product_id: "lifestyle_display_q2"
|
|
125
|
+
budget: 15000
|
|
126
|
+
|
|
127
|
+
validations:
|
|
128
|
+
- check: response_schema
|
|
129
|
+
description: "Response matches check-governance-response.json schema"
|
|
130
|
+
- check: field_present
|
|
131
|
+
path: "decision"
|
|
132
|
+
description: "Response contains a governance decision"
|
|
133
|
+
- check: field_present
|
|
134
|
+
path: "conditions"
|
|
135
|
+
description: "Approval includes conditions"
|
|
136
|
+
- check: field_present
|
|
137
|
+
path: "governance_context"
|
|
138
|
+
description: "Response includes governance context for the media buy"
|
|
139
|
+
|
|
140
|
+
- id: create_buy_with_conditions
|
|
141
|
+
title: "Create media buy with governance conditions"
|
|
142
|
+
narrative: |
|
|
143
|
+
The buyer creates the media buy, passing the governance context from the conditional
|
|
144
|
+
approval. The seller validates the governance approval and confirms the buy. The
|
|
145
|
+
conditions from the governance check are now binding for the campaign duration.
|
|
146
|
+
|
|
147
|
+
steps:
|
|
148
|
+
- id: create_media_buy
|
|
149
|
+
title: "Create a media buy with conditional governance approval"
|
|
150
|
+
narrative: |
|
|
151
|
+
The buyer creates the media buy with the governance_context token from the
|
|
152
|
+
conditional approval. The seller confirms the buy. The buyer is now bound by
|
|
153
|
+
the conditions (weekly reporting for CTV line items).
|
|
154
|
+
task: create_media_buy
|
|
155
|
+
schema_ref: "media-buy/create-media-buy-request.json"
|
|
156
|
+
response_schema_ref: "media-buy/create-media-buy-response.json"
|
|
157
|
+
doc_ref: "/media-buy/task-reference/create_media_buy"
|
|
158
|
+
comply_scenario: campaign_governance_conditions
|
|
159
|
+
stateful: true
|
|
160
|
+
expected: |
|
|
161
|
+
Confirm the media buy with governance approval:
|
|
162
|
+
- media_buy_id: your platform's identifier
|
|
163
|
+
- status: confirmed or active
|
|
164
|
+
- governance_context: echoed back confirming governance was validated
|
|
165
|
+
- packages: confirmed line items
|
|
166
|
+
|
|
167
|
+
sample_request:
|
|
168
|
+
account:
|
|
169
|
+
brand:
|
|
170
|
+
domain: "acmeoutdoor.com"
|
|
171
|
+
operator: "pinnacle-agency.com"
|
|
172
|
+
brand:
|
|
173
|
+
domain: "acmeoutdoor.com"
|
|
174
|
+
governance_context: "gov_ctx_acme_conditional_approved"
|
|
175
|
+
start_time: "2026-04-01T00:00:00Z"
|
|
176
|
+
end_time: "2026-06-30T23:59:59Z"
|
|
177
|
+
packages:
|
|
178
|
+
- product_id: "sports_ctv_q2"
|
|
179
|
+
budget: 25000
|
|
180
|
+
pricing_option_id: "cpm_guaranteed"
|
|
181
|
+
- product_id: "lifestyle_display_q2"
|
|
182
|
+
budget: 15000
|
|
183
|
+
pricing_option_id: "cpm_standard"
|
|
184
|
+
|
|
185
|
+
validations:
|
|
186
|
+
- check: response_schema
|
|
187
|
+
description: "Response matches create-media-buy-response.json schema"
|