@adcp/client 4.22.1 → 4.24.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/README.md +23 -9
- package/bin/adcp.js +83 -18
- package/dist/lib/index.d.ts +3 -5
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +16 -12
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/server/index.d.ts +5 -1
- package/dist/lib/server/index.d.ts.map +1 -1
- package/dist/lib/server/index.js +10 -1
- package/dist/lib/server/index.js.map +1 -1
- package/dist/lib/server/postgres-task-store.d.ts +105 -0
- package/dist/lib/server/postgres-task-store.d.ts.map +1 -0
- package/dist/lib/server/postgres-task-store.js +267 -0
- package/dist/lib/server/postgres-task-store.js.map +1 -0
- package/dist/lib/server/responses.d.ts +1 -0
- package/dist/lib/server/responses.d.ts.map +1 -1
- package/dist/lib/server/responses.js +1 -0
- package/dist/lib/server/responses.js.map +1 -1
- package/dist/lib/server/test-controller.d.ts +88 -0
- package/dist/lib/server/test-controller.d.ts.map +1 -0
- package/dist/lib/server/test-controller.js +227 -0
- package/dist/lib/server/test-controller.js.map +1 -0
- package/dist/lib/testing/agent-tester.d.ts +1 -1
- package/dist/lib/testing/agent-tester.d.ts.map +1 -1
- package/dist/lib/testing/agent-tester.js +13 -1
- package/dist/lib/testing/agent-tester.js.map +1 -1
- package/dist/lib/testing/compliance/comply.d.ts +24 -5
- package/dist/lib/testing/compliance/comply.d.ts.map +1 -1
- package/dist/lib/testing/compliance/comply.js +318 -277
- package/dist/lib/testing/compliance/comply.js.map +1 -1
- package/dist/lib/testing/compliance/index.d.ts +2 -1
- 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 +232 -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 +15 -46
- package/dist/lib/testing/compliance/storyboard-tracks.js.map +1 -1
- package/dist/lib/testing/compliance/types.d.ts +22 -1
- package/dist/lib/testing/compliance/types.d.ts.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/testing/orchestrator.d.ts.map +1 -1
- package/dist/lib/testing/orchestrator.js +5 -1
- package/dist/lib/testing/orchestrator.js.map +1 -1
- package/dist/lib/testing/scenarios/brand-rights.d.ts +19 -1
- package/dist/lib/testing/scenarios/brand-rights.d.ts.map +1 -1
- package/dist/lib/testing/scenarios/brand-rights.js +138 -1
- package/dist/lib/testing/scenarios/brand-rights.js.map +1 -1
- package/dist/lib/testing/scenarios/deterministic.js +7 -7
- package/dist/lib/testing/scenarios/deterministic.js.map +1 -1
- package/dist/lib/testing/scenarios/index.d.ts +1 -1
- package/dist/lib/testing/scenarios/index.d.ts.map +1 -1
- package/dist/lib/testing/scenarios/index.js +4 -2
- package/dist/lib/testing/scenarios/index.js.map +1 -1
- package/dist/lib/testing/scenarios/media-buy.js +4 -4
- package/dist/lib/testing/scenarios/media-buy.js.map +1 -1
- package/dist/lib/testing/storyboard/loader.d.ts +1 -0
- package/dist/lib/testing/storyboard/loader.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/loader.js +14 -0
- package/dist/lib/testing/storyboard/loader.js.map +1 -1
- package/dist/lib/testing/storyboard/request-builder.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/request-builder.js +88 -11
- package/dist/lib/testing/storyboard/request-builder.js.map +1 -1
- package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/runner.js +83 -5
- package/dist/lib/testing/storyboard/runner.js.map +1 -1
- package/dist/lib/testing/storyboard/task-map.d.ts +2 -0
- package/dist/lib/testing/storyboard/task-map.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/task-map.js +23 -9
- package/dist/lib/testing/storyboard/task-map.js.map +1 -1
- package/dist/lib/testing/storyboard/types.d.ts +6 -2
- package/dist/lib/testing/storyboard/types.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/validations.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/validations.js +21 -4
- package/dist/lib/testing/storyboard/validations.js.map +1 -1
- package/dist/lib/testing/types.d.ts +1 -1
- package/dist/lib/testing/types.d.ts.map +1 -1
- package/dist/lib/types/core.generated.d.ts +242 -3
- 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 +3697 -3468
- package/dist/lib/types/schemas.generated.d.ts.map +1 -1
- package/dist/lib/types/schemas.generated.js +226 -118
- package/dist/lib/types/schemas.generated.js.map +1 -1
- package/dist/lib/types/tools.generated.d.ts +281 -79
- package/dist/lib/types/tools.generated.d.ts.map +1 -1
- package/dist/lib/utils/capabilities.d.ts +2 -2
- package/dist/lib/utils/capabilities.d.ts.map +1 -1
- package/dist/lib/utils/capabilities.js +9 -3
- package/dist/lib/utils/capabilities.js.map +1 -1
- package/dist/lib/utils/response-schemas.d.ts.map +1 -1
- package/dist/lib/utils/response-schemas.js +9 -0
- package/dist/lib/utils/response-schemas.js.map +1 -1
- package/dist/lib/version.d.ts +3 -3
- package/dist/lib/version.js +3 -3
- package/docs/llms.txt +56 -32
- package/package.json +8 -2
- package/skills/adcp/SKILL.md +118 -33
- package/skills/build-creative-agent/SKILL.md +221 -0
- package/skills/build-generative-seller-agent/SKILL.md +288 -0
- package/skills/build-retail-media-agent/SKILL.md +237 -0
- package/skills/build-seller-agent/SKILL.md +313 -0
- package/skills/build-signals-agent/SKILL.md +203 -0
- 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 +136 -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_generative.yaml +317 -0
- package/storyboards/creative_lifecycle.yaml +284 -0
- package/storyboards/creative_sales_agent.yaml +2 -6
- package/storyboards/creative_template.yaml +3 -6
- package/storyboards/deterministic_testing.yaml +271 -245
- package/storyboards/error_compliance.yaml +105 -108
- package/storyboards/media_buy_catalog_creative.yaml +8 -5
- package/storyboards/media_buy_generative_seller.yaml +581 -0
- package/storyboards/media_buy_governance_escalation.yaml +10 -6
- package/storyboards/media_buy_guaranteed_approval.yaml +21 -19
- package/storyboards/media_buy_non_guaranteed.yaml +9 -8
- package/storyboards/media_buy_proposal_mode.yaml +12 -11
- package/storyboards/media_buy_seller.yaml +161 -173
- package/storyboards/media_buy_state_machine.yaml +102 -101
- package/storyboards/property_governance.yaml +239 -0
- package/storyboards/schema.yaml +3 -2
- package/storyboards/schema_validation.yaml +58 -51
- package/storyboards/si_session.yaml +99 -317
- package/storyboards/signal_marketplace.yaml +9 -5
- package/storyboards/signal_owned.yaml +6 -5
- package/storyboards/social_platform.yaml +274 -0
- package/storyboards/test-kits/acme-outdoor.yaml +118 -0
- package/storyboards/test-kits/nova-motors.yaml +134 -0
- package/storyboards/governance_content_standards.yaml +0 -213
- package/storyboards/governance_property_lists.yaml +0 -372
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
id: social_platform
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Social platform"
|
|
4
|
+
category: social_platform
|
|
5
|
+
summary: "Social media platform that accepts audience segments, native creatives, and conversion events from buyer agents."
|
|
6
|
+
track: audiences
|
|
7
|
+
required_tools:
|
|
8
|
+
- sync_audiences
|
|
9
|
+
|
|
10
|
+
narrative: |
|
|
11
|
+
You run a social media platform — Snap, Meta, TikTok, Pinterest, or any walled garden that
|
|
12
|
+
sells advertising through audience-based targeting and native creative formats. A buyer agent
|
|
13
|
+
connects to set up an account, push audience segments, sync native creatives, track conversion
|
|
14
|
+
events, and monitor spend.
|
|
15
|
+
|
|
16
|
+
Unlike open-web media buys, social platforms require the buyer to push assets into the
|
|
17
|
+
platform's environment. Audiences are activated via sync_audiences, creatives are pushed via
|
|
18
|
+
sync_creatives in platform-native formats, and conversion events flow back via log_event.
|
|
19
|
+
|
|
20
|
+
This storyboard covers the social platform integration from the buyer's perspective:
|
|
21
|
+
account setup, audience activation, native creative push, event tracking, and financial
|
|
22
|
+
monitoring.
|
|
23
|
+
|
|
24
|
+
agent:
|
|
25
|
+
interaction_model: media_buy_seller
|
|
26
|
+
capabilities:
|
|
27
|
+
- sells_media
|
|
28
|
+
- accepts_briefs
|
|
29
|
+
- supports_non_guaranteed
|
|
30
|
+
examples:
|
|
31
|
+
- "Snap"
|
|
32
|
+
- "Meta"
|
|
33
|
+
- "TikTok"
|
|
34
|
+
- "Pinterest"
|
|
35
|
+
|
|
36
|
+
caller:
|
|
37
|
+
role: buyer_agent
|
|
38
|
+
example: "Scope3 (DSP)"
|
|
39
|
+
|
|
40
|
+
prerequisites:
|
|
41
|
+
description: |
|
|
42
|
+
The caller needs a brand identity, operator credentials, audience segment definitions,
|
|
43
|
+
and native creative assets. The test kit provides a sample brand with creative assets
|
|
44
|
+
suitable for social formats.
|
|
45
|
+
test_kit: "test-kits/acme-outdoor.yaml"
|
|
46
|
+
|
|
47
|
+
phases:
|
|
48
|
+
- id: account_setup
|
|
49
|
+
title: "Account setup"
|
|
50
|
+
narrative: |
|
|
51
|
+
The buyer establishes an account with the social platform and verifies its status.
|
|
52
|
+
Social platforms often require advertiser verification before accepting ad spend.
|
|
53
|
+
|
|
54
|
+
steps:
|
|
55
|
+
- id: sync_accounts
|
|
56
|
+
title: "Register advertiser account"
|
|
57
|
+
narrative: |
|
|
58
|
+
The buyer registers their brand and operator with the social platform. The platform
|
|
59
|
+
provisions an advertiser account and returns its status. Social platforms may require
|
|
60
|
+
identity verification before the account goes active.
|
|
61
|
+
task: sync_accounts
|
|
62
|
+
schema_ref: "account/sync-accounts-request.json"
|
|
63
|
+
response_schema_ref: "account/sync-accounts-response.json"
|
|
64
|
+
doc_ref: "/accounts/tasks/sync_accounts"
|
|
65
|
+
stateful: true
|
|
66
|
+
expected: |
|
|
67
|
+
Return the advertiser account with:
|
|
68
|
+
- account_id: platform's identifier
|
|
69
|
+
- status: active or pending_approval (if verification required)
|
|
70
|
+
- account_scope: how the platform scopes this relationship
|
|
71
|
+
|
|
72
|
+
sample_request:
|
|
73
|
+
accounts:
|
|
74
|
+
- brand:
|
|
75
|
+
domain: "acmeoutdoor.com"
|
|
76
|
+
operator: "pinnacle-agency.com"
|
|
77
|
+
billing: "operator"
|
|
78
|
+
|
|
79
|
+
validations:
|
|
80
|
+
- check: response_schema
|
|
81
|
+
description: "Response matches sync-accounts-response.json schema"
|
|
82
|
+
- check: field_present
|
|
83
|
+
path: "accounts[0].account_id"
|
|
84
|
+
description: "Account has a platform-assigned ID"
|
|
85
|
+
|
|
86
|
+
- id: list_accounts
|
|
87
|
+
title: "Verify account status"
|
|
88
|
+
narrative: |
|
|
89
|
+
The buyer checks which accounts exist on the platform and their current status.
|
|
90
|
+
This confirms the account is active and shows any pending setup requirements.
|
|
91
|
+
task: list_accounts
|
|
92
|
+
schema_ref: "account/list-accounts-request.json"
|
|
93
|
+
response_schema_ref: "account/list-accounts-response.json"
|
|
94
|
+
doc_ref: "/accounts/tasks/list_accounts"
|
|
95
|
+
stateful: true
|
|
96
|
+
expected: |
|
|
97
|
+
Return accounts matching the query:
|
|
98
|
+
- accounts array with status, account_id, brand, operator
|
|
99
|
+
- Active accounts ready for ad operations
|
|
100
|
+
- Pending accounts with setup URLs if verification needed
|
|
101
|
+
|
|
102
|
+
sample_request:
|
|
103
|
+
brand:
|
|
104
|
+
domain: "acmeoutdoor.com"
|
|
105
|
+
|
|
106
|
+
validations:
|
|
107
|
+
- check: response_schema
|
|
108
|
+
description: "Response matches list-accounts-response.json schema"
|
|
109
|
+
- check: field_present
|
|
110
|
+
path: "accounts"
|
|
111
|
+
description: "Response contains accounts array"
|
|
112
|
+
|
|
113
|
+
- id: audience_sync
|
|
114
|
+
title: "Audience activation"
|
|
115
|
+
narrative: |
|
|
116
|
+
The buyer pushes audience segments to the platform. Social platforms use these segments
|
|
117
|
+
for targeting — the buyer defines who to reach, and the platform matches against its
|
|
118
|
+
user base.
|
|
119
|
+
|
|
120
|
+
steps:
|
|
121
|
+
- id: sync_audiences
|
|
122
|
+
title: "Push audience segments"
|
|
123
|
+
narrative: |
|
|
124
|
+
The buyer syncs audience segment definitions to the platform. Each segment includes
|
|
125
|
+
targeting criteria that the platform evaluates against its user graph. The platform
|
|
126
|
+
returns match rates and segment status.
|
|
127
|
+
task: sync_audiences
|
|
128
|
+
schema_ref: "media-buy/sync-audiences-request.json"
|
|
129
|
+
response_schema_ref: "media-buy/sync-audiences-response.json"
|
|
130
|
+
doc_ref: "/media-buy/task-reference/sync_audiences"
|
|
131
|
+
comply_scenario: sync_audiences
|
|
132
|
+
stateful: true
|
|
133
|
+
expected: |
|
|
134
|
+
Accept and process audience segments:
|
|
135
|
+
- Per-segment status: active, processing, or rejected
|
|
136
|
+
- Match rate estimates where available
|
|
137
|
+
- Platform-assigned segment IDs
|
|
138
|
+
|
|
139
|
+
sample_request:
|
|
140
|
+
account:
|
|
141
|
+
brand:
|
|
142
|
+
domain: "acmeoutdoor.com"
|
|
143
|
+
operator: "pinnacle-agency.com"
|
|
144
|
+
audiences:
|
|
145
|
+
- audience_id: "outdoor_enthusiasts_25_54"
|
|
146
|
+
name: "Outdoor enthusiasts 25-54"
|
|
147
|
+
description: "Adults 25-54 interested in hiking, camping, and outdoor gear"
|
|
148
|
+
|
|
149
|
+
validations:
|
|
150
|
+
- check: response_schema
|
|
151
|
+
description: "Response matches sync-audiences-response.json schema"
|
|
152
|
+
|
|
153
|
+
- id: creative_push
|
|
154
|
+
title: "Native creative sync"
|
|
155
|
+
narrative: |
|
|
156
|
+
The buyer pushes native creative assets to the platform. Social platforms render ads
|
|
157
|
+
in their native format — the buyer provides assets (images, headlines, descriptions)
|
|
158
|
+
and the platform assembles them into the native ad unit.
|
|
159
|
+
|
|
160
|
+
steps:
|
|
161
|
+
- id: sync_creatives
|
|
162
|
+
title: "Push native creative assets"
|
|
163
|
+
narrative: |
|
|
164
|
+
The buyer syncs creative assets for native ad formats. The platform validates
|
|
165
|
+
each creative against its format requirements and returns per-creative status.
|
|
166
|
+
task: sync_creatives
|
|
167
|
+
schema_ref: "creative/sync-creatives-request.json"
|
|
168
|
+
response_schema_ref: "creative/sync-creatives-response.json"
|
|
169
|
+
doc_ref: "/creative/task-reference/sync_creatives"
|
|
170
|
+
comply_scenario: creative_sync
|
|
171
|
+
stateful: true
|
|
172
|
+
expected: |
|
|
173
|
+
Accept and validate native creatives:
|
|
174
|
+
- Per-creative action: created or updated
|
|
175
|
+
- Per-creative status: accepted, pending_review, or rejected
|
|
176
|
+
- Validation errors for rejected creatives
|
|
177
|
+
|
|
178
|
+
sample_request:
|
|
179
|
+
account:
|
|
180
|
+
brand:
|
|
181
|
+
domain: "acmeoutdoor.com"
|
|
182
|
+
operator: "pinnacle-agency.com"
|
|
183
|
+
creatives:
|
|
184
|
+
- creative_id: "native_trail_pro"
|
|
185
|
+
name: "Trail Pro 3000 - Native"
|
|
186
|
+
format_id:
|
|
187
|
+
agent_url: "https://social-platform.example.com"
|
|
188
|
+
id: "native_feed"
|
|
189
|
+
assets:
|
|
190
|
+
- asset_id: "image"
|
|
191
|
+
asset_type: "image"
|
|
192
|
+
url: "https://cdn.pinnacle-agency.example/trail-pro-native.png"
|
|
193
|
+
mime_type: "image/png"
|
|
194
|
+
- asset_id: "headline"
|
|
195
|
+
asset_type: "text"
|
|
196
|
+
content: "Trail Pro 3000 — Built for the Summit"
|
|
197
|
+
|
|
198
|
+
validations:
|
|
199
|
+
- check: response_schema
|
|
200
|
+
description: "Response matches sync-creatives-response.json schema"
|
|
201
|
+
|
|
202
|
+
- id: event_logging
|
|
203
|
+
title: "Conversion event tracking"
|
|
204
|
+
narrative: |
|
|
205
|
+
The buyer sends conversion events back to the platform for measurement and optimization.
|
|
206
|
+
Events include purchases, signups, and other post-click actions that the platform uses
|
|
207
|
+
to optimize delivery and report on campaign performance.
|
|
208
|
+
|
|
209
|
+
steps:
|
|
210
|
+
- id: log_event
|
|
211
|
+
title: "Send conversion events"
|
|
212
|
+
narrative: |
|
|
213
|
+
The buyer logs conversion events that occurred after ad exposure. The platform
|
|
214
|
+
records these events for attribution, reporting, and delivery optimization.
|
|
215
|
+
task: log_event
|
|
216
|
+
schema_ref: "media-buy/log-event-request.json"
|
|
217
|
+
response_schema_ref: "media-buy/log-event-response.json"
|
|
218
|
+
doc_ref: "/media-buy/task-reference/log_event"
|
|
219
|
+
stateful: true
|
|
220
|
+
expected: |
|
|
221
|
+
Acknowledge the events:
|
|
222
|
+
- Per-event status: accepted or rejected
|
|
223
|
+
- Event IDs for deduplication
|
|
224
|
+
- Attribution window validation
|
|
225
|
+
|
|
226
|
+
sample_request:
|
|
227
|
+
account:
|
|
228
|
+
brand:
|
|
229
|
+
domain: "acmeoutdoor.com"
|
|
230
|
+
operator: "pinnacle-agency.com"
|
|
231
|
+
events:
|
|
232
|
+
- event_type: "purchase"
|
|
233
|
+
event_id: "evt_trail_pro_001"
|
|
234
|
+
timestamp: "2026-04-05T14:30:00Z"
|
|
235
|
+
value: 149.99
|
|
236
|
+
currency: "USD"
|
|
237
|
+
|
|
238
|
+
validations:
|
|
239
|
+
- check: response_schema
|
|
240
|
+
description: "Response matches log-event-response.json schema"
|
|
241
|
+
|
|
242
|
+
- id: financials
|
|
243
|
+
title: "Account financials"
|
|
244
|
+
narrative: |
|
|
245
|
+
The buyer checks account financials — spending, balance, and payment status. This is
|
|
246
|
+
essential for budget monitoring across multiple social platforms.
|
|
247
|
+
|
|
248
|
+
steps:
|
|
249
|
+
- id: get_account_financials
|
|
250
|
+
title: "Check account spending and balance"
|
|
251
|
+
narrative: |
|
|
252
|
+
The buyer retrieves financial information for the advertiser account. The platform
|
|
253
|
+
returns current spend, remaining balance, and payment status.
|
|
254
|
+
task: get_account_financials
|
|
255
|
+
schema_ref: "account/get-account-financials-request.json"
|
|
256
|
+
response_schema_ref: "account/get-account-financials-response.json"
|
|
257
|
+
doc_ref: "/accounts/tasks/get_account_financials"
|
|
258
|
+
stateful: true
|
|
259
|
+
expected: |
|
|
260
|
+
Return account financial data:
|
|
261
|
+
- Current spend to date
|
|
262
|
+
- Remaining balance or credit
|
|
263
|
+
- Payment status and terms
|
|
264
|
+
- Budget utilization metrics
|
|
265
|
+
|
|
266
|
+
sample_request:
|
|
267
|
+
account:
|
|
268
|
+
brand:
|
|
269
|
+
domain: "acmeoutdoor.com"
|
|
270
|
+
operator: "pinnacle-agency.com"
|
|
271
|
+
|
|
272
|
+
validations:
|
|
273
|
+
- check: response_schema
|
|
274
|
+
description: "Response matches get-account-financials-response.json schema"
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# Acme Outdoor — Sample Advertiser Test Kit
|
|
2
|
+
#
|
|
3
|
+
# Provides the "ingredients" needed to test creative agent storyboards:
|
|
4
|
+
# a brand identity, sample assets at common dimensions, and sample text.
|
|
5
|
+
#
|
|
6
|
+
# Acme Outdoor is a fictional outdoor gear brand from the AdCP character bible.
|
|
7
|
+
# Use this test kit with any storyboard that requires an advertiser brand.
|
|
8
|
+
|
|
9
|
+
id: acme_outdoor
|
|
10
|
+
name: "Acme Outdoor"
|
|
11
|
+
description: "Fictional outdoor gear brand for storyboard testing"
|
|
12
|
+
|
|
13
|
+
brand:
|
|
14
|
+
house:
|
|
15
|
+
domain: "acme-outdoor.example.com"
|
|
16
|
+
name: "Acme Outdoor"
|
|
17
|
+
brand_id: "acme_outdoor"
|
|
18
|
+
names:
|
|
19
|
+
- en: "Acme Outdoor"
|
|
20
|
+
description: "Premium outdoor gear for every adventure. From trail to summit, we make gear that performs."
|
|
21
|
+
industry: "retail"
|
|
22
|
+
keller_type: "master"
|
|
23
|
+
logos:
|
|
24
|
+
- url: "https://test-assets.adcontextprotocol.org/acme-outdoor/logo-primary.png"
|
|
25
|
+
orientation: "horizontal"
|
|
26
|
+
background: "light-bg"
|
|
27
|
+
variant: "primary"
|
|
28
|
+
width: 400
|
|
29
|
+
height: 100
|
|
30
|
+
- url: "https://test-assets.adcontextprotocol.org/acme-outdoor/logo-icon.png"
|
|
31
|
+
orientation: "square"
|
|
32
|
+
background: "transparent-bg"
|
|
33
|
+
variant: "icon"
|
|
34
|
+
width: 200
|
|
35
|
+
height: 200
|
|
36
|
+
colors:
|
|
37
|
+
primary: "#1B5E20"
|
|
38
|
+
secondary: "#FF6F00"
|
|
39
|
+
accent: "#FDD835"
|
|
40
|
+
background: "#FAFAFA"
|
|
41
|
+
text: "#212121"
|
|
42
|
+
fonts:
|
|
43
|
+
heading:
|
|
44
|
+
family: "Montserrat"
|
|
45
|
+
weight: 700
|
|
46
|
+
url: "https://fonts.googleapis.com/css2?family=Montserrat:wght@700"
|
|
47
|
+
body:
|
|
48
|
+
family: "Open Sans"
|
|
49
|
+
weight: 400
|
|
50
|
+
url: "https://fonts.googleapis.com/css2?family=Open+Sans"
|
|
51
|
+
tone:
|
|
52
|
+
voice: "Confident and adventurous, but never pretentious. We talk to people who do things, not people who buy things."
|
|
53
|
+
attributes:
|
|
54
|
+
- "active"
|
|
55
|
+
- "direct"
|
|
56
|
+
- "warm"
|
|
57
|
+
dos:
|
|
58
|
+
- "Use action verbs"
|
|
59
|
+
- "Reference real outdoor activities"
|
|
60
|
+
- "Keep it short"
|
|
61
|
+
donts:
|
|
62
|
+
- "Use superlatives without evidence"
|
|
63
|
+
- "Talk down to the reader"
|
|
64
|
+
- "Use corporate jargon"
|
|
65
|
+
|
|
66
|
+
# Sample assets at common ad dimensions.
|
|
67
|
+
# These are placeholder URLs — in production, these would point to actual hosted test images.
|
|
68
|
+
assets:
|
|
69
|
+
images:
|
|
70
|
+
- id: "hero_300x250"
|
|
71
|
+
url: "https://test-assets.adcontextprotocol.org/acme-outdoor/hero-300x250.jpg"
|
|
72
|
+
width: 300
|
|
73
|
+
height: 250
|
|
74
|
+
mime_type: "image/jpeg"
|
|
75
|
+
description: "Medium rectangle hero — hiker on mountain trail"
|
|
76
|
+
|
|
77
|
+
- id: "hero_728x90"
|
|
78
|
+
url: "https://test-assets.adcontextprotocol.org/acme-outdoor/hero-728x90.jpg"
|
|
79
|
+
width: 728
|
|
80
|
+
height: 90
|
|
81
|
+
mime_type: "image/jpeg"
|
|
82
|
+
description: "Leaderboard hero — panoramic mountain vista"
|
|
83
|
+
|
|
84
|
+
- id: "hero_320x50"
|
|
85
|
+
url: "https://test-assets.adcontextprotocol.org/acme-outdoor/hero-320x50.jpg"
|
|
86
|
+
width: 320
|
|
87
|
+
height: 50
|
|
88
|
+
mime_type: "image/jpeg"
|
|
89
|
+
description: "Mobile banner hero — trail gear close-up"
|
|
90
|
+
|
|
91
|
+
- id: "hero_160x600"
|
|
92
|
+
url: "https://test-assets.adcontextprotocol.org/acme-outdoor/hero-160x600.jpg"
|
|
93
|
+
width: 160
|
|
94
|
+
height: 600
|
|
95
|
+
mime_type: "image/jpeg"
|
|
96
|
+
description: "Wide skyscraper hero — vertical trail scene"
|
|
97
|
+
|
|
98
|
+
- id: "hero_master"
|
|
99
|
+
url: "https://test-assets.adcontextprotocol.org/acme-outdoor/hero-master.jpg"
|
|
100
|
+
width: 1200
|
|
101
|
+
height: 628
|
|
102
|
+
mime_type: "image/jpeg"
|
|
103
|
+
description: "Master hero image — high-res source for any size"
|
|
104
|
+
|
|
105
|
+
text:
|
|
106
|
+
headlines:
|
|
107
|
+
- "Summer Sale — 40% Off All Gear"
|
|
108
|
+
- "Built for the Trail"
|
|
109
|
+
- "Adventure Starts Here"
|
|
110
|
+
descriptions:
|
|
111
|
+
- "Premium outdoor gear tested on the world's toughest trails. Shop the summer collection."
|
|
112
|
+
- "From daypacks to expedition tents, gear that performs when it matters."
|
|
113
|
+
cta:
|
|
114
|
+
- "Shop Now"
|
|
115
|
+
- "Explore the Collection"
|
|
116
|
+
- "Find Your Gear"
|
|
117
|
+
|
|
118
|
+
click_url: "https://acme-outdoor.example.com/summer-sale"
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
id: nova_motors
|
|
2
|
+
name: "Nova Motors"
|
|
3
|
+
description: |
|
|
4
|
+
Signal-focused test kit for the Nova Motors Volta EV launch campaign.
|
|
5
|
+
Provides sample signal definitions, pricing options, and destination
|
|
6
|
+
configurations for testing signal agent storyboards.
|
|
7
|
+
|
|
8
|
+
campaign:
|
|
9
|
+
brand: "Nova Motors"
|
|
10
|
+
product: "Volta EV"
|
|
11
|
+
brief: "Reach in-market EV buyers with high purchase propensity, near dealerships, who haven't bought a Nova vehicle before."
|
|
12
|
+
budget: 250000
|
|
13
|
+
currency: "USD"
|
|
14
|
+
markets: ["US"]
|
|
15
|
+
|
|
16
|
+
signals:
|
|
17
|
+
marketplace:
|
|
18
|
+
- signal_agent_segment_id: "trident_likely_ev_buyers"
|
|
19
|
+
name: "Likely EV Buyers"
|
|
20
|
+
data_provider_domain: "tridentauto.example"
|
|
21
|
+
signal_id: "likely_ev_buyers"
|
|
22
|
+
value_type: "binary"
|
|
23
|
+
signal_type: "marketplace"
|
|
24
|
+
coverage_percentage: 8
|
|
25
|
+
pricing:
|
|
26
|
+
- pricing_option_id: "po_trident_ev_cpm"
|
|
27
|
+
model: "cpm"
|
|
28
|
+
cpm: 3.50
|
|
29
|
+
currency: "USD"
|
|
30
|
+
|
|
31
|
+
- signal_agent_segment_id: "trident_purchase_propensity"
|
|
32
|
+
name: "Purchase Propensity"
|
|
33
|
+
data_provider_domain: "tridentauto.example"
|
|
34
|
+
signal_id: "purchase_propensity"
|
|
35
|
+
value_type: "numeric"
|
|
36
|
+
signal_type: "marketplace"
|
|
37
|
+
range:
|
|
38
|
+
min: 0
|
|
39
|
+
max: 1
|
|
40
|
+
coverage_percentage: 55
|
|
41
|
+
pricing:
|
|
42
|
+
- pricing_option_id: "po_trident_propensity_cpm"
|
|
43
|
+
model: "cpm"
|
|
44
|
+
cpm: 4.00
|
|
45
|
+
currency: "USD"
|
|
46
|
+
|
|
47
|
+
- signal_agent_segment_id: "meridian_competitor_visitors"
|
|
48
|
+
name: "Competitor Visitors"
|
|
49
|
+
data_provider_domain: "meridiangeo.example"
|
|
50
|
+
signal_id: "competitor_visitors"
|
|
51
|
+
value_type: "binary"
|
|
52
|
+
signal_type: "marketplace"
|
|
53
|
+
coverage_percentage: 6
|
|
54
|
+
pricing:
|
|
55
|
+
- pricing_option_id: "po_meridian_visitors_cpm"
|
|
56
|
+
model: "cpm"
|
|
57
|
+
cpm: 5.00
|
|
58
|
+
currency: "USD"
|
|
59
|
+
|
|
60
|
+
- signal_agent_segment_id: "shopgrid_new_to_brand"
|
|
61
|
+
name: "New to Brand"
|
|
62
|
+
data_provider_domain: "shopgrid.example"
|
|
63
|
+
signal_id: "new_to_brand"
|
|
64
|
+
value_type: "binary"
|
|
65
|
+
signal_type: "marketplace"
|
|
66
|
+
coverage_percentage: 25
|
|
67
|
+
pricing:
|
|
68
|
+
- pricing_option_id: "po_shopgrid_retail_cpm"
|
|
69
|
+
model: "cpm"
|
|
70
|
+
cpm: 3.50
|
|
71
|
+
currency: "USD"
|
|
72
|
+
|
|
73
|
+
owned:
|
|
74
|
+
- signal_agent_segment_id: "prism_high_ltv"
|
|
75
|
+
name: "High LTV Customers"
|
|
76
|
+
value_type: "binary"
|
|
77
|
+
signal_type: "owned"
|
|
78
|
+
coverage_percentage: 12
|
|
79
|
+
pricing:
|
|
80
|
+
- pricing_option_id: "po_prism_flat_monthly"
|
|
81
|
+
model: "flat_fee"
|
|
82
|
+
amount: 5000
|
|
83
|
+
period: "monthly"
|
|
84
|
+
currency: "USD"
|
|
85
|
+
|
|
86
|
+
- signal_agent_segment_id: "prism_cart_abandoner"
|
|
87
|
+
name: "Cart Abandoners"
|
|
88
|
+
value_type: "binary"
|
|
89
|
+
signal_type: "owned"
|
|
90
|
+
coverage_percentage: 18
|
|
91
|
+
pricing:
|
|
92
|
+
- pricing_option_id: "po_prism_abandoner_cpm"
|
|
93
|
+
model: "cpm"
|
|
94
|
+
cpm: 8.00
|
|
95
|
+
currency: "USD"
|
|
96
|
+
|
|
97
|
+
- signal_agent_segment_id: "prism_engagement_score"
|
|
98
|
+
name: "Engagement Score"
|
|
99
|
+
value_type: "numeric"
|
|
100
|
+
signal_type: "owned"
|
|
101
|
+
range:
|
|
102
|
+
min: 0
|
|
103
|
+
max: 100
|
|
104
|
+
coverage_percentage: 65
|
|
105
|
+
pricing:
|
|
106
|
+
- pricing_option_id: "po_prism_engagement_cpm"
|
|
107
|
+
model: "cpm"
|
|
108
|
+
cpm: 2.50
|
|
109
|
+
currency: "USD"
|
|
110
|
+
|
|
111
|
+
- signal_agent_segment_id: "prism_churn_risk"
|
|
112
|
+
name: "Churn Risk"
|
|
113
|
+
value_type: "categorical"
|
|
114
|
+
signal_type: "owned"
|
|
115
|
+
categories: ["low_risk", "medium_risk", "high_risk", "churned"]
|
|
116
|
+
coverage_percentage: 70
|
|
117
|
+
pricing:
|
|
118
|
+
- pricing_option_id: "po_prism_churn_pom"
|
|
119
|
+
model: "percent_of_media"
|
|
120
|
+
percent: 12
|
|
121
|
+
max_cpm: 3.00
|
|
122
|
+
currency: "USD"
|
|
123
|
+
|
|
124
|
+
destinations:
|
|
125
|
+
platforms:
|
|
126
|
+
- type: "platform"
|
|
127
|
+
platform: "the-trade-desk"
|
|
128
|
+
account: "agency-123-ttd"
|
|
129
|
+
- type: "platform"
|
|
130
|
+
platform: "streamhaus"
|
|
131
|
+
account: "agency-ctv-seat-456"
|
|
132
|
+
agents:
|
|
133
|
+
- type: "agent"
|
|
134
|
+
agent_url: "https://wonderstruck.salesagents.example"
|