@adcp/sdk 14.0.0-beta.0 → 14.0.0-beta.1

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 (140) hide show
  1. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/account/get-account-financials-request.json +610 -0
  2. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/account/get-account-financials-response.json +1055 -0
  3. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/account/list-accounts-request.json +629 -0
  4. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/account/list-accounts-response.json +1558 -0
  5. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/account/report-usage-request.json +702 -0
  6. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/account/report-usage-response.json +309 -0
  7. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/account/sync-accounts-request.json +1113 -0
  8. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/account/sync-accounts-response.json +1567 -0
  9. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/account/sync-governance-request.json +662 -0
  10. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/account/sync-governance-response.json +921 -0
  11. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/creative/list-creatives-request.json +992 -0
  12. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/creative/list-creatives-response.json +5965 -0
  13. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/creative/sync-creatives-request.json +3936 -0
  14. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/creative/sync-creatives-response.json +3859 -0
  15. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/manifest.json +206 -0
  16. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/media-buy/accept-proposal-request.json +601 -0
  17. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/media-buy/accept-proposal-response.json +4799 -0
  18. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/media-buy/buy-products-request.json +4107 -0
  19. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/media-buy/buy-products-response.json +4799 -0
  20. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/media-buy/control-media-buy-request.json +3365 -0
  21. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/media-buy/control-media-buy-response.json +656 -0
  22. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/media-buy/decline-proposals-request.json +334 -0
  23. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/media-buy/decline-proposals-response.json +271 -0
  24. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/media-buy/get-media-buy-delivery-request.json +1236 -0
  25. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/media-buy/get-media-buy-delivery-response.json +2861 -0
  26. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/media-buy/get-media-buys-request.json +678 -0
  27. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/media-buy/get-media-buys-response.json +10861 -0
  28. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/media-buy/list-products-request.json +4229 -0
  29. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/media-buy/list-products-response.json +3824 -0
  30. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/media-buy/log-event-request.json +421 -0
  31. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/media-buy/log-event-response.json +394 -0
  32. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/media-buy/media-buy-delivery-webhook-result.json +1366 -0
  33. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/media-buy/provide-performance-feedback-request.json +884 -0
  34. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/media-buy/provide-performance-feedback-response.json +422 -0
  35. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/media-buy/refine-proposals-request.json +4335 -0
  36. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/media-buy/refine-proposals-response.json +7328 -0
  37. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/media-buy/request-proposals-request.json +4307 -0
  38. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/media-buy/request-proposals-response.json +7105 -0
  39. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/media-buy/sync-audiences-request.json +760 -0
  40. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/media-buy/sync-audiences-response.json +541 -0
  41. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/media-buy/sync-catalogs-request.json +1142 -0
  42. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/media-buy/sync-catalogs-response.json +1153 -0
  43. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/media-buy/sync-event-sources-request.json +743 -0
  44. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/media-buy/sync-event-sources-response.json +619 -0
  45. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/model-context/account/get-account-financials-request.json +544 -0
  46. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/model-context/account/list-accounts-request.json +557 -0
  47. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/model-context/account/report-usage-request.json +617 -0
  48. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/model-context/account/sync-accounts-request.json +984 -0
  49. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/model-context/account/sync-governance-request.json +581 -0
  50. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/model-context/creative/list-creatives-request.json +878 -0
  51. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/model-context/creative/sync-creatives-request.json +3456 -0
  52. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/model-context/manifest.json +175 -0
  53. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/model-context/media-buy/accept-proposal-request.json +498 -0
  54. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/model-context/media-buy/buy-products-request.json +3675 -0
  55. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/model-context/media-buy/control-media-buy-request.json +3030 -0
  56. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/model-context/media-buy/decline-proposals-request.json +282 -0
  57. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/model-context/media-buy/get-media-buy-delivery-request.json +1136 -0
  58. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/model-context/media-buy/get-media-buys-request.json +597 -0
  59. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/model-context/media-buy/list-products-request.json +3780 -0
  60. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/model-context/media-buy/log-event-request.json +386 -0
  61. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/model-context/media-buy/provide-performance-feedback-request.json +784 -0
  62. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/model-context/media-buy/refine-proposals-request.json +3878 -0
  63. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/model-context/media-buy/request-proposals-request.json +3852 -0
  64. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/model-context/media-buy/sync-audiences-request.json +682 -0
  65. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/model-context/media-buy/sync-catalogs-request.json +1016 -0
  66. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/model-context/media-buy/sync-event-sources-request.json +660 -0
  67. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/model-context/protocol/get-adcp-capabilities-request.json +51 -0
  68. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/model-context/protocol/get-task-status-request.json +534 -0
  69. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/model-context/protocol/list-tasks-request.json +692 -0
  70. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/model-context/protocol/sync-agent-notification-configs-request.json +129 -0
  71. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/protocol/get-adcp-capabilities-request.json +58 -0
  72. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/protocol/get-adcp-capabilities-response.json +8069 -0
  73. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/protocol/get-task-status-request.json +601 -0
  74. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/protocol/get-task-status-response.json +612 -0
  75. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/protocol/list-tasks-request.json +775 -0
  76. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/protocol/list-tasks-response.json +483 -0
  77. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/protocol/sync-agent-notification-configs-request.json +155 -0
  78. package/dist/lib/schemas-data/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/protocol/sync-agent-notification-configs-response.json +382 -0
  79. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  80. package/dist/lib/server/create-adcp-server.d.mts +27 -0
  81. package/dist/lib/server/create-adcp-server.d.ts +27 -0
  82. package/dist/lib/server/create-adcp-server.d.ts.map +1 -1
  83. package/dist/lib/server/create-adcp-server.js +120 -4
  84. package/dist/lib/server/create-adcp-server.js.map +1 -1
  85. package/dist/lib/server/create-adcp-server.mjs +121 -6
  86. package/dist/lib/server/create-adcp-server.mjs.map +1 -1
  87. package/dist/lib/server/decisioning/context.d.mts +6 -0
  88. package/dist/lib/server/decisioning/context.d.ts +6 -0
  89. package/dist/lib/server/decisioning/context.d.ts.map +1 -1
  90. package/dist/lib/server/decisioning/context.js.map +1 -1
  91. package/dist/lib/server/decisioning/index.d.mts +1 -1
  92. package/dist/lib/server/decisioning/index.d.ts +1 -1
  93. package/dist/lib/server/decisioning/index.d.ts.map +1 -1
  94. package/dist/lib/server/decisioning/index.js.map +1 -1
  95. package/dist/lib/server/decisioning/index.mjs.map +1 -1
  96. package/dist/lib/server/decisioning/platform.d.mts +21 -6
  97. package/dist/lib/server/decisioning/platform.d.ts +21 -6
  98. package/dist/lib/server/decisioning/platform.d.ts.map +1 -1
  99. package/dist/lib/server/decisioning/platform.js.map +1 -1
  100. package/dist/lib/server/decisioning/runtime/from-platform.d.ts.map +1 -1
  101. package/dist/lib/server/decisioning/runtime/from-platform.js +201 -18
  102. package/dist/lib/server/decisioning/runtime/from-platform.js.map +1 -1
  103. package/dist/lib/server/decisioning/runtime/from-platform.mjs +203 -19
  104. package/dist/lib/server/decisioning/runtime/from-platform.mjs.map +1 -1
  105. package/dist/lib/server/decisioning/runtime/to-context.d.ts.map +1 -1
  106. package/dist/lib/server/decisioning/runtime/to-context.js +6 -0
  107. package/dist/lib/server/decisioning/runtime/to-context.js.map +1 -1
  108. package/dist/lib/server/decisioning/runtime/to-context.mjs +6 -0
  109. package/dist/lib/server/decisioning/runtime/to-context.mjs.map +1 -1
  110. package/dist/lib/server/decisioning/runtime/validate-platform.d.ts.map +1 -1
  111. package/dist/lib/server/decisioning/runtime/validate-platform.js +35 -4
  112. package/dist/lib/server/decisioning/runtime/validate-platform.js.map +1 -1
  113. package/dist/lib/server/decisioning/runtime/validate-platform.mjs +35 -4
  114. package/dist/lib/server/decisioning/runtime/validate-platform.mjs.map +1 -1
  115. package/dist/lib/server/decisioning/specialisms/sales.d.mts +39 -0
  116. package/dist/lib/server/decisioning/specialisms/sales.d.ts +39 -0
  117. package/dist/lib/server/decisioning/specialisms/sales.d.ts.map +1 -1
  118. package/dist/lib/server/decisioning/specialisms/sales.js.map +1 -1
  119. package/dist/lib/testing/storyboard/validations.d.mts +1 -1
  120. package/dist/lib/testing/storyboard/validations.d.ts +1 -1
  121. package/dist/lib/validation/schema-loader.d.mts +2 -0
  122. package/dist/lib/validation/schema-loader.d.ts +2 -0
  123. package/dist/lib/validation/schema-loader.d.ts.map +1 -1
  124. package/dist/lib/validation/schema-loader.js +31 -0
  125. package/dist/lib/validation/schema-loader.js.map +1 -1
  126. package/dist/lib/validation/schema-loader.mjs +30 -0
  127. package/dist/lib/validation/schema-loader.mjs.map +1 -1
  128. package/dist/lib/version.d.mts +3 -3
  129. package/dist/lib/version.d.ts +3 -3
  130. package/dist/lib/version.js +3 -3
  131. package/dist/lib/version.js.map +1 -1
  132. package/dist/lib/version.mjs +3 -3
  133. package/dist/lib/version.mjs.map +1 -1
  134. package/docs/guides/BUILD-AN-AGENT.md +10 -1
  135. package/docs/guides/MEDIA-BUY-3.2-COMPATIBILITY.md +119 -0
  136. package/docs/llms.txt +1 -1
  137. package/docs/migration-12-to-14.md +8 -0
  138. package/docs/migration-13-to-14.md +30 -4
  139. package/docs/releases/14.0.0-beta.0.md +19 -1
  140. package/package.json +2 -1
@@ -0,0 +1,3365 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://adcontextprotocol.org/schemas/3.2.0-beta.0/mcp/2026-07-28/profiles/media-buy/media-buy/control-media-buy-request.json",
4
+ "type": "object",
5
+ "x-mutates-state": true,
6
+ "x-governed-commitment": {
7
+ "scope": "conditional",
8
+ "triggers": [
9
+ "increases_obligation",
10
+ "resumes_execution",
11
+ "reallocates_delivery"
12
+ ],
13
+ "exemptions": [
14
+ "cancel",
15
+ "pause",
16
+ "decrease_only"
17
+ ],
18
+ "precedence": "trigger_overrides_exemption"
19
+ },
20
+ "x-operation-family": "control_media_buy",
21
+ "x-added-in": "3.2.0",
22
+ "x-legacy-fallback": {
23
+ "tool": "update_media_buy",
24
+ "mode": "orchestrated"
25
+ },
26
+ "properties": {
27
+ "adcp_version": {
28
+ "$ref": "#/$defs/external:core~1version-envelope.json/properties/adcp_version"
29
+ },
30
+ "idempotency_key": {
31
+ "type": "string",
32
+ "minLength": 16,
33
+ "maxLength": 255,
34
+ "pattern": "^[A-Za-z0-9_.:-]{16,255}$"
35
+ },
36
+ "account": {
37
+ "$ref": "#/$defs/external:core~1canonical-account-ref.json"
38
+ },
39
+ "media_buy_id": {
40
+ "type": "string",
41
+ "minLength": 1,
42
+ "x-entity": "media_buy"
43
+ },
44
+ "revision": {
45
+ "type": "integer",
46
+ "minimum": 1
47
+ },
48
+ "paused": {
49
+ "type": "boolean"
50
+ },
51
+ "canceled": {
52
+ "type": "boolean",
53
+ "const": true
54
+ },
55
+ "cancellation_reason": {
56
+ "type": "string",
57
+ "minLength": 1,
58
+ "maxLength": 500
59
+ },
60
+ "total_budget": {
61
+ "type": "object",
62
+ "properties": {
63
+ "amount": {
64
+ "type": "number",
65
+ "minimum": 0
66
+ },
67
+ "currency": {
68
+ "type": "string",
69
+ "pattern": "^[A-Z]{3}$"
70
+ }
71
+ },
72
+ "required": [
73
+ "amount",
74
+ "currency"
75
+ ],
76
+ "additionalProperties": false
77
+ },
78
+ "daily_budget_cap": {
79
+ "type": [
80
+ "number",
81
+ "null"
82
+ ],
83
+ "minimum": 0
84
+ },
85
+ "budget_cap_timezone": {
86
+ "type": [
87
+ "string",
88
+ "null"
89
+ ],
90
+ "minLength": 1
91
+ },
92
+ "budget_allocation": {
93
+ "$ref": "#/$defs/external:core~1canonical-budget-allocation.json"
94
+ },
95
+ "pacing": {
96
+ "$ref": "#/$defs/external:enums~1pacing.json"
97
+ },
98
+ "bidding": {
99
+ "anyOf": [
100
+ {
101
+ "$ref": "#/$defs/external:core~1bidding-policy.json"
102
+ },
103
+ {
104
+ "type": "null"
105
+ }
106
+ ]
107
+ },
108
+ "packages": {
109
+ "type": "array",
110
+ "x-adcp-validation": {
111
+ "verifier_constraints": {
112
+ "unique_package_ids": {
113
+ "key": "package_id",
114
+ "on_violation": "reject_before_mutation"
115
+ }
116
+ }
117
+ },
118
+ "items": {
119
+ "$ref": "#/$defs/external:media-buy~1package-control.json"
120
+ },
121
+ "minItems": 1
122
+ },
123
+ "reporting_webhook": {
124
+ "$ref": "#/$defs/external:core~1reporting-webhook.json"
125
+ },
126
+ "governance_context": {
127
+ "type": "string",
128
+ "minLength": 1,
129
+ "maxLength": 4096
130
+ },
131
+ "push_notification_config": {
132
+ "$ref": "#/$defs/external:core~1push-notification-config.json"
133
+ },
134
+ "context": {
135
+ "$ref": "#/$defs/external:core~1context.json"
136
+ },
137
+ "ext": {
138
+ "$ref": "#/$defs/external:core~1ext.json"
139
+ }
140
+ },
141
+ "required": [
142
+ "idempotency_key",
143
+ "account",
144
+ "media_buy_id",
145
+ "revision"
146
+ ],
147
+ "anyOf": [
148
+ {
149
+ "required": [
150
+ "paused"
151
+ ]
152
+ },
153
+ {
154
+ "required": [
155
+ "canceled"
156
+ ]
157
+ },
158
+ {
159
+ "required": [
160
+ "total_budget"
161
+ ]
162
+ },
163
+ {
164
+ "required": [
165
+ "daily_budget_cap"
166
+ ]
167
+ },
168
+ {
169
+ "required": [
170
+ "budget_cap_timezone"
171
+ ]
172
+ },
173
+ {
174
+ "required": [
175
+ "budget_allocation"
176
+ ]
177
+ },
178
+ {
179
+ "required": [
180
+ "pacing"
181
+ ]
182
+ },
183
+ {
184
+ "required": [
185
+ "bidding"
186
+ ]
187
+ },
188
+ {
189
+ "required": [
190
+ "packages"
191
+ ]
192
+ },
193
+ {
194
+ "required": [
195
+ "reporting_webhook"
196
+ ]
197
+ }
198
+ ],
199
+ "allOf": [
200
+ {
201
+ "if": {
202
+ "required": [
203
+ "cancellation_reason"
204
+ ]
205
+ },
206
+ "then": {
207
+ "required": [
208
+ "canceled"
209
+ ]
210
+ }
211
+ },
212
+ {
213
+ "if": {
214
+ "required": [
215
+ "canceled"
216
+ ]
217
+ },
218
+ "then": {
219
+ "not": {
220
+ "anyOf": [
221
+ {
222
+ "required": [
223
+ "paused"
224
+ ]
225
+ },
226
+ {
227
+ "required": [
228
+ "total_budget"
229
+ ]
230
+ },
231
+ {
232
+ "required": [
233
+ "daily_budget_cap"
234
+ ]
235
+ },
236
+ {
237
+ "required": [
238
+ "budget_cap_timezone"
239
+ ]
240
+ },
241
+ {
242
+ "required": [
243
+ "budget_allocation"
244
+ ]
245
+ },
246
+ {
247
+ "required": [
248
+ "pacing"
249
+ ]
250
+ },
251
+ {
252
+ "required": [
253
+ "bidding"
254
+ ]
255
+ },
256
+ {
257
+ "required": [
258
+ "packages"
259
+ ]
260
+ },
261
+ {
262
+ "required": [
263
+ "reporting_webhook"
264
+ ]
265
+ }
266
+ ]
267
+ }
268
+ }
269
+ }
270
+ ],
271
+ "additionalProperties": false,
272
+ "not": {
273
+ "anyOf": [
274
+ {
275
+ "required": [
276
+ "creatives"
277
+ ]
278
+ },
279
+ {
280
+ "required": [
281
+ "creative_assignments"
282
+ ]
283
+ },
284
+ {
285
+ "required": [
286
+ "new_packages"
287
+ ]
288
+ },
289
+ {
290
+ "required": [
291
+ "start_time"
292
+ ]
293
+ },
294
+ {
295
+ "required": [
296
+ "end_time"
297
+ ]
298
+ },
299
+ {
300
+ "required": [
301
+ "invoice_recipient"
302
+ ]
303
+ }
304
+ ]
305
+ },
306
+ "$defs": {
307
+ "external:core/version-envelope.json": {
308
+ "type": "object",
309
+ "properties": {
310
+ "adcp_version": {
311
+ "type": "string",
312
+ "pattern": "^(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)(?:-[a-zA-Z0-9](?:[a-zA-Z0-9.-]*[a-zA-Z0-9])?)?$"
313
+ },
314
+ "adcp_major_version": {
315
+ "type": "integer",
316
+ "deprecated": true,
317
+ "minimum": 1,
318
+ "maximum": 99
319
+ }
320
+ }
321
+ },
322
+ "external:core/canonical-account-ref.json": {
323
+ "type": "object",
324
+ "anyOf": [
325
+ {
326
+ "properties": {
327
+ "account_id": {
328
+ "type": "string",
329
+ "minLength": 1,
330
+ "x-entity": "account"
331
+ }
332
+ },
333
+ "required": [
334
+ "account_id"
335
+ ],
336
+ "additionalProperties": false
337
+ },
338
+ {
339
+ "properties": {
340
+ "brand": {
341
+ "$ref": "#/$defs/external:core~1brand-key.json"
342
+ },
343
+ "operator": {
344
+ "type": "string",
345
+ "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$",
346
+ "x-entity": "operator"
347
+ },
348
+ "operator_unit": {
349
+ "$ref": "#/$defs/external:core~1operator-unit.json"
350
+ },
351
+ "currency": {
352
+ "type": "string",
353
+ "pattern": "^[A-Z]{3}$"
354
+ },
355
+ "timezone": {
356
+ "type": "string",
357
+ "minLength": 1
358
+ },
359
+ "sandbox": {
360
+ "type": "boolean",
361
+ "default": false
362
+ }
363
+ },
364
+ "required": [
365
+ "brand",
366
+ "operator"
367
+ ],
368
+ "additionalProperties": false
369
+ }
370
+ ]
371
+ },
372
+ "external:core/brand-key.json": {
373
+ "type": "object",
374
+ "properties": {
375
+ "domain": {
376
+ "type": "string",
377
+ "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
378
+ },
379
+ "brand_id": {
380
+ "$ref": "#/$defs/external:core~1brand-id.json"
381
+ },
382
+ "countries": {
383
+ "type": "array",
384
+ "items": {
385
+ "type": "string",
386
+ "pattern": "^[A-Z]{2}$"
387
+ },
388
+ "minItems": 1,
389
+ "uniqueItems": true
390
+ }
391
+ },
392
+ "required": [
393
+ "domain"
394
+ ],
395
+ "additionalProperties": false
396
+ },
397
+ "external:core/brand-id.json": {
398
+ "type": "string",
399
+ "pattern": "^[a-z0-9_]+$",
400
+ "x-entity": "advertiser_brand"
401
+ },
402
+ "external:core/operator-unit.json": {
403
+ "x-entity": "operator_unit",
404
+ "type": "object",
405
+ "properties": {
406
+ "id": {
407
+ "type": "string",
408
+ "minLength": 1,
409
+ "maxLength": 255,
410
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/-]*$"
411
+ },
412
+ "name": {
413
+ "type": "string",
414
+ "minLength": 1,
415
+ "maxLength": 200
416
+ }
417
+ },
418
+ "required": [
419
+ "id"
420
+ ],
421
+ "additionalProperties": false
422
+ },
423
+ "external:core/canonical-budget-allocation.json": {
424
+ "discriminator": {
425
+ "propertyName": "mode"
426
+ },
427
+ "oneOf": [
428
+ {
429
+ "type": "object",
430
+ "properties": {
431
+ "mode": {
432
+ "type": "string",
433
+ "const": "fixed"
434
+ }
435
+ },
436
+ "required": [
437
+ "mode"
438
+ ],
439
+ "additionalProperties": false
440
+ },
441
+ {
442
+ "type": "object",
443
+ "properties": {
444
+ "mode": {
445
+ "type": "string",
446
+ "const": "seller_optimized"
447
+ },
448
+ "optimization_goals": {
449
+ "type": "array",
450
+ "items": {
451
+ "$ref": "#/$defs/external:core~1canonical-optimization-goal.json"
452
+ },
453
+ "minItems": 1
454
+ }
455
+ },
456
+ "required": [
457
+ "mode",
458
+ "optimization_goals"
459
+ ],
460
+ "additionalProperties": false
461
+ }
462
+ ]
463
+ },
464
+ "external:core/canonical-optimization-goal.json": {
465
+ "discriminator": {
466
+ "propertyName": "kind"
467
+ },
468
+ "oneOf": [
469
+ {
470
+ "type": "object",
471
+ "properties": {
472
+ "kind": {
473
+ "type": "string",
474
+ "const": "metric"
475
+ },
476
+ "metric": {
477
+ "type": "string",
478
+ "enum": [
479
+ "clicks",
480
+ "views",
481
+ "completed_views",
482
+ "viewed_seconds",
483
+ "engagements",
484
+ "follows",
485
+ "saves",
486
+ "profile_visits",
487
+ "reach"
488
+ ]
489
+ },
490
+ "reach_unit": {
491
+ "$ref": "#/$defs/external:enums~1reach-unit.json"
492
+ },
493
+ "target_frequency": {
494
+ "type": "object",
495
+ "properties": {
496
+ "min": {
497
+ "type": "integer",
498
+ "minimum": 1
499
+ },
500
+ "max": {
501
+ "type": "integer",
502
+ "minimum": 1
503
+ },
504
+ "window": {
505
+ "$ref": "#/$defs/external:core~1duration.json"
506
+ }
507
+ },
508
+ "required": [
509
+ "window"
510
+ ],
511
+ "anyOf": [
512
+ {
513
+ "required": [
514
+ "min"
515
+ ]
516
+ },
517
+ {
518
+ "required": [
519
+ "max"
520
+ ]
521
+ }
522
+ ],
523
+ "additionalProperties": false
524
+ },
525
+ "view_duration_seconds": {
526
+ "type": "number",
527
+ "exclusiveMinimum": 0
528
+ },
529
+ "target": {
530
+ "type": "object",
531
+ "properties": {
532
+ "kind": {
533
+ "type": "string",
534
+ "const": "threshold_rate"
535
+ },
536
+ "value": {
537
+ "type": "number",
538
+ "exclusiveMinimum": 0
539
+ }
540
+ },
541
+ "required": [
542
+ "kind",
543
+ "value"
544
+ ],
545
+ "additionalProperties": false
546
+ },
547
+ "priority": {
548
+ "type": "integer",
549
+ "minimum": 1
550
+ }
551
+ },
552
+ "required": [
553
+ "kind",
554
+ "metric"
555
+ ],
556
+ "additionalProperties": false
557
+ },
558
+ {
559
+ "type": "object",
560
+ "properties": {
561
+ "kind": {
562
+ "type": "string",
563
+ "const": "event"
564
+ },
565
+ "event_sources": {
566
+ "type": "array",
567
+ "items": {
568
+ "type": "object",
569
+ "properties": {
570
+ "event_source_id": {
571
+ "type": "string",
572
+ "minLength": 1,
573
+ "x-entity": "event_source"
574
+ },
575
+ "event_type": {
576
+ "$ref": "#/$defs/external:enums~1event-type.json"
577
+ },
578
+ "custom_event_name": {
579
+ "type": "string",
580
+ "minLength": 1
581
+ },
582
+ "value_field": {
583
+ "type": "string",
584
+ "minLength": 1
585
+ },
586
+ "value_factor": {
587
+ "type": "number",
588
+ "default": 1
589
+ }
590
+ },
591
+ "required": [
592
+ "event_source_id",
593
+ "event_type"
594
+ ],
595
+ "additionalProperties": false
596
+ },
597
+ "minItems": 1
598
+ },
599
+ "target": {
600
+ "type": "object",
601
+ "properties": {
602
+ "kind": {
603
+ "type": "string",
604
+ "const": "maximize_value"
605
+ }
606
+ },
607
+ "required": [
608
+ "kind"
609
+ ],
610
+ "additionalProperties": false
611
+ },
612
+ "attribution_window": {
613
+ "$ref": "#/$defs/external:core~1attribution-window.json"
614
+ },
615
+ "priority": {
616
+ "type": "integer",
617
+ "minimum": 1
618
+ }
619
+ },
620
+ "required": [
621
+ "kind",
622
+ "event_sources"
623
+ ],
624
+ "additionalProperties": false
625
+ },
626
+ {
627
+ "type": "object",
628
+ "properties": {
629
+ "kind": {
630
+ "type": "string",
631
+ "const": "vendor_metric"
632
+ },
633
+ "vendor": {
634
+ "$ref": "#/$defs/external:core~1brand-key.json"
635
+ },
636
+ "metric_id": {
637
+ "$ref": "#/$defs/external:core~1vendor-metric-id.json"
638
+ },
639
+ "target": {
640
+ "type": "object",
641
+ "properties": {
642
+ "kind": {
643
+ "type": "string",
644
+ "const": "threshold_rate"
645
+ },
646
+ "value": {
647
+ "type": "number",
648
+ "exclusiveMinimum": 0
649
+ }
650
+ },
651
+ "required": [
652
+ "kind",
653
+ "value"
654
+ ],
655
+ "additionalProperties": false
656
+ },
657
+ "priority": {
658
+ "type": "integer",
659
+ "minimum": 1
660
+ }
661
+ },
662
+ "required": [
663
+ "kind",
664
+ "vendor",
665
+ "metric_id"
666
+ ],
667
+ "additionalProperties": false
668
+ }
669
+ ]
670
+ },
671
+ "external:enums/reach-unit.json": {
672
+ "type": "string",
673
+ "enum": [
674
+ "individuals",
675
+ "households",
676
+ "devices",
677
+ "accounts",
678
+ "cookies",
679
+ "custom"
680
+ ]
681
+ },
682
+ "external:core/duration.json": {
683
+ "type": "object",
684
+ "properties": {
685
+ "interval": {
686
+ "type": "integer",
687
+ "minimum": 1
688
+ },
689
+ "unit": {
690
+ "type": "string",
691
+ "enum": [
692
+ "seconds",
693
+ "minutes",
694
+ "hours",
695
+ "days",
696
+ "campaign"
697
+ ]
698
+ }
699
+ },
700
+ "required": [
701
+ "interval",
702
+ "unit"
703
+ ],
704
+ "additionalProperties": false
705
+ },
706
+ "external:enums/event-type.json": {
707
+ "type": "string",
708
+ "enum": [
709
+ "page_view",
710
+ "view_content",
711
+ "select_content",
712
+ "select_item",
713
+ "search",
714
+ "share",
715
+ "add_to_cart",
716
+ "remove_from_cart",
717
+ "viewed_cart",
718
+ "add_to_wishlist",
719
+ "initiate_checkout",
720
+ "add_payment_info",
721
+ "purchase",
722
+ "refund",
723
+ "lead",
724
+ "qualify_lead",
725
+ "close_convert_lead",
726
+ "disqualify_lead",
727
+ "complete_registration",
728
+ "subscribe",
729
+ "follow",
730
+ "content_view",
731
+ "watch_milestone",
732
+ "start_trial",
733
+ "app_install",
734
+ "app_launch",
735
+ "contact",
736
+ "schedule",
737
+ "donate",
738
+ "submit_application",
739
+ "custom"
740
+ ]
741
+ },
742
+ "external:core/attribution-window.json": {
743
+ "type": "object",
744
+ "properties": {
745
+ "post_click": {
746
+ "allOf": [
747
+ {
748
+ "$ref": "#/$defs/external:core~1duration.json"
749
+ }
750
+ ]
751
+ },
752
+ "post_view": {
753
+ "allOf": [
754
+ {
755
+ "$ref": "#/$defs/external:core~1duration.json"
756
+ }
757
+ ]
758
+ },
759
+ "model": {
760
+ "$ref": "#/$defs/external:enums~1attribution-model.json"
761
+ }
762
+ },
763
+ "additionalProperties": true
764
+ },
765
+ "external:enums/attribution-model.json": {
766
+ "type": "string",
767
+ "enum": [
768
+ "last_touch",
769
+ "first_touch",
770
+ "linear",
771
+ "time_decay",
772
+ "data_driven"
773
+ ]
774
+ },
775
+ "external:core/vendor-metric-id.json": {
776
+ "type": "string",
777
+ "x-entity": "vendor_metric",
778
+ "minLength": 1,
779
+ "maxLength": 64,
780
+ "pattern": "^[a-z][a-z0-9_]*$"
781
+ },
782
+ "external:enums/pacing.json": {
783
+ "type": "string",
784
+ "enum": [
785
+ "even",
786
+ "asap",
787
+ "front_loaded"
788
+ ]
789
+ },
790
+ "external:core/bidding-policy.json": {
791
+ "type": "object",
792
+ "properties": {
793
+ "automatic": {
794
+ "type": "boolean",
795
+ "const": true
796
+ },
797
+ "bid_amount": {
798
+ "type": "number",
799
+ "exclusiveMinimum": 0
800
+ },
801
+ "max_bid": {
802
+ "type": "number",
803
+ "exclusiveMinimum": 0
804
+ },
805
+ "cost_per": {
806
+ "type": "object",
807
+ "properties": {
808
+ "amount": {
809
+ "type": "number",
810
+ "exclusiveMinimum": 0
811
+ },
812
+ "strength": {
813
+ "type": "string",
814
+ "enum": [
815
+ "cap",
816
+ "target"
817
+ ]
818
+ }
819
+ },
820
+ "required": [
821
+ "amount",
822
+ "strength"
823
+ ],
824
+ "additionalProperties": false
825
+ },
826
+ "roas": {
827
+ "type": "object",
828
+ "properties": {
829
+ "value": {
830
+ "type": "number",
831
+ "exclusiveMinimum": 0
832
+ },
833
+ "strength": {
834
+ "type": "string",
835
+ "enum": [
836
+ "floor",
837
+ "target"
838
+ ]
839
+ }
840
+ },
841
+ "required": [
842
+ "value",
843
+ "strength"
844
+ ],
845
+ "additionalProperties": false
846
+ }
847
+ },
848
+ "minProperties": 1,
849
+ "allOf": [
850
+ {
851
+ "not": {
852
+ "anyOf": [
853
+ {
854
+ "required": [
855
+ "automatic",
856
+ "bid_amount"
857
+ ]
858
+ },
859
+ {
860
+ "required": [
861
+ "automatic",
862
+ "max_bid"
863
+ ]
864
+ },
865
+ {
866
+ "required": [
867
+ "automatic",
868
+ "cost_per"
869
+ ]
870
+ },
871
+ {
872
+ "required": [
873
+ "automatic",
874
+ "roas"
875
+ ]
876
+ },
877
+ {
878
+ "required": [
879
+ "bid_amount",
880
+ "max_bid"
881
+ ]
882
+ },
883
+ {
884
+ "required": [
885
+ "bid_amount",
886
+ "cost_per"
887
+ ]
888
+ },
889
+ {
890
+ "required": [
891
+ "bid_amount",
892
+ "roas"
893
+ ]
894
+ },
895
+ {
896
+ "required": [
897
+ "cost_per",
898
+ "roas"
899
+ ]
900
+ }
901
+ ]
902
+ }
903
+ }
904
+ ],
905
+ "additionalProperties": false
906
+ },
907
+ "external:media-buy/package-control.json": {
908
+ "type": "object",
909
+ "properties": {
910
+ "package_id": {
911
+ "type": "string",
912
+ "minLength": 1,
913
+ "x-entity": "package"
914
+ },
915
+ "budget": {
916
+ "type": [
917
+ "number",
918
+ "null"
919
+ ],
920
+ "minimum": 0
921
+ },
922
+ "daily_budget_cap": {
923
+ "type": [
924
+ "number",
925
+ "null"
926
+ ],
927
+ "minimum": 0
928
+ },
929
+ "min_spend_target": {
930
+ "type": [
931
+ "number",
932
+ "null"
933
+ ],
934
+ "minimum": 0
935
+ },
936
+ "impressions": {
937
+ "type": "number",
938
+ "minimum": 0
939
+ },
940
+ "pacing": {
941
+ "$ref": "#/$defs/external:enums~1pacing.json"
942
+ },
943
+ "bidding": {
944
+ "anyOf": [
945
+ {
946
+ "$ref": "#/$defs/external:core~1bidding-policy.json"
947
+ },
948
+ {
949
+ "type": "null"
950
+ }
951
+ ]
952
+ },
953
+ "paused": {
954
+ "type": "boolean"
955
+ },
956
+ "canceled": {
957
+ "type": "boolean",
958
+ "const": true
959
+ },
960
+ "cancellation_reason": {
961
+ "type": "string",
962
+ "minLength": 1,
963
+ "maxLength": 500
964
+ },
965
+ "targeting_overlay": {
966
+ "$ref": "#/$defs/external:core~1targeting.json"
967
+ },
968
+ "catalog_ids": {
969
+ "type": "array",
970
+ "items": {
971
+ "type": "string",
972
+ "minLength": 1,
973
+ "x-entity": "catalog"
974
+ },
975
+ "minItems": 1,
976
+ "uniqueItems": true
977
+ },
978
+ "keyword_targets_add": {
979
+ "type": "array",
980
+ "items": {
981
+ "$ref": "#/$defs/external:core~1keyword-target.json"
982
+ },
983
+ "minItems": 1
984
+ },
985
+ "keyword_targets_remove": {
986
+ "type": "array",
987
+ "items": {
988
+ "$ref": "#/$defs/external:core~1keyword-target.json"
989
+ },
990
+ "minItems": 1
991
+ },
992
+ "negative_keywords_add": {
993
+ "type": "array",
994
+ "items": {
995
+ "$ref": "#/$defs/external:core~1keyword-target.json"
996
+ },
997
+ "minItems": 1
998
+ },
999
+ "negative_keywords_remove": {
1000
+ "type": "array",
1001
+ "items": {
1002
+ "$ref": "#/$defs/external:core~1keyword-target.json"
1003
+ },
1004
+ "minItems": 1
1005
+ },
1006
+ "optimization_goals": {
1007
+ "type": "array",
1008
+ "items": {
1009
+ "$ref": "#/$defs/external:core~1canonical-optimization-goal.json"
1010
+ },
1011
+ "minItems": 1
1012
+ }
1013
+ },
1014
+ "required": [
1015
+ "package_id"
1016
+ ],
1017
+ "anyOf": [
1018
+ {
1019
+ "required": [
1020
+ "budget"
1021
+ ]
1022
+ },
1023
+ {
1024
+ "required": [
1025
+ "daily_budget_cap"
1026
+ ]
1027
+ },
1028
+ {
1029
+ "required": [
1030
+ "min_spend_target"
1031
+ ]
1032
+ },
1033
+ {
1034
+ "required": [
1035
+ "impressions"
1036
+ ]
1037
+ },
1038
+ {
1039
+ "required": [
1040
+ "pacing"
1041
+ ]
1042
+ },
1043
+ {
1044
+ "required": [
1045
+ "bidding"
1046
+ ]
1047
+ },
1048
+ {
1049
+ "required": [
1050
+ "paused"
1051
+ ]
1052
+ },
1053
+ {
1054
+ "required": [
1055
+ "canceled"
1056
+ ]
1057
+ },
1058
+ {
1059
+ "required": [
1060
+ "targeting_overlay"
1061
+ ]
1062
+ },
1063
+ {
1064
+ "required": [
1065
+ "catalog_ids"
1066
+ ]
1067
+ },
1068
+ {
1069
+ "required": [
1070
+ "keyword_targets_add"
1071
+ ]
1072
+ },
1073
+ {
1074
+ "required": [
1075
+ "keyword_targets_remove"
1076
+ ]
1077
+ },
1078
+ {
1079
+ "required": [
1080
+ "negative_keywords_add"
1081
+ ]
1082
+ },
1083
+ {
1084
+ "required": [
1085
+ "negative_keywords_remove"
1086
+ ]
1087
+ },
1088
+ {
1089
+ "required": [
1090
+ "optimization_goals"
1091
+ ]
1092
+ }
1093
+ ],
1094
+ "allOf": [
1095
+ {
1096
+ "if": {
1097
+ "required": [
1098
+ "targeting_overlay"
1099
+ ]
1100
+ },
1101
+ "then": {
1102
+ "not": {
1103
+ "anyOf": [
1104
+ {
1105
+ "required": [
1106
+ "keyword_targets_add"
1107
+ ]
1108
+ },
1109
+ {
1110
+ "required": [
1111
+ "keyword_targets_remove"
1112
+ ]
1113
+ },
1114
+ {
1115
+ "required": [
1116
+ "negative_keywords_add"
1117
+ ]
1118
+ },
1119
+ {
1120
+ "required": [
1121
+ "negative_keywords_remove"
1122
+ ]
1123
+ }
1124
+ ]
1125
+ }
1126
+ }
1127
+ },
1128
+ {
1129
+ "if": {
1130
+ "required": [
1131
+ "cancellation_reason"
1132
+ ]
1133
+ },
1134
+ "then": {
1135
+ "required": [
1136
+ "canceled"
1137
+ ]
1138
+ }
1139
+ },
1140
+ {
1141
+ "if": {
1142
+ "required": [
1143
+ "canceled"
1144
+ ]
1145
+ },
1146
+ "then": {
1147
+ "not": {
1148
+ "anyOf": [
1149
+ {
1150
+ "required": [
1151
+ "budget"
1152
+ ]
1153
+ },
1154
+ {
1155
+ "required": [
1156
+ "daily_budget_cap"
1157
+ ]
1158
+ },
1159
+ {
1160
+ "required": [
1161
+ "min_spend_target"
1162
+ ]
1163
+ },
1164
+ {
1165
+ "required": [
1166
+ "impressions"
1167
+ ]
1168
+ },
1169
+ {
1170
+ "required": [
1171
+ "pacing"
1172
+ ]
1173
+ },
1174
+ {
1175
+ "required": [
1176
+ "bidding"
1177
+ ]
1178
+ },
1179
+ {
1180
+ "required": [
1181
+ "paused"
1182
+ ]
1183
+ },
1184
+ {
1185
+ "required": [
1186
+ "targeting_overlay"
1187
+ ]
1188
+ },
1189
+ {
1190
+ "required": [
1191
+ "catalog_ids"
1192
+ ]
1193
+ },
1194
+ {
1195
+ "required": [
1196
+ "keyword_targets_add"
1197
+ ]
1198
+ },
1199
+ {
1200
+ "required": [
1201
+ "keyword_targets_remove"
1202
+ ]
1203
+ },
1204
+ {
1205
+ "required": [
1206
+ "negative_keywords_add"
1207
+ ]
1208
+ },
1209
+ {
1210
+ "required": [
1211
+ "negative_keywords_remove"
1212
+ ]
1213
+ },
1214
+ {
1215
+ "required": [
1216
+ "optimization_goals"
1217
+ ]
1218
+ }
1219
+ ]
1220
+ }
1221
+ }
1222
+ }
1223
+ ],
1224
+ "x-adcp-validation": {
1225
+ "verifier_constraints": {
1226
+ "keyword_identity_sets": {
1227
+ "positive_add_remove": "disjoint_by_normalized_keyword_and_match_type",
1228
+ "negative_add_remove": "disjoint_by_normalized_keyword_and_match_type",
1229
+ "on_violation": "reject_before_mutation"
1230
+ }
1231
+ }
1232
+ },
1233
+ "additionalProperties": false,
1234
+ "not": {
1235
+ "anyOf": [
1236
+ {
1237
+ "required": [
1238
+ "creatives"
1239
+ ]
1240
+ },
1241
+ {
1242
+ "required": [
1243
+ "creative_assignments"
1244
+ ]
1245
+ },
1246
+ {
1247
+ "required": [
1248
+ "start_time"
1249
+ ]
1250
+ },
1251
+ {
1252
+ "required": [
1253
+ "end_time"
1254
+ ]
1255
+ },
1256
+ {
1257
+ "required": [
1258
+ "product_id"
1259
+ ]
1260
+ },
1261
+ {
1262
+ "required": [
1263
+ "pricing_option_id"
1264
+ ]
1265
+ },
1266
+ {
1267
+ "required": [
1268
+ "catalogs"
1269
+ ]
1270
+ }
1271
+ ]
1272
+ }
1273
+ },
1274
+ "external:core/targeting.json": {
1275
+ "x-adcp-validation": {
1276
+ "disjoint_place_fields": {
1277
+ "include": "geo_places",
1278
+ "exclude": "geo_places_exclude",
1279
+ "identity": [
1280
+ "country",
1281
+ "system",
1282
+ "place_type",
1283
+ "value"
1284
+ ]
1285
+ },
1286
+ "description": "JSON Schema draft-07 cannot compare values across sibling arrays. Conformance tooling MUST reject any place identity present in both geo_places and geo_places_exclude. Catalog version is deliberately not part of place identity: a stable ID cannot be both included and excluded by assigning different versions."
1287
+ },
1288
+ "type": "object",
1289
+ "properties": {
1290
+ "geo_countries": {
1291
+ "type": "array",
1292
+ "items": {
1293
+ "type": "string",
1294
+ "pattern": "^[A-Z]{2}$"
1295
+ },
1296
+ "minItems": 1
1297
+ },
1298
+ "geo_countries_exclude": {
1299
+ "type": "array",
1300
+ "items": {
1301
+ "type": "string",
1302
+ "pattern": "^[A-Z]{2}$"
1303
+ },
1304
+ "minItems": 1
1305
+ },
1306
+ "geo_regions": {
1307
+ "type": "array",
1308
+ "items": {
1309
+ "type": "string",
1310
+ "pattern": "^[A-Z]{2}-[A-Z0-9]{1,3}$"
1311
+ },
1312
+ "minItems": 1
1313
+ },
1314
+ "geo_regions_exclude": {
1315
+ "type": "array",
1316
+ "x-adcp-validation": {
1317
+ "disjoint_with": "geo_regions",
1318
+ "spec": "docs/media-buy/advanced-topics/targeting.mdx#geo_regions_exclude"
1319
+ },
1320
+ "items": {
1321
+ "type": "string",
1322
+ "pattern": "^[A-Z]{2}-[A-Z0-9]{1,3}$"
1323
+ },
1324
+ "minItems": 1
1325
+ },
1326
+ "geo_metros": {
1327
+ "type": "array",
1328
+ "items": {
1329
+ "type": "object",
1330
+ "properties": {
1331
+ "system": {
1332
+ "$ref": "#/$defs/external:enums~1metro-system.json"
1333
+ },
1334
+ "values": {
1335
+ "type": "array",
1336
+ "items": {
1337
+ "type": "string"
1338
+ },
1339
+ "minItems": 1
1340
+ }
1341
+ },
1342
+ "required": [
1343
+ "system",
1344
+ "values"
1345
+ ],
1346
+ "additionalProperties": false
1347
+ },
1348
+ "minItems": 1
1349
+ },
1350
+ "geo_metros_exclude": {
1351
+ "type": "array",
1352
+ "items": {
1353
+ "type": "object",
1354
+ "properties": {
1355
+ "system": {
1356
+ "$ref": "#/$defs/external:enums~1metro-system.json"
1357
+ },
1358
+ "values": {
1359
+ "type": "array",
1360
+ "items": {
1361
+ "type": "string"
1362
+ },
1363
+ "minItems": 1
1364
+ }
1365
+ },
1366
+ "required": [
1367
+ "system",
1368
+ "values"
1369
+ ],
1370
+ "additionalProperties": false
1371
+ },
1372
+ "minItems": 1
1373
+ },
1374
+ "geo_postal_areas": {
1375
+ "type": "array",
1376
+ "items": {
1377
+ "$ref": "#/$defs/external:core~1postal-area.json"
1378
+ },
1379
+ "minItems": 1
1380
+ },
1381
+ "geo_postal_areas_exclude": {
1382
+ "type": "array",
1383
+ "items": {
1384
+ "$ref": "#/$defs/external:core~1postal-area.json"
1385
+ },
1386
+ "minItems": 1
1387
+ },
1388
+ "geo_places": {
1389
+ "type": "array",
1390
+ "items": {
1391
+ "$ref": "#/$defs/external:core~1geo-place-area.json",
1392
+ "x-adcp-schema-uri": "/schemas/core/geo-place-area.json"
1393
+ },
1394
+ "minItems": 1
1395
+ },
1396
+ "geo_places_exclude": {
1397
+ "type": "array",
1398
+ "items": {
1399
+ "$ref": "#/$defs/external:core~1geo-place-area.json",
1400
+ "x-adcp-schema-uri": "/schemas/core/geo-place-area.json"
1401
+ },
1402
+ "minItems": 1
1403
+ },
1404
+ "daypart_targets": {
1405
+ "type": "array",
1406
+ "items": {
1407
+ "$ref": "#/$defs/external:core~1daypart-target.json"
1408
+ },
1409
+ "minItems": 1
1410
+ },
1411
+ "axe_include_segment": {
1412
+ "type": "string",
1413
+ "deprecated": true
1414
+ },
1415
+ "axe_exclude_segment": {
1416
+ "type": "string",
1417
+ "deprecated": true
1418
+ },
1419
+ "audience_include": {
1420
+ "type": "array",
1421
+ "items": {
1422
+ "type": "string"
1423
+ },
1424
+ "minItems": 1
1425
+ },
1426
+ "audience_exclude": {
1427
+ "type": "array",
1428
+ "items": {
1429
+ "type": "string"
1430
+ },
1431
+ "minItems": 1
1432
+ },
1433
+ "signal_targeting_groups": {
1434
+ "$ref": "#/$defs/external:core~1package-signal-targeting-groups.json"
1435
+ },
1436
+ "signal_targeting": {
1437
+ "type": "array",
1438
+ "deprecated": true,
1439
+ "items": {
1440
+ "$ref": "#/$defs/external:core~1signal-targeting.json"
1441
+ },
1442
+ "minItems": 1
1443
+ },
1444
+ "demographics": {
1445
+ "$ref": "#/$defs/external:core~1demographic-targeting-intent.json"
1446
+ },
1447
+ "frequency_cap": {
1448
+ "$ref": "#/$defs/external:core~1frequency-cap.json"
1449
+ },
1450
+ "property_list": {
1451
+ "$ref": "#/$defs/external:core~1property-list-ref.json"
1452
+ },
1453
+ "property_list_exclude": {
1454
+ "$ref": "#/$defs/external:core~1property-list-ref.json"
1455
+ },
1456
+ "collection_list": {
1457
+ "$ref": "#/$defs/external:core~1collection-list-ref.json"
1458
+ },
1459
+ "collection_list_exclude": {
1460
+ "$ref": "#/$defs/external:core~1collection-list-ref.json"
1461
+ },
1462
+ "placement_selection": {
1463
+ "$ref": "#/$defs/external:core~1placement-selection.json"
1464
+ },
1465
+ "age_restriction": {
1466
+ "type": "object",
1467
+ "properties": {
1468
+ "min": {
1469
+ "type": "integer",
1470
+ "minimum": 13,
1471
+ "maximum": 99
1472
+ },
1473
+ "verification_required": {
1474
+ "type": "boolean",
1475
+ "default": false
1476
+ },
1477
+ "accepted_methods": {
1478
+ "type": "array",
1479
+ "items": {
1480
+ "$ref": "#/$defs/external:enums~1age-verification-method.json"
1481
+ },
1482
+ "minItems": 1
1483
+ }
1484
+ },
1485
+ "required": [
1486
+ "min"
1487
+ ],
1488
+ "additionalProperties": false
1489
+ },
1490
+ "device_platform": {
1491
+ "type": "array",
1492
+ "items": {
1493
+ "$ref": "#/$defs/external:enums~1device-platform.json"
1494
+ },
1495
+ "minItems": 1
1496
+ },
1497
+ "device_platform_exclude": {
1498
+ "type": "array",
1499
+ "items": {
1500
+ "$ref": "#/$defs/external:enums~1device-platform.json"
1501
+ },
1502
+ "minItems": 1
1503
+ },
1504
+ "device_type": {
1505
+ "type": "array",
1506
+ "items": {
1507
+ "$ref": "#/$defs/external:enums~1device-type.json"
1508
+ },
1509
+ "minItems": 1
1510
+ },
1511
+ "device_type_exclude": {
1512
+ "type": "array",
1513
+ "items": {
1514
+ "$ref": "#/$defs/external:enums~1device-type.json"
1515
+ },
1516
+ "minItems": 1
1517
+ },
1518
+ "browser": {
1519
+ "type": "array",
1520
+ "items": {
1521
+ "$ref": "#/$defs/external:enums~1browser-family.json"
1522
+ },
1523
+ "minItems": 1,
1524
+ "uniqueItems": true
1525
+ },
1526
+ "browser_exclude": {
1527
+ "type": "array",
1528
+ "items": {
1529
+ "$ref": "#/$defs/external:enums~1browser-family.json"
1530
+ },
1531
+ "minItems": 1,
1532
+ "uniqueItems": true
1533
+ },
1534
+ "store_catchments": {
1535
+ "type": "array",
1536
+ "items": {
1537
+ "type": "object",
1538
+ "properties": {
1539
+ "catalog_id": {
1540
+ "type": "string"
1541
+ },
1542
+ "store_ids": {
1543
+ "type": "array",
1544
+ "items": {
1545
+ "type": "string"
1546
+ },
1547
+ "minItems": 1
1548
+ },
1549
+ "catchment_ids": {
1550
+ "type": "array",
1551
+ "items": {
1552
+ "type": "string"
1553
+ },
1554
+ "minItems": 1
1555
+ }
1556
+ },
1557
+ "required": [
1558
+ "catalog_id"
1559
+ ],
1560
+ "additionalProperties": true
1561
+ },
1562
+ "minItems": 1
1563
+ },
1564
+ "geo_proximity": {
1565
+ "type": "array",
1566
+ "items": {
1567
+ "type": "object",
1568
+ "properties": {
1569
+ "lat": {
1570
+ "type": "number",
1571
+ "minimum": -90,
1572
+ "maximum": 90
1573
+ },
1574
+ "lng": {
1575
+ "type": "number",
1576
+ "minimum": -180,
1577
+ "maximum": 180
1578
+ },
1579
+ "label": {
1580
+ "type": "string"
1581
+ },
1582
+ "travel_time": {
1583
+ "type": "object",
1584
+ "properties": {
1585
+ "value": {
1586
+ "type": "number",
1587
+ "minimum": 1
1588
+ },
1589
+ "unit": {
1590
+ "$ref": "#/$defs/external:enums~1travel-time-unit.json"
1591
+ }
1592
+ },
1593
+ "required": [
1594
+ "value",
1595
+ "unit"
1596
+ ],
1597
+ "additionalProperties": false
1598
+ },
1599
+ "transport_mode": {
1600
+ "$ref": "#/$defs/external:enums~1transport-mode.json"
1601
+ },
1602
+ "radius": {
1603
+ "type": "object",
1604
+ "properties": {
1605
+ "value": {
1606
+ "type": "number",
1607
+ "exclusiveMinimum": 0
1608
+ },
1609
+ "unit": {
1610
+ "$ref": "#/$defs/external:enums~1distance-unit.json"
1611
+ }
1612
+ },
1613
+ "required": [
1614
+ "value",
1615
+ "unit"
1616
+ ],
1617
+ "additionalProperties": false
1618
+ },
1619
+ "geometry": {
1620
+ "type": "object",
1621
+ "properties": {
1622
+ "type": {
1623
+ "type": "string",
1624
+ "enum": [
1625
+ "Polygon",
1626
+ "MultiPolygon"
1627
+ ]
1628
+ },
1629
+ "coordinates": {
1630
+ "type": "array"
1631
+ }
1632
+ },
1633
+ "required": [
1634
+ "type",
1635
+ "coordinates"
1636
+ ],
1637
+ "additionalProperties": false
1638
+ },
1639
+ "ext": {
1640
+ "$ref": "#/$defs/external:core~1ext.json"
1641
+ }
1642
+ },
1643
+ "oneOf": [
1644
+ {
1645
+ "required": [
1646
+ "lat",
1647
+ "lng",
1648
+ "travel_time",
1649
+ "transport_mode"
1650
+ ],
1651
+ "not": {
1652
+ "anyOf": [
1653
+ {
1654
+ "required": [
1655
+ "radius"
1656
+ ]
1657
+ },
1658
+ {
1659
+ "required": [
1660
+ "geometry"
1661
+ ]
1662
+ }
1663
+ ]
1664
+ }
1665
+ },
1666
+ {
1667
+ "required": [
1668
+ "lat",
1669
+ "lng",
1670
+ "radius"
1671
+ ],
1672
+ "not": {
1673
+ "anyOf": [
1674
+ {
1675
+ "required": [
1676
+ "travel_time"
1677
+ ]
1678
+ },
1679
+ {
1680
+ "required": [
1681
+ "geometry"
1682
+ ]
1683
+ }
1684
+ ]
1685
+ }
1686
+ },
1687
+ {
1688
+ "required": [
1689
+ "geometry"
1690
+ ],
1691
+ "not": {
1692
+ "anyOf": [
1693
+ {
1694
+ "required": [
1695
+ "travel_time"
1696
+ ]
1697
+ },
1698
+ {
1699
+ "required": [
1700
+ "radius"
1701
+ ]
1702
+ }
1703
+ ]
1704
+ }
1705
+ }
1706
+ ],
1707
+ "additionalProperties": true
1708
+ },
1709
+ "minItems": 1
1710
+ },
1711
+ "language": {
1712
+ "type": "array",
1713
+ "items": {
1714
+ "$ref": "#/$defs/external:core~1locale-tag.json"
1715
+ },
1716
+ "minItems": 1
1717
+ },
1718
+ "keyword_targets": {
1719
+ "type": "array",
1720
+ "items": {
1721
+ "type": "object",
1722
+ "properties": {
1723
+ "keyword": {
1724
+ "type": "string",
1725
+ "minLength": 1
1726
+ },
1727
+ "match_type": {
1728
+ "$ref": "#/$defs/external:enums~1match-type.json"
1729
+ },
1730
+ "bid_price": {
1731
+ "type": "number",
1732
+ "minimum": 0
1733
+ }
1734
+ },
1735
+ "required": [
1736
+ "keyword",
1737
+ "match_type"
1738
+ ],
1739
+ "additionalProperties": false
1740
+ },
1741
+ "minItems": 1
1742
+ },
1743
+ "negative_keywords": {
1744
+ "type": "array",
1745
+ "items": {
1746
+ "type": "object",
1747
+ "properties": {
1748
+ "keyword": {
1749
+ "type": "string",
1750
+ "minLength": 1
1751
+ },
1752
+ "match_type": {
1753
+ "$ref": "#/$defs/external:enums~1match-type.json"
1754
+ }
1755
+ },
1756
+ "required": [
1757
+ "keyword",
1758
+ "match_type"
1759
+ ],
1760
+ "additionalProperties": false
1761
+ },
1762
+ "minItems": 1
1763
+ }
1764
+ },
1765
+ "allOf": [
1766
+ {
1767
+ "if": {
1768
+ "required": [
1769
+ "demographics",
1770
+ "age_restriction"
1771
+ ]
1772
+ },
1773
+ "then": {
1774
+ "properties": {
1775
+ "demographics": {
1776
+ "properties": {
1777
+ "age": {
1778
+ "properties": {
1779
+ "include_unknown": {
1780
+ "const": false
1781
+ }
1782
+ }
1783
+ }
1784
+ }
1785
+ }
1786
+ }
1787
+ }
1788
+ },
1789
+ {
1790
+ "if": {
1791
+ "properties": {
1792
+ "age_restriction": {
1793
+ "properties": {
1794
+ "verification_required": {
1795
+ "const": true
1796
+ }
1797
+ },
1798
+ "required": [
1799
+ "verification_required"
1800
+ ]
1801
+ },
1802
+ "demographics": {
1803
+ "properties": {
1804
+ "age": {
1805
+ "required": [
1806
+ "accepted_bases"
1807
+ ]
1808
+ }
1809
+ },
1810
+ "required": [
1811
+ "age"
1812
+ ]
1813
+ }
1814
+ },
1815
+ "required": [
1816
+ "demographics",
1817
+ "age_restriction"
1818
+ ]
1819
+ },
1820
+ "then": {
1821
+ "properties": {
1822
+ "demographics": {
1823
+ "properties": {
1824
+ "age": {
1825
+ "properties": {
1826
+ "accepted_bases": {
1827
+ "contains": {
1828
+ "const": "verified"
1829
+ }
1830
+ }
1831
+ }
1832
+ }
1833
+ }
1834
+ }
1835
+ }
1836
+ }
1837
+ }
1838
+ ],
1839
+ "additionalProperties": true
1840
+ },
1841
+ "external:enums/metro-system.json": {
1842
+ "type": "string",
1843
+ "enum": [
1844
+ "nielsen_dma",
1845
+ "uk_itl1",
1846
+ "uk_itl2",
1847
+ "eurostat_nuts2",
1848
+ "custom"
1849
+ ]
1850
+ },
1851
+ "external:core/postal-area.json": {
1852
+ "anyOf": [
1853
+ {
1854
+ "type": "object",
1855
+ "allOf": [
1856
+ {
1857
+ "$ref": "#/$defs/external:core~1postal-country-system.json"
1858
+ }
1859
+ ],
1860
+ "properties": {
1861
+ "country": {
1862
+ "type": "string",
1863
+ "pattern": "^[A-Z]{2}$"
1864
+ },
1865
+ "system": {
1866
+ "$ref": "#/$defs/external:enums~1postal-system.json"
1867
+ },
1868
+ "values": {
1869
+ "type": "array",
1870
+ "items": {
1871
+ "type": "string"
1872
+ },
1873
+ "minItems": 1
1874
+ }
1875
+ },
1876
+ "required": [
1877
+ "country",
1878
+ "system",
1879
+ "values"
1880
+ ],
1881
+ "additionalProperties": false
1882
+ },
1883
+ {
1884
+ "deprecated": true,
1885
+ "type": "object",
1886
+ "properties": {
1887
+ "system": {
1888
+ "$ref": "#/$defs/external:enums~1legacy-postal-system.json",
1889
+ "deprecated": true
1890
+ },
1891
+ "values": {
1892
+ "type": "array",
1893
+ "items": {
1894
+ "type": "string"
1895
+ },
1896
+ "minItems": 1
1897
+ }
1898
+ },
1899
+ "required": [
1900
+ "system",
1901
+ "values"
1902
+ ],
1903
+ "additionalProperties": false
1904
+ }
1905
+ ]
1906
+ },
1907
+ "external:core/postal-country-system.json": {
1908
+ "type": "object",
1909
+ "properties": {
1910
+ "country": {
1911
+ "type": "string",
1912
+ "pattern": "^[A-Z]{2}$"
1913
+ },
1914
+ "system": {
1915
+ "$ref": "#/$defs/external:enums~1postal-system.json"
1916
+ }
1917
+ },
1918
+ "required": [
1919
+ "country",
1920
+ "system"
1921
+ ],
1922
+ "anyOf": [
1923
+ {
1924
+ "properties": {
1925
+ "country": {
1926
+ "const": "US"
1927
+ },
1928
+ "system": {
1929
+ "enum": [
1930
+ "zip",
1931
+ "zip_plus_four"
1932
+ ]
1933
+ }
1934
+ }
1935
+ },
1936
+ {
1937
+ "properties": {
1938
+ "country": {
1939
+ "const": "GB"
1940
+ },
1941
+ "system": {
1942
+ "enum": [
1943
+ "outward",
1944
+ "full"
1945
+ ]
1946
+ }
1947
+ }
1948
+ },
1949
+ {
1950
+ "properties": {
1951
+ "country": {
1952
+ "const": "CA"
1953
+ },
1954
+ "system": {
1955
+ "enum": [
1956
+ "fsa",
1957
+ "full"
1958
+ ]
1959
+ }
1960
+ }
1961
+ },
1962
+ {
1963
+ "properties": {
1964
+ "country": {
1965
+ "enum": [
1966
+ "DE",
1967
+ "CH",
1968
+ "AT"
1969
+ ]
1970
+ },
1971
+ "system": {
1972
+ "const": "plz"
1973
+ }
1974
+ }
1975
+ },
1976
+ {
1977
+ "properties": {
1978
+ "country": {
1979
+ "const": "FR"
1980
+ },
1981
+ "system": {
1982
+ "const": "code_postal"
1983
+ }
1984
+ }
1985
+ },
1986
+ {
1987
+ "properties": {
1988
+ "country": {
1989
+ "const": "AU"
1990
+ },
1991
+ "system": {
1992
+ "const": "postcode"
1993
+ }
1994
+ }
1995
+ },
1996
+ {
1997
+ "properties": {
1998
+ "country": {
1999
+ "const": "BR"
2000
+ },
2001
+ "system": {
2002
+ "const": "cep"
2003
+ }
2004
+ }
2005
+ },
2006
+ {
2007
+ "properties": {
2008
+ "country": {
2009
+ "const": "IN"
2010
+ },
2011
+ "system": {
2012
+ "const": "pin"
2013
+ }
2014
+ }
2015
+ },
2016
+ {
2017
+ "properties": {
2018
+ "country": {
2019
+ "const": "ZA"
2020
+ },
2021
+ "system": {
2022
+ "const": "postal_code"
2023
+ }
2024
+ }
2025
+ },
2026
+ {
2027
+ "properties": {
2028
+ "country": {
2029
+ "not": {
2030
+ "enum": [
2031
+ "US",
2032
+ "GB",
2033
+ "CA",
2034
+ "DE",
2035
+ "CH",
2036
+ "AT",
2037
+ "FR",
2038
+ "AU",
2039
+ "BR",
2040
+ "IN",
2041
+ "ZA"
2042
+ ]
2043
+ }
2044
+ },
2045
+ "system": {
2046
+ "enum": [
2047
+ "postal_code",
2048
+ "custom"
2049
+ ]
2050
+ }
2051
+ }
2052
+ }
2053
+ ]
2054
+ },
2055
+ "external:enums/postal-system.json": {
2056
+ "type": "string",
2057
+ "enum": [
2058
+ "postal_code",
2059
+ "zip",
2060
+ "zip_plus_four",
2061
+ "outward",
2062
+ "full",
2063
+ "fsa",
2064
+ "plz",
2065
+ "code_postal",
2066
+ "postcode",
2067
+ "cep",
2068
+ "pin",
2069
+ "custom",
2070
+ "us_zip",
2071
+ "us_zip_plus_four",
2072
+ "gb_outward",
2073
+ "gb_full",
2074
+ "ca_fsa",
2075
+ "ca_full",
2076
+ "de_plz",
2077
+ "fr_code_postal",
2078
+ "au_postcode",
2079
+ "ch_plz",
2080
+ "at_plz"
2081
+ ]
2082
+ },
2083
+ "external:enums/legacy-postal-system.json": {
2084
+ "type": "string",
2085
+ "deprecated": true,
2086
+ "enum": [
2087
+ "us_zip",
2088
+ "us_zip_plus_four",
2089
+ "gb_outward",
2090
+ "gb_full",
2091
+ "ca_fsa",
2092
+ "ca_full",
2093
+ "de_plz",
2094
+ "fr_code_postal",
2095
+ "au_postcode",
2096
+ "ch_plz",
2097
+ "at_plz"
2098
+ ]
2099
+ },
2100
+ "external:core/geo-place-area.json": {
2101
+ "x-adcp-validation": {
2102
+ "map_keys_subset_of_array": {
2103
+ "map_field": "value_labels",
2104
+ "array_field": "values"
2105
+ },
2106
+ "description": "Every value_labels key MUST also appear in values. JSON Schema draft-07 cannot express this sibling-field key membership constraint, so conformance tooling must enforce it."
2107
+ },
2108
+ "type": "object",
2109
+ "properties": {
2110
+ "country": {
2111
+ "type": "string",
2112
+ "pattern": "^[A-Z]{2}$"
2113
+ },
2114
+ "system": {
2115
+ "$ref": "#/$defs/external:core~1geo-place-system.json"
2116
+ },
2117
+ "system_version": {
2118
+ "type": "string",
2119
+ "minLength": 1
2120
+ },
2121
+ "place_type": {
2122
+ "$ref": "#/$defs/external:core~1geo-place-type.json"
2123
+ },
2124
+ "values": {
2125
+ "type": "array",
2126
+ "items": {
2127
+ "type": "string",
2128
+ "minLength": 1
2129
+ },
2130
+ "minItems": 1,
2131
+ "uniqueItems": true
2132
+ },
2133
+ "value_labels": {
2134
+ "type": "object",
2135
+ "additionalProperties": {
2136
+ "type": "string",
2137
+ "minLength": 1
2138
+ }
2139
+ },
2140
+ "ext": {
2141
+ "$ref": "#/$defs/external:core~1ext.json"
2142
+ }
2143
+ },
2144
+ "required": [
2145
+ "country",
2146
+ "system",
2147
+ "place_type",
2148
+ "values"
2149
+ ],
2150
+ "allOf": [
2151
+ {
2152
+ "if": {
2153
+ "properties": {
2154
+ "system": {
2155
+ "enum": [
2156
+ "geonames",
2157
+ "google_ads",
2158
+ "microsoft_ads"
2159
+ ]
2160
+ }
2161
+ },
2162
+ "required": [
2163
+ "system"
2164
+ ]
2165
+ },
2166
+ "then": {
2167
+ "properties": {
2168
+ "values": {
2169
+ "items": {
2170
+ "type": "string",
2171
+ "pattern": "^[0-9]+$"
2172
+ }
2173
+ }
2174
+ }
2175
+ }
2176
+ }
2177
+ ],
2178
+ "additionalProperties": false
2179
+ },
2180
+ "external:core/geo-place-system.json": {
2181
+ "anyOf": [
2182
+ {
2183
+ "type": "string",
2184
+ "enum": [
2185
+ "geonames",
2186
+ "google_ads",
2187
+ "microsoft_ads"
2188
+ ]
2189
+ },
2190
+ {
2191
+ "type": "string",
2192
+ "format": "uri",
2193
+ "pattern": "^https://"
2194
+ }
2195
+ ]
2196
+ },
2197
+ "external:core/geo-place-type.json": {
2198
+ "anyOf": [
2199
+ {
2200
+ "type": "string",
2201
+ "enum": [
2202
+ "airport",
2203
+ "borough",
2204
+ "city",
2205
+ "city_region",
2206
+ "commune",
2207
+ "county",
2208
+ "district",
2209
+ "municipality",
2210
+ "neighborhood",
2211
+ "post_town",
2212
+ "prefecture",
2213
+ "province",
2214
+ "quarter",
2215
+ "state",
2216
+ "territory",
2217
+ "ward"
2218
+ ]
2219
+ },
2220
+ {
2221
+ "type": "string",
2222
+ "format": "uri",
2223
+ "pattern": "^https://"
2224
+ }
2225
+ ]
2226
+ },
2227
+ "external:core/ext.json": {
2228
+ "type": "object",
2229
+ "additionalProperties": true
2230
+ },
2231
+ "external:core/daypart-target.json": {
2232
+ "type": "object",
2233
+ "properties": {
2234
+ "days": {
2235
+ "type": "array",
2236
+ "items": {
2237
+ "$ref": "#/$defs/external:enums~1day-of-week.json"
2238
+ },
2239
+ "minItems": 1
2240
+ },
2241
+ "start_hour": {
2242
+ "type": "integer",
2243
+ "minimum": 0,
2244
+ "maximum": 23
2245
+ },
2246
+ "end_hour": {
2247
+ "type": "integer",
2248
+ "minimum": 1,
2249
+ "maximum": 24
2250
+ },
2251
+ "label": {
2252
+ "type": "string"
2253
+ }
2254
+ },
2255
+ "required": [
2256
+ "days",
2257
+ "start_hour",
2258
+ "end_hour"
2259
+ ],
2260
+ "additionalProperties": false
2261
+ },
2262
+ "external:enums/day-of-week.json": {
2263
+ "type": "string",
2264
+ "enum": [
2265
+ "monday",
2266
+ "tuesday",
2267
+ "wednesday",
2268
+ "thursday",
2269
+ "friday",
2270
+ "saturday",
2271
+ "sunday"
2272
+ ]
2273
+ },
2274
+ "external:core/package-signal-targeting-groups.json": {
2275
+ "type": "object",
2276
+ "properties": {
2277
+ "operator": {
2278
+ "type": "string",
2279
+ "enum": [
2280
+ "all"
2281
+ ]
2282
+ },
2283
+ "groups": {
2284
+ "type": "array",
2285
+ "items": {
2286
+ "$ref": "#/$defs/external:core~1package-signal-targeting-group.json"
2287
+ },
2288
+ "minItems": 1
2289
+ }
2290
+ },
2291
+ "required": [
2292
+ "operator",
2293
+ "groups"
2294
+ ],
2295
+ "additionalProperties": true
2296
+ },
2297
+ "external:core/package-signal-targeting-group.json": {
2298
+ "type": "object",
2299
+ "properties": {
2300
+ "operator": {
2301
+ "type": "string",
2302
+ "enum": [
2303
+ "any",
2304
+ "none"
2305
+ ]
2306
+ },
2307
+ "signals": {
2308
+ "type": "array",
2309
+ "items": {
2310
+ "$ref": "#/$defs/external:core~1package-signal-targeting.json"
2311
+ },
2312
+ "minItems": 1
2313
+ }
2314
+ },
2315
+ "required": [
2316
+ "operator",
2317
+ "signals"
2318
+ ],
2319
+ "additionalProperties": true
2320
+ },
2321
+ "external:core/package-signal-targeting.json": {
2322
+ "type": "object",
2323
+ "allOf": [
2324
+ {
2325
+ "$ref": "#/$defs/external:core~1signal-targeting-expression.json"
2326
+ }
2327
+ ],
2328
+ "properties": {
2329
+ "pricing_option_id": {
2330
+ "type": "string",
2331
+ "x-entity": "vendor_pricing_option"
2332
+ },
2333
+ "signal_agent_segment_id": {
2334
+ "type": "string",
2335
+ "x-entity": "signal_activation_id"
2336
+ },
2337
+ "activation_key": {
2338
+ "$ref": "#/$defs/external:core~1activation-key.json"
2339
+ }
2340
+ },
2341
+ "additionalProperties": true
2342
+ },
2343
+ "external:core/signal-targeting-expression.json": {
2344
+ "discriminator": {
2345
+ "propertyName": "value_type"
2346
+ },
2347
+ "oneOf": [
2348
+ {
2349
+ "type": "object",
2350
+ "properties": {
2351
+ "signal_ref": {
2352
+ "$ref": "#/$defs/external:core~1signal-ref.json"
2353
+ },
2354
+ "value_type": {
2355
+ "type": "string",
2356
+ "const": "binary"
2357
+ },
2358
+ "value": {
2359
+ "type": "boolean",
2360
+ "const": true
2361
+ }
2362
+ },
2363
+ "required": [
2364
+ "signal_ref",
2365
+ "value_type",
2366
+ "value"
2367
+ ],
2368
+ "additionalProperties": true
2369
+ },
2370
+ {
2371
+ "type": "object",
2372
+ "properties": {
2373
+ "signal_ref": {
2374
+ "$ref": "#/$defs/external:core~1signal-ref.json"
2375
+ },
2376
+ "value_type": {
2377
+ "type": "string",
2378
+ "const": "categorical"
2379
+ },
2380
+ "values": {
2381
+ "type": "array",
2382
+ "items": {
2383
+ "type": "string"
2384
+ },
2385
+ "minItems": 1
2386
+ }
2387
+ },
2388
+ "required": [
2389
+ "signal_ref",
2390
+ "value_type",
2391
+ "values"
2392
+ ],
2393
+ "additionalProperties": true
2394
+ },
2395
+ {
2396
+ "type": "object",
2397
+ "properties": {
2398
+ "signal_ref": {
2399
+ "$ref": "#/$defs/external:core~1signal-ref.json"
2400
+ },
2401
+ "value_type": {
2402
+ "type": "string",
2403
+ "const": "numeric"
2404
+ },
2405
+ "min_value": {
2406
+ "type": "number"
2407
+ },
2408
+ "max_value": {
2409
+ "type": "number"
2410
+ }
2411
+ },
2412
+ "required": [
2413
+ "signal_ref",
2414
+ "value_type"
2415
+ ],
2416
+ "anyOf": [
2417
+ {
2418
+ "required": [
2419
+ "min_value"
2420
+ ]
2421
+ },
2422
+ {
2423
+ "required": [
2424
+ "max_value"
2425
+ ]
2426
+ }
2427
+ ],
2428
+ "additionalProperties": true
2429
+ }
2430
+ ]
2431
+ },
2432
+ "external:core/signal-ref.json": {
2433
+ "x-entity": "signal",
2434
+ "discriminator": {
2435
+ "propertyName": "scope"
2436
+ },
2437
+ "oneOf": [
2438
+ {
2439
+ "type": "object",
2440
+ "properties": {
2441
+ "scope": {
2442
+ "type": "string",
2443
+ "const": "product"
2444
+ },
2445
+ "signal_id": {
2446
+ "type": "string",
2447
+ "pattern": "^[a-zA-Z0-9_-]+$"
2448
+ }
2449
+ },
2450
+ "required": [
2451
+ "scope",
2452
+ "signal_id"
2453
+ ],
2454
+ "not": {
2455
+ "anyOf": [
2456
+ {
2457
+ "required": [
2458
+ "data_provider_domain"
2459
+ ]
2460
+ },
2461
+ {
2462
+ "required": [
2463
+ "signal_source_url"
2464
+ ]
2465
+ },
2466
+ {
2467
+ "required": [
2468
+ "agent_url"
2469
+ ]
2470
+ },
2471
+ {
2472
+ "required": [
2473
+ "source"
2474
+ ]
2475
+ },
2476
+ {
2477
+ "required": [
2478
+ "id"
2479
+ ]
2480
+ }
2481
+ ]
2482
+ },
2483
+ "additionalProperties": true
2484
+ },
2485
+ {
2486
+ "type": "object",
2487
+ "properties": {
2488
+ "scope": {
2489
+ "type": "string",
2490
+ "const": "data_provider"
2491
+ },
2492
+ "data_provider_domain": {
2493
+ "type": "string",
2494
+ "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
2495
+ },
2496
+ "signal_id": {
2497
+ "type": "string",
2498
+ "pattern": "^[a-zA-Z0-9_-]+$"
2499
+ }
2500
+ },
2501
+ "required": [
2502
+ "scope",
2503
+ "data_provider_domain",
2504
+ "signal_id"
2505
+ ],
2506
+ "not": {
2507
+ "anyOf": [
2508
+ {
2509
+ "required": [
2510
+ "agent_url"
2511
+ ]
2512
+ },
2513
+ {
2514
+ "required": [
2515
+ "signal_source_url"
2516
+ ]
2517
+ },
2518
+ {
2519
+ "required": [
2520
+ "source"
2521
+ ]
2522
+ },
2523
+ {
2524
+ "required": [
2525
+ "id"
2526
+ ]
2527
+ }
2528
+ ]
2529
+ },
2530
+ "additionalProperties": true
2531
+ },
2532
+ {
2533
+ "type": "object",
2534
+ "properties": {
2535
+ "scope": {
2536
+ "type": "string",
2537
+ "const": "signal_source"
2538
+ },
2539
+ "signal_source_url": {
2540
+ "type": "string",
2541
+ "format": "uri"
2542
+ },
2543
+ "signal_id": {
2544
+ "type": "string",
2545
+ "pattern": "^[a-zA-Z0-9_-]+$"
2546
+ }
2547
+ },
2548
+ "required": [
2549
+ "scope",
2550
+ "signal_source_url",
2551
+ "signal_id"
2552
+ ],
2553
+ "not": {
2554
+ "anyOf": [
2555
+ {
2556
+ "required": [
2557
+ "data_provider_domain"
2558
+ ]
2559
+ },
2560
+ {
2561
+ "required": [
2562
+ "agent_url"
2563
+ ]
2564
+ },
2565
+ {
2566
+ "required": [
2567
+ "source"
2568
+ ]
2569
+ },
2570
+ {
2571
+ "required": [
2572
+ "id"
2573
+ ]
2574
+ }
2575
+ ]
2576
+ },
2577
+ "additionalProperties": true
2578
+ }
2579
+ ]
2580
+ },
2581
+ "external:core/activation-key.json": {
2582
+ "type": "object",
2583
+ "discriminator": {
2584
+ "propertyName": "type"
2585
+ },
2586
+ "oneOf": [
2587
+ {
2588
+ "properties": {
2589
+ "type": {
2590
+ "type": "string",
2591
+ "const": "segment_id"
2592
+ },
2593
+ "segment_id": {
2594
+ "type": "string"
2595
+ }
2596
+ },
2597
+ "required": [
2598
+ "type",
2599
+ "segment_id"
2600
+ ],
2601
+ "additionalProperties": true
2602
+ },
2603
+ {
2604
+ "properties": {
2605
+ "type": {
2606
+ "type": "string",
2607
+ "const": "key_value"
2608
+ },
2609
+ "key": {
2610
+ "type": "string"
2611
+ },
2612
+ "value": {
2613
+ "type": "string"
2614
+ }
2615
+ },
2616
+ "required": [
2617
+ "type",
2618
+ "key",
2619
+ "value"
2620
+ ],
2621
+ "additionalProperties": true
2622
+ }
2623
+ ]
2624
+ },
2625
+ "external:core/signal-targeting.json": {
2626
+ "discriminator": {
2627
+ "propertyName": "value_type"
2628
+ },
2629
+ "oneOf": [
2630
+ {
2631
+ "type": "object",
2632
+ "properties": {
2633
+ "signal_ref": {
2634
+ "$ref": "#/$defs/external:core~1signal-ref.json"
2635
+ },
2636
+ "signal_id": {
2637
+ "$ref": "#/$defs/external:core~1signal-id.json",
2638
+ "deprecated": true
2639
+ },
2640
+ "value_type": {
2641
+ "type": "string",
2642
+ "const": "binary"
2643
+ },
2644
+ "value": {
2645
+ "type": "boolean"
2646
+ }
2647
+ },
2648
+ "required": [
2649
+ "value_type",
2650
+ "value"
2651
+ ],
2652
+ "anyOf": [
2653
+ {
2654
+ "required": [
2655
+ "signal_ref"
2656
+ ]
2657
+ },
2658
+ {
2659
+ "required": [
2660
+ "signal_id"
2661
+ ]
2662
+ }
2663
+ ],
2664
+ "additionalProperties": true
2665
+ },
2666
+ {
2667
+ "type": "object",
2668
+ "properties": {
2669
+ "signal_ref": {
2670
+ "$ref": "#/$defs/external:core~1signal-ref.json"
2671
+ },
2672
+ "signal_id": {
2673
+ "$ref": "#/$defs/external:core~1signal-id.json",
2674
+ "deprecated": true
2675
+ },
2676
+ "value_type": {
2677
+ "type": "string",
2678
+ "const": "categorical"
2679
+ },
2680
+ "values": {
2681
+ "type": "array",
2682
+ "items": {
2683
+ "type": "string"
2684
+ },
2685
+ "minItems": 1
2686
+ }
2687
+ },
2688
+ "required": [
2689
+ "value_type",
2690
+ "values"
2691
+ ],
2692
+ "anyOf": [
2693
+ {
2694
+ "required": [
2695
+ "signal_ref"
2696
+ ]
2697
+ },
2698
+ {
2699
+ "required": [
2700
+ "signal_id"
2701
+ ]
2702
+ }
2703
+ ],
2704
+ "additionalProperties": true
2705
+ },
2706
+ {
2707
+ "type": "object",
2708
+ "properties": {
2709
+ "signal_ref": {
2710
+ "$ref": "#/$defs/external:core~1signal-ref.json"
2711
+ },
2712
+ "signal_id": {
2713
+ "$ref": "#/$defs/external:core~1signal-id.json",
2714
+ "deprecated": true
2715
+ },
2716
+ "value_type": {
2717
+ "type": "string",
2718
+ "const": "numeric"
2719
+ },
2720
+ "min_value": {
2721
+ "type": "number"
2722
+ },
2723
+ "max_value": {
2724
+ "type": "number"
2725
+ }
2726
+ },
2727
+ "required": [
2728
+ "value_type"
2729
+ ],
2730
+ "anyOf": [
2731
+ {
2732
+ "required": [
2733
+ "signal_ref"
2734
+ ]
2735
+ },
2736
+ {
2737
+ "required": [
2738
+ "signal_id"
2739
+ ]
2740
+ }
2741
+ ],
2742
+ "additionalProperties": true
2743
+ }
2744
+ ]
2745
+ },
2746
+ "external:core/signal-id.json": {
2747
+ "deprecated": true,
2748
+ "x-entity": "signal",
2749
+ "discriminator": {
2750
+ "propertyName": "source"
2751
+ },
2752
+ "oneOf": [
2753
+ {
2754
+ "type": "object",
2755
+ "properties": {
2756
+ "source": {
2757
+ "type": "string",
2758
+ "const": "catalog"
2759
+ },
2760
+ "data_provider_domain": {
2761
+ "type": "string",
2762
+ "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
2763
+ },
2764
+ "id": {
2765
+ "type": "string",
2766
+ "pattern": "^[a-zA-Z0-9_-]+$"
2767
+ }
2768
+ },
2769
+ "required": [
2770
+ "source",
2771
+ "data_provider_domain",
2772
+ "id"
2773
+ ],
2774
+ "additionalProperties": true
2775
+ },
2776
+ {
2777
+ "type": "object",
2778
+ "properties": {
2779
+ "source": {
2780
+ "type": "string",
2781
+ "const": "agent"
2782
+ },
2783
+ "agent_url": {
2784
+ "type": "string",
2785
+ "format": "uri"
2786
+ },
2787
+ "id": {
2788
+ "type": "string",
2789
+ "pattern": "^[a-zA-Z0-9_-]+$"
2790
+ }
2791
+ },
2792
+ "required": [
2793
+ "source",
2794
+ "agent_url",
2795
+ "id"
2796
+ ],
2797
+ "additionalProperties": true
2798
+ }
2799
+ ]
2800
+ },
2801
+ "external:core/demographic-targeting-intent.json": {
2802
+ "type": "object",
2803
+ "properties": {
2804
+ "age": {
2805
+ "allOf": [
2806
+ {
2807
+ "$ref": "#/$defs/external:core~1demographic-age-range.json"
2808
+ },
2809
+ {
2810
+ "type": "object",
2811
+ "properties": {
2812
+ "accepted_bases": {
2813
+ "type": "array",
2814
+ "items": {
2815
+ "$ref": "#/$defs/external:enums~1age-determination-basis.json"
2816
+ },
2817
+ "minItems": 1,
2818
+ "uniqueItems": true
2819
+ },
2820
+ "accepted_verification_methods": {
2821
+ "type": "array",
2822
+ "items": {
2823
+ "$ref": "#/$defs/external:enums~1age-verification-method.json"
2824
+ },
2825
+ "minItems": 1,
2826
+ "uniqueItems": true
2827
+ }
2828
+ },
2829
+ "allOf": [
2830
+ {
2831
+ "if": {
2832
+ "required": [
2833
+ "accepted_verification_methods"
2834
+ ]
2835
+ },
2836
+ "then": {
2837
+ "required": [
2838
+ "accepted_bases"
2839
+ ],
2840
+ "properties": {
2841
+ "accepted_bases": {
2842
+ "contains": {
2843
+ "const": "verified"
2844
+ }
2845
+ }
2846
+ }
2847
+ }
2848
+ }
2849
+ ],
2850
+ "additionalProperties": true
2851
+ }
2852
+ ]
2853
+ }
2854
+ },
2855
+ "required": [
2856
+ "age"
2857
+ ],
2858
+ "additionalProperties": true
2859
+ },
2860
+ "external:core/demographic-age-range.json": {
2861
+ "type": "object",
2862
+ "properties": {
2863
+ "min": {
2864
+ "type": "integer",
2865
+ "minimum": 0,
2866
+ "maximum": 150
2867
+ },
2868
+ "max": {
2869
+ "type": "integer",
2870
+ "minimum": 0,
2871
+ "maximum": 150
2872
+ },
2873
+ "include_unknown": {
2874
+ "type": "boolean"
2875
+ }
2876
+ },
2877
+ "required": [
2878
+ "include_unknown"
2879
+ ],
2880
+ "anyOf": [
2881
+ {
2882
+ "required": [
2883
+ "min"
2884
+ ]
2885
+ },
2886
+ {
2887
+ "required": [
2888
+ "max"
2889
+ ]
2890
+ }
2891
+ ],
2892
+ "additionalProperties": true
2893
+ },
2894
+ "external:enums/age-determination-basis.json": {
2895
+ "type": "string",
2896
+ "enum": [
2897
+ "verified",
2898
+ "declared",
2899
+ "inferred"
2900
+ ]
2901
+ },
2902
+ "external:enums/age-verification-method.json": {
2903
+ "type": "string",
2904
+ "enum": [
2905
+ "facial_age_estimation",
2906
+ "id_document",
2907
+ "digital_id",
2908
+ "credit_card",
2909
+ "world_id"
2910
+ ]
2911
+ },
2912
+ "external:core/frequency-cap.json": {
2913
+ "type": "object",
2914
+ "properties": {
2915
+ "suppress": {
2916
+ "allOf": [
2917
+ {
2918
+ "$ref": "#/$defs/external:core~1duration.json"
2919
+ }
2920
+ ]
2921
+ },
2922
+ "suppress_minutes": {
2923
+ "type": "number",
2924
+ "deprecated": true,
2925
+ "minimum": 0
2926
+ },
2927
+ "max_impressions": {
2928
+ "type": "integer",
2929
+ "minimum": 1
2930
+ },
2931
+ "per": {
2932
+ "allOf": [
2933
+ {
2934
+ "$ref": "#/$defs/external:enums~1reach-unit.json"
2935
+ }
2936
+ ]
2937
+ },
2938
+ "window": {
2939
+ "allOf": [
2940
+ {
2941
+ "$ref": "#/$defs/external:core~1duration.json"
2942
+ }
2943
+ ]
2944
+ }
2945
+ },
2946
+ "anyOf": [
2947
+ {
2948
+ "required": [
2949
+ "suppress"
2950
+ ]
2951
+ },
2952
+ {
2953
+ "required": [
2954
+ "suppress_minutes"
2955
+ ]
2956
+ },
2957
+ {
2958
+ "required": [
2959
+ "max_impressions"
2960
+ ]
2961
+ }
2962
+ ],
2963
+ "additionalProperties": true,
2964
+ "dependentRequired": {
2965
+ "max_impressions": [
2966
+ "per",
2967
+ "window"
2968
+ ],
2969
+ "per": [
2970
+ "max_impressions"
2971
+ ],
2972
+ "window": [
2973
+ "max_impressions"
2974
+ ]
2975
+ }
2976
+ },
2977
+ "external:core/property-list-ref.json": {
2978
+ "type": "object",
2979
+ "properties": {
2980
+ "agent_url": {
2981
+ "type": "string",
2982
+ "format": "uri"
2983
+ },
2984
+ "list_id": {
2985
+ "type": "string",
2986
+ "minLength": 1,
2987
+ "x-entity": "property_list"
2988
+ },
2989
+ "auth_token": {
2990
+ "type": "string"
2991
+ }
2992
+ },
2993
+ "required": [
2994
+ "agent_url",
2995
+ "list_id"
2996
+ ],
2997
+ "additionalProperties": false
2998
+ },
2999
+ "external:core/collection-list-ref.json": {
3000
+ "type": "object",
3001
+ "properties": {
3002
+ "agent_url": {
3003
+ "type": "string",
3004
+ "format": "uri"
3005
+ },
3006
+ "list_id": {
3007
+ "type": "string",
3008
+ "minLength": 1,
3009
+ "x-entity": "collection_list"
3010
+ },
3011
+ "auth_token": {
3012
+ "type": "string"
3013
+ }
3014
+ },
3015
+ "required": [
3016
+ "agent_url",
3017
+ "list_id"
3018
+ ],
3019
+ "additionalProperties": false
3020
+ },
3021
+ "external:core/placement-selection.json": {
3022
+ "type": "object",
3023
+ "discriminator": {
3024
+ "propertyName": "mode"
3025
+ },
3026
+ "oneOf": [
3027
+ {
3028
+ "type": "object",
3029
+ "properties": {
3030
+ "mode": {
3031
+ "type": "string",
3032
+ "const": "selected"
3033
+ },
3034
+ "placement_refs": {
3035
+ "type": "array",
3036
+ "items": {
3037
+ "allOf": [
3038
+ {
3039
+ "$ref": "#/$defs/external:core~1placement-ref.json"
3040
+ },
3041
+ {
3042
+ "required": [
3043
+ "publisher_domain"
3044
+ ]
3045
+ }
3046
+ ]
3047
+ },
3048
+ "minItems": 1,
3049
+ "uniqueItems": true
3050
+ },
3051
+ "ext": {
3052
+ "$ref": "#/$defs/external:core~1ext.json"
3053
+ }
3054
+ },
3055
+ "required": [
3056
+ "mode",
3057
+ "placement_refs"
3058
+ ],
3059
+ "additionalProperties": false
3060
+ },
3061
+ {
3062
+ "type": "object",
3063
+ "properties": {
3064
+ "mode": {
3065
+ "type": "string",
3066
+ "const": "default"
3067
+ },
3068
+ "ext": {
3069
+ "$ref": "#/$defs/external:core~1ext.json"
3070
+ }
3071
+ },
3072
+ "required": [
3073
+ "mode"
3074
+ ],
3075
+ "additionalProperties": false
3076
+ }
3077
+ ]
3078
+ },
3079
+ "external:core/placement-ref.json": {
3080
+ "type": "object",
3081
+ "properties": {
3082
+ "publisher_domain": {
3083
+ "type": "string",
3084
+ "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
3085
+ },
3086
+ "placement_id": {
3087
+ "type": "string",
3088
+ "x-entity": "placement"
3089
+ }
3090
+ },
3091
+ "required": [
3092
+ "placement_id"
3093
+ ],
3094
+ "additionalProperties": true
3095
+ },
3096
+ "external:enums/device-platform.json": {
3097
+ "type": "string",
3098
+ "enum": [
3099
+ "ios",
3100
+ "android",
3101
+ "windows",
3102
+ "macos",
3103
+ "linux",
3104
+ "chromeos",
3105
+ "tvos",
3106
+ "tizen",
3107
+ "webos",
3108
+ "fire_os",
3109
+ "roku_os",
3110
+ "unknown"
3111
+ ]
3112
+ },
3113
+ "external:enums/device-type.json": {
3114
+ "type": "string",
3115
+ "enum": [
3116
+ "desktop",
3117
+ "mobile",
3118
+ "tablet",
3119
+ "ctv",
3120
+ "dooh",
3121
+ "unknown"
3122
+ ]
3123
+ },
3124
+ "external:enums/browser-family.json": {
3125
+ "type": "string",
3126
+ "enum": [
3127
+ "chrome",
3128
+ "safari",
3129
+ "firefox",
3130
+ "edge",
3131
+ "opera",
3132
+ "samsung_internet",
3133
+ "android_webview",
3134
+ "other",
3135
+ "unknown"
3136
+ ]
3137
+ },
3138
+ "external:enums/travel-time-unit.json": {
3139
+ "type": "string",
3140
+ "enum": [
3141
+ "min",
3142
+ "hr"
3143
+ ]
3144
+ },
3145
+ "external:enums/transport-mode.json": {
3146
+ "type": "string",
3147
+ "enum": [
3148
+ "walking",
3149
+ "cycling",
3150
+ "driving",
3151
+ "public_transport"
3152
+ ]
3153
+ },
3154
+ "external:enums/distance-unit.json": {
3155
+ "type": "string",
3156
+ "enum": [
3157
+ "km",
3158
+ "mi",
3159
+ "m"
3160
+ ]
3161
+ },
3162
+ "external:core/locale-tag.json": {
3163
+ "x-adcp-validation": {
3164
+ "verifier_constraints": {
3165
+ "well_formed": "rfc5646",
3166
+ "semantic_scope": "language_identity_only",
3167
+ "canonical_wire_profile": "adcp_bcp47_casing",
3168
+ "rfc5646_comparison": "case_insensitive",
3169
+ "non_profile": "reject"
3170
+ },
3171
+ "spec": "docs/protocol/language-and-localization.mdx#one-language-tag-primitive"
3172
+ },
3173
+ "type": "string",
3174
+ "minLength": 2,
3175
+ "maxLength": 63,
3176
+ "pattern": "^(?:[a-z]{2,8}(?:-[A-Z][a-z]{3})?(?:-(?:[A-Z]{2}|[0-9]{3}))?(?:-(?:[a-z0-9]{5,8}|[0-9][a-z0-9]{3}))*(?:-[0-9a-wy-z](?:-[a-z0-9]{2,8})+)*(?:-x(?:-[a-z0-9]{1,8})+)?|x(?:-[a-z0-9]{1,8})+)$"
3177
+ },
3178
+ "external:enums/match-type.json": {
3179
+ "type": "string",
3180
+ "enum": [
3181
+ "broad",
3182
+ "phrase",
3183
+ "exact"
3184
+ ]
3185
+ },
3186
+ "external:core/keyword-target.json": {
3187
+ "type": "object",
3188
+ "properties": {
3189
+ "keyword": {
3190
+ "type": "string",
3191
+ "minLength": 1
3192
+ },
3193
+ "match_type": {
3194
+ "$ref": "#/$defs/external:enums~1match-type.json"
3195
+ },
3196
+ "bid_price": {
3197
+ "type": "number",
3198
+ "minimum": 0
3199
+ }
3200
+ },
3201
+ "required": [
3202
+ "keyword",
3203
+ "match_type"
3204
+ ],
3205
+ "additionalProperties": false
3206
+ },
3207
+ "external:core/reporting-webhook.json": {
3208
+ "type": "object",
3209
+ "properties": {
3210
+ "url": {
3211
+ "type": "string",
3212
+ "format": "uri"
3213
+ },
3214
+ "token": {
3215
+ "type": "string",
3216
+ "minLength": 16
3217
+ },
3218
+ "authentication": {
3219
+ "type": "object",
3220
+ "deprecated": true,
3221
+ "properties": {
3222
+ "schemes": {
3223
+ "type": "array",
3224
+ "items": {
3225
+ "$ref": "#/$defs/external:enums~1auth-scheme.json"
3226
+ },
3227
+ "minItems": 1,
3228
+ "maxItems": 1
3229
+ },
3230
+ "credentials": {
3231
+ "type": "string",
3232
+ "minLength": 32
3233
+ }
3234
+ },
3235
+ "required": [
3236
+ "schemes",
3237
+ "credentials"
3238
+ ],
3239
+ "additionalProperties": false
3240
+ },
3241
+ "reporting_frequency": {
3242
+ "type": "string",
3243
+ "enum": [
3244
+ "hourly",
3245
+ "daily",
3246
+ "monthly"
3247
+ ]
3248
+ },
3249
+ "requested_metrics": {
3250
+ "type": "array",
3251
+ "items": {
3252
+ "$ref": "#/$defs/external:enums~1available-metric.json"
3253
+ },
3254
+ "uniqueItems": true
3255
+ }
3256
+ },
3257
+ "required": [
3258
+ "url",
3259
+ "authentication",
3260
+ "reporting_frequency"
3261
+ ],
3262
+ "additionalProperties": true
3263
+ },
3264
+ "external:enums/auth-scheme.json": {
3265
+ "deprecated": true,
3266
+ "type": "string",
3267
+ "enum": [
3268
+ "Bearer",
3269
+ "HMAC-SHA256"
3270
+ ]
3271
+ },
3272
+ "external:enums/available-metric.json": {
3273
+ "type": "string",
3274
+ "enum": [
3275
+ "impressions",
3276
+ "spend",
3277
+ "clicks",
3278
+ "ctr",
3279
+ "views",
3280
+ "completed_views",
3281
+ "completion_rate",
3282
+ "conversions",
3283
+ "conversion_value",
3284
+ "commissionable_value",
3285
+ "roas",
3286
+ "cost_per_acquisition",
3287
+ "new_to_brand_rate",
3288
+ "leads",
3289
+ "reach",
3290
+ "frequency",
3291
+ "grps",
3292
+ "engagements",
3293
+ "engagement_rate",
3294
+ "follows",
3295
+ "saves",
3296
+ "profile_visits",
3297
+ "viewability",
3298
+ "quartile_data",
3299
+ "dooh_metrics",
3300
+ "cost_per_click",
3301
+ "cost_per_completed_view",
3302
+ "cpm",
3303
+ "downloads",
3304
+ "units_sold",
3305
+ "new_to_brand_units",
3306
+ "plays",
3307
+ "incremental_sales_lift",
3308
+ "brand_lift",
3309
+ "foot_traffic",
3310
+ "conversion_lift",
3311
+ "brand_search_lift"
3312
+ ]
3313
+ },
3314
+ "external:core/push-notification-config.json": {
3315
+ "type": "object",
3316
+ "properties": {
3317
+ "url": {
3318
+ "type": "string",
3319
+ "format": "uri"
3320
+ },
3321
+ "operation_id": {
3322
+ "type": "string",
3323
+ "minLength": 1,
3324
+ "maxLength": 255,
3325
+ "pattern": "^[A-Za-z0-9_.:-]{1,255}$"
3326
+ },
3327
+ "token": {
3328
+ "type": "string",
3329
+ "minLength": 16,
3330
+ "maxLength": 4096
3331
+ },
3332
+ "authentication": {
3333
+ "type": "object",
3334
+ "deprecated": true,
3335
+ "properties": {
3336
+ "schemes": {
3337
+ "type": "array",
3338
+ "items": {
3339
+ "$ref": "#/$defs/external:enums~1auth-scheme.json"
3340
+ },
3341
+ "minItems": 1,
3342
+ "maxItems": 1
3343
+ },
3344
+ "credentials": {
3345
+ "type": "string",
3346
+ "minLength": 32
3347
+ }
3348
+ },
3349
+ "required": [
3350
+ "schemes",
3351
+ "credentials"
3352
+ ],
3353
+ "additionalProperties": false
3354
+ }
3355
+ },
3356
+ "required": [
3357
+ "url"
3358
+ ]
3359
+ },
3360
+ "external:core/context.json": {
3361
+ "type": "object",
3362
+ "additionalProperties": true
3363
+ }
3364
+ }
3365
+ }