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