@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,4107 @@
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/buy-products-request.json",
4
+ "type": "object",
5
+ "x-mutates-state": true,
6
+ "x-governed-commitment": {
7
+ "scope": "always"
8
+ },
9
+ "x-operation-family": "buy_products",
10
+ "x-added-in": "3.2.0",
11
+ "x-legacy-fallback": {
12
+ "tool": "create_media_buy",
13
+ "mode": "orchestrated"
14
+ },
15
+ "properties": {
16
+ "adcp_version": {
17
+ "$ref": "#/$defs/external:core~1version-envelope.json/properties/adcp_version"
18
+ },
19
+ "idempotency_key": {
20
+ "type": "string",
21
+ "minLength": 16,
22
+ "maxLength": 255,
23
+ "pattern": "^[A-Za-z0-9_.:-]{16,255}$"
24
+ },
25
+ "account": {
26
+ "allOf": [
27
+ {
28
+ "$ref": "#/$defs/external:core~1canonical-account-ref.json"
29
+ }
30
+ ]
31
+ },
32
+ "brand": {
33
+ "$ref": "#/$defs/external:core~1brand-key.json"
34
+ },
35
+ "advertiser_industry": {
36
+ "$ref": "#/$defs/external:enums~1advertiser-industry.json"
37
+ },
38
+ "feed_version": {
39
+ "type": "string",
40
+ "minLength": 1
41
+ },
42
+ "pricing_version": {
43
+ "type": "string",
44
+ "minLength": 1
45
+ },
46
+ "purchases": {
47
+ "type": "array",
48
+ "items": {
49
+ "$ref": "#/$defs/external:media-buy~1product-purchase.json"
50
+ },
51
+ "minItems": 1
52
+ },
53
+ "total_budget": {
54
+ "type": "object",
55
+ "properties": {
56
+ "amount": {
57
+ "type": "number",
58
+ "minimum": 0
59
+ },
60
+ "currency": {
61
+ "type": "string",
62
+ "pattern": "^[A-Z]{3}$"
63
+ }
64
+ },
65
+ "required": [
66
+ "amount",
67
+ "currency"
68
+ ],
69
+ "additionalProperties": false
70
+ },
71
+ "daily_budget_cap": {
72
+ "type": "number",
73
+ "minimum": 0
74
+ },
75
+ "budget_cap_timezone": {
76
+ "type": "string",
77
+ "minLength": 1
78
+ },
79
+ "budget_allocation": {
80
+ "$ref": "#/$defs/external:core~1canonical-budget-allocation.json"
81
+ },
82
+ "start_time": {
83
+ "$ref": "#/$defs/external:core~1start-timing.json"
84
+ },
85
+ "end_time": {
86
+ "type": "string",
87
+ "format": "date-time"
88
+ },
89
+ "pacing": {
90
+ "$ref": "#/$defs/external:enums~1pacing.json"
91
+ },
92
+ "bidding": {
93
+ "$ref": "#/$defs/external:core~1bidding-policy.json"
94
+ },
95
+ "paused": {
96
+ "type": "boolean",
97
+ "default": false
98
+ },
99
+ "purchase_order_ref": {
100
+ "type": "string",
101
+ "minLength": 1,
102
+ "maxLength": 255
103
+ },
104
+ "agency_estimate_number": {
105
+ "type": "string",
106
+ "maxLength": 100
107
+ },
108
+ "invoice_recipient": {
109
+ "$ref": "#/$defs/external:core~1business-entity.json"
110
+ },
111
+ "governance_context": {
112
+ "type": "string",
113
+ "minLength": 1,
114
+ "maxLength": 4096
115
+ },
116
+ "push_notification_config": {
117
+ "$ref": "#/$defs/external:core~1push-notification-config.json"
118
+ },
119
+ "reporting_webhook": {
120
+ "$ref": "#/$defs/external:core~1reporting-webhook.json"
121
+ },
122
+ "opportunity": {
123
+ "allOf": [
124
+ {
125
+ "$ref": "#/$defs/external:core~1opportunity-context.json"
126
+ },
127
+ {
128
+ "properties": {
129
+ "status": {
130
+ "const": "closed"
131
+ }
132
+ },
133
+ "if": {
134
+ "properties": {
135
+ "status": {
136
+ "const": "closed"
137
+ }
138
+ },
139
+ "required": [
140
+ "status"
141
+ ]
142
+ },
143
+ "then": {
144
+ "properties": {
145
+ "close_reason": {
146
+ "const": "accepted_with_seller"
147
+ }
148
+ }
149
+ }
150
+ }
151
+ ]
152
+ },
153
+ "context": {
154
+ "$ref": "#/$defs/external:core~1context.json"
155
+ },
156
+ "ext": {
157
+ "$ref": "#/$defs/external:core~1ext.json"
158
+ }
159
+ },
160
+ "required": [
161
+ "idempotency_key",
162
+ "account",
163
+ "feed_version",
164
+ "purchases",
165
+ "start_time",
166
+ "end_time"
167
+ ],
168
+ "anyOf": [
169
+ {
170
+ "required": [
171
+ "brand"
172
+ ]
173
+ },
174
+ {
175
+ "properties": {
176
+ "account": {
177
+ "required": [
178
+ "brand",
179
+ "operator"
180
+ ]
181
+ }
182
+ }
183
+ }
184
+ ],
185
+ "allOf": [
186
+ {
187
+ "not": {
188
+ "properties": {
189
+ "account": {
190
+ "required": [
191
+ "brand",
192
+ "operator"
193
+ ]
194
+ }
195
+ },
196
+ "required": [
197
+ "account",
198
+ "brand"
199
+ ]
200
+ }
201
+ }
202
+ ],
203
+ "additionalProperties": false,
204
+ "not": {
205
+ "anyOf": [
206
+ {
207
+ "required": [
208
+ "packages"
209
+ ]
210
+ },
211
+ {
212
+ "required": [
213
+ "proposal_id"
214
+ ]
215
+ },
216
+ {
217
+ "required": [
218
+ "creatives"
219
+ ]
220
+ },
221
+ {
222
+ "required": [
223
+ "creative_assignments"
224
+ ]
225
+ },
226
+ {
227
+ "required": [
228
+ "artifact_webhook"
229
+ ]
230
+ }
231
+ ]
232
+ },
233
+ "$defs": {
234
+ "external:core/version-envelope.json": {
235
+ "type": "object",
236
+ "properties": {
237
+ "adcp_version": {
238
+ "type": "string",
239
+ "pattern": "^(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)(?:-[a-zA-Z0-9](?:[a-zA-Z0-9.-]*[a-zA-Z0-9])?)?$"
240
+ },
241
+ "adcp_major_version": {
242
+ "type": "integer",
243
+ "deprecated": true,
244
+ "minimum": 1,
245
+ "maximum": 99
246
+ }
247
+ }
248
+ },
249
+ "external:core/canonical-account-ref.json": {
250
+ "type": "object",
251
+ "anyOf": [
252
+ {
253
+ "properties": {
254
+ "account_id": {
255
+ "type": "string",
256
+ "minLength": 1,
257
+ "x-entity": "account"
258
+ }
259
+ },
260
+ "required": [
261
+ "account_id"
262
+ ],
263
+ "additionalProperties": false
264
+ },
265
+ {
266
+ "properties": {
267
+ "brand": {
268
+ "$ref": "#/$defs/external:core~1brand-key.json"
269
+ },
270
+ "operator": {
271
+ "type": "string",
272
+ "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$",
273
+ "x-entity": "operator"
274
+ },
275
+ "operator_unit": {
276
+ "$ref": "#/$defs/external:core~1operator-unit.json"
277
+ },
278
+ "currency": {
279
+ "type": "string",
280
+ "pattern": "^[A-Z]{3}$"
281
+ },
282
+ "timezone": {
283
+ "type": "string",
284
+ "minLength": 1
285
+ },
286
+ "sandbox": {
287
+ "type": "boolean",
288
+ "default": false
289
+ }
290
+ },
291
+ "required": [
292
+ "brand",
293
+ "operator"
294
+ ],
295
+ "additionalProperties": false
296
+ }
297
+ ]
298
+ },
299
+ "external:core/brand-key.json": {
300
+ "type": "object",
301
+ "properties": {
302
+ "domain": {
303
+ "type": "string",
304
+ "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
305
+ },
306
+ "brand_id": {
307
+ "$ref": "#/$defs/external:core~1brand-id.json"
308
+ },
309
+ "countries": {
310
+ "type": "array",
311
+ "items": {
312
+ "type": "string",
313
+ "pattern": "^[A-Z]{2}$"
314
+ },
315
+ "minItems": 1,
316
+ "uniqueItems": true
317
+ }
318
+ },
319
+ "required": [
320
+ "domain"
321
+ ],
322
+ "additionalProperties": false
323
+ },
324
+ "external:core/brand-id.json": {
325
+ "type": "string",
326
+ "pattern": "^[a-z0-9_]+$",
327
+ "x-entity": "advertiser_brand"
328
+ },
329
+ "external:core/operator-unit.json": {
330
+ "x-entity": "operator_unit",
331
+ "type": "object",
332
+ "properties": {
333
+ "id": {
334
+ "type": "string",
335
+ "minLength": 1,
336
+ "maxLength": 255,
337
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/-]*$"
338
+ },
339
+ "name": {
340
+ "type": "string",
341
+ "minLength": 1,
342
+ "maxLength": 200
343
+ }
344
+ },
345
+ "required": [
346
+ "id"
347
+ ],
348
+ "additionalProperties": false
349
+ },
350
+ "external:enums/advertiser-industry.json": {
351
+ "type": "string",
352
+ "x-extensible": true,
353
+ "x-pattern": "^[a-z][a-z0-9_]+(\\.[a-z][a-z0-9_]+)?$",
354
+ "enum": [
355
+ "automotive",
356
+ "automotive.electric_vehicles",
357
+ "automotive.parts_accessories",
358
+ "automotive.luxury",
359
+ "beauty_cosmetics",
360
+ "beauty_cosmetics.skincare",
361
+ "beauty_cosmetics.fragrance",
362
+ "beauty_cosmetics.haircare",
363
+ "cannabis",
364
+ "cpg",
365
+ "cpg.personal_care",
366
+ "cpg.household",
367
+ "dating",
368
+ "education",
369
+ "education.higher_education",
370
+ "education.online_learning",
371
+ "education.k12",
372
+ "energy_utilities",
373
+ "energy_utilities.renewable",
374
+ "fashion_apparel",
375
+ "fashion_apparel.luxury",
376
+ "fashion_apparel.sportswear",
377
+ "finance",
378
+ "finance.banking",
379
+ "finance.insurance",
380
+ "finance.investment",
381
+ "finance.cryptocurrency",
382
+ "food_beverage",
383
+ "food_beverage.alcohol",
384
+ "food_beverage.restaurants",
385
+ "food_beverage.packaged_goods",
386
+ "gambling_betting",
387
+ "gambling_betting.sports_betting",
388
+ "gambling_betting.casino",
389
+ "gaming",
390
+ "gaming.mobile",
391
+ "gaming.console_pc",
392
+ "gaming.esports",
393
+ "government_nonprofit",
394
+ "government_nonprofit.political",
395
+ "government_nonprofit.charity",
396
+ "healthcare",
397
+ "healthcare.pharmaceutical",
398
+ "healthcare.medical_devices",
399
+ "healthcare.wellness",
400
+ "home_garden",
401
+ "home_garden.furniture",
402
+ "home_garden.home_improvement",
403
+ "media_entertainment",
404
+ "media_entertainment.podcasts",
405
+ "media_entertainment.music",
406
+ "media_entertainment.film_tv",
407
+ "media_entertainment.publishing",
408
+ "media_entertainment.live_events",
409
+ "pets",
410
+ "professional_services",
411
+ "professional_services.legal",
412
+ "professional_services.consulting",
413
+ "real_estate",
414
+ "real_estate.residential",
415
+ "real_estate.commercial",
416
+ "recruitment_hr",
417
+ "retail",
418
+ "retail.ecommerce",
419
+ "retail.department_stores",
420
+ "sports_fitness",
421
+ "sports_fitness.equipment",
422
+ "sports_fitness.teams_leagues",
423
+ "technology",
424
+ "technology.software",
425
+ "technology.hardware",
426
+ "technology.ai_ml",
427
+ "telecom",
428
+ "telecom.mobile_carriers",
429
+ "telecom.internet_providers",
430
+ "transportation_logistics",
431
+ "travel_hospitality",
432
+ "travel_hospitality.airlines",
433
+ "travel_hospitality.hotels",
434
+ "travel_hospitality.cruise",
435
+ "travel_hospitality.tourism"
436
+ ]
437
+ },
438
+ "external:media-buy/product-purchase.json": {
439
+ "type": "object",
440
+ "x-adcp-validation": {
441
+ "verifier_constraints": {
442
+ "direct_purchase_terms": "On buy_products, supplied start_time, end_time, measurement_terms, and performance_standards MUST exactly match the selected published offer; omission inherits that offer.",
443
+ "accepted_snapshot_terms": "Inside canonical-proposal.commercial_terms, each purchase MUST carry resolved start_time and end_time and MUST preserve every applicable measurement term and performance standard. Omission of measurement_terms or performance_standards means the accepted offer declared none.",
444
+ "pricing_identity": {
445
+ "pricing_option_id": "equals_pricing.pricing_option_id_when_pricing_present",
446
+ "on_violation": "reject_before_commitment"
447
+ }
448
+ }
449
+ },
450
+ "properties": {
451
+ "product_id": {
452
+ "type": "string",
453
+ "minLength": 1,
454
+ "x-entity": "product"
455
+ },
456
+ "pricing_option_id": {
457
+ "type": "string",
458
+ "minLength": 1,
459
+ "x-entity": "product_pricing_option"
460
+ },
461
+ "pricing": {
462
+ "$ref": "#/$defs/external:core~1canonical-pricing-option.json"
463
+ },
464
+ "format_option_refs": {
465
+ "type": "array",
466
+ "items": {
467
+ "$ref": "#/$defs/external:core~1format-option-ref.json"
468
+ },
469
+ "minItems": 1
470
+ },
471
+ "catalog_ids": {
472
+ "type": "array",
473
+ "items": {
474
+ "type": "string",
475
+ "minLength": 1,
476
+ "x-entity": "catalog"
477
+ },
478
+ "minItems": 1,
479
+ "uniqueItems": true
480
+ },
481
+ "budget": {
482
+ "type": "number",
483
+ "minimum": 0
484
+ },
485
+ "daily_budget_cap": {
486
+ "type": "number",
487
+ "minimum": 0
488
+ },
489
+ "min_spend_target": {
490
+ "type": "number",
491
+ "minimum": 0
492
+ },
493
+ "impressions": {
494
+ "type": "number",
495
+ "minimum": 0
496
+ },
497
+ "start_time": {
498
+ "type": "string",
499
+ "format": "date-time",
500
+ "not": {
501
+ "const": "asap"
502
+ }
503
+ },
504
+ "end_time": {
505
+ "type": "string",
506
+ "format": "date-time"
507
+ },
508
+ "pacing": {
509
+ "$ref": "#/$defs/external:enums~1pacing.json"
510
+ },
511
+ "bidding": {
512
+ "$ref": "#/$defs/external:core~1bidding-policy.json"
513
+ },
514
+ "targeting_overlay": {
515
+ "$ref": "#/$defs/external:core~1targeting.json"
516
+ },
517
+ "optimization_goals": {
518
+ "type": "array",
519
+ "items": {
520
+ "$ref": "#/$defs/external:core~1canonical-optimization-goal.json"
521
+ },
522
+ "minItems": 1
523
+ },
524
+ "audience_evidence_requirements": {
525
+ "$ref": "#/$defs/external:core~1product-audience-evidence-requirements.json"
526
+ },
527
+ "audience_evidence_pins": {
528
+ "type": "array",
529
+ "items": {
530
+ "$ref": "#/$defs/external:core~1audience-evidence-pin.json"
531
+ },
532
+ "minItems": 1
533
+ },
534
+ "agency_estimate_number": {
535
+ "type": "string",
536
+ "maxLength": 100
537
+ },
538
+ "context": {
539
+ "$ref": "#/$defs/external:core~1context.json"
540
+ },
541
+ "ext": {
542
+ "$ref": "#/$defs/external:core~1ext.json"
543
+ },
544
+ "measurement_terms": {
545
+ "$ref": "#/$defs/external:core~1canonical-measurement-terms.json"
546
+ },
547
+ "performance_standards": {
548
+ "type": "array",
549
+ "items": {
550
+ "$ref": "#/$defs/external:core~1canonical-performance-standard.json"
551
+ },
552
+ "minItems": 1
553
+ }
554
+ },
555
+ "required": [
556
+ "product_id",
557
+ "pricing_option_id"
558
+ ],
559
+ "additionalProperties": false,
560
+ "not": {
561
+ "anyOf": [
562
+ {
563
+ "required": [
564
+ "creatives"
565
+ ]
566
+ },
567
+ {
568
+ "required": [
569
+ "creative_assignments"
570
+ ]
571
+ },
572
+ {
573
+ "required": [
574
+ "catalogs"
575
+ ]
576
+ }
577
+ ]
578
+ }
579
+ },
580
+ "external:core/canonical-pricing-option.json": {
581
+ "type": "object",
582
+ "properties": {
583
+ "pricing_option_id": {
584
+ "type": "string",
585
+ "minLength": 1,
586
+ "x-entity": "product_pricing_option"
587
+ },
588
+ "pricing_model": {
589
+ "type": "string",
590
+ "enum": [
591
+ "cpm",
592
+ "vcpm",
593
+ "cpc",
594
+ "cpcv",
595
+ "cpv",
596
+ "cpp",
597
+ "cpa",
598
+ "revenue_share",
599
+ "flat_rate",
600
+ "time"
601
+ ]
602
+ },
603
+ "currency": {
604
+ "type": "string",
605
+ "pattern": "^[A-Z]{3}$"
606
+ },
607
+ "fixed_price": {
608
+ "type": "number",
609
+ "minimum": 0
610
+ },
611
+ "floor_price": {
612
+ "type": "number",
613
+ "minimum": 0
614
+ },
615
+ "price_guidance": {
616
+ "$ref": "#/$defs/external:pricing-options~1price-guidance.json"
617
+ },
618
+ "min_spend_per_package": {
619
+ "type": "number",
620
+ "minimum": 0
621
+ },
622
+ "price_breakdown": {
623
+ "$ref": "#/$defs/external:pricing-options~1price-breakdown.json"
624
+ },
625
+ "eligible_adjustments": {
626
+ "type": "array",
627
+ "items": {
628
+ "$ref": "#/$defs/external:enums~1adjustment-kind.json"
629
+ },
630
+ "uniqueItems": true
631
+ },
632
+ "parameters": {
633
+ "type": "object",
634
+ "additionalProperties": true
635
+ },
636
+ "event_type": {
637
+ "$ref": "#/$defs/external:enums~1event-type.json"
638
+ },
639
+ "custom_event_name": {
640
+ "type": "string",
641
+ "minLength": 1
642
+ },
643
+ "event_source_id": {
644
+ "type": "string",
645
+ "minLength": 1,
646
+ "x-entity": "event_source"
647
+ },
648
+ "commission_rate": {
649
+ "type": "number",
650
+ "exclusiveMinimum": 0,
651
+ "maximum": 1
652
+ },
653
+ "commission_basis_description": {
654
+ "type": "string",
655
+ "minLength": 1,
656
+ "maxLength": 1000
657
+ }
658
+ },
659
+ "required": [
660
+ "pricing_option_id",
661
+ "pricing_model",
662
+ "currency"
663
+ ],
664
+ "allOf": [
665
+ {
666
+ "not": {
667
+ "required": [
668
+ "fixed_price",
669
+ "floor_price"
670
+ ]
671
+ }
672
+ },
673
+ {
674
+ "if": {
675
+ "properties": {
676
+ "pricing_model": {
677
+ "const": "cpa"
678
+ }
679
+ },
680
+ "required": [
681
+ "pricing_model"
682
+ ]
683
+ },
684
+ "then": {
685
+ "required": [
686
+ "event_type",
687
+ "fixed_price"
688
+ ]
689
+ }
690
+ },
691
+ {
692
+ "if": {
693
+ "properties": {
694
+ "pricing_model": {
695
+ "const": "revenue_share"
696
+ }
697
+ },
698
+ "required": [
699
+ "pricing_model"
700
+ ]
701
+ },
702
+ "then": {
703
+ "required": [
704
+ "event_type",
705
+ "event_source_id",
706
+ "commission_rate",
707
+ "commission_basis_description"
708
+ ]
709
+ }
710
+ },
711
+ {
712
+ "if": {
713
+ "properties": {
714
+ "pricing_model": {
715
+ "enum": [
716
+ "cpv",
717
+ "cpp",
718
+ "time"
719
+ ]
720
+ }
721
+ },
722
+ "required": [
723
+ "pricing_model"
724
+ ]
725
+ },
726
+ "then": {
727
+ "required": [
728
+ "parameters"
729
+ ]
730
+ }
731
+ },
732
+ {
733
+ "if": {
734
+ "properties": {
735
+ "event_type": {
736
+ "const": "custom"
737
+ }
738
+ },
739
+ "required": [
740
+ "event_type"
741
+ ]
742
+ },
743
+ "then": {
744
+ "required": [
745
+ "custom_event_name"
746
+ ]
747
+ }
748
+ }
749
+ ],
750
+ "additionalProperties": false
751
+ },
752
+ "external:pricing-options/price-guidance.json": {
753
+ "type": "object",
754
+ "properties": {
755
+ "p25": {
756
+ "type": "number",
757
+ "minimum": 0
758
+ },
759
+ "p50": {
760
+ "type": "number",
761
+ "minimum": 0
762
+ },
763
+ "p75": {
764
+ "type": "number",
765
+ "minimum": 0
766
+ },
767
+ "p90": {
768
+ "type": "number",
769
+ "minimum": 0
770
+ }
771
+ },
772
+ "additionalProperties": true
773
+ },
774
+ "external:pricing-options/price-breakdown.json": {
775
+ "type": "object",
776
+ "properties": {
777
+ "list_price": {
778
+ "type": "number",
779
+ "exclusiveMinimum": 0
780
+ },
781
+ "adjustments": {
782
+ "type": "array",
783
+ "items": {
784
+ "type": "object",
785
+ "properties": {
786
+ "kind": {
787
+ "$ref": "#/$defs/external:enums~1adjustment-kind.json"
788
+ },
789
+ "name": {
790
+ "type": "string",
791
+ "maxLength": 64
792
+ },
793
+ "rate": {
794
+ "type": "number",
795
+ "exclusiveMinimum": 0,
796
+ "exclusiveMaximum": 1
797
+ },
798
+ "amount": {
799
+ "type": "number",
800
+ "exclusiveMinimum": 0
801
+ },
802
+ "description": {
803
+ "type": "string",
804
+ "maxLength": 256
805
+ },
806
+ "beneficiary": {
807
+ "type": "string",
808
+ "maxLength": 256
809
+ }
810
+ },
811
+ "required": [
812
+ "kind",
813
+ "name"
814
+ ],
815
+ "oneOf": [
816
+ {
817
+ "required": [
818
+ "rate"
819
+ ]
820
+ },
821
+ {
822
+ "required": [
823
+ "amount"
824
+ ]
825
+ }
826
+ ],
827
+ "additionalProperties": true
828
+ },
829
+ "minItems": 1,
830
+ "maxItems": 20
831
+ }
832
+ },
833
+ "required": [
834
+ "list_price",
835
+ "adjustments"
836
+ ],
837
+ "additionalProperties": true
838
+ },
839
+ "external:enums/adjustment-kind.json": {
840
+ "type": "string",
841
+ "enum": [
842
+ "fee",
843
+ "discount",
844
+ "commission",
845
+ "settlement"
846
+ ]
847
+ },
848
+ "external:enums/event-type.json": {
849
+ "type": "string",
850
+ "enum": [
851
+ "page_view",
852
+ "view_content",
853
+ "select_content",
854
+ "select_item",
855
+ "search",
856
+ "share",
857
+ "add_to_cart",
858
+ "remove_from_cart",
859
+ "viewed_cart",
860
+ "add_to_wishlist",
861
+ "initiate_checkout",
862
+ "add_payment_info",
863
+ "purchase",
864
+ "refund",
865
+ "lead",
866
+ "qualify_lead",
867
+ "close_convert_lead",
868
+ "disqualify_lead",
869
+ "complete_registration",
870
+ "subscribe",
871
+ "follow",
872
+ "content_view",
873
+ "watch_milestone",
874
+ "start_trial",
875
+ "app_install",
876
+ "app_launch",
877
+ "contact",
878
+ "schedule",
879
+ "donate",
880
+ "submit_application",
881
+ "custom"
882
+ ]
883
+ },
884
+ "external:core/format-option-ref.json": {
885
+ "type": "object",
886
+ "discriminator": {
887
+ "propertyName": "scope"
888
+ },
889
+ "oneOf": [
890
+ {
891
+ "type": "object",
892
+ "properties": {
893
+ "scope": {
894
+ "type": "string",
895
+ "const": "publisher"
896
+ },
897
+ "publisher_domain": {
898
+ "type": "string",
899
+ "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
900
+ },
901
+ "format_option_id": {
902
+ "type": "string"
903
+ }
904
+ },
905
+ "required": [
906
+ "scope",
907
+ "publisher_domain",
908
+ "format_option_id"
909
+ ],
910
+ "additionalProperties": true
911
+ },
912
+ {
913
+ "type": "object",
914
+ "properties": {
915
+ "scope": {
916
+ "type": "string",
917
+ "const": "product"
918
+ },
919
+ "format_option_id": {
920
+ "type": "string"
921
+ },
922
+ "publisher_domain": false
923
+ },
924
+ "required": [
925
+ "scope",
926
+ "format_option_id"
927
+ ],
928
+ "additionalProperties": true
929
+ }
930
+ ],
931
+ "additionalProperties": true
932
+ },
933
+ "external:enums/pacing.json": {
934
+ "type": "string",
935
+ "enum": [
936
+ "even",
937
+ "asap",
938
+ "front_loaded"
939
+ ]
940
+ },
941
+ "external:core/bidding-policy.json": {
942
+ "type": "object",
943
+ "properties": {
944
+ "automatic": {
945
+ "type": "boolean",
946
+ "const": true
947
+ },
948
+ "bid_amount": {
949
+ "type": "number",
950
+ "exclusiveMinimum": 0
951
+ },
952
+ "max_bid": {
953
+ "type": "number",
954
+ "exclusiveMinimum": 0
955
+ },
956
+ "cost_per": {
957
+ "type": "object",
958
+ "properties": {
959
+ "amount": {
960
+ "type": "number",
961
+ "exclusiveMinimum": 0
962
+ },
963
+ "strength": {
964
+ "type": "string",
965
+ "enum": [
966
+ "cap",
967
+ "target"
968
+ ]
969
+ }
970
+ },
971
+ "required": [
972
+ "amount",
973
+ "strength"
974
+ ],
975
+ "additionalProperties": false
976
+ },
977
+ "roas": {
978
+ "type": "object",
979
+ "properties": {
980
+ "value": {
981
+ "type": "number",
982
+ "exclusiveMinimum": 0
983
+ },
984
+ "strength": {
985
+ "type": "string",
986
+ "enum": [
987
+ "floor",
988
+ "target"
989
+ ]
990
+ }
991
+ },
992
+ "required": [
993
+ "value",
994
+ "strength"
995
+ ],
996
+ "additionalProperties": false
997
+ }
998
+ },
999
+ "minProperties": 1,
1000
+ "allOf": [
1001
+ {
1002
+ "not": {
1003
+ "anyOf": [
1004
+ {
1005
+ "required": [
1006
+ "automatic",
1007
+ "bid_amount"
1008
+ ]
1009
+ },
1010
+ {
1011
+ "required": [
1012
+ "automatic",
1013
+ "max_bid"
1014
+ ]
1015
+ },
1016
+ {
1017
+ "required": [
1018
+ "automatic",
1019
+ "cost_per"
1020
+ ]
1021
+ },
1022
+ {
1023
+ "required": [
1024
+ "automatic",
1025
+ "roas"
1026
+ ]
1027
+ },
1028
+ {
1029
+ "required": [
1030
+ "bid_amount",
1031
+ "max_bid"
1032
+ ]
1033
+ },
1034
+ {
1035
+ "required": [
1036
+ "bid_amount",
1037
+ "cost_per"
1038
+ ]
1039
+ },
1040
+ {
1041
+ "required": [
1042
+ "bid_amount",
1043
+ "roas"
1044
+ ]
1045
+ },
1046
+ {
1047
+ "required": [
1048
+ "cost_per",
1049
+ "roas"
1050
+ ]
1051
+ }
1052
+ ]
1053
+ }
1054
+ }
1055
+ ],
1056
+ "additionalProperties": false
1057
+ },
1058
+ "external:core/targeting.json": {
1059
+ "x-adcp-validation": {
1060
+ "disjoint_place_fields": {
1061
+ "include": "geo_places",
1062
+ "exclude": "geo_places_exclude",
1063
+ "identity": [
1064
+ "country",
1065
+ "system",
1066
+ "place_type",
1067
+ "value"
1068
+ ]
1069
+ },
1070
+ "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."
1071
+ },
1072
+ "type": "object",
1073
+ "properties": {
1074
+ "geo_countries": {
1075
+ "type": "array",
1076
+ "items": {
1077
+ "type": "string",
1078
+ "pattern": "^[A-Z]{2}$"
1079
+ },
1080
+ "minItems": 1
1081
+ },
1082
+ "geo_countries_exclude": {
1083
+ "type": "array",
1084
+ "items": {
1085
+ "type": "string",
1086
+ "pattern": "^[A-Z]{2}$"
1087
+ },
1088
+ "minItems": 1
1089
+ },
1090
+ "geo_regions": {
1091
+ "type": "array",
1092
+ "items": {
1093
+ "type": "string",
1094
+ "pattern": "^[A-Z]{2}-[A-Z0-9]{1,3}$"
1095
+ },
1096
+ "minItems": 1
1097
+ },
1098
+ "geo_regions_exclude": {
1099
+ "type": "array",
1100
+ "x-adcp-validation": {
1101
+ "disjoint_with": "geo_regions",
1102
+ "spec": "docs/media-buy/advanced-topics/targeting.mdx#geo_regions_exclude"
1103
+ },
1104
+ "items": {
1105
+ "type": "string",
1106
+ "pattern": "^[A-Z]{2}-[A-Z0-9]{1,3}$"
1107
+ },
1108
+ "minItems": 1
1109
+ },
1110
+ "geo_metros": {
1111
+ "type": "array",
1112
+ "items": {
1113
+ "type": "object",
1114
+ "properties": {
1115
+ "system": {
1116
+ "$ref": "#/$defs/external:enums~1metro-system.json"
1117
+ },
1118
+ "values": {
1119
+ "type": "array",
1120
+ "items": {
1121
+ "type": "string"
1122
+ },
1123
+ "minItems": 1
1124
+ }
1125
+ },
1126
+ "required": [
1127
+ "system",
1128
+ "values"
1129
+ ],
1130
+ "additionalProperties": false
1131
+ },
1132
+ "minItems": 1
1133
+ },
1134
+ "geo_metros_exclude": {
1135
+ "type": "array",
1136
+ "items": {
1137
+ "type": "object",
1138
+ "properties": {
1139
+ "system": {
1140
+ "$ref": "#/$defs/external:enums~1metro-system.json"
1141
+ },
1142
+ "values": {
1143
+ "type": "array",
1144
+ "items": {
1145
+ "type": "string"
1146
+ },
1147
+ "minItems": 1
1148
+ }
1149
+ },
1150
+ "required": [
1151
+ "system",
1152
+ "values"
1153
+ ],
1154
+ "additionalProperties": false
1155
+ },
1156
+ "minItems": 1
1157
+ },
1158
+ "geo_postal_areas": {
1159
+ "type": "array",
1160
+ "items": {
1161
+ "$ref": "#/$defs/external:core~1postal-area.json"
1162
+ },
1163
+ "minItems": 1
1164
+ },
1165
+ "geo_postal_areas_exclude": {
1166
+ "type": "array",
1167
+ "items": {
1168
+ "$ref": "#/$defs/external:core~1postal-area.json"
1169
+ },
1170
+ "minItems": 1
1171
+ },
1172
+ "geo_places": {
1173
+ "type": "array",
1174
+ "items": {
1175
+ "$ref": "#/$defs/external:core~1geo-place-area.json",
1176
+ "x-adcp-schema-uri": "/schemas/core/geo-place-area.json"
1177
+ },
1178
+ "minItems": 1
1179
+ },
1180
+ "geo_places_exclude": {
1181
+ "type": "array",
1182
+ "items": {
1183
+ "$ref": "#/$defs/external:core~1geo-place-area.json",
1184
+ "x-adcp-schema-uri": "/schemas/core/geo-place-area.json"
1185
+ },
1186
+ "minItems": 1
1187
+ },
1188
+ "daypart_targets": {
1189
+ "type": "array",
1190
+ "items": {
1191
+ "$ref": "#/$defs/external:core~1daypart-target.json"
1192
+ },
1193
+ "minItems": 1
1194
+ },
1195
+ "axe_include_segment": {
1196
+ "type": "string",
1197
+ "deprecated": true
1198
+ },
1199
+ "axe_exclude_segment": {
1200
+ "type": "string",
1201
+ "deprecated": true
1202
+ },
1203
+ "audience_include": {
1204
+ "type": "array",
1205
+ "items": {
1206
+ "type": "string"
1207
+ },
1208
+ "minItems": 1
1209
+ },
1210
+ "audience_exclude": {
1211
+ "type": "array",
1212
+ "items": {
1213
+ "type": "string"
1214
+ },
1215
+ "minItems": 1
1216
+ },
1217
+ "signal_targeting_groups": {
1218
+ "$ref": "#/$defs/external:core~1package-signal-targeting-groups.json"
1219
+ },
1220
+ "signal_targeting": {
1221
+ "type": "array",
1222
+ "deprecated": true,
1223
+ "items": {
1224
+ "$ref": "#/$defs/external:core~1signal-targeting.json"
1225
+ },
1226
+ "minItems": 1
1227
+ },
1228
+ "demographics": {
1229
+ "$ref": "#/$defs/external:core~1demographic-targeting-intent.json"
1230
+ },
1231
+ "frequency_cap": {
1232
+ "$ref": "#/$defs/external:core~1frequency-cap.json"
1233
+ },
1234
+ "property_list": {
1235
+ "$ref": "#/$defs/external:core~1property-list-ref.json"
1236
+ },
1237
+ "property_list_exclude": {
1238
+ "$ref": "#/$defs/external:core~1property-list-ref.json"
1239
+ },
1240
+ "collection_list": {
1241
+ "$ref": "#/$defs/external:core~1collection-list-ref.json"
1242
+ },
1243
+ "collection_list_exclude": {
1244
+ "$ref": "#/$defs/external:core~1collection-list-ref.json"
1245
+ },
1246
+ "placement_selection": {
1247
+ "$ref": "#/$defs/external:core~1placement-selection.json"
1248
+ },
1249
+ "age_restriction": {
1250
+ "type": "object",
1251
+ "properties": {
1252
+ "min": {
1253
+ "type": "integer",
1254
+ "minimum": 13,
1255
+ "maximum": 99
1256
+ },
1257
+ "verification_required": {
1258
+ "type": "boolean",
1259
+ "default": false
1260
+ },
1261
+ "accepted_methods": {
1262
+ "type": "array",
1263
+ "items": {
1264
+ "$ref": "#/$defs/external:enums~1age-verification-method.json"
1265
+ },
1266
+ "minItems": 1
1267
+ }
1268
+ },
1269
+ "required": [
1270
+ "min"
1271
+ ],
1272
+ "additionalProperties": false
1273
+ },
1274
+ "device_platform": {
1275
+ "type": "array",
1276
+ "items": {
1277
+ "$ref": "#/$defs/external:enums~1device-platform.json"
1278
+ },
1279
+ "minItems": 1
1280
+ },
1281
+ "device_platform_exclude": {
1282
+ "type": "array",
1283
+ "items": {
1284
+ "$ref": "#/$defs/external:enums~1device-platform.json"
1285
+ },
1286
+ "minItems": 1
1287
+ },
1288
+ "device_type": {
1289
+ "type": "array",
1290
+ "items": {
1291
+ "$ref": "#/$defs/external:enums~1device-type.json"
1292
+ },
1293
+ "minItems": 1
1294
+ },
1295
+ "device_type_exclude": {
1296
+ "type": "array",
1297
+ "items": {
1298
+ "$ref": "#/$defs/external:enums~1device-type.json"
1299
+ },
1300
+ "minItems": 1
1301
+ },
1302
+ "browser": {
1303
+ "type": "array",
1304
+ "items": {
1305
+ "$ref": "#/$defs/external:enums~1browser-family.json"
1306
+ },
1307
+ "minItems": 1,
1308
+ "uniqueItems": true
1309
+ },
1310
+ "browser_exclude": {
1311
+ "type": "array",
1312
+ "items": {
1313
+ "$ref": "#/$defs/external:enums~1browser-family.json"
1314
+ },
1315
+ "minItems": 1,
1316
+ "uniqueItems": true
1317
+ },
1318
+ "store_catchments": {
1319
+ "type": "array",
1320
+ "items": {
1321
+ "type": "object",
1322
+ "properties": {
1323
+ "catalog_id": {
1324
+ "type": "string"
1325
+ },
1326
+ "store_ids": {
1327
+ "type": "array",
1328
+ "items": {
1329
+ "type": "string"
1330
+ },
1331
+ "minItems": 1
1332
+ },
1333
+ "catchment_ids": {
1334
+ "type": "array",
1335
+ "items": {
1336
+ "type": "string"
1337
+ },
1338
+ "minItems": 1
1339
+ }
1340
+ },
1341
+ "required": [
1342
+ "catalog_id"
1343
+ ],
1344
+ "additionalProperties": true
1345
+ },
1346
+ "minItems": 1
1347
+ },
1348
+ "geo_proximity": {
1349
+ "type": "array",
1350
+ "items": {
1351
+ "type": "object",
1352
+ "properties": {
1353
+ "lat": {
1354
+ "type": "number",
1355
+ "minimum": -90,
1356
+ "maximum": 90
1357
+ },
1358
+ "lng": {
1359
+ "type": "number",
1360
+ "minimum": -180,
1361
+ "maximum": 180
1362
+ },
1363
+ "label": {
1364
+ "type": "string"
1365
+ },
1366
+ "travel_time": {
1367
+ "type": "object",
1368
+ "properties": {
1369
+ "value": {
1370
+ "type": "number",
1371
+ "minimum": 1
1372
+ },
1373
+ "unit": {
1374
+ "$ref": "#/$defs/external:enums~1travel-time-unit.json"
1375
+ }
1376
+ },
1377
+ "required": [
1378
+ "value",
1379
+ "unit"
1380
+ ],
1381
+ "additionalProperties": false
1382
+ },
1383
+ "transport_mode": {
1384
+ "$ref": "#/$defs/external:enums~1transport-mode.json"
1385
+ },
1386
+ "radius": {
1387
+ "type": "object",
1388
+ "properties": {
1389
+ "value": {
1390
+ "type": "number",
1391
+ "exclusiveMinimum": 0
1392
+ },
1393
+ "unit": {
1394
+ "$ref": "#/$defs/external:enums~1distance-unit.json"
1395
+ }
1396
+ },
1397
+ "required": [
1398
+ "value",
1399
+ "unit"
1400
+ ],
1401
+ "additionalProperties": false
1402
+ },
1403
+ "geometry": {
1404
+ "type": "object",
1405
+ "properties": {
1406
+ "type": {
1407
+ "type": "string",
1408
+ "enum": [
1409
+ "Polygon",
1410
+ "MultiPolygon"
1411
+ ]
1412
+ },
1413
+ "coordinates": {
1414
+ "type": "array"
1415
+ }
1416
+ },
1417
+ "required": [
1418
+ "type",
1419
+ "coordinates"
1420
+ ],
1421
+ "additionalProperties": false
1422
+ },
1423
+ "ext": {
1424
+ "$ref": "#/$defs/external:core~1ext.json"
1425
+ }
1426
+ },
1427
+ "oneOf": [
1428
+ {
1429
+ "required": [
1430
+ "lat",
1431
+ "lng",
1432
+ "travel_time",
1433
+ "transport_mode"
1434
+ ],
1435
+ "not": {
1436
+ "anyOf": [
1437
+ {
1438
+ "required": [
1439
+ "radius"
1440
+ ]
1441
+ },
1442
+ {
1443
+ "required": [
1444
+ "geometry"
1445
+ ]
1446
+ }
1447
+ ]
1448
+ }
1449
+ },
1450
+ {
1451
+ "required": [
1452
+ "lat",
1453
+ "lng",
1454
+ "radius"
1455
+ ],
1456
+ "not": {
1457
+ "anyOf": [
1458
+ {
1459
+ "required": [
1460
+ "travel_time"
1461
+ ]
1462
+ },
1463
+ {
1464
+ "required": [
1465
+ "geometry"
1466
+ ]
1467
+ }
1468
+ ]
1469
+ }
1470
+ },
1471
+ {
1472
+ "required": [
1473
+ "geometry"
1474
+ ],
1475
+ "not": {
1476
+ "anyOf": [
1477
+ {
1478
+ "required": [
1479
+ "travel_time"
1480
+ ]
1481
+ },
1482
+ {
1483
+ "required": [
1484
+ "radius"
1485
+ ]
1486
+ }
1487
+ ]
1488
+ }
1489
+ }
1490
+ ],
1491
+ "additionalProperties": true
1492
+ },
1493
+ "minItems": 1
1494
+ },
1495
+ "language": {
1496
+ "type": "array",
1497
+ "items": {
1498
+ "$ref": "#/$defs/external:core~1locale-tag.json"
1499
+ },
1500
+ "minItems": 1
1501
+ },
1502
+ "keyword_targets": {
1503
+ "type": "array",
1504
+ "items": {
1505
+ "type": "object",
1506
+ "properties": {
1507
+ "keyword": {
1508
+ "type": "string",
1509
+ "minLength": 1
1510
+ },
1511
+ "match_type": {
1512
+ "$ref": "#/$defs/external:enums~1match-type.json"
1513
+ },
1514
+ "bid_price": {
1515
+ "type": "number",
1516
+ "minimum": 0
1517
+ }
1518
+ },
1519
+ "required": [
1520
+ "keyword",
1521
+ "match_type"
1522
+ ],
1523
+ "additionalProperties": false
1524
+ },
1525
+ "minItems": 1
1526
+ },
1527
+ "negative_keywords": {
1528
+ "type": "array",
1529
+ "items": {
1530
+ "type": "object",
1531
+ "properties": {
1532
+ "keyword": {
1533
+ "type": "string",
1534
+ "minLength": 1
1535
+ },
1536
+ "match_type": {
1537
+ "$ref": "#/$defs/external:enums~1match-type.json"
1538
+ }
1539
+ },
1540
+ "required": [
1541
+ "keyword",
1542
+ "match_type"
1543
+ ],
1544
+ "additionalProperties": false
1545
+ },
1546
+ "minItems": 1
1547
+ }
1548
+ },
1549
+ "allOf": [
1550
+ {
1551
+ "if": {
1552
+ "required": [
1553
+ "demographics",
1554
+ "age_restriction"
1555
+ ]
1556
+ },
1557
+ "then": {
1558
+ "properties": {
1559
+ "demographics": {
1560
+ "properties": {
1561
+ "age": {
1562
+ "properties": {
1563
+ "include_unknown": {
1564
+ "const": false
1565
+ }
1566
+ }
1567
+ }
1568
+ }
1569
+ }
1570
+ }
1571
+ }
1572
+ },
1573
+ {
1574
+ "if": {
1575
+ "properties": {
1576
+ "age_restriction": {
1577
+ "properties": {
1578
+ "verification_required": {
1579
+ "const": true
1580
+ }
1581
+ },
1582
+ "required": [
1583
+ "verification_required"
1584
+ ]
1585
+ },
1586
+ "demographics": {
1587
+ "properties": {
1588
+ "age": {
1589
+ "required": [
1590
+ "accepted_bases"
1591
+ ]
1592
+ }
1593
+ },
1594
+ "required": [
1595
+ "age"
1596
+ ]
1597
+ }
1598
+ },
1599
+ "required": [
1600
+ "demographics",
1601
+ "age_restriction"
1602
+ ]
1603
+ },
1604
+ "then": {
1605
+ "properties": {
1606
+ "demographics": {
1607
+ "properties": {
1608
+ "age": {
1609
+ "properties": {
1610
+ "accepted_bases": {
1611
+ "contains": {
1612
+ "const": "verified"
1613
+ }
1614
+ }
1615
+ }
1616
+ }
1617
+ }
1618
+ }
1619
+ }
1620
+ }
1621
+ }
1622
+ ],
1623
+ "additionalProperties": true
1624
+ },
1625
+ "external:enums/metro-system.json": {
1626
+ "type": "string",
1627
+ "enum": [
1628
+ "nielsen_dma",
1629
+ "uk_itl1",
1630
+ "uk_itl2",
1631
+ "eurostat_nuts2",
1632
+ "custom"
1633
+ ]
1634
+ },
1635
+ "external:core/postal-area.json": {
1636
+ "anyOf": [
1637
+ {
1638
+ "type": "object",
1639
+ "allOf": [
1640
+ {
1641
+ "$ref": "#/$defs/external:core~1postal-country-system.json"
1642
+ }
1643
+ ],
1644
+ "properties": {
1645
+ "country": {
1646
+ "type": "string",
1647
+ "pattern": "^[A-Z]{2}$"
1648
+ },
1649
+ "system": {
1650
+ "$ref": "#/$defs/external:enums~1postal-system.json"
1651
+ },
1652
+ "values": {
1653
+ "type": "array",
1654
+ "items": {
1655
+ "type": "string"
1656
+ },
1657
+ "minItems": 1
1658
+ }
1659
+ },
1660
+ "required": [
1661
+ "country",
1662
+ "system",
1663
+ "values"
1664
+ ],
1665
+ "additionalProperties": false
1666
+ },
1667
+ {
1668
+ "deprecated": true,
1669
+ "type": "object",
1670
+ "properties": {
1671
+ "system": {
1672
+ "$ref": "#/$defs/external:enums~1legacy-postal-system.json",
1673
+ "deprecated": true
1674
+ },
1675
+ "values": {
1676
+ "type": "array",
1677
+ "items": {
1678
+ "type": "string"
1679
+ },
1680
+ "minItems": 1
1681
+ }
1682
+ },
1683
+ "required": [
1684
+ "system",
1685
+ "values"
1686
+ ],
1687
+ "additionalProperties": false
1688
+ }
1689
+ ]
1690
+ },
1691
+ "external:core/postal-country-system.json": {
1692
+ "type": "object",
1693
+ "properties": {
1694
+ "country": {
1695
+ "type": "string",
1696
+ "pattern": "^[A-Z]{2}$"
1697
+ },
1698
+ "system": {
1699
+ "$ref": "#/$defs/external:enums~1postal-system.json"
1700
+ }
1701
+ },
1702
+ "required": [
1703
+ "country",
1704
+ "system"
1705
+ ],
1706
+ "anyOf": [
1707
+ {
1708
+ "properties": {
1709
+ "country": {
1710
+ "const": "US"
1711
+ },
1712
+ "system": {
1713
+ "enum": [
1714
+ "zip",
1715
+ "zip_plus_four"
1716
+ ]
1717
+ }
1718
+ }
1719
+ },
1720
+ {
1721
+ "properties": {
1722
+ "country": {
1723
+ "const": "GB"
1724
+ },
1725
+ "system": {
1726
+ "enum": [
1727
+ "outward",
1728
+ "full"
1729
+ ]
1730
+ }
1731
+ }
1732
+ },
1733
+ {
1734
+ "properties": {
1735
+ "country": {
1736
+ "const": "CA"
1737
+ },
1738
+ "system": {
1739
+ "enum": [
1740
+ "fsa",
1741
+ "full"
1742
+ ]
1743
+ }
1744
+ }
1745
+ },
1746
+ {
1747
+ "properties": {
1748
+ "country": {
1749
+ "enum": [
1750
+ "DE",
1751
+ "CH",
1752
+ "AT"
1753
+ ]
1754
+ },
1755
+ "system": {
1756
+ "const": "plz"
1757
+ }
1758
+ }
1759
+ },
1760
+ {
1761
+ "properties": {
1762
+ "country": {
1763
+ "const": "FR"
1764
+ },
1765
+ "system": {
1766
+ "const": "code_postal"
1767
+ }
1768
+ }
1769
+ },
1770
+ {
1771
+ "properties": {
1772
+ "country": {
1773
+ "const": "AU"
1774
+ },
1775
+ "system": {
1776
+ "const": "postcode"
1777
+ }
1778
+ }
1779
+ },
1780
+ {
1781
+ "properties": {
1782
+ "country": {
1783
+ "const": "BR"
1784
+ },
1785
+ "system": {
1786
+ "const": "cep"
1787
+ }
1788
+ }
1789
+ },
1790
+ {
1791
+ "properties": {
1792
+ "country": {
1793
+ "const": "IN"
1794
+ },
1795
+ "system": {
1796
+ "const": "pin"
1797
+ }
1798
+ }
1799
+ },
1800
+ {
1801
+ "properties": {
1802
+ "country": {
1803
+ "const": "ZA"
1804
+ },
1805
+ "system": {
1806
+ "const": "postal_code"
1807
+ }
1808
+ }
1809
+ },
1810
+ {
1811
+ "properties": {
1812
+ "country": {
1813
+ "not": {
1814
+ "enum": [
1815
+ "US",
1816
+ "GB",
1817
+ "CA",
1818
+ "DE",
1819
+ "CH",
1820
+ "AT",
1821
+ "FR",
1822
+ "AU",
1823
+ "BR",
1824
+ "IN",
1825
+ "ZA"
1826
+ ]
1827
+ }
1828
+ },
1829
+ "system": {
1830
+ "enum": [
1831
+ "postal_code",
1832
+ "custom"
1833
+ ]
1834
+ }
1835
+ }
1836
+ }
1837
+ ]
1838
+ },
1839
+ "external:enums/postal-system.json": {
1840
+ "type": "string",
1841
+ "enum": [
1842
+ "postal_code",
1843
+ "zip",
1844
+ "zip_plus_four",
1845
+ "outward",
1846
+ "full",
1847
+ "fsa",
1848
+ "plz",
1849
+ "code_postal",
1850
+ "postcode",
1851
+ "cep",
1852
+ "pin",
1853
+ "custom",
1854
+ "us_zip",
1855
+ "us_zip_plus_four",
1856
+ "gb_outward",
1857
+ "gb_full",
1858
+ "ca_fsa",
1859
+ "ca_full",
1860
+ "de_plz",
1861
+ "fr_code_postal",
1862
+ "au_postcode",
1863
+ "ch_plz",
1864
+ "at_plz"
1865
+ ]
1866
+ },
1867
+ "external:enums/legacy-postal-system.json": {
1868
+ "type": "string",
1869
+ "deprecated": true,
1870
+ "enum": [
1871
+ "us_zip",
1872
+ "us_zip_plus_four",
1873
+ "gb_outward",
1874
+ "gb_full",
1875
+ "ca_fsa",
1876
+ "ca_full",
1877
+ "de_plz",
1878
+ "fr_code_postal",
1879
+ "au_postcode",
1880
+ "ch_plz",
1881
+ "at_plz"
1882
+ ]
1883
+ },
1884
+ "external:core/geo-place-area.json": {
1885
+ "x-adcp-validation": {
1886
+ "map_keys_subset_of_array": {
1887
+ "map_field": "value_labels",
1888
+ "array_field": "values"
1889
+ },
1890
+ "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."
1891
+ },
1892
+ "type": "object",
1893
+ "properties": {
1894
+ "country": {
1895
+ "type": "string",
1896
+ "pattern": "^[A-Z]{2}$"
1897
+ },
1898
+ "system": {
1899
+ "$ref": "#/$defs/external:core~1geo-place-system.json"
1900
+ },
1901
+ "system_version": {
1902
+ "type": "string",
1903
+ "minLength": 1
1904
+ },
1905
+ "place_type": {
1906
+ "$ref": "#/$defs/external:core~1geo-place-type.json"
1907
+ },
1908
+ "values": {
1909
+ "type": "array",
1910
+ "items": {
1911
+ "type": "string",
1912
+ "minLength": 1
1913
+ },
1914
+ "minItems": 1,
1915
+ "uniqueItems": true
1916
+ },
1917
+ "value_labels": {
1918
+ "type": "object",
1919
+ "additionalProperties": {
1920
+ "type": "string",
1921
+ "minLength": 1
1922
+ }
1923
+ },
1924
+ "ext": {
1925
+ "$ref": "#/$defs/external:core~1ext.json"
1926
+ }
1927
+ },
1928
+ "required": [
1929
+ "country",
1930
+ "system",
1931
+ "place_type",
1932
+ "values"
1933
+ ],
1934
+ "allOf": [
1935
+ {
1936
+ "if": {
1937
+ "properties": {
1938
+ "system": {
1939
+ "enum": [
1940
+ "geonames",
1941
+ "google_ads",
1942
+ "microsoft_ads"
1943
+ ]
1944
+ }
1945
+ },
1946
+ "required": [
1947
+ "system"
1948
+ ]
1949
+ },
1950
+ "then": {
1951
+ "properties": {
1952
+ "values": {
1953
+ "items": {
1954
+ "type": "string",
1955
+ "pattern": "^[0-9]+$"
1956
+ }
1957
+ }
1958
+ }
1959
+ }
1960
+ }
1961
+ ],
1962
+ "additionalProperties": false
1963
+ },
1964
+ "external:core/geo-place-system.json": {
1965
+ "anyOf": [
1966
+ {
1967
+ "type": "string",
1968
+ "enum": [
1969
+ "geonames",
1970
+ "google_ads",
1971
+ "microsoft_ads"
1972
+ ]
1973
+ },
1974
+ {
1975
+ "type": "string",
1976
+ "format": "uri",
1977
+ "pattern": "^https://"
1978
+ }
1979
+ ]
1980
+ },
1981
+ "external:core/geo-place-type.json": {
1982
+ "anyOf": [
1983
+ {
1984
+ "type": "string",
1985
+ "enum": [
1986
+ "airport",
1987
+ "borough",
1988
+ "city",
1989
+ "city_region",
1990
+ "commune",
1991
+ "county",
1992
+ "district",
1993
+ "municipality",
1994
+ "neighborhood",
1995
+ "post_town",
1996
+ "prefecture",
1997
+ "province",
1998
+ "quarter",
1999
+ "state",
2000
+ "territory",
2001
+ "ward"
2002
+ ]
2003
+ },
2004
+ {
2005
+ "type": "string",
2006
+ "format": "uri",
2007
+ "pattern": "^https://"
2008
+ }
2009
+ ]
2010
+ },
2011
+ "external:core/ext.json": {
2012
+ "type": "object",
2013
+ "additionalProperties": true
2014
+ },
2015
+ "external:core/daypart-target.json": {
2016
+ "type": "object",
2017
+ "properties": {
2018
+ "days": {
2019
+ "type": "array",
2020
+ "items": {
2021
+ "$ref": "#/$defs/external:enums~1day-of-week.json"
2022
+ },
2023
+ "minItems": 1
2024
+ },
2025
+ "start_hour": {
2026
+ "type": "integer",
2027
+ "minimum": 0,
2028
+ "maximum": 23
2029
+ },
2030
+ "end_hour": {
2031
+ "type": "integer",
2032
+ "minimum": 1,
2033
+ "maximum": 24
2034
+ },
2035
+ "label": {
2036
+ "type": "string"
2037
+ }
2038
+ },
2039
+ "required": [
2040
+ "days",
2041
+ "start_hour",
2042
+ "end_hour"
2043
+ ],
2044
+ "additionalProperties": false
2045
+ },
2046
+ "external:enums/day-of-week.json": {
2047
+ "type": "string",
2048
+ "enum": [
2049
+ "monday",
2050
+ "tuesday",
2051
+ "wednesday",
2052
+ "thursday",
2053
+ "friday",
2054
+ "saturday",
2055
+ "sunday"
2056
+ ]
2057
+ },
2058
+ "external:core/package-signal-targeting-groups.json": {
2059
+ "type": "object",
2060
+ "properties": {
2061
+ "operator": {
2062
+ "type": "string",
2063
+ "enum": [
2064
+ "all"
2065
+ ]
2066
+ },
2067
+ "groups": {
2068
+ "type": "array",
2069
+ "items": {
2070
+ "$ref": "#/$defs/external:core~1package-signal-targeting-group.json"
2071
+ },
2072
+ "minItems": 1
2073
+ }
2074
+ },
2075
+ "required": [
2076
+ "operator",
2077
+ "groups"
2078
+ ],
2079
+ "additionalProperties": true
2080
+ },
2081
+ "external:core/package-signal-targeting-group.json": {
2082
+ "type": "object",
2083
+ "properties": {
2084
+ "operator": {
2085
+ "type": "string",
2086
+ "enum": [
2087
+ "any",
2088
+ "none"
2089
+ ]
2090
+ },
2091
+ "signals": {
2092
+ "type": "array",
2093
+ "items": {
2094
+ "$ref": "#/$defs/external:core~1package-signal-targeting.json"
2095
+ },
2096
+ "minItems": 1
2097
+ }
2098
+ },
2099
+ "required": [
2100
+ "operator",
2101
+ "signals"
2102
+ ],
2103
+ "additionalProperties": true
2104
+ },
2105
+ "external:core/package-signal-targeting.json": {
2106
+ "type": "object",
2107
+ "allOf": [
2108
+ {
2109
+ "$ref": "#/$defs/external:core~1signal-targeting-expression.json"
2110
+ }
2111
+ ],
2112
+ "properties": {
2113
+ "pricing_option_id": {
2114
+ "type": "string",
2115
+ "x-entity": "vendor_pricing_option"
2116
+ },
2117
+ "signal_agent_segment_id": {
2118
+ "type": "string",
2119
+ "x-entity": "signal_activation_id"
2120
+ },
2121
+ "activation_key": {
2122
+ "$ref": "#/$defs/external:core~1activation-key.json"
2123
+ }
2124
+ },
2125
+ "additionalProperties": true
2126
+ },
2127
+ "external:core/signal-targeting-expression.json": {
2128
+ "discriminator": {
2129
+ "propertyName": "value_type"
2130
+ },
2131
+ "oneOf": [
2132
+ {
2133
+ "type": "object",
2134
+ "properties": {
2135
+ "signal_ref": {
2136
+ "$ref": "#/$defs/external:core~1signal-ref.json"
2137
+ },
2138
+ "value_type": {
2139
+ "type": "string",
2140
+ "const": "binary"
2141
+ },
2142
+ "value": {
2143
+ "type": "boolean",
2144
+ "const": true
2145
+ }
2146
+ },
2147
+ "required": [
2148
+ "signal_ref",
2149
+ "value_type",
2150
+ "value"
2151
+ ],
2152
+ "additionalProperties": true
2153
+ },
2154
+ {
2155
+ "type": "object",
2156
+ "properties": {
2157
+ "signal_ref": {
2158
+ "$ref": "#/$defs/external:core~1signal-ref.json"
2159
+ },
2160
+ "value_type": {
2161
+ "type": "string",
2162
+ "const": "categorical"
2163
+ },
2164
+ "values": {
2165
+ "type": "array",
2166
+ "items": {
2167
+ "type": "string"
2168
+ },
2169
+ "minItems": 1
2170
+ }
2171
+ },
2172
+ "required": [
2173
+ "signal_ref",
2174
+ "value_type",
2175
+ "values"
2176
+ ],
2177
+ "additionalProperties": true
2178
+ },
2179
+ {
2180
+ "type": "object",
2181
+ "properties": {
2182
+ "signal_ref": {
2183
+ "$ref": "#/$defs/external:core~1signal-ref.json"
2184
+ },
2185
+ "value_type": {
2186
+ "type": "string",
2187
+ "const": "numeric"
2188
+ },
2189
+ "min_value": {
2190
+ "type": "number"
2191
+ },
2192
+ "max_value": {
2193
+ "type": "number"
2194
+ }
2195
+ },
2196
+ "required": [
2197
+ "signal_ref",
2198
+ "value_type"
2199
+ ],
2200
+ "anyOf": [
2201
+ {
2202
+ "required": [
2203
+ "min_value"
2204
+ ]
2205
+ },
2206
+ {
2207
+ "required": [
2208
+ "max_value"
2209
+ ]
2210
+ }
2211
+ ],
2212
+ "additionalProperties": true
2213
+ }
2214
+ ]
2215
+ },
2216
+ "external:core/signal-ref.json": {
2217
+ "x-entity": "signal",
2218
+ "discriminator": {
2219
+ "propertyName": "scope"
2220
+ },
2221
+ "oneOf": [
2222
+ {
2223
+ "type": "object",
2224
+ "properties": {
2225
+ "scope": {
2226
+ "type": "string",
2227
+ "const": "product"
2228
+ },
2229
+ "signal_id": {
2230
+ "type": "string",
2231
+ "pattern": "^[a-zA-Z0-9_-]+$"
2232
+ }
2233
+ },
2234
+ "required": [
2235
+ "scope",
2236
+ "signal_id"
2237
+ ],
2238
+ "not": {
2239
+ "anyOf": [
2240
+ {
2241
+ "required": [
2242
+ "data_provider_domain"
2243
+ ]
2244
+ },
2245
+ {
2246
+ "required": [
2247
+ "signal_source_url"
2248
+ ]
2249
+ },
2250
+ {
2251
+ "required": [
2252
+ "agent_url"
2253
+ ]
2254
+ },
2255
+ {
2256
+ "required": [
2257
+ "source"
2258
+ ]
2259
+ },
2260
+ {
2261
+ "required": [
2262
+ "id"
2263
+ ]
2264
+ }
2265
+ ]
2266
+ },
2267
+ "additionalProperties": true
2268
+ },
2269
+ {
2270
+ "type": "object",
2271
+ "properties": {
2272
+ "scope": {
2273
+ "type": "string",
2274
+ "const": "data_provider"
2275
+ },
2276
+ "data_provider_domain": {
2277
+ "type": "string",
2278
+ "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
2279
+ },
2280
+ "signal_id": {
2281
+ "type": "string",
2282
+ "pattern": "^[a-zA-Z0-9_-]+$"
2283
+ }
2284
+ },
2285
+ "required": [
2286
+ "scope",
2287
+ "data_provider_domain",
2288
+ "signal_id"
2289
+ ],
2290
+ "not": {
2291
+ "anyOf": [
2292
+ {
2293
+ "required": [
2294
+ "agent_url"
2295
+ ]
2296
+ },
2297
+ {
2298
+ "required": [
2299
+ "signal_source_url"
2300
+ ]
2301
+ },
2302
+ {
2303
+ "required": [
2304
+ "source"
2305
+ ]
2306
+ },
2307
+ {
2308
+ "required": [
2309
+ "id"
2310
+ ]
2311
+ }
2312
+ ]
2313
+ },
2314
+ "additionalProperties": true
2315
+ },
2316
+ {
2317
+ "type": "object",
2318
+ "properties": {
2319
+ "scope": {
2320
+ "type": "string",
2321
+ "const": "signal_source"
2322
+ },
2323
+ "signal_source_url": {
2324
+ "type": "string",
2325
+ "format": "uri"
2326
+ },
2327
+ "signal_id": {
2328
+ "type": "string",
2329
+ "pattern": "^[a-zA-Z0-9_-]+$"
2330
+ }
2331
+ },
2332
+ "required": [
2333
+ "scope",
2334
+ "signal_source_url",
2335
+ "signal_id"
2336
+ ],
2337
+ "not": {
2338
+ "anyOf": [
2339
+ {
2340
+ "required": [
2341
+ "data_provider_domain"
2342
+ ]
2343
+ },
2344
+ {
2345
+ "required": [
2346
+ "agent_url"
2347
+ ]
2348
+ },
2349
+ {
2350
+ "required": [
2351
+ "source"
2352
+ ]
2353
+ },
2354
+ {
2355
+ "required": [
2356
+ "id"
2357
+ ]
2358
+ }
2359
+ ]
2360
+ },
2361
+ "additionalProperties": true
2362
+ }
2363
+ ]
2364
+ },
2365
+ "external:core/activation-key.json": {
2366
+ "type": "object",
2367
+ "discriminator": {
2368
+ "propertyName": "type"
2369
+ },
2370
+ "oneOf": [
2371
+ {
2372
+ "properties": {
2373
+ "type": {
2374
+ "type": "string",
2375
+ "const": "segment_id"
2376
+ },
2377
+ "segment_id": {
2378
+ "type": "string"
2379
+ }
2380
+ },
2381
+ "required": [
2382
+ "type",
2383
+ "segment_id"
2384
+ ],
2385
+ "additionalProperties": true
2386
+ },
2387
+ {
2388
+ "properties": {
2389
+ "type": {
2390
+ "type": "string",
2391
+ "const": "key_value"
2392
+ },
2393
+ "key": {
2394
+ "type": "string"
2395
+ },
2396
+ "value": {
2397
+ "type": "string"
2398
+ }
2399
+ },
2400
+ "required": [
2401
+ "type",
2402
+ "key",
2403
+ "value"
2404
+ ],
2405
+ "additionalProperties": true
2406
+ }
2407
+ ]
2408
+ },
2409
+ "external:core/signal-targeting.json": {
2410
+ "discriminator": {
2411
+ "propertyName": "value_type"
2412
+ },
2413
+ "oneOf": [
2414
+ {
2415
+ "type": "object",
2416
+ "properties": {
2417
+ "signal_ref": {
2418
+ "$ref": "#/$defs/external:core~1signal-ref.json"
2419
+ },
2420
+ "signal_id": {
2421
+ "$ref": "#/$defs/external:core~1signal-id.json",
2422
+ "deprecated": true
2423
+ },
2424
+ "value_type": {
2425
+ "type": "string",
2426
+ "const": "binary"
2427
+ },
2428
+ "value": {
2429
+ "type": "boolean"
2430
+ }
2431
+ },
2432
+ "required": [
2433
+ "value_type",
2434
+ "value"
2435
+ ],
2436
+ "anyOf": [
2437
+ {
2438
+ "required": [
2439
+ "signal_ref"
2440
+ ]
2441
+ },
2442
+ {
2443
+ "required": [
2444
+ "signal_id"
2445
+ ]
2446
+ }
2447
+ ],
2448
+ "additionalProperties": true
2449
+ },
2450
+ {
2451
+ "type": "object",
2452
+ "properties": {
2453
+ "signal_ref": {
2454
+ "$ref": "#/$defs/external:core~1signal-ref.json"
2455
+ },
2456
+ "signal_id": {
2457
+ "$ref": "#/$defs/external:core~1signal-id.json",
2458
+ "deprecated": true
2459
+ },
2460
+ "value_type": {
2461
+ "type": "string",
2462
+ "const": "categorical"
2463
+ },
2464
+ "values": {
2465
+ "type": "array",
2466
+ "items": {
2467
+ "type": "string"
2468
+ },
2469
+ "minItems": 1
2470
+ }
2471
+ },
2472
+ "required": [
2473
+ "value_type",
2474
+ "values"
2475
+ ],
2476
+ "anyOf": [
2477
+ {
2478
+ "required": [
2479
+ "signal_ref"
2480
+ ]
2481
+ },
2482
+ {
2483
+ "required": [
2484
+ "signal_id"
2485
+ ]
2486
+ }
2487
+ ],
2488
+ "additionalProperties": true
2489
+ },
2490
+ {
2491
+ "type": "object",
2492
+ "properties": {
2493
+ "signal_ref": {
2494
+ "$ref": "#/$defs/external:core~1signal-ref.json"
2495
+ },
2496
+ "signal_id": {
2497
+ "$ref": "#/$defs/external:core~1signal-id.json",
2498
+ "deprecated": true
2499
+ },
2500
+ "value_type": {
2501
+ "type": "string",
2502
+ "const": "numeric"
2503
+ },
2504
+ "min_value": {
2505
+ "type": "number"
2506
+ },
2507
+ "max_value": {
2508
+ "type": "number"
2509
+ }
2510
+ },
2511
+ "required": [
2512
+ "value_type"
2513
+ ],
2514
+ "anyOf": [
2515
+ {
2516
+ "required": [
2517
+ "signal_ref"
2518
+ ]
2519
+ },
2520
+ {
2521
+ "required": [
2522
+ "signal_id"
2523
+ ]
2524
+ }
2525
+ ],
2526
+ "additionalProperties": true
2527
+ }
2528
+ ]
2529
+ },
2530
+ "external:core/signal-id.json": {
2531
+ "deprecated": true,
2532
+ "x-entity": "signal",
2533
+ "discriminator": {
2534
+ "propertyName": "source"
2535
+ },
2536
+ "oneOf": [
2537
+ {
2538
+ "type": "object",
2539
+ "properties": {
2540
+ "source": {
2541
+ "type": "string",
2542
+ "const": "catalog"
2543
+ },
2544
+ "data_provider_domain": {
2545
+ "type": "string",
2546
+ "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
2547
+ },
2548
+ "id": {
2549
+ "type": "string",
2550
+ "pattern": "^[a-zA-Z0-9_-]+$"
2551
+ }
2552
+ },
2553
+ "required": [
2554
+ "source",
2555
+ "data_provider_domain",
2556
+ "id"
2557
+ ],
2558
+ "additionalProperties": true
2559
+ },
2560
+ {
2561
+ "type": "object",
2562
+ "properties": {
2563
+ "source": {
2564
+ "type": "string",
2565
+ "const": "agent"
2566
+ },
2567
+ "agent_url": {
2568
+ "type": "string",
2569
+ "format": "uri"
2570
+ },
2571
+ "id": {
2572
+ "type": "string",
2573
+ "pattern": "^[a-zA-Z0-9_-]+$"
2574
+ }
2575
+ },
2576
+ "required": [
2577
+ "source",
2578
+ "agent_url",
2579
+ "id"
2580
+ ],
2581
+ "additionalProperties": true
2582
+ }
2583
+ ]
2584
+ },
2585
+ "external:core/demographic-targeting-intent.json": {
2586
+ "type": "object",
2587
+ "properties": {
2588
+ "age": {
2589
+ "allOf": [
2590
+ {
2591
+ "$ref": "#/$defs/external:core~1demographic-age-range.json"
2592
+ },
2593
+ {
2594
+ "type": "object",
2595
+ "properties": {
2596
+ "accepted_bases": {
2597
+ "type": "array",
2598
+ "items": {
2599
+ "$ref": "#/$defs/external:enums~1age-determination-basis.json"
2600
+ },
2601
+ "minItems": 1,
2602
+ "uniqueItems": true
2603
+ },
2604
+ "accepted_verification_methods": {
2605
+ "type": "array",
2606
+ "items": {
2607
+ "$ref": "#/$defs/external:enums~1age-verification-method.json"
2608
+ },
2609
+ "minItems": 1,
2610
+ "uniqueItems": true
2611
+ }
2612
+ },
2613
+ "allOf": [
2614
+ {
2615
+ "if": {
2616
+ "required": [
2617
+ "accepted_verification_methods"
2618
+ ]
2619
+ },
2620
+ "then": {
2621
+ "required": [
2622
+ "accepted_bases"
2623
+ ],
2624
+ "properties": {
2625
+ "accepted_bases": {
2626
+ "contains": {
2627
+ "const": "verified"
2628
+ }
2629
+ }
2630
+ }
2631
+ }
2632
+ }
2633
+ ],
2634
+ "additionalProperties": true
2635
+ }
2636
+ ]
2637
+ }
2638
+ },
2639
+ "required": [
2640
+ "age"
2641
+ ],
2642
+ "additionalProperties": true
2643
+ },
2644
+ "external:core/demographic-age-range.json": {
2645
+ "type": "object",
2646
+ "properties": {
2647
+ "min": {
2648
+ "type": "integer",
2649
+ "minimum": 0,
2650
+ "maximum": 150
2651
+ },
2652
+ "max": {
2653
+ "type": "integer",
2654
+ "minimum": 0,
2655
+ "maximum": 150
2656
+ },
2657
+ "include_unknown": {
2658
+ "type": "boolean"
2659
+ }
2660
+ },
2661
+ "required": [
2662
+ "include_unknown"
2663
+ ],
2664
+ "anyOf": [
2665
+ {
2666
+ "required": [
2667
+ "min"
2668
+ ]
2669
+ },
2670
+ {
2671
+ "required": [
2672
+ "max"
2673
+ ]
2674
+ }
2675
+ ],
2676
+ "additionalProperties": true
2677
+ },
2678
+ "external:enums/age-determination-basis.json": {
2679
+ "type": "string",
2680
+ "enum": [
2681
+ "verified",
2682
+ "declared",
2683
+ "inferred"
2684
+ ]
2685
+ },
2686
+ "external:enums/age-verification-method.json": {
2687
+ "type": "string",
2688
+ "enum": [
2689
+ "facial_age_estimation",
2690
+ "id_document",
2691
+ "digital_id",
2692
+ "credit_card",
2693
+ "world_id"
2694
+ ]
2695
+ },
2696
+ "external:core/frequency-cap.json": {
2697
+ "type": "object",
2698
+ "properties": {
2699
+ "suppress": {
2700
+ "allOf": [
2701
+ {
2702
+ "$ref": "#/$defs/external:core~1duration.json"
2703
+ }
2704
+ ]
2705
+ },
2706
+ "suppress_minutes": {
2707
+ "type": "number",
2708
+ "deprecated": true,
2709
+ "minimum": 0
2710
+ },
2711
+ "max_impressions": {
2712
+ "type": "integer",
2713
+ "minimum": 1
2714
+ },
2715
+ "per": {
2716
+ "allOf": [
2717
+ {
2718
+ "$ref": "#/$defs/external:enums~1reach-unit.json"
2719
+ }
2720
+ ]
2721
+ },
2722
+ "window": {
2723
+ "allOf": [
2724
+ {
2725
+ "$ref": "#/$defs/external:core~1duration.json"
2726
+ }
2727
+ ]
2728
+ }
2729
+ },
2730
+ "anyOf": [
2731
+ {
2732
+ "required": [
2733
+ "suppress"
2734
+ ]
2735
+ },
2736
+ {
2737
+ "required": [
2738
+ "suppress_minutes"
2739
+ ]
2740
+ },
2741
+ {
2742
+ "required": [
2743
+ "max_impressions"
2744
+ ]
2745
+ }
2746
+ ],
2747
+ "additionalProperties": true,
2748
+ "dependentRequired": {
2749
+ "max_impressions": [
2750
+ "per",
2751
+ "window"
2752
+ ],
2753
+ "per": [
2754
+ "max_impressions"
2755
+ ],
2756
+ "window": [
2757
+ "max_impressions"
2758
+ ]
2759
+ }
2760
+ },
2761
+ "external:core/duration.json": {
2762
+ "type": "object",
2763
+ "properties": {
2764
+ "interval": {
2765
+ "type": "integer",
2766
+ "minimum": 1
2767
+ },
2768
+ "unit": {
2769
+ "type": "string",
2770
+ "enum": [
2771
+ "seconds",
2772
+ "minutes",
2773
+ "hours",
2774
+ "days",
2775
+ "campaign"
2776
+ ]
2777
+ }
2778
+ },
2779
+ "required": [
2780
+ "interval",
2781
+ "unit"
2782
+ ],
2783
+ "additionalProperties": false
2784
+ },
2785
+ "external:enums/reach-unit.json": {
2786
+ "type": "string",
2787
+ "enum": [
2788
+ "individuals",
2789
+ "households",
2790
+ "devices",
2791
+ "accounts",
2792
+ "cookies",
2793
+ "custom"
2794
+ ]
2795
+ },
2796
+ "external:core/property-list-ref.json": {
2797
+ "type": "object",
2798
+ "properties": {
2799
+ "agent_url": {
2800
+ "type": "string",
2801
+ "format": "uri"
2802
+ },
2803
+ "list_id": {
2804
+ "type": "string",
2805
+ "minLength": 1,
2806
+ "x-entity": "property_list"
2807
+ },
2808
+ "auth_token": {
2809
+ "type": "string"
2810
+ }
2811
+ },
2812
+ "required": [
2813
+ "agent_url",
2814
+ "list_id"
2815
+ ],
2816
+ "additionalProperties": false
2817
+ },
2818
+ "external:core/collection-list-ref.json": {
2819
+ "type": "object",
2820
+ "properties": {
2821
+ "agent_url": {
2822
+ "type": "string",
2823
+ "format": "uri"
2824
+ },
2825
+ "list_id": {
2826
+ "type": "string",
2827
+ "minLength": 1,
2828
+ "x-entity": "collection_list"
2829
+ },
2830
+ "auth_token": {
2831
+ "type": "string"
2832
+ }
2833
+ },
2834
+ "required": [
2835
+ "agent_url",
2836
+ "list_id"
2837
+ ],
2838
+ "additionalProperties": false
2839
+ },
2840
+ "external:core/placement-selection.json": {
2841
+ "type": "object",
2842
+ "discriminator": {
2843
+ "propertyName": "mode"
2844
+ },
2845
+ "oneOf": [
2846
+ {
2847
+ "type": "object",
2848
+ "properties": {
2849
+ "mode": {
2850
+ "type": "string",
2851
+ "const": "selected"
2852
+ },
2853
+ "placement_refs": {
2854
+ "type": "array",
2855
+ "items": {
2856
+ "allOf": [
2857
+ {
2858
+ "$ref": "#/$defs/external:core~1placement-ref.json"
2859
+ },
2860
+ {
2861
+ "required": [
2862
+ "publisher_domain"
2863
+ ]
2864
+ }
2865
+ ]
2866
+ },
2867
+ "minItems": 1,
2868
+ "uniqueItems": true
2869
+ },
2870
+ "ext": {
2871
+ "$ref": "#/$defs/external:core~1ext.json"
2872
+ }
2873
+ },
2874
+ "required": [
2875
+ "mode",
2876
+ "placement_refs"
2877
+ ],
2878
+ "additionalProperties": false
2879
+ },
2880
+ {
2881
+ "type": "object",
2882
+ "properties": {
2883
+ "mode": {
2884
+ "type": "string",
2885
+ "const": "default"
2886
+ },
2887
+ "ext": {
2888
+ "$ref": "#/$defs/external:core~1ext.json"
2889
+ }
2890
+ },
2891
+ "required": [
2892
+ "mode"
2893
+ ],
2894
+ "additionalProperties": false
2895
+ }
2896
+ ]
2897
+ },
2898
+ "external:core/placement-ref.json": {
2899
+ "type": "object",
2900
+ "properties": {
2901
+ "publisher_domain": {
2902
+ "type": "string",
2903
+ "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
2904
+ },
2905
+ "placement_id": {
2906
+ "type": "string",
2907
+ "x-entity": "placement"
2908
+ }
2909
+ },
2910
+ "required": [
2911
+ "placement_id"
2912
+ ],
2913
+ "additionalProperties": true
2914
+ },
2915
+ "external:enums/device-platform.json": {
2916
+ "type": "string",
2917
+ "enum": [
2918
+ "ios",
2919
+ "android",
2920
+ "windows",
2921
+ "macos",
2922
+ "linux",
2923
+ "chromeos",
2924
+ "tvos",
2925
+ "tizen",
2926
+ "webos",
2927
+ "fire_os",
2928
+ "roku_os",
2929
+ "unknown"
2930
+ ]
2931
+ },
2932
+ "external:enums/device-type.json": {
2933
+ "type": "string",
2934
+ "enum": [
2935
+ "desktop",
2936
+ "mobile",
2937
+ "tablet",
2938
+ "ctv",
2939
+ "dooh",
2940
+ "unknown"
2941
+ ]
2942
+ },
2943
+ "external:enums/browser-family.json": {
2944
+ "type": "string",
2945
+ "enum": [
2946
+ "chrome",
2947
+ "safari",
2948
+ "firefox",
2949
+ "edge",
2950
+ "opera",
2951
+ "samsung_internet",
2952
+ "android_webview",
2953
+ "other",
2954
+ "unknown"
2955
+ ]
2956
+ },
2957
+ "external:enums/travel-time-unit.json": {
2958
+ "type": "string",
2959
+ "enum": [
2960
+ "min",
2961
+ "hr"
2962
+ ]
2963
+ },
2964
+ "external:enums/transport-mode.json": {
2965
+ "type": "string",
2966
+ "enum": [
2967
+ "walking",
2968
+ "cycling",
2969
+ "driving",
2970
+ "public_transport"
2971
+ ]
2972
+ },
2973
+ "external:enums/distance-unit.json": {
2974
+ "type": "string",
2975
+ "enum": [
2976
+ "km",
2977
+ "mi",
2978
+ "m"
2979
+ ]
2980
+ },
2981
+ "external:core/locale-tag.json": {
2982
+ "x-adcp-validation": {
2983
+ "verifier_constraints": {
2984
+ "well_formed": "rfc5646",
2985
+ "semantic_scope": "language_identity_only",
2986
+ "canonical_wire_profile": "adcp_bcp47_casing",
2987
+ "rfc5646_comparison": "case_insensitive",
2988
+ "non_profile": "reject"
2989
+ },
2990
+ "spec": "docs/protocol/language-and-localization.mdx#one-language-tag-primitive"
2991
+ },
2992
+ "type": "string",
2993
+ "minLength": 2,
2994
+ "maxLength": 63,
2995
+ "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})+)$"
2996
+ },
2997
+ "external:enums/match-type.json": {
2998
+ "type": "string",
2999
+ "enum": [
3000
+ "broad",
3001
+ "phrase",
3002
+ "exact"
3003
+ ]
3004
+ },
3005
+ "external:core/canonical-optimization-goal.json": {
3006
+ "discriminator": {
3007
+ "propertyName": "kind"
3008
+ },
3009
+ "oneOf": [
3010
+ {
3011
+ "type": "object",
3012
+ "properties": {
3013
+ "kind": {
3014
+ "type": "string",
3015
+ "const": "metric"
3016
+ },
3017
+ "metric": {
3018
+ "type": "string",
3019
+ "enum": [
3020
+ "clicks",
3021
+ "views",
3022
+ "completed_views",
3023
+ "viewed_seconds",
3024
+ "engagements",
3025
+ "follows",
3026
+ "saves",
3027
+ "profile_visits",
3028
+ "reach"
3029
+ ]
3030
+ },
3031
+ "reach_unit": {
3032
+ "$ref": "#/$defs/external:enums~1reach-unit.json"
3033
+ },
3034
+ "target_frequency": {
3035
+ "type": "object",
3036
+ "properties": {
3037
+ "min": {
3038
+ "type": "integer",
3039
+ "minimum": 1
3040
+ },
3041
+ "max": {
3042
+ "type": "integer",
3043
+ "minimum": 1
3044
+ },
3045
+ "window": {
3046
+ "$ref": "#/$defs/external:core~1duration.json"
3047
+ }
3048
+ },
3049
+ "required": [
3050
+ "window"
3051
+ ],
3052
+ "anyOf": [
3053
+ {
3054
+ "required": [
3055
+ "min"
3056
+ ]
3057
+ },
3058
+ {
3059
+ "required": [
3060
+ "max"
3061
+ ]
3062
+ }
3063
+ ],
3064
+ "additionalProperties": false
3065
+ },
3066
+ "view_duration_seconds": {
3067
+ "type": "number",
3068
+ "exclusiveMinimum": 0
3069
+ },
3070
+ "target": {
3071
+ "type": "object",
3072
+ "properties": {
3073
+ "kind": {
3074
+ "type": "string",
3075
+ "const": "threshold_rate"
3076
+ },
3077
+ "value": {
3078
+ "type": "number",
3079
+ "exclusiveMinimum": 0
3080
+ }
3081
+ },
3082
+ "required": [
3083
+ "kind",
3084
+ "value"
3085
+ ],
3086
+ "additionalProperties": false
3087
+ },
3088
+ "priority": {
3089
+ "type": "integer",
3090
+ "minimum": 1
3091
+ }
3092
+ },
3093
+ "required": [
3094
+ "kind",
3095
+ "metric"
3096
+ ],
3097
+ "additionalProperties": false
3098
+ },
3099
+ {
3100
+ "type": "object",
3101
+ "properties": {
3102
+ "kind": {
3103
+ "type": "string",
3104
+ "const": "event"
3105
+ },
3106
+ "event_sources": {
3107
+ "type": "array",
3108
+ "items": {
3109
+ "type": "object",
3110
+ "properties": {
3111
+ "event_source_id": {
3112
+ "type": "string",
3113
+ "minLength": 1,
3114
+ "x-entity": "event_source"
3115
+ },
3116
+ "event_type": {
3117
+ "$ref": "#/$defs/external:enums~1event-type.json"
3118
+ },
3119
+ "custom_event_name": {
3120
+ "type": "string",
3121
+ "minLength": 1
3122
+ },
3123
+ "value_field": {
3124
+ "type": "string",
3125
+ "minLength": 1
3126
+ },
3127
+ "value_factor": {
3128
+ "type": "number",
3129
+ "default": 1
3130
+ }
3131
+ },
3132
+ "required": [
3133
+ "event_source_id",
3134
+ "event_type"
3135
+ ],
3136
+ "additionalProperties": false
3137
+ },
3138
+ "minItems": 1
3139
+ },
3140
+ "target": {
3141
+ "type": "object",
3142
+ "properties": {
3143
+ "kind": {
3144
+ "type": "string",
3145
+ "const": "maximize_value"
3146
+ }
3147
+ },
3148
+ "required": [
3149
+ "kind"
3150
+ ],
3151
+ "additionalProperties": false
3152
+ },
3153
+ "attribution_window": {
3154
+ "$ref": "#/$defs/external:core~1attribution-window.json"
3155
+ },
3156
+ "priority": {
3157
+ "type": "integer",
3158
+ "minimum": 1
3159
+ }
3160
+ },
3161
+ "required": [
3162
+ "kind",
3163
+ "event_sources"
3164
+ ],
3165
+ "additionalProperties": false
3166
+ },
3167
+ {
3168
+ "type": "object",
3169
+ "properties": {
3170
+ "kind": {
3171
+ "type": "string",
3172
+ "const": "vendor_metric"
3173
+ },
3174
+ "vendor": {
3175
+ "$ref": "#/$defs/external:core~1brand-key.json"
3176
+ },
3177
+ "metric_id": {
3178
+ "$ref": "#/$defs/external:core~1vendor-metric-id.json"
3179
+ },
3180
+ "target": {
3181
+ "type": "object",
3182
+ "properties": {
3183
+ "kind": {
3184
+ "type": "string",
3185
+ "const": "threshold_rate"
3186
+ },
3187
+ "value": {
3188
+ "type": "number",
3189
+ "exclusiveMinimum": 0
3190
+ }
3191
+ },
3192
+ "required": [
3193
+ "kind",
3194
+ "value"
3195
+ ],
3196
+ "additionalProperties": false
3197
+ },
3198
+ "priority": {
3199
+ "type": "integer",
3200
+ "minimum": 1
3201
+ }
3202
+ },
3203
+ "required": [
3204
+ "kind",
3205
+ "vendor",
3206
+ "metric_id"
3207
+ ],
3208
+ "additionalProperties": false
3209
+ }
3210
+ ]
3211
+ },
3212
+ "external:core/attribution-window.json": {
3213
+ "type": "object",
3214
+ "properties": {
3215
+ "post_click": {
3216
+ "allOf": [
3217
+ {
3218
+ "$ref": "#/$defs/external:core~1duration.json"
3219
+ }
3220
+ ]
3221
+ },
3222
+ "post_view": {
3223
+ "allOf": [
3224
+ {
3225
+ "$ref": "#/$defs/external:core~1duration.json"
3226
+ }
3227
+ ]
3228
+ },
3229
+ "model": {
3230
+ "$ref": "#/$defs/external:enums~1attribution-model.json"
3231
+ }
3232
+ },
3233
+ "additionalProperties": true
3234
+ },
3235
+ "external:enums/attribution-model.json": {
3236
+ "type": "string",
3237
+ "enum": [
3238
+ "last_touch",
3239
+ "first_touch",
3240
+ "linear",
3241
+ "time_decay",
3242
+ "data_driven"
3243
+ ]
3244
+ },
3245
+ "external:core/vendor-metric-id.json": {
3246
+ "type": "string",
3247
+ "x-entity": "vendor_metric",
3248
+ "minLength": 1,
3249
+ "maxLength": 64,
3250
+ "pattern": "^[a-z][a-z0-9_]*$"
3251
+ },
3252
+ "external:core/product-audience-evidence-requirements.json": {
3253
+ "type": "object",
3254
+ "properties": {
3255
+ "requirement_mode": {
3256
+ "type": "string",
3257
+ "enum": [
3258
+ "required",
3259
+ "preferred"
3260
+ ]
3261
+ },
3262
+ "evidence_presence": {
3263
+ "type": "string",
3264
+ "enum": [
3265
+ "required",
3266
+ "when_available"
3267
+ ]
3268
+ },
3269
+ "accepted_methodologies": {
3270
+ "type": "array",
3271
+ "items": {
3272
+ "$ref": "#/$defs/external:enums~1audience-evidence-methodology.json"
3273
+ },
3274
+ "minItems": 1,
3275
+ "uniqueItems": true
3276
+ },
3277
+ "excluded_methodologies": {
3278
+ "type": "array",
3279
+ "items": {
3280
+ "$ref": "#/$defs/external:enums~1audience-evidence-methodology.json"
3281
+ },
3282
+ "minItems": 1,
3283
+ "uniqueItems": true
3284
+ },
3285
+ "accepted_evidence_types": {
3286
+ "type": "array",
3287
+ "items": {
3288
+ "type": "string",
3289
+ "enum": [
3290
+ "measured",
3291
+ "forecast",
3292
+ "seller_declared"
3293
+ ]
3294
+ },
3295
+ "minItems": 1,
3296
+ "uniqueItems": true
3297
+ },
3298
+ "accepted_providers": {
3299
+ "type": "array",
3300
+ "items": {
3301
+ "$ref": "#/$defs/external:core~1brand-key.json"
3302
+ },
3303
+ "minItems": 1
3304
+ },
3305
+ "excluded_providers": {
3306
+ "type": "array",
3307
+ "items": {
3308
+ "$ref": "#/$defs/external:core~1brand-key.json"
3309
+ },
3310
+ "minItems": 1
3311
+ },
3312
+ "accepted_subject_types": {
3313
+ "type": "array",
3314
+ "items": {
3315
+ "$ref": "#/$defs/external:enums~1audience-subject-type.json"
3316
+ },
3317
+ "minItems": 1,
3318
+ "uniqueItems": true
3319
+ },
3320
+ "accepted_resolution_methods": {
3321
+ "type": "array",
3322
+ "items": {
3323
+ "$ref": "#/$defs/external:enums~1audience-resolution-method.json"
3324
+ },
3325
+ "minItems": 1,
3326
+ "uniqueItems": true
3327
+ },
3328
+ "minimum_confidence": {
3329
+ "type": "number",
3330
+ "minimum": 0,
3331
+ "maximum": 1
3332
+ },
3333
+ "maximum_age": {
3334
+ "allOf": [
3335
+ {
3336
+ "$ref": "#/$defs/external:core~1duration.json"
3337
+ },
3338
+ {
3339
+ "properties": {
3340
+ "unit": {
3341
+ "enum": [
3342
+ "seconds",
3343
+ "minutes",
3344
+ "hours",
3345
+ "days"
3346
+ ]
3347
+ }
3348
+ }
3349
+ }
3350
+ ]
3351
+ },
3352
+ "methodology_documentation_required": {
3353
+ "type": "boolean",
3354
+ "default": false
3355
+ },
3356
+ "independent_attestation_required": {
3357
+ "type": "boolean",
3358
+ "default": false
3359
+ },
3360
+ "accepted_attestation_issuers": {
3361
+ "type": "array",
3362
+ "items": {
3363
+ "discriminator": {
3364
+ "propertyName": "type"
3365
+ },
3366
+ "oneOf": [
3367
+ {
3368
+ "type": "object",
3369
+ "properties": {
3370
+ "type": {
3371
+ "type": "string",
3372
+ "const": "brand"
3373
+ },
3374
+ "brand": {
3375
+ "$ref": "#/$defs/external:core~1brand-key.json"
3376
+ },
3377
+ "ext": {
3378
+ "$ref": "#/$defs/external:core~1ext.json"
3379
+ }
3380
+ },
3381
+ "required": [
3382
+ "type",
3383
+ "brand"
3384
+ ],
3385
+ "additionalProperties": false
3386
+ },
3387
+ {
3388
+ "type": "object",
3389
+ "properties": {
3390
+ "type": {
3391
+ "type": "string",
3392
+ "const": "agent"
3393
+ },
3394
+ "agent_url": {
3395
+ "type": "string",
3396
+ "format": "uri",
3397
+ "pattern": "^https://[^/?#@]+(?:/[^?#]*)?(?:\\?[^#]*)?$"
3398
+ },
3399
+ "ext": {
3400
+ "$ref": "#/$defs/external:core~1ext.json"
3401
+ }
3402
+ },
3403
+ "required": [
3404
+ "type",
3405
+ "agent_url"
3406
+ ],
3407
+ "additionalProperties": false
3408
+ },
3409
+ {
3410
+ "type": "object",
3411
+ "properties": {
3412
+ "type": {
3413
+ "type": "string",
3414
+ "const": "origin"
3415
+ },
3416
+ "origin": {
3417
+ "type": "string",
3418
+ "format": "uri",
3419
+ "pattern": "^https://[^/?#@]+$"
3420
+ },
3421
+ "ext": {
3422
+ "$ref": "#/$defs/external:core~1ext.json"
3423
+ }
3424
+ },
3425
+ "required": [
3426
+ "type",
3427
+ "origin"
3428
+ ],
3429
+ "additionalProperties": false
3430
+ }
3431
+ ]
3432
+ },
3433
+ "minItems": 1,
3434
+ "uniqueItems": true
3435
+ },
3436
+ "accepted_attestation_claim_types": {
3437
+ "type": "array",
3438
+ "items": {
3439
+ "type": "string",
3440
+ "format": "uri"
3441
+ },
3442
+ "minItems": 1,
3443
+ "uniqueItems": true
3444
+ },
3445
+ "ext": {
3446
+ "$ref": "#/$defs/external:core~1ext.json"
3447
+ }
3448
+ },
3449
+ "required": [
3450
+ "requirement_mode",
3451
+ "evidence_presence"
3452
+ ],
3453
+ "allOf": [
3454
+ {
3455
+ "if": {
3456
+ "properties": {
3457
+ "independent_attestation_required": {
3458
+ "const": true
3459
+ }
3460
+ },
3461
+ "required": [
3462
+ "independent_attestation_required"
3463
+ ]
3464
+ },
3465
+ "then": {
3466
+ "required": [
3467
+ "accepted_attestation_issuers"
3468
+ ]
3469
+ }
3470
+ }
3471
+ ],
3472
+ "additionalProperties": false
3473
+ },
3474
+ "external:enums/audience-evidence-methodology.json": {
3475
+ "type": "string",
3476
+ "enum": [
3477
+ "observed",
3478
+ "declared",
3479
+ "derived",
3480
+ "inferred",
3481
+ "modeled",
3482
+ "projected"
3483
+ ]
3484
+ },
3485
+ "external:enums/audience-subject-type.json": {
3486
+ "type": "string",
3487
+ "enum": [
3488
+ "individual",
3489
+ "household",
3490
+ "business",
3491
+ "contextual",
3492
+ "none"
3493
+ ]
3494
+ },
3495
+ "external:enums/audience-resolution-method.json": {
3496
+ "type": "string",
3497
+ "enum": [
3498
+ "deterministic_id",
3499
+ "probabilistic_device",
3500
+ "browser",
3501
+ "geographic",
3502
+ "content_signal",
3503
+ "mixed"
3504
+ ]
3505
+ },
3506
+ "external:core/audience-evidence-pin.json": {
3507
+ "type": "object",
3508
+ "properties": {
3509
+ "evidence_id": {
3510
+ "type": "string",
3511
+ "minLength": 1,
3512
+ "x-entity": "audience_evidence"
3513
+ },
3514
+ "snapshot_id": {
3515
+ "type": "string",
3516
+ "minLength": 1,
3517
+ "x-entity": "audience_evidence_snapshot"
3518
+ },
3519
+ "version": {
3520
+ "type": "string",
3521
+ "minLength": 1
3522
+ },
3523
+ "content_digest": {
3524
+ "type": "string",
3525
+ "pattern": "^sha256:[a-f0-9]{64}$"
3526
+ },
3527
+ "ext": {
3528
+ "$ref": "#/$defs/external:core~1ext.json"
3529
+ }
3530
+ },
3531
+ "required": [
3532
+ "evidence_id",
3533
+ "snapshot_id",
3534
+ "version",
3535
+ "content_digest"
3536
+ ],
3537
+ "additionalProperties": false
3538
+ },
3539
+ "external:core/context.json": {
3540
+ "type": "object",
3541
+ "additionalProperties": true
3542
+ },
3543
+ "external:core/canonical-measurement-terms.json": {
3544
+ "type": "object",
3545
+ "properties": {
3546
+ "billing_measurement": {
3547
+ "type": "object",
3548
+ "properties": {
3549
+ "vendor": {
3550
+ "$ref": "#/$defs/external:core~1brand-key.json"
3551
+ },
3552
+ "max_variance_percent": {
3553
+ "type": "number",
3554
+ "minimum": 0,
3555
+ "exclusiveMaximum": 100
3556
+ },
3557
+ "measurement_window": {
3558
+ "type": "string",
3559
+ "minLength": 1
3560
+ },
3561
+ "finalization_deadline_hours": {
3562
+ "type": "integer",
3563
+ "minimum": 0
3564
+ }
3565
+ },
3566
+ "required": [
3567
+ "vendor"
3568
+ ],
3569
+ "additionalProperties": false
3570
+ },
3571
+ "makegood_policy": {
3572
+ "type": "object",
3573
+ "properties": {
3574
+ "available_remedies": {
3575
+ "type": "array",
3576
+ "items": {
3577
+ "$ref": "#/$defs/external:enums~1makegood-remedy.json"
3578
+ },
3579
+ "minItems": 1,
3580
+ "uniqueItems": true
3581
+ }
3582
+ },
3583
+ "required": [
3584
+ "available_remedies"
3585
+ ],
3586
+ "additionalProperties": false
3587
+ }
3588
+ },
3589
+ "additionalProperties": false
3590
+ },
3591
+ "external:enums/makegood-remedy.json": {
3592
+ "type": "string",
3593
+ "enum": [
3594
+ "additional_delivery",
3595
+ "credit",
3596
+ "invoice_adjustment"
3597
+ ]
3598
+ },
3599
+ "external:core/canonical-performance-standard.json": {
3600
+ "type": "object",
3601
+ "properties": {
3602
+ "metric": {
3603
+ "$ref": "#/$defs/external:enums~1performance-standard-metric.json"
3604
+ },
3605
+ "threshold": {
3606
+ "type": "number",
3607
+ "minimum": 0,
3608
+ "maximum": 1
3609
+ },
3610
+ "standard": {
3611
+ "$ref": "#/$defs/external:enums~1viewability-standard.json"
3612
+ },
3613
+ "vendor": {
3614
+ "$ref": "#/$defs/external:core~1brand-key.json"
3615
+ }
3616
+ },
3617
+ "required": [
3618
+ "metric",
3619
+ "threshold",
3620
+ "vendor"
3621
+ ],
3622
+ "additionalProperties": false
3623
+ },
3624
+ "external:enums/performance-standard-metric.json": {
3625
+ "type": "string",
3626
+ "enum": [
3627
+ "viewability",
3628
+ "ivt",
3629
+ "completion_rate",
3630
+ "brand_safety",
3631
+ "attention_score"
3632
+ ]
3633
+ },
3634
+ "external:enums/viewability-standard.json": {
3635
+ "type": "string",
3636
+ "enum": [
3637
+ "mrc",
3638
+ "groupm"
3639
+ ]
3640
+ },
3641
+ "external:core/canonical-budget-allocation.json": {
3642
+ "discriminator": {
3643
+ "propertyName": "mode"
3644
+ },
3645
+ "oneOf": [
3646
+ {
3647
+ "type": "object",
3648
+ "properties": {
3649
+ "mode": {
3650
+ "type": "string",
3651
+ "const": "fixed"
3652
+ }
3653
+ },
3654
+ "required": [
3655
+ "mode"
3656
+ ],
3657
+ "additionalProperties": false
3658
+ },
3659
+ {
3660
+ "type": "object",
3661
+ "properties": {
3662
+ "mode": {
3663
+ "type": "string",
3664
+ "const": "seller_optimized"
3665
+ },
3666
+ "optimization_goals": {
3667
+ "type": "array",
3668
+ "items": {
3669
+ "$ref": "#/$defs/external:core~1canonical-optimization-goal.json"
3670
+ },
3671
+ "minItems": 1
3672
+ }
3673
+ },
3674
+ "required": [
3675
+ "mode",
3676
+ "optimization_goals"
3677
+ ],
3678
+ "additionalProperties": false
3679
+ }
3680
+ ]
3681
+ },
3682
+ "external:core/start-timing.json": {
3683
+ "oneOf": [
3684
+ {
3685
+ "type": "string",
3686
+ "const": "asap"
3687
+ },
3688
+ {
3689
+ "type": "string",
3690
+ "format": "date-time"
3691
+ }
3692
+ ]
3693
+ },
3694
+ "external:core/business-entity.json": {
3695
+ "type": "object",
3696
+ "properties": {
3697
+ "legal_name": {
3698
+ "type": "string",
3699
+ "maxLength": 200
3700
+ },
3701
+ "vat_id": {
3702
+ "type": "string",
3703
+ "pattern": "^[A-Z]{2}[A-Z0-9]{2,13}$"
3704
+ },
3705
+ "tax_id": {
3706
+ "type": "string",
3707
+ "maxLength": 30
3708
+ },
3709
+ "registration_number": {
3710
+ "type": "string",
3711
+ "maxLength": 50
3712
+ },
3713
+ "address": {
3714
+ "type": "object",
3715
+ "properties": {
3716
+ "street": {
3717
+ "type": "string",
3718
+ "maxLength": 200
3719
+ },
3720
+ "city": {
3721
+ "type": "string",
3722
+ "maxLength": 100
3723
+ },
3724
+ "postal_code": {
3725
+ "type": "string",
3726
+ "maxLength": 20
3727
+ },
3728
+ "region": {
3729
+ "type": "string",
3730
+ "maxLength": 100
3731
+ },
3732
+ "country": {
3733
+ "type": "string",
3734
+ "pattern": "^[A-Z]{2}$"
3735
+ }
3736
+ },
3737
+ "required": [
3738
+ "street",
3739
+ "city",
3740
+ "postal_code",
3741
+ "country"
3742
+ ],
3743
+ "additionalProperties": false
3744
+ },
3745
+ "contacts": {
3746
+ "type": "array",
3747
+ "items": {
3748
+ "type": "object",
3749
+ "properties": {
3750
+ "role": {
3751
+ "type": "string",
3752
+ "enum": [
3753
+ "billing",
3754
+ "legal",
3755
+ "creative",
3756
+ "general"
3757
+ ]
3758
+ },
3759
+ "name": {
3760
+ "type": "string",
3761
+ "maxLength": 200
3762
+ },
3763
+ "email": {
3764
+ "type": "string",
3765
+ "format": "email",
3766
+ "maxLength": 254
3767
+ },
3768
+ "phone": {
3769
+ "type": "string",
3770
+ "maxLength": 30
3771
+ }
3772
+ },
3773
+ "required": [
3774
+ "role"
3775
+ ],
3776
+ "additionalProperties": false
3777
+ },
3778
+ "maxItems": 10
3779
+ },
3780
+ "bank": {
3781
+ "type": "object",
3782
+ "writeOnly": true,
3783
+ "properties": {
3784
+ "account_holder": {
3785
+ "type": "string",
3786
+ "maxLength": 200
3787
+ },
3788
+ "iban": {
3789
+ "type": "string",
3790
+ "pattern": "^[A-Z]{2}[0-9]{2}[A-Z0-9]{4,30}$"
3791
+ },
3792
+ "bic": {
3793
+ "type": "string",
3794
+ "pattern": "^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$"
3795
+ },
3796
+ "routing_number": {
3797
+ "type": "string",
3798
+ "maxLength": 30
3799
+ },
3800
+ "account_number": {
3801
+ "type": "string",
3802
+ "maxLength": 30
3803
+ }
3804
+ },
3805
+ "required": [
3806
+ "account_holder"
3807
+ ],
3808
+ "additionalProperties": false
3809
+ },
3810
+ "ext": {
3811
+ "$ref": "#/$defs/external:core~1ext.json"
3812
+ }
3813
+ },
3814
+ "required": [
3815
+ "legal_name"
3816
+ ],
3817
+ "additionalProperties": false
3818
+ },
3819
+ "external:core/push-notification-config.json": {
3820
+ "type": "object",
3821
+ "properties": {
3822
+ "url": {
3823
+ "type": "string",
3824
+ "format": "uri"
3825
+ },
3826
+ "operation_id": {
3827
+ "type": "string",
3828
+ "minLength": 1,
3829
+ "maxLength": 255,
3830
+ "pattern": "^[A-Za-z0-9_.:-]{1,255}$"
3831
+ },
3832
+ "token": {
3833
+ "type": "string",
3834
+ "minLength": 16,
3835
+ "maxLength": 4096
3836
+ },
3837
+ "authentication": {
3838
+ "type": "object",
3839
+ "deprecated": true,
3840
+ "properties": {
3841
+ "schemes": {
3842
+ "type": "array",
3843
+ "items": {
3844
+ "$ref": "#/$defs/external:enums~1auth-scheme.json"
3845
+ },
3846
+ "minItems": 1,
3847
+ "maxItems": 1
3848
+ },
3849
+ "credentials": {
3850
+ "type": "string",
3851
+ "minLength": 32
3852
+ }
3853
+ },
3854
+ "required": [
3855
+ "schemes",
3856
+ "credentials"
3857
+ ],
3858
+ "additionalProperties": false
3859
+ }
3860
+ },
3861
+ "required": [
3862
+ "url"
3863
+ ]
3864
+ },
3865
+ "external:enums/auth-scheme.json": {
3866
+ "deprecated": true,
3867
+ "type": "string",
3868
+ "enum": [
3869
+ "Bearer",
3870
+ "HMAC-SHA256"
3871
+ ]
3872
+ },
3873
+ "external:core/reporting-webhook.json": {
3874
+ "type": "object",
3875
+ "properties": {
3876
+ "url": {
3877
+ "type": "string",
3878
+ "format": "uri"
3879
+ },
3880
+ "token": {
3881
+ "type": "string",
3882
+ "minLength": 16
3883
+ },
3884
+ "authentication": {
3885
+ "type": "object",
3886
+ "deprecated": true,
3887
+ "properties": {
3888
+ "schemes": {
3889
+ "type": "array",
3890
+ "items": {
3891
+ "$ref": "#/$defs/external:enums~1auth-scheme.json"
3892
+ },
3893
+ "minItems": 1,
3894
+ "maxItems": 1
3895
+ },
3896
+ "credentials": {
3897
+ "type": "string",
3898
+ "minLength": 32
3899
+ }
3900
+ },
3901
+ "required": [
3902
+ "schemes",
3903
+ "credentials"
3904
+ ],
3905
+ "additionalProperties": false
3906
+ },
3907
+ "reporting_frequency": {
3908
+ "type": "string",
3909
+ "enum": [
3910
+ "hourly",
3911
+ "daily",
3912
+ "monthly"
3913
+ ]
3914
+ },
3915
+ "requested_metrics": {
3916
+ "type": "array",
3917
+ "items": {
3918
+ "$ref": "#/$defs/external:enums~1available-metric.json"
3919
+ },
3920
+ "uniqueItems": true
3921
+ }
3922
+ },
3923
+ "required": [
3924
+ "url",
3925
+ "authentication",
3926
+ "reporting_frequency"
3927
+ ],
3928
+ "additionalProperties": true
3929
+ },
3930
+ "external:enums/available-metric.json": {
3931
+ "type": "string",
3932
+ "enum": [
3933
+ "impressions",
3934
+ "spend",
3935
+ "clicks",
3936
+ "ctr",
3937
+ "views",
3938
+ "completed_views",
3939
+ "completion_rate",
3940
+ "conversions",
3941
+ "conversion_value",
3942
+ "commissionable_value",
3943
+ "roas",
3944
+ "cost_per_acquisition",
3945
+ "new_to_brand_rate",
3946
+ "leads",
3947
+ "reach",
3948
+ "frequency",
3949
+ "grps",
3950
+ "engagements",
3951
+ "engagement_rate",
3952
+ "follows",
3953
+ "saves",
3954
+ "profile_visits",
3955
+ "viewability",
3956
+ "quartile_data",
3957
+ "dooh_metrics",
3958
+ "cost_per_click",
3959
+ "cost_per_completed_view",
3960
+ "cpm",
3961
+ "downloads",
3962
+ "units_sold",
3963
+ "new_to_brand_units",
3964
+ "plays",
3965
+ "incremental_sales_lift",
3966
+ "brand_lift",
3967
+ "foot_traffic",
3968
+ "conversion_lift",
3969
+ "brand_search_lift"
3970
+ ]
3971
+ },
3972
+ "external:core/opportunity-context.json": {
3973
+ "type": "object",
3974
+ "properties": {
3975
+ "opportunity_id": {
3976
+ "type": "string",
3977
+ "minLength": 1,
3978
+ "maxLength": 255,
3979
+ "pattern": "^[A-Za-z0-9_.:-]{1,255}$",
3980
+ "x-entity": "opportunity"
3981
+ },
3982
+ "phase": {
3983
+ "type": "string",
3984
+ "enum": [
3985
+ "exploratory",
3986
+ "planning",
3987
+ "active_sourcing"
3988
+ ]
3989
+ },
3990
+ "intent": {
3991
+ "type": "string",
3992
+ "enum": [
3993
+ "test",
3994
+ "speculative",
3995
+ "planning",
3996
+ "live_rfp"
3997
+ ]
3998
+ },
3999
+ "planning_horizon": {
4000
+ "$ref": "#/$defs/external:core~1date-range.json"
4001
+ },
4002
+ "response_deadline": {
4003
+ "type": "string",
4004
+ "format": "date-time"
4005
+ },
4006
+ "status": {
4007
+ "type": "string",
4008
+ "enum": [
4009
+ "open",
4010
+ "closed"
4011
+ ]
4012
+ },
4013
+ "close_reason": {
4014
+ "type": "string",
4015
+ "enum": [
4016
+ "accepted_with_seller",
4017
+ "purchased_elsewhere",
4018
+ "selected_alternative",
4019
+ "not_pursued",
4020
+ "budget_changed",
4021
+ "timing_changed",
4022
+ "other"
4023
+ ]
4024
+ },
4025
+ "close_detail": {
4026
+ "type": "string",
4027
+ "minLength": 1,
4028
+ "maxLength": 500
4029
+ }
4030
+ },
4031
+ "required": [
4032
+ "opportunity_id"
4033
+ ],
4034
+ "allOf": [
4035
+ {
4036
+ "if": {
4037
+ "properties": {
4038
+ "status": {
4039
+ "const": "closed"
4040
+ }
4041
+ },
4042
+ "required": [
4043
+ "status"
4044
+ ]
4045
+ },
4046
+ "then": {
4047
+ "required": [
4048
+ "close_reason"
4049
+ ]
4050
+ },
4051
+ "else": {
4052
+ "not": {
4053
+ "anyOf": [
4054
+ {
4055
+ "required": [
4056
+ "close_reason"
4057
+ ]
4058
+ },
4059
+ {
4060
+ "required": [
4061
+ "close_detail"
4062
+ ]
4063
+ }
4064
+ ]
4065
+ }
4066
+ }
4067
+ },
4068
+ {
4069
+ "if": {
4070
+ "properties": {
4071
+ "close_reason": {
4072
+ "const": "other"
4073
+ }
4074
+ },
4075
+ "required": [
4076
+ "close_reason"
4077
+ ]
4078
+ },
4079
+ "then": {
4080
+ "required": [
4081
+ "close_detail"
4082
+ ]
4083
+ }
4084
+ }
4085
+ ],
4086
+ "additionalProperties": false
4087
+ },
4088
+ "external:core/date-range.json": {
4089
+ "type": "object",
4090
+ "properties": {
4091
+ "start": {
4092
+ "type": "string",
4093
+ "format": "date"
4094
+ },
4095
+ "end": {
4096
+ "type": "string",
4097
+ "format": "date"
4098
+ }
4099
+ },
4100
+ "required": [
4101
+ "start",
4102
+ "end"
4103
+ ],
4104
+ "additionalProperties": true
4105
+ }
4106
+ }
4107
+ }