@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,3824 @@
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/list-products-response.json",
4
+ "type": "object",
5
+ "discriminator": {
6
+ "propertyName": "outcome"
7
+ },
8
+ "properties": {
9
+ "outcome": {
10
+ "type": "string",
11
+ "enum": [
12
+ "listed",
13
+ "unchanged"
14
+ ]
15
+ },
16
+ "products": {
17
+ "type": "array",
18
+ "items": {
19
+ "$ref": "#/$defs/external:core~1canonical-product.json"
20
+ }
21
+ },
22
+ "next_cursor": {
23
+ "type": "string",
24
+ "minLength": 1
25
+ },
26
+ "feed_version": {
27
+ "type": "string"
28
+ },
29
+ "pricing_version": {
30
+ "type": "string"
31
+ },
32
+ "cache_scope": {
33
+ "type": "string",
34
+ "enum": [
35
+ "public",
36
+ "account"
37
+ ]
38
+ },
39
+ "incomplete": {
40
+ "type": "array",
41
+ "minItems": 1,
42
+ "items": {
43
+ "type": "object",
44
+ "properties": {
45
+ "scope": {
46
+ "type": "string",
47
+ "enum": [
48
+ "products",
49
+ "pricing",
50
+ "forecast",
51
+ "wholesale_feed"
52
+ ]
53
+ },
54
+ "description": {
55
+ "type": "string",
56
+ "minLength": 1
57
+ },
58
+ "estimated_wait": {
59
+ "$ref": "#/$defs/external:core~1duration.json"
60
+ }
61
+ },
62
+ "required": [
63
+ "scope",
64
+ "description"
65
+ ],
66
+ "additionalProperties": false
67
+ }
68
+ },
69
+ "replayed": {
70
+ "type": "boolean",
71
+ "const": true
72
+ },
73
+ "context": {
74
+ "$ref": "#/$defs/external:core~1context.json"
75
+ },
76
+ "ext": {
77
+ "$ref": "#/$defs/external:core~1ext.json"
78
+ }
79
+ },
80
+ "oneOf": [
81
+ {
82
+ "properties": {
83
+ "outcome": {
84
+ "type": "string",
85
+ "const": "listed"
86
+ }
87
+ },
88
+ "required": [
89
+ "outcome",
90
+ "products",
91
+ "feed_version",
92
+ "cache_scope"
93
+ ]
94
+ },
95
+ {
96
+ "properties": {
97
+ "outcome": {
98
+ "type": "string",
99
+ "const": "unchanged"
100
+ }
101
+ },
102
+ "required": [
103
+ "outcome",
104
+ "feed_version",
105
+ "cache_scope"
106
+ ],
107
+ "not": {
108
+ "required": [
109
+ "products"
110
+ ]
111
+ }
112
+ }
113
+ ],
114
+ "not": {
115
+ "anyOf": [
116
+ {
117
+ "required": [
118
+ "proposals"
119
+ ]
120
+ },
121
+ {
122
+ "required": [
123
+ "refinement_applied"
124
+ ]
125
+ },
126
+ {
127
+ "required": [
128
+ "pagination"
129
+ ]
130
+ },
131
+ {
132
+ "required": [
133
+ "unchanged"
134
+ ]
135
+ }
136
+ ]
137
+ },
138
+ "additionalProperties": false,
139
+ "$defs": {
140
+ "external:core/canonical-product.json": {
141
+ "type": "object",
142
+ "properties": {
143
+ "product_id": {
144
+ "type": "string",
145
+ "minLength": 1,
146
+ "x-entity": "product"
147
+ },
148
+ "name": {
149
+ "type": "string",
150
+ "minLength": 1
151
+ },
152
+ "description": {
153
+ "type": "string"
154
+ },
155
+ "publisher_properties": {
156
+ "type": "array",
157
+ "items": {
158
+ "allOf": [
159
+ {
160
+ "$ref": "#/$defs/external:core~1publisher-property-selector.json"
161
+ },
162
+ {
163
+ "not": {
164
+ "required": [
165
+ "publisher_domains"
166
+ ]
167
+ }
168
+ }
169
+ ]
170
+ },
171
+ "minItems": 1
172
+ },
173
+ "channels": {
174
+ "type": "array",
175
+ "items": {
176
+ "$ref": "#/$defs/external:enums~1channels.json"
177
+ },
178
+ "uniqueItems": true
179
+ },
180
+ "video_placement_types": {
181
+ "type": "array",
182
+ "items": {
183
+ "$ref": "#/$defs/external:enums~1video-placement-type.json"
184
+ },
185
+ "minItems": 1,
186
+ "uniqueItems": true
187
+ },
188
+ "audio_distribution_types": {
189
+ "type": "array",
190
+ "items": {
191
+ "$ref": "#/$defs/external:enums~1audio-distribution-type.json"
192
+ },
193
+ "minItems": 1,
194
+ "uniqueItems": true
195
+ },
196
+ "sponsored_placement_types": {
197
+ "type": "array",
198
+ "items": {
199
+ "$ref": "#/$defs/external:enums~1sponsored-placement-type.json"
200
+ },
201
+ "minItems": 1,
202
+ "uniqueItems": true
203
+ },
204
+ "social_placement_surfaces": {
205
+ "type": "array",
206
+ "items": {
207
+ "$ref": "#/$defs/external:enums~1social-placement-surface.json"
208
+ },
209
+ "minItems": 1,
210
+ "uniqueItems": true
211
+ },
212
+ "format_options": {
213
+ "type": "array",
214
+ "items": {
215
+ "$ref": "#/$defs/external:core~1canonical-format-option.json"
216
+ },
217
+ "minItems": 1
218
+ },
219
+ "placements": {
220
+ "type": "array",
221
+ "items": {
222
+ "$ref": "#/$defs/external:core~1canonical-placement.json"
223
+ }
224
+ },
225
+ "delivery_type": {
226
+ "$ref": "#/$defs/external:enums~1delivery-type.json"
227
+ },
228
+ "exclusivity": {
229
+ "$ref": "#/$defs/external:enums~1exclusivity.json"
230
+ },
231
+ "pricing_options": {
232
+ "type": "array",
233
+ "items": {
234
+ "$ref": "#/$defs/external:core~1canonical-pricing-option.json"
235
+ },
236
+ "minItems": 1
237
+ },
238
+ "forecast": {
239
+ "$ref": "#/$defs/external:core~1canonical-delivery-forecast.json"
240
+ },
241
+ "reporting_capabilities": {
242
+ "$ref": "#/$defs/external:core~1canonical-reporting-capabilities.json"
243
+ },
244
+ "measurement_terms": {
245
+ "$ref": "#/$defs/external:core~1canonical-measurement-terms.json"
246
+ },
247
+ "performance_standards": {
248
+ "type": "array",
249
+ "items": {
250
+ "$ref": "#/$defs/external:core~1canonical-performance-standard.json"
251
+ },
252
+ "minItems": 1
253
+ },
254
+ "catalog_types": {
255
+ "type": "array",
256
+ "items": {
257
+ "$ref": "#/$defs/external:enums~1catalog-type.json"
258
+ },
259
+ "minItems": 1,
260
+ "uniqueItems": true
261
+ },
262
+ "signal_targeting_allowed": {
263
+ "type": "boolean"
264
+ },
265
+ "signal_targeting_rules": {
266
+ "$ref": "#/$defs/external:core~1signal-targeting-rules.json"
267
+ },
268
+ "demographic_targeting": {
269
+ "$ref": "#/$defs/external:core~1demographic-targeting-capability.json"
270
+ },
271
+ "audience_evidence": {
272
+ "type": "array",
273
+ "items": {
274
+ "$ref": "#/$defs/external:core~1canonical-audience-evidence.json"
275
+ },
276
+ "minItems": 1
277
+ },
278
+ "audience_evidence_selections": {
279
+ "type": "array",
280
+ "items": {
281
+ "$ref": "#/$defs/external:core~1canonical-audience-evidence-selection.json"
282
+ },
283
+ "minItems": 1
284
+ },
285
+ "max_optimization_goals": {
286
+ "type": "integer",
287
+ "minimum": 0
288
+ },
289
+ "catalog_match": {
290
+ "type": "object",
291
+ "properties": {
292
+ "matched_gtins": {
293
+ "type": "array",
294
+ "items": {
295
+ "type": "string",
296
+ "pattern": "^[0-9]{8,14}$"
297
+ }
298
+ },
299
+ "matched_ids": {
300
+ "type": "array",
301
+ "items": {
302
+ "type": "string"
303
+ }
304
+ },
305
+ "matched_count": {
306
+ "type": "integer",
307
+ "minimum": 0
308
+ },
309
+ "submitted_count": {
310
+ "type": "integer",
311
+ "minimum": 0
312
+ }
313
+ },
314
+ "required": [
315
+ "submitted_count"
316
+ ],
317
+ "additionalProperties": false
318
+ },
319
+ "brief_relevance": {
320
+ "type": "string"
321
+ },
322
+ "expires_at": {
323
+ "type": "string",
324
+ "format": "date-time"
325
+ },
326
+ "allowed_actions": {
327
+ "type": "array",
328
+ "items": {
329
+ "$ref": "#/$defs/external:core~1canonical-product-action.json"
330
+ },
331
+ "uniqueItems": true
332
+ },
333
+ "ext": {
334
+ "$ref": "#/$defs/external:core~1ext.json"
335
+ }
336
+ },
337
+ "required": [
338
+ "product_id",
339
+ "name"
340
+ ],
341
+ "additionalProperties": false
342
+ },
343
+ "external:core/publisher-property-selector.json": {
344
+ "discriminator": {
345
+ "propertyName": "selection_type"
346
+ },
347
+ "oneOf": [
348
+ {
349
+ "type": "object",
350
+ "properties": {
351
+ "publisher_domain": {
352
+ "type": "string",
353
+ "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
354
+ },
355
+ "publisher_domains": {
356
+ "type": "array",
357
+ "items": {
358
+ "type": "string",
359
+ "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
360
+ },
361
+ "minItems": 1,
362
+ "uniqueItems": true
363
+ },
364
+ "selection_type": {
365
+ "type": "string",
366
+ "const": "all"
367
+ }
368
+ },
369
+ "required": [
370
+ "selection_type"
371
+ ],
372
+ "allOf": [
373
+ {
374
+ "not": {
375
+ "required": [
376
+ "publisher_domain",
377
+ "publisher_domains"
378
+ ]
379
+ }
380
+ },
381
+ {
382
+ "anyOf": [
383
+ {
384
+ "required": [
385
+ "publisher_domain"
386
+ ]
387
+ },
388
+ {
389
+ "required": [
390
+ "publisher_domains"
391
+ ]
392
+ }
393
+ ]
394
+ }
395
+ ],
396
+ "additionalProperties": true
397
+ },
398
+ {
399
+ "type": "object",
400
+ "properties": {
401
+ "publisher_domain": {
402
+ "type": "string",
403
+ "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
404
+ },
405
+ "selection_type": {
406
+ "type": "string",
407
+ "const": "by_id"
408
+ },
409
+ "property_ids": {
410
+ "type": "array",
411
+ "items": {
412
+ "$ref": "#/$defs/external:core~1property-id.json"
413
+ },
414
+ "minItems": 1
415
+ }
416
+ },
417
+ "required": [
418
+ "publisher_domain",
419
+ "selection_type",
420
+ "property_ids"
421
+ ],
422
+ "additionalProperties": true
423
+ },
424
+ {
425
+ "type": "object",
426
+ "properties": {
427
+ "publisher_domain": {
428
+ "type": "string",
429
+ "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
430
+ },
431
+ "publisher_domains": {
432
+ "type": "array",
433
+ "items": {
434
+ "type": "string",
435
+ "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
436
+ },
437
+ "minItems": 1,
438
+ "uniqueItems": true
439
+ },
440
+ "selection_type": {
441
+ "type": "string",
442
+ "const": "by_tag"
443
+ },
444
+ "property_tags": {
445
+ "type": "array",
446
+ "items": {
447
+ "$ref": "#/$defs/external:core~1property-tag.json"
448
+ },
449
+ "minItems": 1
450
+ }
451
+ },
452
+ "required": [
453
+ "selection_type",
454
+ "property_tags"
455
+ ],
456
+ "allOf": [
457
+ {
458
+ "not": {
459
+ "required": [
460
+ "publisher_domain",
461
+ "publisher_domains"
462
+ ]
463
+ }
464
+ },
465
+ {
466
+ "anyOf": [
467
+ {
468
+ "required": [
469
+ "publisher_domain"
470
+ ]
471
+ },
472
+ {
473
+ "required": [
474
+ "publisher_domains"
475
+ ]
476
+ }
477
+ ]
478
+ }
479
+ ],
480
+ "additionalProperties": true
481
+ }
482
+ ]
483
+ },
484
+ "external:core/property-id.json": {
485
+ "type": "string",
486
+ "pattern": "^[a-z0-9_]+$",
487
+ "x-entity": "property"
488
+ },
489
+ "external:core/property-tag.json": {
490
+ "type": "string",
491
+ "pattern": "^[a-z0-9_]+$"
492
+ },
493
+ "external:enums/channels.json": {
494
+ "type": "string",
495
+ "enum": [
496
+ "display",
497
+ "olv",
498
+ "social",
499
+ "search",
500
+ "ctv",
501
+ "linear_tv",
502
+ "radio",
503
+ "streaming_audio",
504
+ "podcast",
505
+ "dooh",
506
+ "ooh",
507
+ "print",
508
+ "cinema",
509
+ "email",
510
+ "gaming",
511
+ "retail_media",
512
+ "influencer",
513
+ "affiliate",
514
+ "product_placement",
515
+ "sponsored_intelligence"
516
+ ]
517
+ },
518
+ "external:enums/video-placement-type.json": {
519
+ "type": "string",
520
+ "enum": [
521
+ "instream",
522
+ "accompanying_content",
523
+ "interstitial",
524
+ "standalone"
525
+ ]
526
+ },
527
+ "external:enums/audio-distribution-type.json": {
528
+ "type": "string",
529
+ "enum": [
530
+ "music_streaming_service",
531
+ "fm_am_broadcast",
532
+ "podcast",
533
+ "catch_up_radio",
534
+ "web_radio",
535
+ "video_game",
536
+ "text_to_speech"
537
+ ]
538
+ },
539
+ "external:enums/sponsored-placement-type.json": {
540
+ "type": "string",
541
+ "enum": [
542
+ "sponsored_search",
543
+ "sponsored_display",
544
+ "sponsored_native"
545
+ ]
546
+ },
547
+ "external:enums/social-placement-surface.json": {
548
+ "type": "string",
549
+ "enum": [
550
+ "feed",
551
+ "stories",
552
+ "short_video",
553
+ "explore",
554
+ "search"
555
+ ]
556
+ },
557
+ "external:core/canonical-format-option.json": {
558
+ "type": "object",
559
+ "properties": {
560
+ "format_option_id": {
561
+ "type": "string",
562
+ "minLength": 1
563
+ },
564
+ "publisher_domain": {
565
+ "type": "string",
566
+ "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
567
+ },
568
+ "display_name": {
569
+ "type": "string",
570
+ "minLength": 1
571
+ },
572
+ "sample_render_url": {
573
+ "type": "string",
574
+ "format": "uri",
575
+ "pattern": "^https://"
576
+ },
577
+ "applies_to_channels": {
578
+ "type": "array",
579
+ "items": {
580
+ "$ref": "#/$defs/external:enums~1channels.json"
581
+ },
582
+ "minItems": 1,
583
+ "uniqueItems": true
584
+ },
585
+ "seller_preference": {
586
+ "type": "string",
587
+ "enum": [
588
+ "preferred",
589
+ "accepted",
590
+ "discouraged"
591
+ ]
592
+ },
593
+ "locale_policy": {
594
+ "$ref": "#/$defs/external:core~1creative-locale-policy.json"
595
+ },
596
+ "canonical_formats_only": {
597
+ "type": "boolean",
598
+ "default": false
599
+ },
600
+ "experimental": {
601
+ "type": "boolean",
602
+ "default": false
603
+ },
604
+ "format_kind": {
605
+ "type": "string",
606
+ "enum": [
607
+ "image",
608
+ "html5",
609
+ "display_tag",
610
+ "image_carousel",
611
+ "video_hosted",
612
+ "video_vast",
613
+ "audio_hosted",
614
+ "audio_daast",
615
+ "sponsored_placement",
616
+ "native_in_feed",
617
+ "responsive_creative",
618
+ "agent_placement",
619
+ "custom"
620
+ ]
621
+ },
622
+ "params": {
623
+ "type": "object",
624
+ "additionalProperties": true
625
+ },
626
+ "format_shape": {
627
+ "type": "string",
628
+ "minLength": 1
629
+ },
630
+ "format_schema": {
631
+ "$ref": "#/$defs/external:core~1platform-extension-ref.json"
632
+ }
633
+ },
634
+ "required": [
635
+ "format_kind",
636
+ "params"
637
+ ],
638
+ "allOf": [
639
+ {
640
+ "if": {
641
+ "properties": {
642
+ "format_kind": {
643
+ "const": "custom"
644
+ }
645
+ },
646
+ "required": [
647
+ "format_kind"
648
+ ]
649
+ },
650
+ "then": {
651
+ "required": [
652
+ "format_shape",
653
+ "format_schema",
654
+ "canonical_formats_only"
655
+ ]
656
+ },
657
+ "else": {
658
+ "not": {
659
+ "anyOf": [
660
+ {
661
+ "required": [
662
+ "format_shape"
663
+ ]
664
+ },
665
+ {
666
+ "required": [
667
+ "format_schema"
668
+ ]
669
+ }
670
+ ]
671
+ }
672
+ }
673
+ }
674
+ ],
675
+ "x-adcp-validation": {
676
+ "verifier_constraints": {
677
+ "canonical_params": {
678
+ "non_custom": "validate params against /schemas/formats/canonical/{format_kind}.json",
679
+ "custom": "validate params against fetched format_schema uri and digest",
680
+ "on_violation": "reject_product"
681
+ }
682
+ }
683
+ },
684
+ "additionalProperties": false
685
+ },
686
+ "external:core/creative-locale-policy.json": {
687
+ "type": "object",
688
+ "x-adcp-validation": {
689
+ "verifier_constraints": {
690
+ "range_matching": "rfc4647_basic_filtering",
691
+ "wildcards": "not_supported",
692
+ "assignment_eligibility": "at_least_one_materialized_variant_must_match",
693
+ "selection_precedence": "filter_seller_eligible_variants_before_buyer_lookup_fallback_or_default",
694
+ "serve_default": "when_unmatched_locale_action_is_serve_default_default_locale_variant_id_must_reference_an_eligible_variant",
695
+ "placement_narrowing": "product_policy_absent_allows_any_placement_policy_else_every_placement_range_must_be_contained_by_a_product_range",
696
+ "legacy_projection": "no_product_or_placement_format_id_may_project_to_a_locale_constrained_option",
697
+ "capability_gate": "seller_must_advertise_creative.localization_and_creative.has_creative_library",
698
+ "assignment_policy_lifecycle": "snapshot_effective_policy_at_acceptance_catalog_changes_apply_only_to_new_or_changed_assignments"
699
+ },
700
+ "spec": "docs/creative/canonical-formats.mdx#creative-locale-policy"
701
+ },
702
+ "properties": {
703
+ "accepted_language_ranges": {
704
+ "type": "array",
705
+ "items": {
706
+ "$ref": "#/$defs/external:core~1locale-tag.json"
707
+ },
708
+ "minItems": 1,
709
+ "maxItems": 50,
710
+ "uniqueItems": true
711
+ }
712
+ },
713
+ "required": [
714
+ "accepted_language_ranges"
715
+ ],
716
+ "additionalProperties": true
717
+ },
718
+ "external:core/locale-tag.json": {
719
+ "x-adcp-validation": {
720
+ "verifier_constraints": {
721
+ "well_formed": "rfc5646",
722
+ "semantic_scope": "language_identity_only",
723
+ "canonical_wire_profile": "adcp_bcp47_casing",
724
+ "rfc5646_comparison": "case_insensitive",
725
+ "non_profile": "reject"
726
+ },
727
+ "spec": "docs/protocol/language-and-localization.mdx#one-language-tag-primitive"
728
+ },
729
+ "type": "string",
730
+ "minLength": 2,
731
+ "maxLength": 63,
732
+ "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})+)$"
733
+ },
734
+ "external:core/platform-extension-ref.json": {
735
+ "type": "object",
736
+ "required": [
737
+ "uri",
738
+ "digest"
739
+ ],
740
+ "properties": {
741
+ "uri": {
742
+ "type": "string",
743
+ "format": "uri",
744
+ "pattern": "^https://"
745
+ },
746
+ "digest": {
747
+ "type": "string",
748
+ "pattern": "^sha256:[a-f0-9]{64}$"
749
+ }
750
+ },
751
+ "additionalProperties": true
752
+ },
753
+ "external:core/canonical-placement.json": {
754
+ "type": "object",
755
+ "properties": {
756
+ "kind": {
757
+ "type": "string",
758
+ "enum": [
759
+ "publisher_ref",
760
+ "seller_inline"
761
+ ]
762
+ },
763
+ "placement_id": {
764
+ "type": "string",
765
+ "minLength": 1,
766
+ "x-entity": "placement"
767
+ },
768
+ "publisher_domain": {
769
+ "type": "string",
770
+ "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
771
+ },
772
+ "name": {
773
+ "type": "string",
774
+ "minLength": 1
775
+ },
776
+ "description": {
777
+ "type": "string"
778
+ },
779
+ "mode": {
780
+ "type": "string",
781
+ "enum": [
782
+ "targetable",
783
+ "included"
784
+ ]
785
+ },
786
+ "tags": {
787
+ "type": "array",
788
+ "items": {
789
+ "type": "string"
790
+ },
791
+ "uniqueItems": true
792
+ },
793
+ "format_options": {
794
+ "type": "array",
795
+ "items": {
796
+ "$ref": "#/$defs/external:core~1canonical-format-option.json"
797
+ },
798
+ "minItems": 1
799
+ },
800
+ "video_placement_types": {
801
+ "type": "array",
802
+ "items": {
803
+ "$ref": "#/$defs/external:enums~1video-placement-type.json"
804
+ },
805
+ "minItems": 1,
806
+ "uniqueItems": true
807
+ },
808
+ "audio_distribution_types": {
809
+ "type": "array",
810
+ "items": {
811
+ "$ref": "#/$defs/external:enums~1audio-distribution-type.json"
812
+ },
813
+ "minItems": 1,
814
+ "uniqueItems": true
815
+ },
816
+ "sponsored_placement_types": {
817
+ "type": "array",
818
+ "items": {
819
+ "$ref": "#/$defs/external:enums~1sponsored-placement-type.json"
820
+ },
821
+ "minItems": 1,
822
+ "uniqueItems": true
823
+ },
824
+ "social_placement_surfaces": {
825
+ "type": "array",
826
+ "items": {
827
+ "$ref": "#/$defs/external:enums~1social-placement-surface.json"
828
+ },
829
+ "minItems": 1,
830
+ "uniqueItems": true
831
+ }
832
+ },
833
+ "required": [
834
+ "kind",
835
+ "placement_id",
836
+ "mode"
837
+ ],
838
+ "allOf": [
839
+ {
840
+ "if": {
841
+ "properties": {
842
+ "kind": {
843
+ "const": "publisher_ref"
844
+ }
845
+ },
846
+ "required": [
847
+ "kind"
848
+ ]
849
+ },
850
+ "then": {
851
+ "required": [
852
+ "publisher_domain"
853
+ ]
854
+ },
855
+ "else": {
856
+ "required": [
857
+ "name"
858
+ ]
859
+ }
860
+ }
861
+ ],
862
+ "additionalProperties": false
863
+ },
864
+ "external:enums/delivery-type.json": {
865
+ "type": "string",
866
+ "enum": [
867
+ "guaranteed",
868
+ "non_guaranteed"
869
+ ]
870
+ },
871
+ "external:enums/exclusivity.json": {
872
+ "type": "string",
873
+ "enum": [
874
+ "none",
875
+ "category",
876
+ "exclusive"
877
+ ]
878
+ },
879
+ "external:core/canonical-pricing-option.json": {
880
+ "type": "object",
881
+ "properties": {
882
+ "pricing_option_id": {
883
+ "type": "string",
884
+ "minLength": 1,
885
+ "x-entity": "product_pricing_option"
886
+ },
887
+ "pricing_model": {
888
+ "type": "string",
889
+ "enum": [
890
+ "cpm",
891
+ "vcpm",
892
+ "cpc",
893
+ "cpcv",
894
+ "cpv",
895
+ "cpp",
896
+ "cpa",
897
+ "revenue_share",
898
+ "flat_rate",
899
+ "time"
900
+ ]
901
+ },
902
+ "currency": {
903
+ "type": "string",
904
+ "pattern": "^[A-Z]{3}$"
905
+ },
906
+ "fixed_price": {
907
+ "type": "number",
908
+ "minimum": 0
909
+ },
910
+ "floor_price": {
911
+ "type": "number",
912
+ "minimum": 0
913
+ },
914
+ "price_guidance": {
915
+ "$ref": "#/$defs/external:pricing-options~1price-guidance.json"
916
+ },
917
+ "min_spend_per_package": {
918
+ "type": "number",
919
+ "minimum": 0
920
+ },
921
+ "price_breakdown": {
922
+ "$ref": "#/$defs/external:pricing-options~1price-breakdown.json"
923
+ },
924
+ "eligible_adjustments": {
925
+ "type": "array",
926
+ "items": {
927
+ "$ref": "#/$defs/external:enums~1adjustment-kind.json"
928
+ },
929
+ "uniqueItems": true
930
+ },
931
+ "parameters": {
932
+ "type": "object",
933
+ "additionalProperties": true
934
+ },
935
+ "event_type": {
936
+ "$ref": "#/$defs/external:enums~1event-type.json"
937
+ },
938
+ "custom_event_name": {
939
+ "type": "string",
940
+ "minLength": 1
941
+ },
942
+ "event_source_id": {
943
+ "type": "string",
944
+ "minLength": 1,
945
+ "x-entity": "event_source"
946
+ },
947
+ "commission_rate": {
948
+ "type": "number",
949
+ "exclusiveMinimum": 0,
950
+ "maximum": 1
951
+ },
952
+ "commission_basis_description": {
953
+ "type": "string",
954
+ "minLength": 1,
955
+ "maxLength": 1000
956
+ }
957
+ },
958
+ "required": [
959
+ "pricing_option_id",
960
+ "pricing_model",
961
+ "currency"
962
+ ],
963
+ "allOf": [
964
+ {
965
+ "not": {
966
+ "required": [
967
+ "fixed_price",
968
+ "floor_price"
969
+ ]
970
+ }
971
+ },
972
+ {
973
+ "if": {
974
+ "properties": {
975
+ "pricing_model": {
976
+ "const": "cpa"
977
+ }
978
+ },
979
+ "required": [
980
+ "pricing_model"
981
+ ]
982
+ },
983
+ "then": {
984
+ "required": [
985
+ "event_type",
986
+ "fixed_price"
987
+ ]
988
+ }
989
+ },
990
+ {
991
+ "if": {
992
+ "properties": {
993
+ "pricing_model": {
994
+ "const": "revenue_share"
995
+ }
996
+ },
997
+ "required": [
998
+ "pricing_model"
999
+ ]
1000
+ },
1001
+ "then": {
1002
+ "required": [
1003
+ "event_type",
1004
+ "event_source_id",
1005
+ "commission_rate",
1006
+ "commission_basis_description"
1007
+ ]
1008
+ }
1009
+ },
1010
+ {
1011
+ "if": {
1012
+ "properties": {
1013
+ "pricing_model": {
1014
+ "enum": [
1015
+ "cpv",
1016
+ "cpp",
1017
+ "time"
1018
+ ]
1019
+ }
1020
+ },
1021
+ "required": [
1022
+ "pricing_model"
1023
+ ]
1024
+ },
1025
+ "then": {
1026
+ "required": [
1027
+ "parameters"
1028
+ ]
1029
+ }
1030
+ },
1031
+ {
1032
+ "if": {
1033
+ "properties": {
1034
+ "event_type": {
1035
+ "const": "custom"
1036
+ }
1037
+ },
1038
+ "required": [
1039
+ "event_type"
1040
+ ]
1041
+ },
1042
+ "then": {
1043
+ "required": [
1044
+ "custom_event_name"
1045
+ ]
1046
+ }
1047
+ }
1048
+ ],
1049
+ "additionalProperties": false
1050
+ },
1051
+ "external:pricing-options/price-guidance.json": {
1052
+ "type": "object",
1053
+ "properties": {
1054
+ "p25": {
1055
+ "type": "number",
1056
+ "minimum": 0
1057
+ },
1058
+ "p50": {
1059
+ "type": "number",
1060
+ "minimum": 0
1061
+ },
1062
+ "p75": {
1063
+ "type": "number",
1064
+ "minimum": 0
1065
+ },
1066
+ "p90": {
1067
+ "type": "number",
1068
+ "minimum": 0
1069
+ }
1070
+ },
1071
+ "additionalProperties": true
1072
+ },
1073
+ "external:pricing-options/price-breakdown.json": {
1074
+ "type": "object",
1075
+ "properties": {
1076
+ "list_price": {
1077
+ "type": "number",
1078
+ "exclusiveMinimum": 0
1079
+ },
1080
+ "adjustments": {
1081
+ "type": "array",
1082
+ "items": {
1083
+ "type": "object",
1084
+ "properties": {
1085
+ "kind": {
1086
+ "$ref": "#/$defs/external:enums~1adjustment-kind.json"
1087
+ },
1088
+ "name": {
1089
+ "type": "string",
1090
+ "maxLength": 64
1091
+ },
1092
+ "rate": {
1093
+ "type": "number",
1094
+ "exclusiveMinimum": 0,
1095
+ "exclusiveMaximum": 1
1096
+ },
1097
+ "amount": {
1098
+ "type": "number",
1099
+ "exclusiveMinimum": 0
1100
+ },
1101
+ "description": {
1102
+ "type": "string",
1103
+ "maxLength": 256
1104
+ },
1105
+ "beneficiary": {
1106
+ "type": "string",
1107
+ "maxLength": 256
1108
+ }
1109
+ },
1110
+ "required": [
1111
+ "kind",
1112
+ "name"
1113
+ ],
1114
+ "oneOf": [
1115
+ {
1116
+ "required": [
1117
+ "rate"
1118
+ ]
1119
+ },
1120
+ {
1121
+ "required": [
1122
+ "amount"
1123
+ ]
1124
+ }
1125
+ ],
1126
+ "additionalProperties": true
1127
+ },
1128
+ "minItems": 1,
1129
+ "maxItems": 20
1130
+ }
1131
+ },
1132
+ "required": [
1133
+ "list_price",
1134
+ "adjustments"
1135
+ ],
1136
+ "additionalProperties": true
1137
+ },
1138
+ "external:enums/adjustment-kind.json": {
1139
+ "type": "string",
1140
+ "enum": [
1141
+ "fee",
1142
+ "discount",
1143
+ "commission",
1144
+ "settlement"
1145
+ ]
1146
+ },
1147
+ "external:enums/event-type.json": {
1148
+ "type": "string",
1149
+ "enum": [
1150
+ "page_view",
1151
+ "view_content",
1152
+ "select_content",
1153
+ "select_item",
1154
+ "search",
1155
+ "share",
1156
+ "add_to_cart",
1157
+ "remove_from_cart",
1158
+ "viewed_cart",
1159
+ "add_to_wishlist",
1160
+ "initiate_checkout",
1161
+ "add_payment_info",
1162
+ "purchase",
1163
+ "refund",
1164
+ "lead",
1165
+ "qualify_lead",
1166
+ "close_convert_lead",
1167
+ "disqualify_lead",
1168
+ "complete_registration",
1169
+ "subscribe",
1170
+ "follow",
1171
+ "content_view",
1172
+ "watch_milestone",
1173
+ "start_trial",
1174
+ "app_install",
1175
+ "app_launch",
1176
+ "contact",
1177
+ "schedule",
1178
+ "donate",
1179
+ "submit_application",
1180
+ "custom"
1181
+ ]
1182
+ },
1183
+ "external:core/canonical-delivery-forecast.json": {
1184
+ "type": "object",
1185
+ "properties": {
1186
+ "points": {
1187
+ "type": "array",
1188
+ "items": {
1189
+ "$ref": "#/$defs/external:core~1canonical-forecast-point.json"
1190
+ },
1191
+ "minItems": 1
1192
+ },
1193
+ "forecast_range_unit": {
1194
+ "$ref": "#/$defs/external:enums~1forecast-range-unit.json"
1195
+ },
1196
+ "method": {
1197
+ "$ref": "#/$defs/external:enums~1forecast-method.json"
1198
+ },
1199
+ "currency": {
1200
+ "type": "string",
1201
+ "pattern": "^[A-Z]{3}$"
1202
+ },
1203
+ "demographic_system": {
1204
+ "$ref": "#/$defs/external:enums~1demographic-system.json"
1205
+ },
1206
+ "demographic": {
1207
+ "type": "string"
1208
+ },
1209
+ "measurement_source": {
1210
+ "type": "string",
1211
+ "maxLength": 64,
1212
+ "pattern": "^[a-z0-9_]+$"
1213
+ },
1214
+ "reach_unit": {
1215
+ "$ref": "#/$defs/external:enums~1reach-unit.json"
1216
+ },
1217
+ "generated_at": {
1218
+ "type": "string",
1219
+ "format": "date-time"
1220
+ },
1221
+ "valid_until": {
1222
+ "type": "string",
1223
+ "format": "date-time"
1224
+ },
1225
+ "ext": {
1226
+ "$ref": "#/$defs/external:core~1ext.json"
1227
+ }
1228
+ },
1229
+ "required": [
1230
+ "points",
1231
+ "method",
1232
+ "currency"
1233
+ ],
1234
+ "additionalProperties": false
1235
+ },
1236
+ "external:core/canonical-forecast-point.json": {
1237
+ "type": "object",
1238
+ "properties": {
1239
+ "label": {
1240
+ "type": "string",
1241
+ "maxLength": 128
1242
+ },
1243
+ "budget": {
1244
+ "type": "number",
1245
+ "minimum": 0
1246
+ },
1247
+ "product_id": {
1248
+ "type": "string",
1249
+ "x-entity": "product"
1250
+ },
1251
+ "dimensions": {
1252
+ "$ref": "#/$defs/external:core~1forecast-point-dimensions.json"
1253
+ },
1254
+ "metrics": {
1255
+ "type": "object",
1256
+ "additionalProperties": {
1257
+ "$ref": "#/$defs/external:core~1forecast-range.json"
1258
+ }
1259
+ },
1260
+ "viewability": {
1261
+ "type": "object",
1262
+ "properties": {
1263
+ "vendor": {
1264
+ "$ref": "#/$defs/external:core~1brand-key.json"
1265
+ },
1266
+ "measurable_impressions": {
1267
+ "$ref": "#/$defs/external:core~1forecast-range.json"
1268
+ },
1269
+ "viewable_impressions": {
1270
+ "$ref": "#/$defs/external:core~1forecast-range.json"
1271
+ },
1272
+ "viewable_rate": {
1273
+ "$ref": "#/$defs/external:core~1forecast-range.json"
1274
+ },
1275
+ "viewed_seconds": {
1276
+ "$ref": "#/$defs/external:core~1forecast-range.json"
1277
+ },
1278
+ "standard": {
1279
+ "$ref": "#/$defs/external:enums~1viewability-standard.json"
1280
+ }
1281
+ },
1282
+ "additionalProperties": false
1283
+ },
1284
+ "vendor_metric_values": {
1285
+ "type": "array",
1286
+ "items": {
1287
+ "$ref": "#/$defs/external:core~1canonical-forecast-vendor-metric-value.json"
1288
+ }
1289
+ }
1290
+ },
1291
+ "required": [
1292
+ "metrics"
1293
+ ],
1294
+ "additionalProperties": false
1295
+ },
1296
+ "external:core/forecast-point-dimensions.json": {
1297
+ "x-adcp-validation": {
1298
+ "unique_item_properties": [
1299
+ "kind"
1300
+ ],
1301
+ "description": "`dimensions[]` is an array for readable intersection syntax, but `kind` is a logical set key. JSON Schema draft-07 cannot express unique-by-property for this array shape, so conformance tooling should reject repeated `kind` values."
1302
+ },
1303
+ "type": "array",
1304
+ "minItems": 1,
1305
+ "uniqueItems": true,
1306
+ "items": {
1307
+ "oneOf": [
1308
+ {
1309
+ "$ref": "#/$defs/external:core~1forecast-dimension-geo.json"
1310
+ },
1311
+ {
1312
+ "$ref": "#/$defs/external:core~1forecast-dimension-placement.json"
1313
+ },
1314
+ {
1315
+ "$ref": "#/$defs/external:core~1forecast-dimension-device-type.json"
1316
+ },
1317
+ {
1318
+ "$ref": "#/$defs/external:core~1forecast-dimension-device-platform.json"
1319
+ },
1320
+ {
1321
+ "$ref": "#/$defs/external:core~1forecast-dimension-audience.json"
1322
+ },
1323
+ {
1324
+ "$ref": "#/$defs/external:core~1forecast-dimension-signal.json"
1325
+ }
1326
+ ]
1327
+ }
1328
+ },
1329
+ "external:core/forecast-dimension-geo.json": {
1330
+ "type": "object",
1331
+ "properties": {
1332
+ "kind": {
1333
+ "type": "string",
1334
+ "const": "geo"
1335
+ },
1336
+ "geo_level": {
1337
+ "$ref": "#/$defs/external:enums~1geo-level.json"
1338
+ },
1339
+ "system": {
1340
+ "type": "string"
1341
+ },
1342
+ "country": {
1343
+ "type": "string",
1344
+ "pattern": "^[A-Z]{2}$"
1345
+ },
1346
+ "geo_code": {
1347
+ "type": "string"
1348
+ },
1349
+ "geo_name": {
1350
+ "type": "string"
1351
+ }
1352
+ },
1353
+ "required": [
1354
+ "kind",
1355
+ "geo_level",
1356
+ "geo_code"
1357
+ ],
1358
+ "allOf": [
1359
+ {
1360
+ "if": {
1361
+ "properties": {
1362
+ "geo_level": {
1363
+ "const": "country"
1364
+ }
1365
+ },
1366
+ "required": [
1367
+ "geo_level"
1368
+ ]
1369
+ },
1370
+ "then": {
1371
+ "properties": {
1372
+ "geo_code": {
1373
+ "type": "string",
1374
+ "pattern": "^[A-Z]{2}$"
1375
+ }
1376
+ },
1377
+ "not": {
1378
+ "anyOf": [
1379
+ {
1380
+ "required": [
1381
+ "system"
1382
+ ]
1383
+ },
1384
+ {
1385
+ "required": [
1386
+ "country"
1387
+ ]
1388
+ }
1389
+ ]
1390
+ }
1391
+ }
1392
+ },
1393
+ {
1394
+ "if": {
1395
+ "properties": {
1396
+ "geo_level": {
1397
+ "const": "region"
1398
+ }
1399
+ },
1400
+ "required": [
1401
+ "geo_level"
1402
+ ]
1403
+ },
1404
+ "then": {
1405
+ "properties": {
1406
+ "geo_code": {
1407
+ "type": "string",
1408
+ "pattern": "^[A-Z]{2}-[A-Z0-9]{1,3}$"
1409
+ }
1410
+ },
1411
+ "not": {
1412
+ "anyOf": [
1413
+ {
1414
+ "required": [
1415
+ "system"
1416
+ ]
1417
+ },
1418
+ {
1419
+ "required": [
1420
+ "country"
1421
+ ]
1422
+ }
1423
+ ]
1424
+ }
1425
+ }
1426
+ },
1427
+ {
1428
+ "if": {
1429
+ "properties": {
1430
+ "geo_level": {
1431
+ "const": "metro"
1432
+ }
1433
+ },
1434
+ "required": [
1435
+ "geo_level"
1436
+ ]
1437
+ },
1438
+ "then": {
1439
+ "properties": {
1440
+ "system": {
1441
+ "$ref": "#/$defs/external:enums~1metro-system.json"
1442
+ }
1443
+ },
1444
+ "required": [
1445
+ "system"
1446
+ ],
1447
+ "not": {
1448
+ "required": [
1449
+ "country"
1450
+ ]
1451
+ }
1452
+ }
1453
+ },
1454
+ {
1455
+ "if": {
1456
+ "properties": {
1457
+ "geo_level": {
1458
+ "const": "postal_area"
1459
+ }
1460
+ },
1461
+ "required": [
1462
+ "geo_level"
1463
+ ]
1464
+ },
1465
+ "then": {
1466
+ "anyOf": [
1467
+ {
1468
+ "$ref": "#/$defs/external:core~1postal-country-system.json"
1469
+ },
1470
+ {
1471
+ "properties": {
1472
+ "system": {
1473
+ "$ref": "#/$defs/external:enums~1legacy-postal-system.json"
1474
+ }
1475
+ },
1476
+ "required": [
1477
+ "system"
1478
+ ],
1479
+ "not": {
1480
+ "required": [
1481
+ "country"
1482
+ ]
1483
+ }
1484
+ }
1485
+ ]
1486
+ }
1487
+ }
1488
+ ],
1489
+ "additionalProperties": false
1490
+ },
1491
+ "external:enums/geo-level.json": {
1492
+ "type": "string",
1493
+ "enum": [
1494
+ "country",
1495
+ "region",
1496
+ "metro",
1497
+ "postal_area"
1498
+ ]
1499
+ },
1500
+ "external:enums/metro-system.json": {
1501
+ "type": "string",
1502
+ "enum": [
1503
+ "nielsen_dma",
1504
+ "uk_itl1",
1505
+ "uk_itl2",
1506
+ "eurostat_nuts2",
1507
+ "custom"
1508
+ ]
1509
+ },
1510
+ "external:core/postal-country-system.json": {
1511
+ "type": "object",
1512
+ "properties": {
1513
+ "country": {
1514
+ "type": "string",
1515
+ "pattern": "^[A-Z]{2}$"
1516
+ },
1517
+ "system": {
1518
+ "$ref": "#/$defs/external:enums~1postal-system.json"
1519
+ }
1520
+ },
1521
+ "required": [
1522
+ "country",
1523
+ "system"
1524
+ ],
1525
+ "anyOf": [
1526
+ {
1527
+ "properties": {
1528
+ "country": {
1529
+ "const": "US"
1530
+ },
1531
+ "system": {
1532
+ "enum": [
1533
+ "zip",
1534
+ "zip_plus_four"
1535
+ ]
1536
+ }
1537
+ }
1538
+ },
1539
+ {
1540
+ "properties": {
1541
+ "country": {
1542
+ "const": "GB"
1543
+ },
1544
+ "system": {
1545
+ "enum": [
1546
+ "outward",
1547
+ "full"
1548
+ ]
1549
+ }
1550
+ }
1551
+ },
1552
+ {
1553
+ "properties": {
1554
+ "country": {
1555
+ "const": "CA"
1556
+ },
1557
+ "system": {
1558
+ "enum": [
1559
+ "fsa",
1560
+ "full"
1561
+ ]
1562
+ }
1563
+ }
1564
+ },
1565
+ {
1566
+ "properties": {
1567
+ "country": {
1568
+ "enum": [
1569
+ "DE",
1570
+ "CH",
1571
+ "AT"
1572
+ ]
1573
+ },
1574
+ "system": {
1575
+ "const": "plz"
1576
+ }
1577
+ }
1578
+ },
1579
+ {
1580
+ "properties": {
1581
+ "country": {
1582
+ "const": "FR"
1583
+ },
1584
+ "system": {
1585
+ "const": "code_postal"
1586
+ }
1587
+ }
1588
+ },
1589
+ {
1590
+ "properties": {
1591
+ "country": {
1592
+ "const": "AU"
1593
+ },
1594
+ "system": {
1595
+ "const": "postcode"
1596
+ }
1597
+ }
1598
+ },
1599
+ {
1600
+ "properties": {
1601
+ "country": {
1602
+ "const": "BR"
1603
+ },
1604
+ "system": {
1605
+ "const": "cep"
1606
+ }
1607
+ }
1608
+ },
1609
+ {
1610
+ "properties": {
1611
+ "country": {
1612
+ "const": "IN"
1613
+ },
1614
+ "system": {
1615
+ "const": "pin"
1616
+ }
1617
+ }
1618
+ },
1619
+ {
1620
+ "properties": {
1621
+ "country": {
1622
+ "const": "ZA"
1623
+ },
1624
+ "system": {
1625
+ "const": "postal_code"
1626
+ }
1627
+ }
1628
+ },
1629
+ {
1630
+ "properties": {
1631
+ "country": {
1632
+ "not": {
1633
+ "enum": [
1634
+ "US",
1635
+ "GB",
1636
+ "CA",
1637
+ "DE",
1638
+ "CH",
1639
+ "AT",
1640
+ "FR",
1641
+ "AU",
1642
+ "BR",
1643
+ "IN",
1644
+ "ZA"
1645
+ ]
1646
+ }
1647
+ },
1648
+ "system": {
1649
+ "enum": [
1650
+ "postal_code",
1651
+ "custom"
1652
+ ]
1653
+ }
1654
+ }
1655
+ }
1656
+ ]
1657
+ },
1658
+ "external:enums/postal-system.json": {
1659
+ "type": "string",
1660
+ "enum": [
1661
+ "postal_code",
1662
+ "zip",
1663
+ "zip_plus_four",
1664
+ "outward",
1665
+ "full",
1666
+ "fsa",
1667
+ "plz",
1668
+ "code_postal",
1669
+ "postcode",
1670
+ "cep",
1671
+ "pin",
1672
+ "custom",
1673
+ "us_zip",
1674
+ "us_zip_plus_four",
1675
+ "gb_outward",
1676
+ "gb_full",
1677
+ "ca_fsa",
1678
+ "ca_full",
1679
+ "de_plz",
1680
+ "fr_code_postal",
1681
+ "au_postcode",
1682
+ "ch_plz",
1683
+ "at_plz"
1684
+ ]
1685
+ },
1686
+ "external:enums/legacy-postal-system.json": {
1687
+ "type": "string",
1688
+ "deprecated": true,
1689
+ "enum": [
1690
+ "us_zip",
1691
+ "us_zip_plus_four",
1692
+ "gb_outward",
1693
+ "gb_full",
1694
+ "ca_fsa",
1695
+ "ca_full",
1696
+ "de_plz",
1697
+ "fr_code_postal",
1698
+ "au_postcode",
1699
+ "ch_plz",
1700
+ "at_plz"
1701
+ ]
1702
+ },
1703
+ "external:core/forecast-dimension-placement.json": {
1704
+ "type": "object",
1705
+ "properties": {
1706
+ "kind": {
1707
+ "type": "string",
1708
+ "const": "placement"
1709
+ },
1710
+ "placement_ref": {
1711
+ "$ref": "#/$defs/external:core~1placement-ref.json"
1712
+ },
1713
+ "placement_name": {
1714
+ "type": "string"
1715
+ }
1716
+ },
1717
+ "required": [
1718
+ "kind",
1719
+ "placement_ref"
1720
+ ],
1721
+ "additionalProperties": false
1722
+ },
1723
+ "external:core/placement-ref.json": {
1724
+ "type": "object",
1725
+ "properties": {
1726
+ "publisher_domain": {
1727
+ "type": "string",
1728
+ "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
1729
+ },
1730
+ "placement_id": {
1731
+ "type": "string",
1732
+ "x-entity": "placement"
1733
+ }
1734
+ },
1735
+ "required": [
1736
+ "placement_id"
1737
+ ],
1738
+ "additionalProperties": true
1739
+ },
1740
+ "external:core/forecast-dimension-device-type.json": {
1741
+ "type": "object",
1742
+ "properties": {
1743
+ "kind": {
1744
+ "type": "string",
1745
+ "const": "device_type"
1746
+ },
1747
+ "device_type": {
1748
+ "$ref": "#/$defs/external:enums~1device-type.json"
1749
+ }
1750
+ },
1751
+ "required": [
1752
+ "kind",
1753
+ "device_type"
1754
+ ],
1755
+ "additionalProperties": false
1756
+ },
1757
+ "external:enums/device-type.json": {
1758
+ "type": "string",
1759
+ "enum": [
1760
+ "desktop",
1761
+ "mobile",
1762
+ "tablet",
1763
+ "ctv",
1764
+ "dooh",
1765
+ "unknown"
1766
+ ]
1767
+ },
1768
+ "external:core/forecast-dimension-device-platform.json": {
1769
+ "type": "object",
1770
+ "properties": {
1771
+ "kind": {
1772
+ "type": "string",
1773
+ "const": "device_platform"
1774
+ },
1775
+ "device_platform": {
1776
+ "$ref": "#/$defs/external:enums~1device-platform.json"
1777
+ }
1778
+ },
1779
+ "required": [
1780
+ "kind",
1781
+ "device_platform"
1782
+ ],
1783
+ "additionalProperties": false
1784
+ },
1785
+ "external:enums/device-platform.json": {
1786
+ "type": "string",
1787
+ "enum": [
1788
+ "ios",
1789
+ "android",
1790
+ "windows",
1791
+ "macos",
1792
+ "linux",
1793
+ "chromeos",
1794
+ "tvos",
1795
+ "tizen",
1796
+ "webos",
1797
+ "fire_os",
1798
+ "roku_os",
1799
+ "unknown"
1800
+ ]
1801
+ },
1802
+ "external:core/forecast-dimension-audience.json": {
1803
+ "type": "object",
1804
+ "properties": {
1805
+ "kind": {
1806
+ "type": "string",
1807
+ "const": "audience"
1808
+ },
1809
+ "audience_id": {
1810
+ "type": "string",
1811
+ "x-entity": "audience"
1812
+ },
1813
+ "audience_source": {
1814
+ "$ref": "#/$defs/external:enums~1audience-source.json"
1815
+ },
1816
+ "audience_name": {
1817
+ "type": "string"
1818
+ }
1819
+ },
1820
+ "required": [
1821
+ "kind",
1822
+ "audience_id",
1823
+ "audience_source"
1824
+ ],
1825
+ "additionalProperties": false
1826
+ },
1827
+ "external:enums/audience-source.json": {
1828
+ "type": "string",
1829
+ "enum": [
1830
+ "synced",
1831
+ "platform",
1832
+ "third_party",
1833
+ "lookalike",
1834
+ "retargeting",
1835
+ "unknown"
1836
+ ]
1837
+ },
1838
+ "external:core/forecast-dimension-signal.json": {
1839
+ "type": "object",
1840
+ "properties": {
1841
+ "kind": {
1842
+ "type": "string",
1843
+ "const": "signal"
1844
+ },
1845
+ "signal_ref": {
1846
+ "$ref": "#/$defs/external:core~1signal-ref.json"
1847
+ },
1848
+ "signal_id": {
1849
+ "type": "string",
1850
+ "pattern": "^[a-zA-Z0-9_-]+$",
1851
+ "x-entity": "signal"
1852
+ },
1853
+ "signal_value": {
1854
+ "type": [
1855
+ "string",
1856
+ "number",
1857
+ "boolean",
1858
+ "null"
1859
+ ]
1860
+ },
1861
+ "presence": {
1862
+ "type": "string",
1863
+ "enum": [
1864
+ "present",
1865
+ "absent"
1866
+ ]
1867
+ },
1868
+ "signal_name": {
1869
+ "type": "string"
1870
+ },
1871
+ "signal_value_name": {
1872
+ "type": "string"
1873
+ }
1874
+ },
1875
+ "required": [
1876
+ "kind",
1877
+ "presence"
1878
+ ],
1879
+ "anyOf": [
1880
+ {
1881
+ "required": [
1882
+ "signal_ref"
1883
+ ]
1884
+ },
1885
+ {
1886
+ "required": [
1887
+ "signal_id"
1888
+ ]
1889
+ }
1890
+ ],
1891
+ "allOf": [
1892
+ {
1893
+ "if": {
1894
+ "properties": {
1895
+ "presence": {
1896
+ "const": "absent"
1897
+ }
1898
+ },
1899
+ "required": [
1900
+ "presence"
1901
+ ]
1902
+ },
1903
+ "then": {
1904
+ "properties": {
1905
+ "signal_value": {
1906
+ "type": "null"
1907
+ }
1908
+ },
1909
+ "required": [
1910
+ "signal_value"
1911
+ ]
1912
+ }
1913
+ },
1914
+ {
1915
+ "if": {
1916
+ "properties": {
1917
+ "presence": {
1918
+ "const": "present"
1919
+ }
1920
+ },
1921
+ "required": [
1922
+ "presence"
1923
+ ]
1924
+ },
1925
+ "then": {
1926
+ "properties": {
1927
+ "signal_value": {
1928
+ "type": [
1929
+ "string",
1930
+ "number",
1931
+ "boolean"
1932
+ ]
1933
+ }
1934
+ }
1935
+ }
1936
+ }
1937
+ ],
1938
+ "additionalProperties": false
1939
+ },
1940
+ "external:core/signal-ref.json": {
1941
+ "x-entity": "signal",
1942
+ "discriminator": {
1943
+ "propertyName": "scope"
1944
+ },
1945
+ "oneOf": [
1946
+ {
1947
+ "type": "object",
1948
+ "properties": {
1949
+ "scope": {
1950
+ "type": "string",
1951
+ "const": "product"
1952
+ },
1953
+ "signal_id": {
1954
+ "type": "string",
1955
+ "pattern": "^[a-zA-Z0-9_-]+$"
1956
+ }
1957
+ },
1958
+ "required": [
1959
+ "scope",
1960
+ "signal_id"
1961
+ ],
1962
+ "not": {
1963
+ "anyOf": [
1964
+ {
1965
+ "required": [
1966
+ "data_provider_domain"
1967
+ ]
1968
+ },
1969
+ {
1970
+ "required": [
1971
+ "signal_source_url"
1972
+ ]
1973
+ },
1974
+ {
1975
+ "required": [
1976
+ "agent_url"
1977
+ ]
1978
+ },
1979
+ {
1980
+ "required": [
1981
+ "source"
1982
+ ]
1983
+ },
1984
+ {
1985
+ "required": [
1986
+ "id"
1987
+ ]
1988
+ }
1989
+ ]
1990
+ },
1991
+ "additionalProperties": true
1992
+ },
1993
+ {
1994
+ "type": "object",
1995
+ "properties": {
1996
+ "scope": {
1997
+ "type": "string",
1998
+ "const": "data_provider"
1999
+ },
2000
+ "data_provider_domain": {
2001
+ "type": "string",
2002
+ "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
2003
+ },
2004
+ "signal_id": {
2005
+ "type": "string",
2006
+ "pattern": "^[a-zA-Z0-9_-]+$"
2007
+ }
2008
+ },
2009
+ "required": [
2010
+ "scope",
2011
+ "data_provider_domain",
2012
+ "signal_id"
2013
+ ],
2014
+ "not": {
2015
+ "anyOf": [
2016
+ {
2017
+ "required": [
2018
+ "agent_url"
2019
+ ]
2020
+ },
2021
+ {
2022
+ "required": [
2023
+ "signal_source_url"
2024
+ ]
2025
+ },
2026
+ {
2027
+ "required": [
2028
+ "source"
2029
+ ]
2030
+ },
2031
+ {
2032
+ "required": [
2033
+ "id"
2034
+ ]
2035
+ }
2036
+ ]
2037
+ },
2038
+ "additionalProperties": true
2039
+ },
2040
+ {
2041
+ "type": "object",
2042
+ "properties": {
2043
+ "scope": {
2044
+ "type": "string",
2045
+ "const": "signal_source"
2046
+ },
2047
+ "signal_source_url": {
2048
+ "type": "string",
2049
+ "format": "uri"
2050
+ },
2051
+ "signal_id": {
2052
+ "type": "string",
2053
+ "pattern": "^[a-zA-Z0-9_-]+$"
2054
+ }
2055
+ },
2056
+ "required": [
2057
+ "scope",
2058
+ "signal_source_url",
2059
+ "signal_id"
2060
+ ],
2061
+ "not": {
2062
+ "anyOf": [
2063
+ {
2064
+ "required": [
2065
+ "data_provider_domain"
2066
+ ]
2067
+ },
2068
+ {
2069
+ "required": [
2070
+ "agent_url"
2071
+ ]
2072
+ },
2073
+ {
2074
+ "required": [
2075
+ "source"
2076
+ ]
2077
+ },
2078
+ {
2079
+ "required": [
2080
+ "id"
2081
+ ]
2082
+ }
2083
+ ]
2084
+ },
2085
+ "additionalProperties": true
2086
+ }
2087
+ ]
2088
+ },
2089
+ "external:core/forecast-range.json": {
2090
+ "type": "object",
2091
+ "properties": {
2092
+ "low": {
2093
+ "type": "number",
2094
+ "minimum": 0
2095
+ },
2096
+ "mid": {
2097
+ "type": "number",
2098
+ "minimum": 0
2099
+ },
2100
+ "high": {
2101
+ "type": "number",
2102
+ "minimum": 0
2103
+ }
2104
+ },
2105
+ "anyOf": [
2106
+ {
2107
+ "required": [
2108
+ "mid"
2109
+ ]
2110
+ },
2111
+ {
2112
+ "required": [
2113
+ "low",
2114
+ "high"
2115
+ ]
2116
+ }
2117
+ ],
2118
+ "additionalProperties": true
2119
+ },
2120
+ "external:core/brand-key.json": {
2121
+ "type": "object",
2122
+ "properties": {
2123
+ "domain": {
2124
+ "type": "string",
2125
+ "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
2126
+ },
2127
+ "brand_id": {
2128
+ "$ref": "#/$defs/external:core~1brand-id.json"
2129
+ },
2130
+ "countries": {
2131
+ "type": "array",
2132
+ "items": {
2133
+ "type": "string",
2134
+ "pattern": "^[A-Z]{2}$"
2135
+ },
2136
+ "minItems": 1,
2137
+ "uniqueItems": true
2138
+ }
2139
+ },
2140
+ "required": [
2141
+ "domain"
2142
+ ],
2143
+ "additionalProperties": false
2144
+ },
2145
+ "external:core/brand-id.json": {
2146
+ "type": "string",
2147
+ "pattern": "^[a-z0-9_]+$",
2148
+ "x-entity": "advertiser_brand"
2149
+ },
2150
+ "external:enums/viewability-standard.json": {
2151
+ "type": "string",
2152
+ "enum": [
2153
+ "mrc",
2154
+ "groupm"
2155
+ ]
2156
+ },
2157
+ "external:core/canonical-forecast-vendor-metric-value.json": {
2158
+ "type": "object",
2159
+ "properties": {
2160
+ "vendor": {
2161
+ "$ref": "#/$defs/external:core~1brand-key.json"
2162
+ },
2163
+ "metric_id": {
2164
+ "$ref": "#/$defs/external:core~1vendor-metric-id.json"
2165
+ },
2166
+ "value": {
2167
+ "$ref": "#/$defs/external:core~1forecast-range.json"
2168
+ },
2169
+ "unit": {
2170
+ "type": "string"
2171
+ },
2172
+ "measurable_impressions": {
2173
+ "$ref": "#/$defs/external:core~1forecast-range.json"
2174
+ },
2175
+ "breakdown": {
2176
+ "type": "object",
2177
+ "additionalProperties": true
2178
+ }
2179
+ },
2180
+ "required": [
2181
+ "vendor",
2182
+ "metric_id",
2183
+ "value"
2184
+ ],
2185
+ "additionalProperties": false
2186
+ },
2187
+ "external:core/vendor-metric-id.json": {
2188
+ "type": "string",
2189
+ "x-entity": "vendor_metric",
2190
+ "minLength": 1,
2191
+ "maxLength": 64,
2192
+ "pattern": "^[a-z][a-z0-9_]*$"
2193
+ },
2194
+ "external:enums/forecast-range-unit.json": {
2195
+ "type": "string",
2196
+ "enum": [
2197
+ "spend",
2198
+ "availability",
2199
+ "reach_freq",
2200
+ "weekly",
2201
+ "daily",
2202
+ "clicks",
2203
+ "conversions",
2204
+ "package"
2205
+ ]
2206
+ },
2207
+ "external:enums/forecast-method.json": {
2208
+ "type": "string",
2209
+ "enum": [
2210
+ "estimate",
2211
+ "modeled",
2212
+ "guaranteed"
2213
+ ]
2214
+ },
2215
+ "external:enums/demographic-system.json": {
2216
+ "type": "string",
2217
+ "enum": [
2218
+ "nielsen",
2219
+ "barb",
2220
+ "agf",
2221
+ "oztam",
2222
+ "mediametrie",
2223
+ "custom"
2224
+ ]
2225
+ },
2226
+ "external:enums/reach-unit.json": {
2227
+ "type": "string",
2228
+ "enum": [
2229
+ "individuals",
2230
+ "households",
2231
+ "devices",
2232
+ "accounts",
2233
+ "cookies",
2234
+ "custom"
2235
+ ]
2236
+ },
2237
+ "external:core/ext.json": {
2238
+ "type": "object",
2239
+ "additionalProperties": true
2240
+ },
2241
+ "external:core/canonical-reporting-capabilities.json": {
2242
+ "type": "object",
2243
+ "properties": {
2244
+ "available_reporting_frequencies": {
2245
+ "type": "array",
2246
+ "items": {
2247
+ "$ref": "#/$defs/external:enums~1reporting-frequency.json"
2248
+ },
2249
+ "minItems": 1,
2250
+ "uniqueItems": true
2251
+ },
2252
+ "expected_delay_minutes": {
2253
+ "type": "integer",
2254
+ "minimum": 0
2255
+ },
2256
+ "timezone": {
2257
+ "type": "string"
2258
+ },
2259
+ "supports_webhooks": {
2260
+ "type": "boolean"
2261
+ },
2262
+ "available_metrics": {
2263
+ "type": "array",
2264
+ "items": {
2265
+ "$ref": "#/$defs/external:enums~1available-metric.json"
2266
+ },
2267
+ "uniqueItems": true
2268
+ },
2269
+ "vendor_metrics": {
2270
+ "type": "array",
2271
+ "items": {
2272
+ "type": "object",
2273
+ "properties": {
2274
+ "vendor": {
2275
+ "$ref": "#/$defs/external:core~1brand-key.json"
2276
+ },
2277
+ "metric_id": {
2278
+ "$ref": "#/$defs/external:core~1vendor-metric-id.json"
2279
+ }
2280
+ },
2281
+ "required": [
2282
+ "vendor",
2283
+ "metric_id"
2284
+ ],
2285
+ "additionalProperties": false
2286
+ }
2287
+ },
2288
+ "supports_creative_breakdown": {
2289
+ "type": "boolean"
2290
+ },
2291
+ "supports_keyword_breakdown": {
2292
+ "type": "boolean"
2293
+ },
2294
+ "supports_geo_breakdown": {
2295
+ "$ref": "#/$defs/external:core~1geo-breakdown-support.json"
2296
+ },
2297
+ "supports_device_type_breakdown": {
2298
+ "type": "boolean"
2299
+ },
2300
+ "supports_device_platform_breakdown": {
2301
+ "type": "boolean"
2302
+ },
2303
+ "supports_audience_breakdown": {
2304
+ "type": "boolean"
2305
+ },
2306
+ "supports_demographic_breakdown": {
2307
+ "$ref": "#/$defs/external:core~1demographic-reporting-capability.json"
2308
+ },
2309
+ "supports_placement_breakdown": {
2310
+ "type": "boolean"
2311
+ },
2312
+ "supports_spot_breakdown": {
2313
+ "$ref": "#/$defs/external:core~1spot-reporting-capability.json"
2314
+ },
2315
+ "date_range_support": {
2316
+ "type": "string",
2317
+ "enum": [
2318
+ "date_range",
2319
+ "lifetime_only"
2320
+ ]
2321
+ },
2322
+ "windowed_pull_granularities": {
2323
+ "type": "array",
2324
+ "items": {
2325
+ "$ref": "#/$defs/external:enums~1reporting-frequency.json"
2326
+ },
2327
+ "uniqueItems": true
2328
+ },
2329
+ "measurement_windows": {
2330
+ "type": "array",
2331
+ "items": {
2332
+ "$ref": "#/$defs/external:core~1measurement-window.json"
2333
+ },
2334
+ "minItems": 1,
2335
+ "uniqueItems": true
2336
+ }
2337
+ },
2338
+ "required": [
2339
+ "available_reporting_frequencies",
2340
+ "expected_delay_minutes",
2341
+ "timezone",
2342
+ "supports_webhooks",
2343
+ "available_metrics",
2344
+ "date_range_support"
2345
+ ],
2346
+ "additionalProperties": false
2347
+ },
2348
+ "external:enums/reporting-frequency.json": {
2349
+ "type": "string",
2350
+ "enum": [
2351
+ "hourly",
2352
+ "daily",
2353
+ "weekly",
2354
+ "monthly",
2355
+ "quarterly",
2356
+ "post_campaign"
2357
+ ]
2358
+ },
2359
+ "external:enums/available-metric.json": {
2360
+ "type": "string",
2361
+ "enum": [
2362
+ "impressions",
2363
+ "spend",
2364
+ "clicks",
2365
+ "ctr",
2366
+ "views",
2367
+ "completed_views",
2368
+ "completion_rate",
2369
+ "conversions",
2370
+ "conversion_value",
2371
+ "commissionable_value",
2372
+ "roas",
2373
+ "cost_per_acquisition",
2374
+ "new_to_brand_rate",
2375
+ "leads",
2376
+ "reach",
2377
+ "frequency",
2378
+ "grps",
2379
+ "engagements",
2380
+ "engagement_rate",
2381
+ "follows",
2382
+ "saves",
2383
+ "profile_visits",
2384
+ "viewability",
2385
+ "quartile_data",
2386
+ "dooh_metrics",
2387
+ "cost_per_click",
2388
+ "cost_per_completed_view",
2389
+ "cpm",
2390
+ "downloads",
2391
+ "units_sold",
2392
+ "new_to_brand_units",
2393
+ "plays",
2394
+ "incremental_sales_lift",
2395
+ "brand_lift",
2396
+ "foot_traffic",
2397
+ "conversion_lift",
2398
+ "brand_search_lift"
2399
+ ]
2400
+ },
2401
+ "external:core/geo-breakdown-support.json": {
2402
+ "type": "object",
2403
+ "properties": {
2404
+ "country": {
2405
+ "type": "boolean"
2406
+ },
2407
+ "region": {
2408
+ "type": "boolean"
2409
+ },
2410
+ "metro": {
2411
+ "type": "object",
2412
+ "propertyNames": {
2413
+ "$ref": "#/$defs/external:enums~1metro-system.json"
2414
+ },
2415
+ "additionalProperties": {
2416
+ "type": "boolean"
2417
+ }
2418
+ },
2419
+ "postal_area": {
2420
+ "$ref": "#/$defs/external:core~1postal-area-support.json"
2421
+ }
2422
+ },
2423
+ "additionalProperties": false
2424
+ },
2425
+ "external:core/postal-area-support.json": {
2426
+ "type": "object",
2427
+ "properties": {
2428
+ "US": {
2429
+ "type": "array",
2430
+ "items": {
2431
+ "enum": [
2432
+ "zip",
2433
+ "zip_plus_four"
2434
+ ]
2435
+ },
2436
+ "minItems": 1,
2437
+ "uniqueItems": true
2438
+ },
2439
+ "GB": {
2440
+ "type": "array",
2441
+ "items": {
2442
+ "enum": [
2443
+ "outward",
2444
+ "full"
2445
+ ]
2446
+ },
2447
+ "minItems": 1,
2448
+ "uniqueItems": true
2449
+ },
2450
+ "CA": {
2451
+ "type": "array",
2452
+ "items": {
2453
+ "enum": [
2454
+ "fsa",
2455
+ "full"
2456
+ ]
2457
+ },
2458
+ "minItems": 1,
2459
+ "uniqueItems": true
2460
+ },
2461
+ "DE": {
2462
+ "type": "array",
2463
+ "items": {
2464
+ "const": "plz"
2465
+ },
2466
+ "minItems": 1,
2467
+ "uniqueItems": true
2468
+ },
2469
+ "CH": {
2470
+ "type": "array",
2471
+ "items": {
2472
+ "const": "plz"
2473
+ },
2474
+ "minItems": 1,
2475
+ "uniqueItems": true
2476
+ },
2477
+ "AT": {
2478
+ "type": "array",
2479
+ "items": {
2480
+ "const": "plz"
2481
+ },
2482
+ "minItems": 1,
2483
+ "uniqueItems": true
2484
+ },
2485
+ "FR": {
2486
+ "type": "array",
2487
+ "items": {
2488
+ "const": "code_postal"
2489
+ },
2490
+ "minItems": 1,
2491
+ "uniqueItems": true
2492
+ },
2493
+ "AU": {
2494
+ "type": "array",
2495
+ "items": {
2496
+ "const": "postcode"
2497
+ },
2498
+ "minItems": 1,
2499
+ "uniqueItems": true
2500
+ },
2501
+ "BR": {
2502
+ "type": "array",
2503
+ "items": {
2504
+ "const": "cep"
2505
+ },
2506
+ "minItems": 1,
2507
+ "uniqueItems": true
2508
+ },
2509
+ "IN": {
2510
+ "type": "array",
2511
+ "items": {
2512
+ "const": "pin"
2513
+ },
2514
+ "minItems": 1,
2515
+ "uniqueItems": true
2516
+ },
2517
+ "ZA": {
2518
+ "type": "array",
2519
+ "items": {
2520
+ "const": "postal_code"
2521
+ },
2522
+ "minItems": 1,
2523
+ "uniqueItems": true
2524
+ },
2525
+ "us_zip": {
2526
+ "type": "boolean",
2527
+ "deprecated": true
2528
+ },
2529
+ "us_zip_plus_four": {
2530
+ "type": "boolean",
2531
+ "deprecated": true
2532
+ },
2533
+ "gb_outward": {
2534
+ "type": "boolean",
2535
+ "deprecated": true
2536
+ },
2537
+ "gb_full": {
2538
+ "type": "boolean",
2539
+ "deprecated": true
2540
+ },
2541
+ "ca_fsa": {
2542
+ "type": "boolean",
2543
+ "deprecated": true
2544
+ },
2545
+ "ca_full": {
2546
+ "type": "boolean",
2547
+ "deprecated": true
2548
+ },
2549
+ "de_plz": {
2550
+ "type": "boolean",
2551
+ "deprecated": true
2552
+ },
2553
+ "fr_code_postal": {
2554
+ "type": "boolean",
2555
+ "deprecated": true
2556
+ },
2557
+ "au_postcode": {
2558
+ "type": "boolean",
2559
+ "deprecated": true
2560
+ },
2561
+ "ch_plz": {
2562
+ "type": "boolean",
2563
+ "deprecated": true
2564
+ },
2565
+ "at_plz": {
2566
+ "type": "boolean",
2567
+ "deprecated": true
2568
+ }
2569
+ },
2570
+ "propertyNames": {
2571
+ "anyOf": [
2572
+ {
2573
+ "pattern": "^[A-Z]{2}$"
2574
+ },
2575
+ {
2576
+ "$ref": "#/$defs/external:enums~1legacy-postal-system.json"
2577
+ }
2578
+ ]
2579
+ },
2580
+ "additionalProperties": {
2581
+ "type": "array",
2582
+ "items": {
2583
+ "enum": [
2584
+ "postal_code",
2585
+ "custom"
2586
+ ]
2587
+ },
2588
+ "minItems": 1,
2589
+ "uniqueItems": true
2590
+ }
2591
+ },
2592
+ "external:core/demographic-reporting-capability.json": {
2593
+ "type": "object",
2594
+ "properties": {
2595
+ "age": {
2596
+ "type": "object",
2597
+ "properties": {
2598
+ "reporting_modes": {
2599
+ "type": "array",
2600
+ "items": {
2601
+ "type": "string",
2602
+ "enum": [
2603
+ "exact_predicates",
2604
+ "enumerated_intervals"
2605
+ ]
2606
+ },
2607
+ "minItems": 1,
2608
+ "uniqueItems": true
2609
+ },
2610
+ "min_reportable_age": {
2611
+ "type": "integer",
2612
+ "minimum": 0,
2613
+ "maximum": 150
2614
+ },
2615
+ "max_reportable_age": {
2616
+ "type": "integer",
2617
+ "minimum": 0,
2618
+ "maximum": 150
2619
+ },
2620
+ "supports_unbounded_min": {
2621
+ "type": "boolean"
2622
+ },
2623
+ "supports_unbounded_max": {
2624
+ "type": "boolean"
2625
+ },
2626
+ "intervals": {
2627
+ "type": "array",
2628
+ "items": {
2629
+ "type": "object",
2630
+ "properties": {
2631
+ "age": {
2632
+ "$ref": "#/$defs/external:core~1demographic-age-range.json"
2633
+ },
2634
+ "demographic": {
2635
+ "type": "string",
2636
+ "minLength": 1,
2637
+ "pattern": "\\S"
2638
+ },
2639
+ "demographic_system": {
2640
+ "$ref": "#/$defs/external:enums~1demographic-system.json"
2641
+ }
2642
+ },
2643
+ "required": [
2644
+ "age"
2645
+ ],
2646
+ "allOf": [
2647
+ {
2648
+ "if": {
2649
+ "required": [
2650
+ "demographic"
2651
+ ]
2652
+ },
2653
+ "then": {
2654
+ "required": [
2655
+ "demographic_system"
2656
+ ]
2657
+ }
2658
+ },
2659
+ {
2660
+ "if": {
2661
+ "required": [
2662
+ "demographic_system"
2663
+ ]
2664
+ },
2665
+ "then": {
2666
+ "required": [
2667
+ "demographic"
2668
+ ]
2669
+ }
2670
+ }
2671
+ ],
2672
+ "additionalProperties": false
2673
+ },
2674
+ "minItems": 1,
2675
+ "uniqueItems": true
2676
+ }
2677
+ },
2678
+ "required": [
2679
+ "reporting_modes"
2680
+ ],
2681
+ "allOf": [
2682
+ {
2683
+ "if": {
2684
+ "properties": {
2685
+ "reporting_modes": {
2686
+ "contains": {
2687
+ "const": "exact_predicates"
2688
+ }
2689
+ }
2690
+ },
2691
+ "required": [
2692
+ "reporting_modes"
2693
+ ]
2694
+ },
2695
+ "then": {
2696
+ "required": [
2697
+ "min_reportable_age",
2698
+ "max_reportable_age",
2699
+ "supports_unbounded_min",
2700
+ "supports_unbounded_max"
2701
+ ]
2702
+ }
2703
+ },
2704
+ {
2705
+ "if": {
2706
+ "properties": {
2707
+ "reporting_modes": {
2708
+ "contains": {
2709
+ "const": "enumerated_intervals"
2710
+ }
2711
+ }
2712
+ },
2713
+ "required": [
2714
+ "reporting_modes"
2715
+ ]
2716
+ },
2717
+ "then": {
2718
+ "required": [
2719
+ "intervals"
2720
+ ]
2721
+ }
2722
+ }
2723
+ ],
2724
+ "additionalProperties": false
2725
+ },
2726
+ "demographic_systems": {
2727
+ "type": "array",
2728
+ "items": {
2729
+ "$ref": "#/$defs/external:enums~1demographic-system.json"
2730
+ },
2731
+ "minItems": 1,
2732
+ "uniqueItems": true
2733
+ },
2734
+ "may_suppress_small_cells": {
2735
+ "type": "boolean"
2736
+ }
2737
+ },
2738
+ "required": [
2739
+ "may_suppress_small_cells"
2740
+ ],
2741
+ "anyOf": [
2742
+ {
2743
+ "required": [
2744
+ "age"
2745
+ ]
2746
+ },
2747
+ {
2748
+ "required": [
2749
+ "demographic_systems"
2750
+ ]
2751
+ }
2752
+ ],
2753
+ "additionalProperties": false
2754
+ },
2755
+ "external:core/demographic-age-range.json": {
2756
+ "type": "object",
2757
+ "properties": {
2758
+ "min": {
2759
+ "type": "integer",
2760
+ "minimum": 0,
2761
+ "maximum": 150
2762
+ },
2763
+ "max": {
2764
+ "type": "integer",
2765
+ "minimum": 0,
2766
+ "maximum": 150
2767
+ },
2768
+ "include_unknown": {
2769
+ "type": "boolean"
2770
+ }
2771
+ },
2772
+ "required": [
2773
+ "include_unknown"
2774
+ ],
2775
+ "anyOf": [
2776
+ {
2777
+ "required": [
2778
+ "min"
2779
+ ]
2780
+ },
2781
+ {
2782
+ "required": [
2783
+ "max"
2784
+ ]
2785
+ }
2786
+ ],
2787
+ "additionalProperties": true
2788
+ },
2789
+ "external:core/spot-reporting-capability.json": {
2790
+ "type": "object",
2791
+ "properties": {
2792
+ "available_metrics": {
2793
+ "type": "array",
2794
+ "items": {
2795
+ "$ref": "#/$defs/external:enums~1available-metric.json"
2796
+ },
2797
+ "uniqueItems": true
2798
+ }
2799
+ },
2800
+ "required": [
2801
+ "available_metrics"
2802
+ ],
2803
+ "additionalProperties": false
2804
+ },
2805
+ "external:core/measurement-window.json": {
2806
+ "type": "object",
2807
+ "properties": {
2808
+ "window_id": {
2809
+ "type": "string",
2810
+ "maxLength": 50
2811
+ },
2812
+ "description": {
2813
+ "type": "string",
2814
+ "maxLength": 500
2815
+ },
2816
+ "duration_days": {
2817
+ "type": "integer",
2818
+ "minimum": 0
2819
+ },
2820
+ "expected_availability_days": {
2821
+ "type": "integer",
2822
+ "minimum": 0
2823
+ },
2824
+ "is_guarantee_basis": {
2825
+ "type": "boolean"
2826
+ }
2827
+ },
2828
+ "required": [
2829
+ "window_id",
2830
+ "duration_days"
2831
+ ],
2832
+ "additionalProperties": true
2833
+ },
2834
+ "external:core/canonical-measurement-terms.json": {
2835
+ "type": "object",
2836
+ "properties": {
2837
+ "billing_measurement": {
2838
+ "type": "object",
2839
+ "properties": {
2840
+ "vendor": {
2841
+ "$ref": "#/$defs/external:core~1brand-key.json"
2842
+ },
2843
+ "max_variance_percent": {
2844
+ "type": "number",
2845
+ "minimum": 0,
2846
+ "exclusiveMaximum": 100
2847
+ },
2848
+ "measurement_window": {
2849
+ "type": "string",
2850
+ "minLength": 1
2851
+ },
2852
+ "finalization_deadline_hours": {
2853
+ "type": "integer",
2854
+ "minimum": 0
2855
+ }
2856
+ },
2857
+ "required": [
2858
+ "vendor"
2859
+ ],
2860
+ "additionalProperties": false
2861
+ },
2862
+ "makegood_policy": {
2863
+ "type": "object",
2864
+ "properties": {
2865
+ "available_remedies": {
2866
+ "type": "array",
2867
+ "items": {
2868
+ "$ref": "#/$defs/external:enums~1makegood-remedy.json"
2869
+ },
2870
+ "minItems": 1,
2871
+ "uniqueItems": true
2872
+ }
2873
+ },
2874
+ "required": [
2875
+ "available_remedies"
2876
+ ],
2877
+ "additionalProperties": false
2878
+ }
2879
+ },
2880
+ "additionalProperties": false
2881
+ },
2882
+ "external:enums/makegood-remedy.json": {
2883
+ "type": "string",
2884
+ "enum": [
2885
+ "additional_delivery",
2886
+ "credit",
2887
+ "invoice_adjustment"
2888
+ ]
2889
+ },
2890
+ "external:core/canonical-performance-standard.json": {
2891
+ "type": "object",
2892
+ "properties": {
2893
+ "metric": {
2894
+ "$ref": "#/$defs/external:enums~1performance-standard-metric.json"
2895
+ },
2896
+ "threshold": {
2897
+ "type": "number",
2898
+ "minimum": 0,
2899
+ "maximum": 1
2900
+ },
2901
+ "standard": {
2902
+ "$ref": "#/$defs/external:enums~1viewability-standard.json"
2903
+ },
2904
+ "vendor": {
2905
+ "$ref": "#/$defs/external:core~1brand-key.json"
2906
+ }
2907
+ },
2908
+ "required": [
2909
+ "metric",
2910
+ "threshold",
2911
+ "vendor"
2912
+ ],
2913
+ "additionalProperties": false
2914
+ },
2915
+ "external:enums/performance-standard-metric.json": {
2916
+ "type": "string",
2917
+ "enum": [
2918
+ "viewability",
2919
+ "ivt",
2920
+ "completion_rate",
2921
+ "brand_safety",
2922
+ "attention_score"
2923
+ ]
2924
+ },
2925
+ "external:enums/catalog-type.json": {
2926
+ "type": "string",
2927
+ "enum": [
2928
+ "offering",
2929
+ "product",
2930
+ "inventory",
2931
+ "store",
2932
+ "promotion",
2933
+ "hotel",
2934
+ "flight",
2935
+ "job",
2936
+ "vehicle",
2937
+ "real_estate",
2938
+ "education",
2939
+ "destination",
2940
+ "app"
2941
+ ]
2942
+ },
2943
+ "external:core/signal-targeting-rules.json": {
2944
+ "type": "object",
2945
+ "properties": {
2946
+ "resolution_model": {
2947
+ "type": "string",
2948
+ "enum": [
2949
+ "direct_targeting",
2950
+ "seller_planned"
2951
+ ],
2952
+ "default": "direct_targeting"
2953
+ },
2954
+ "selection_mode": {
2955
+ "type": "string",
2956
+ "enum": [
2957
+ "optional",
2958
+ "required",
2959
+ "fixed"
2960
+ ],
2961
+ "default": "optional"
2962
+ },
2963
+ "min_selected_signals": {
2964
+ "type": "integer",
2965
+ "minimum": 0
2966
+ },
2967
+ "max_selected_signals": {
2968
+ "type": "integer",
2969
+ "minimum": 1
2970
+ },
2971
+ "max_selected_per_group": {
2972
+ "type": "integer",
2973
+ "minimum": 1
2974
+ },
2975
+ "max_signal_targeting_groups": {
2976
+ "type": "integer",
2977
+ "minimum": 1
2978
+ },
2979
+ "max_signals_per_targeting_group": {
2980
+ "type": "integer",
2981
+ "minimum": 1
2982
+ },
2983
+ "selection_group_rules": {
2984
+ "type": "array",
2985
+ "items": {
2986
+ "$ref": "#/$defs/external:core~1signal-selection-group-rule.json"
2987
+ },
2988
+ "minItems": 1
2989
+ }
2990
+ },
2991
+ "additionalProperties": true
2992
+ },
2993
+ "external:core/signal-selection-group-rule.json": {
2994
+ "type": "object",
2995
+ "properties": {
2996
+ "selection_group": {
2997
+ "type": "string"
2998
+ },
2999
+ "targeting_mode": {
3000
+ "type": "string",
3001
+ "enum": [
3002
+ "include",
3003
+ "exclude"
3004
+ ]
3005
+ },
3006
+ "selection_mode": {
3007
+ "type": "string",
3008
+ "enum": [
3009
+ "optional",
3010
+ "required",
3011
+ "fixed"
3012
+ ]
3013
+ },
3014
+ "min_selected_signals": {
3015
+ "type": "integer",
3016
+ "minimum": 0
3017
+ },
3018
+ "max_selected_signals": {
3019
+ "type": "integer",
3020
+ "minimum": 1
3021
+ }
3022
+ },
3023
+ "required": [
3024
+ "selection_group"
3025
+ ],
3026
+ "additionalProperties": true
3027
+ },
3028
+ "external:core/demographic-targeting-capability.json": {
3029
+ "type": "object",
3030
+ "properties": {
3031
+ "age": {
3032
+ "type": "object",
3033
+ "properties": {
3034
+ "execution_modes": {
3035
+ "type": "array",
3036
+ "items": {
3037
+ "type": "string",
3038
+ "enum": [
3039
+ "continuous_bounds",
3040
+ "enumerated_intervals",
3041
+ "signals"
3042
+ ]
3043
+ },
3044
+ "minItems": 1,
3045
+ "uniqueItems": true
3046
+ },
3047
+ "min_supported_age": {
3048
+ "type": "integer",
3049
+ "minimum": 0,
3050
+ "maximum": 150
3051
+ },
3052
+ "max_supported_age": {
3053
+ "type": "integer",
3054
+ "minimum": 0,
3055
+ "maximum": 150
3056
+ },
3057
+ "supports_unbounded_min": {
3058
+ "type": "boolean"
3059
+ },
3060
+ "supports_unbounded_max": {
3061
+ "type": "boolean"
3062
+ },
3063
+ "unknown_handling": {
3064
+ "type": "string",
3065
+ "enum": [
3066
+ "selectable",
3067
+ "always_excluded",
3068
+ "always_included"
3069
+ ]
3070
+ },
3071
+ "supported_bases": {
3072
+ "type": "array",
3073
+ "items": {
3074
+ "$ref": "#/$defs/external:enums~1age-determination-basis.json"
3075
+ },
3076
+ "minItems": 1,
3077
+ "uniqueItems": true
3078
+ },
3079
+ "supported_verification_methods": {
3080
+ "type": "array",
3081
+ "items": {
3082
+ "$ref": "#/$defs/external:enums~1age-verification-method.json"
3083
+ },
3084
+ "minItems": 1,
3085
+ "uniqueItems": true
3086
+ },
3087
+ "intervals": {
3088
+ "type": "array",
3089
+ "items": {
3090
+ "type": "object",
3091
+ "properties": {
3092
+ "interval_id": {
3093
+ "type": "string",
3094
+ "minLength": 1,
3095
+ "x-entity": "demographic_interval_id"
3096
+ },
3097
+ "age": {
3098
+ "$ref": "#/$defs/external:core~1demographic-age-range.json"
3099
+ }
3100
+ },
3101
+ "required": [
3102
+ "interval_id",
3103
+ "age"
3104
+ ],
3105
+ "additionalProperties": true
3106
+ },
3107
+ "minItems": 1
3108
+ }
3109
+ },
3110
+ "required": [
3111
+ "execution_modes",
3112
+ "unknown_handling"
3113
+ ],
3114
+ "allOf": [
3115
+ {
3116
+ "if": {
3117
+ "properties": {
3118
+ "execution_modes": {
3119
+ "contains": {
3120
+ "const": "continuous_bounds"
3121
+ }
3122
+ }
3123
+ },
3124
+ "required": [
3125
+ "execution_modes"
3126
+ ]
3127
+ },
3128
+ "then": {
3129
+ "required": [
3130
+ "min_supported_age",
3131
+ "max_supported_age",
3132
+ "supports_unbounded_min",
3133
+ "supports_unbounded_max"
3134
+ ]
3135
+ }
3136
+ },
3137
+ {
3138
+ "if": {
3139
+ "properties": {
3140
+ "execution_modes": {
3141
+ "contains": {
3142
+ "const": "enumerated_intervals"
3143
+ }
3144
+ }
3145
+ },
3146
+ "required": [
3147
+ "execution_modes"
3148
+ ]
3149
+ },
3150
+ "then": {
3151
+ "required": [
3152
+ "intervals"
3153
+ ]
3154
+ }
3155
+ },
3156
+ {
3157
+ "if": {
3158
+ "required": [
3159
+ "supported_verification_methods"
3160
+ ]
3161
+ },
3162
+ "then": {
3163
+ "required": [
3164
+ "supported_bases"
3165
+ ],
3166
+ "properties": {
3167
+ "supported_bases": {
3168
+ "contains": {
3169
+ "const": "verified"
3170
+ }
3171
+ }
3172
+ }
3173
+ }
3174
+ },
3175
+ {
3176
+ "if": {
3177
+ "properties": {
3178
+ "supported_bases": {
3179
+ "contains": {
3180
+ "const": "verified"
3181
+ }
3182
+ }
3183
+ },
3184
+ "required": [
3185
+ "supported_bases"
3186
+ ]
3187
+ },
3188
+ "then": {
3189
+ "required": [
3190
+ "supported_verification_methods"
3191
+ ]
3192
+ }
3193
+ }
3194
+ ],
3195
+ "additionalProperties": true
3196
+ }
3197
+ },
3198
+ "required": [
3199
+ "age"
3200
+ ],
3201
+ "additionalProperties": true
3202
+ },
3203
+ "external:enums/age-determination-basis.json": {
3204
+ "type": "string",
3205
+ "enum": [
3206
+ "verified",
3207
+ "declared",
3208
+ "inferred"
3209
+ ]
3210
+ },
3211
+ "external:enums/age-verification-method.json": {
3212
+ "type": "string",
3213
+ "enum": [
3214
+ "facial_age_estimation",
3215
+ "id_document",
3216
+ "digital_id",
3217
+ "credit_card",
3218
+ "world_id"
3219
+ ]
3220
+ },
3221
+ "external:core/canonical-audience-evidence.json": {
3222
+ "type": "object",
3223
+ "properties": {
3224
+ "evidence_id": {
3225
+ "type": "string",
3226
+ "minLength": 1,
3227
+ "x-entity": "audience_evidence"
3228
+ },
3229
+ "snapshot_id": {
3230
+ "type": "string",
3231
+ "minLength": 1,
3232
+ "x-entity": "audience_evidence_snapshot"
3233
+ },
3234
+ "version": {
3235
+ "type": "string",
3236
+ "minLength": 1
3237
+ },
3238
+ "content_digest": {
3239
+ "type": "string",
3240
+ "pattern": "^sha256:[a-f0-9]{64}$"
3241
+ },
3242
+ "audience": {
3243
+ "$ref": "#/$defs/external:core~1audience-characteristic.json"
3244
+ },
3245
+ "relationship": {
3246
+ "type": "string",
3247
+ "enum": [
3248
+ "composition",
3249
+ "index",
3250
+ "reach_estimate"
3251
+ ]
3252
+ },
3253
+ "value": {
3254
+ "type": "number",
3255
+ "minimum": 0
3256
+ },
3257
+ "unit": {
3258
+ "type": "string",
3259
+ "enum": [
3260
+ "fraction",
3261
+ "ratio",
3262
+ "count"
3263
+ ]
3264
+ },
3265
+ "baseline": {
3266
+ "type": "object",
3267
+ "properties": {
3268
+ "system": {
3269
+ "type": "string",
3270
+ "format": "uri",
3271
+ "pattern": "^https://"
3272
+ },
3273
+ "population_id": {
3274
+ "type": "string",
3275
+ "minLength": 1
3276
+ },
3277
+ "version": {
3278
+ "type": "string",
3279
+ "minLength": 1
3280
+ },
3281
+ "description": {
3282
+ "type": "string"
3283
+ }
3284
+ },
3285
+ "required": [
3286
+ "system",
3287
+ "population_id",
3288
+ "version"
3289
+ ],
3290
+ "additionalProperties": false
3291
+ },
3292
+ "evidence_type": {
3293
+ "type": "string",
3294
+ "enum": [
3295
+ "measured",
3296
+ "forecast",
3297
+ "seller_declared"
3298
+ ]
3299
+ },
3300
+ "methodology": {
3301
+ "$ref": "#/$defs/external:enums~1audience-evidence-methodology.json"
3302
+ },
3303
+ "subject_type": {
3304
+ "$ref": "#/$defs/external:enums~1audience-subject-type.json"
3305
+ },
3306
+ "resolution_method": {
3307
+ "$ref": "#/$defs/external:enums~1audience-resolution-method.json"
3308
+ },
3309
+ "provider": {
3310
+ "$ref": "#/$defs/external:core~1brand-key.json"
3311
+ },
3312
+ "measurement_window": {
3313
+ "$ref": "#/$defs/external:core~1date-range.json"
3314
+ },
3315
+ "sample_size": {
3316
+ "type": "integer",
3317
+ "minimum": 1
3318
+ },
3319
+ "confidence": {
3320
+ "type": "number",
3321
+ "minimum": 0,
3322
+ "maximum": 1
3323
+ },
3324
+ "last_updated": {
3325
+ "type": "string",
3326
+ "format": "date-time"
3327
+ },
3328
+ "methodology_url": {
3329
+ "type": "string",
3330
+ "format": "uri",
3331
+ "pattern": "^https://"
3332
+ },
3333
+ "attestation_digests": {
3334
+ "type": "array",
3335
+ "items": {
3336
+ "type": "string",
3337
+ "pattern": "^sha256:[a-f0-9]{64}$"
3338
+ },
3339
+ "minItems": 1,
3340
+ "uniqueItems": true
3341
+ },
3342
+ "ext": {
3343
+ "$ref": "#/$defs/external:core~1ext.json"
3344
+ }
3345
+ },
3346
+ "required": [
3347
+ "evidence_id",
3348
+ "snapshot_id",
3349
+ "version",
3350
+ "content_digest",
3351
+ "audience",
3352
+ "relationship",
3353
+ "value",
3354
+ "unit",
3355
+ "baseline",
3356
+ "evidence_type",
3357
+ "methodology",
3358
+ "subject_type",
3359
+ "provider",
3360
+ "measurement_window",
3361
+ "last_updated"
3362
+ ],
3363
+ "allOf": [
3364
+ {
3365
+ "if": {
3366
+ "properties": {
3367
+ "relationship": {
3368
+ "const": "composition"
3369
+ }
3370
+ },
3371
+ "required": [
3372
+ "relationship"
3373
+ ]
3374
+ },
3375
+ "then": {
3376
+ "properties": {
3377
+ "unit": {
3378
+ "const": "fraction"
3379
+ },
3380
+ "value": {
3381
+ "maximum": 1
3382
+ }
3383
+ }
3384
+ }
3385
+ },
3386
+ {
3387
+ "if": {
3388
+ "properties": {
3389
+ "relationship": {
3390
+ "const": "index"
3391
+ }
3392
+ },
3393
+ "required": [
3394
+ "relationship"
3395
+ ]
3396
+ },
3397
+ "then": {
3398
+ "properties": {
3399
+ "unit": {
3400
+ "const": "ratio"
3401
+ }
3402
+ }
3403
+ }
3404
+ },
3405
+ {
3406
+ "if": {
3407
+ "properties": {
3408
+ "relationship": {
3409
+ "const": "reach_estimate"
3410
+ }
3411
+ },
3412
+ "required": [
3413
+ "relationship"
3414
+ ]
3415
+ },
3416
+ "then": {
3417
+ "properties": {
3418
+ "unit": {
3419
+ "const": "count"
3420
+ },
3421
+ "value": {
3422
+ "type": "integer"
3423
+ }
3424
+ }
3425
+ }
3426
+ }
3427
+ ],
3428
+ "additionalProperties": false
3429
+ },
3430
+ "external:core/audience-characteristic.json": {
3431
+ "type": "object",
3432
+ "properties": {
3433
+ "dimension": {
3434
+ "type": "string",
3435
+ "anyOf": [
3436
+ {
3437
+ "const": "age"
3438
+ },
3439
+ {
3440
+ "format": "uri",
3441
+ "pattern": "^https://"
3442
+ }
3443
+ ]
3444
+ },
3445
+ "value": {
3446
+ "oneOf": [
3447
+ {
3448
+ "type": "string"
3449
+ },
3450
+ {
3451
+ "type": "number"
3452
+ },
3453
+ {
3454
+ "type": "boolean"
3455
+ },
3456
+ {
3457
+ "type": "array",
3458
+ "items": {
3459
+ "oneOf": [
3460
+ {
3461
+ "type": "string"
3462
+ },
3463
+ {
3464
+ "type": "number"
3465
+ },
3466
+ {
3467
+ "type": "boolean"
3468
+ }
3469
+ ]
3470
+ },
3471
+ "minItems": 1,
3472
+ "uniqueItems": true
3473
+ }
3474
+ ]
3475
+ },
3476
+ "range": {
3477
+ "type": "object",
3478
+ "properties": {
3479
+ "min": {
3480
+ "type": "number"
3481
+ },
3482
+ "max": {
3483
+ "type": "number"
3484
+ }
3485
+ },
3486
+ "minProperties": 1,
3487
+ "additionalProperties": false
3488
+ },
3489
+ "taxonomy": {
3490
+ "type": "object",
3491
+ "properties": {
3492
+ "system": {
3493
+ "type": "string",
3494
+ "format": "uri",
3495
+ "pattern": "^https://"
3496
+ },
3497
+ "version": {
3498
+ "type": "string",
3499
+ "minLength": 1
3500
+ },
3501
+ "value_id": {
3502
+ "type": "string",
3503
+ "minLength": 1
3504
+ }
3505
+ },
3506
+ "required": [
3507
+ "system"
3508
+ ],
3509
+ "additionalProperties": false
3510
+ },
3511
+ "label": {
3512
+ "type": "string"
3513
+ }
3514
+ },
3515
+ "required": [
3516
+ "dimension"
3517
+ ],
3518
+ "anyOf": [
3519
+ {
3520
+ "required": [
3521
+ "value"
3522
+ ],
3523
+ "not": {
3524
+ "required": [
3525
+ "range"
3526
+ ]
3527
+ }
3528
+ },
3529
+ {
3530
+ "required": [
3531
+ "range"
3532
+ ],
3533
+ "not": {
3534
+ "required": [
3535
+ "value"
3536
+ ]
3537
+ }
3538
+ }
3539
+ ],
3540
+ "allOf": [
3541
+ {
3542
+ "if": {
3543
+ "properties": {
3544
+ "dimension": {
3545
+ "const": "age"
3546
+ }
3547
+ },
3548
+ "required": [
3549
+ "dimension"
3550
+ ]
3551
+ },
3552
+ "then": {
3553
+ "properties": {
3554
+ "value": {
3555
+ "oneOf": [
3556
+ {
3557
+ "type": "integer",
3558
+ "minimum": 0
3559
+ },
3560
+ {
3561
+ "type": "array",
3562
+ "items": {
3563
+ "type": "integer",
3564
+ "minimum": 0
3565
+ },
3566
+ "minItems": 1,
3567
+ "uniqueItems": true
3568
+ }
3569
+ ]
3570
+ },
3571
+ "range": {
3572
+ "type": "object",
3573
+ "properties": {
3574
+ "min": {
3575
+ "type": "integer",
3576
+ "minimum": 0
3577
+ },
3578
+ "max": {
3579
+ "type": "integer",
3580
+ "minimum": 0
3581
+ }
3582
+ },
3583
+ "minProperties": 1,
3584
+ "additionalProperties": false
3585
+ }
3586
+ }
3587
+ }
3588
+ }
3589
+ ],
3590
+ "additionalProperties": false
3591
+ },
3592
+ "external:enums/audience-evidence-methodology.json": {
3593
+ "type": "string",
3594
+ "enum": [
3595
+ "observed",
3596
+ "declared",
3597
+ "derived",
3598
+ "inferred",
3599
+ "modeled",
3600
+ "projected"
3601
+ ]
3602
+ },
3603
+ "external:enums/audience-subject-type.json": {
3604
+ "type": "string",
3605
+ "enum": [
3606
+ "individual",
3607
+ "household",
3608
+ "business",
3609
+ "contextual",
3610
+ "none"
3611
+ ]
3612
+ },
3613
+ "external:enums/audience-resolution-method.json": {
3614
+ "type": "string",
3615
+ "enum": [
3616
+ "deterministic_id",
3617
+ "probabilistic_device",
3618
+ "browser",
3619
+ "geographic",
3620
+ "content_signal",
3621
+ "mixed"
3622
+ ]
3623
+ },
3624
+ "external:core/date-range.json": {
3625
+ "type": "object",
3626
+ "properties": {
3627
+ "start": {
3628
+ "type": "string",
3629
+ "format": "date"
3630
+ },
3631
+ "end": {
3632
+ "type": "string",
3633
+ "format": "date"
3634
+ }
3635
+ },
3636
+ "required": [
3637
+ "start",
3638
+ "end"
3639
+ ],
3640
+ "additionalProperties": true
3641
+ },
3642
+ "external:core/canonical-audience-evidence-selection.json": {
3643
+ "type": "object",
3644
+ "properties": {
3645
+ "evidence_id": {
3646
+ "type": "string",
3647
+ "minLength": 1,
3648
+ "x-entity": "audience_evidence"
3649
+ },
3650
+ "snapshot_id": {
3651
+ "type": "string",
3652
+ "minLength": 1,
3653
+ "x-entity": "audience_evidence_snapshot"
3654
+ },
3655
+ "version": {
3656
+ "type": "string",
3657
+ "minLength": 1
3658
+ },
3659
+ "content_digest": {
3660
+ "type": "string",
3661
+ "pattern": "^sha256:[a-f0-9]{64}$"
3662
+ },
3663
+ "decision_use": {
3664
+ "type": "string",
3665
+ "enum": [
3666
+ "recommendation",
3667
+ "eligibility",
3668
+ "package_construction"
3669
+ ]
3670
+ },
3671
+ "evidence": {
3672
+ "$ref": "#/$defs/external:core~1canonical-audience-evidence.json"
3673
+ },
3674
+ "verified_attestation_digests": {
3675
+ "type": "array",
3676
+ "items": {
3677
+ "type": "string",
3678
+ "pattern": "^sha256:[a-f0-9]{64}$"
3679
+ },
3680
+ "minItems": 1,
3681
+ "uniqueItems": true
3682
+ },
3683
+ "ext": {
3684
+ "$ref": "#/$defs/external:core~1ext.json"
3685
+ }
3686
+ },
3687
+ "required": [
3688
+ "evidence_id",
3689
+ "snapshot_id",
3690
+ "version",
3691
+ "content_digest",
3692
+ "decision_use"
3693
+ ],
3694
+ "additionalProperties": false
3695
+ },
3696
+ "external:core/canonical-product-action.json": {
3697
+ "type": "object",
3698
+ "properties": {
3699
+ "action": {
3700
+ "$ref": "#/$defs/external:enums~1canonical-media-buy-action.json"
3701
+ },
3702
+ "modes": {
3703
+ "type": "array",
3704
+ "items": {
3705
+ "$ref": "#/$defs/external:enums~1canonical-media-buy-action-mode.json"
3706
+ },
3707
+ "minItems": 1,
3708
+ "uniqueItems": true
3709
+ },
3710
+ "allowed_statuses": {
3711
+ "type": "array",
3712
+ "items": {
3713
+ "$ref": "#/$defs/external:enums~1media-buy-status.json"
3714
+ },
3715
+ "minItems": 1,
3716
+ "uniqueItems": true
3717
+ },
3718
+ "sla": {
3719
+ "$ref": "#/$defs/external:core~1sla-window.json"
3720
+ },
3721
+ "terms_ref": {
3722
+ "type": "string"
3723
+ }
3724
+ },
3725
+ "required": [
3726
+ "action",
3727
+ "modes"
3728
+ ],
3729
+ "additionalProperties": false
3730
+ },
3731
+ "external:enums/canonical-media-buy-action.json": {
3732
+ "type": "string",
3733
+ "enum": [
3734
+ "pause",
3735
+ "resume",
3736
+ "cancel",
3737
+ "extend_flight",
3738
+ "shorten_flight",
3739
+ "update_flight_dates",
3740
+ "increase_budget",
3741
+ "decrease_budget",
3742
+ "reallocate_budget",
3743
+ "update_budget_allocation",
3744
+ "update_targeting",
3745
+ "update_pacing",
3746
+ "update_bidding",
3747
+ "update_frequency_caps",
3748
+ "update_catalog_assignments",
3749
+ "update_keywords",
3750
+ "update_optimization_goals",
3751
+ "update_impression_goal",
3752
+ "update_spend_target",
3753
+ "update_reporting_webhook",
3754
+ "replace_creative",
3755
+ "update_creative_assignments",
3756
+ "remove_creative",
3757
+ "add_packages",
3758
+ "remove_packages"
3759
+ ]
3760
+ },
3761
+ "external:enums/canonical-media-buy-action-mode.json": {
3762
+ "type": "string",
3763
+ "enum": [
3764
+ "self_serve",
3765
+ "conditional_self_serve",
3766
+ "requires_approval"
3767
+ ]
3768
+ },
3769
+ "external:enums/media-buy-status.json": {
3770
+ "type": "string",
3771
+ "enum": [
3772
+ "pending_creatives",
3773
+ "pending_start",
3774
+ "active",
3775
+ "paused",
3776
+ "completed",
3777
+ "rejected",
3778
+ "canceled"
3779
+ ]
3780
+ },
3781
+ "external:core/sla-window.json": {
3782
+ "type": "object",
3783
+ "properties": {
3784
+ "response_max": {
3785
+ "type": "string",
3786
+ "pattern": "^P(?!$)(\\d+Y)?(\\d+M)?(\\d+D)?(T(\\d+H)?(\\d+M)?(\\d+S)?)?$"
3787
+ },
3788
+ "completion_max": {
3789
+ "type": "string",
3790
+ "pattern": "^P(?!$)(\\d+Y)?(\\d+M)?(\\d+D)?(T(\\d+H)?(\\d+M)?(\\d+S)?)?$"
3791
+ }
3792
+ },
3793
+ "additionalProperties": false
3794
+ },
3795
+ "external:core/duration.json": {
3796
+ "type": "object",
3797
+ "properties": {
3798
+ "interval": {
3799
+ "type": "integer",
3800
+ "minimum": 1
3801
+ },
3802
+ "unit": {
3803
+ "type": "string",
3804
+ "enum": [
3805
+ "seconds",
3806
+ "minutes",
3807
+ "hours",
3808
+ "days",
3809
+ "campaign"
3810
+ ]
3811
+ }
3812
+ },
3813
+ "required": [
3814
+ "interval",
3815
+ "unit"
3816
+ ],
3817
+ "additionalProperties": false
3818
+ },
3819
+ "external:core/context.json": {
3820
+ "type": "object",
3821
+ "additionalProperties": true
3822
+ }
3823
+ }
3824
+ }