@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
@@ -1,131 +1,228 @@
1
1
  id: brand_rights
2
2
  version: "1.0.0"
3
- title: "Brand rights flow"
3
+ title: "Brand identity and rights licensing"
4
4
  category: brand_rights
5
- summary: "Agent that provides brand identity, queries rights, and supports rights acquisition."
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 rights platform — a system that manages brand identity information,
12
- tracks rights associated with brands, and facilitates rights acquisition. A caller
13
- connects to retrieve brand identity details, query existing rights, and initiate
14
- new rights acquisitions.
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
- The caller starts by fetching the brand identity for a given domain. Then they
17
- query what rights are currently associated with that brand. Finally, they request
18
- acquisition of additional rights, optionally in dry_run mode to preview without
19
- committing.
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 walks through the complete brand rights flow from discovery
22
- through acquisition.
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: brand_rights
25
+ interaction_model: brand_rights_holder
26
26
  capabilities:
27
27
  - brand_identity
28
- - rights_management
28
+ - rights_licensing
29
29
  examples:
30
- - "Brand registry platforms"
31
- - "Rights management systems"
32
- - "Brand safety and compliance platforms"
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 brand compliance tool"
37
+ example: "Pinnacle Agency (creative buyer)"
37
38
 
38
39
  prerequisites:
39
40
  description: |
40
- The caller needs a brand domain to query. The test uses example.com as a
41
- default domain suitable for validating the brand rights protocol flow.
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: brand_rights_flow
45
- title: "Brand rights flow"
46
+ - id: identity_discovery
47
+ title: "Brand identity discovery"
46
48
  narrative: |
47
- The caller retrieves brand identity, queries existing rights, and initiates
48
- rights acquisition. Each step builds on the previous: the brand identity
49
- confirms the brand exists, the rights query shows what is already held,
50
- and the acquisition request adds new rights.
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 caller requests brand identity information for a specific domain.
57
- The agent returns the brand name, domain, and any associated guidelines
58
- or metadata. This confirms the brand is known to the platform.
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 the brand identity:
63
- - request_id: echoes the caller's request_id
64
- - brand_name: human-readable brand name
65
- - brand_domain: the queried domain
66
- - guidelines: brand usage guidelines (optional)
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
- type: "get_brand_identity_request"
70
- request_id: "e2e-brand-id-001"
71
- brand_domain: "example.com"
76
+ brand:
77
+ domain: "acmeoutdoor.com"
72
78
 
73
79
  validations:
74
- - check: field_present
75
- path: "brand_name"
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: "Query current brand rights"
83
- requires_tool: get_rights
92
+ title: "Discover available rights"
84
93
  narrative: |
85
- The caller queries what rights are currently associated with the brand.
86
- The agent returns a list of rights with their types, scopes, and
87
- expiration dates.
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 the current rights:
92
- - request_id: echoes the caller's request_id
93
- - rights: array of right objects, each with type, scope, and optional expires_at
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
- type: "get_rights_request"
97
- request_id: "e2e-rights-001"
98
- brand_domain: "example.com"
110
+ brand:
111
+ domain: "acmeoutdoor.com"
99
112
 
100
113
  validations:
101
- - check: field_present
102
- path: "rights"
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: "Acquire brand rights"
107
- requires_tool: acquire_rights
126
+ title: "Purchase a rights license"
108
127
  narrative: |
109
- The caller initiates acquisition of brand rights. The dry_run flag
110
- allows previewing the acquisition without committing. The agent
111
- returns the acquisition status and a rights_id for tracking.
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 the acquisition result:
116
- - request_id: echoes the caller's request_id
117
- - status: granted, pending, denied, or dry_run
118
- - rights_id: identifier for the acquired or pending rights
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
- type: "acquire_rights_request"
123
- request_id: "e2e-acquire-001"
124
- brand_domain: "example.com"
125
- rights_type: "usage"
126
- dry_run: true
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: field_present
130
- path: "status"
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"