@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,2861 @@
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/get-media-buy-delivery-response.json",
4
+ "type": "object",
5
+ "allOf": [
6
+ {
7
+ "$ref": "#/$defs/external:core~1version-envelope.json"
8
+ },
9
+ {
10
+ "$ref": "#/$defs/external:core~1protocol-envelope.json"
11
+ }
12
+ ],
13
+ "properties": {
14
+ "notification_type": {
15
+ "type": "string",
16
+ "enum": [
17
+ "scheduled",
18
+ "final",
19
+ "delayed",
20
+ "adjusted",
21
+ "window_update"
22
+ ]
23
+ },
24
+ "partial_data": {
25
+ "type": "boolean"
26
+ },
27
+ "unavailable_count": {
28
+ "type": "integer",
29
+ "minimum": 0
30
+ },
31
+ "sequence_number": {
32
+ "type": "integer",
33
+ "minimum": 1
34
+ },
35
+ "next_expected_at": {
36
+ "type": "string",
37
+ "format": "date-time"
38
+ },
39
+ "reporting_period": {
40
+ "type": "object",
41
+ "properties": {
42
+ "start": {
43
+ "type": "string",
44
+ "format": "date-time"
45
+ },
46
+ "end": {
47
+ "type": "string",
48
+ "format": "date-time"
49
+ }
50
+ },
51
+ "required": [
52
+ "start",
53
+ "end"
54
+ ],
55
+ "additionalProperties": true
56
+ },
57
+ "currency": {
58
+ "type": "string",
59
+ "pattern": "^[A-Z]{3}$"
60
+ },
61
+ "attribution_window": {
62
+ "$ref": "#/$defs/external:core~1attribution-window.json"
63
+ },
64
+ "aggregated_totals": {
65
+ "type": "object",
66
+ "properties": {
67
+ "impressions": {
68
+ "type": "number",
69
+ "minimum": 0
70
+ },
71
+ "spend": {
72
+ "type": "number",
73
+ "minimum": 0
74
+ },
75
+ "clicks": {
76
+ "type": "number",
77
+ "minimum": 0
78
+ },
79
+ "completed_views": {
80
+ "type": "number",
81
+ "minimum": 0
82
+ },
83
+ "views": {
84
+ "type": "number",
85
+ "minimum": 0
86
+ },
87
+ "conversions": {
88
+ "type": "number",
89
+ "minimum": 0
90
+ },
91
+ "conversion_value": {
92
+ "type": "number",
93
+ "minimum": 0
94
+ },
95
+ "commissionable_value": {
96
+ "type": "number",
97
+ "minimum": 0
98
+ },
99
+ "roas": {
100
+ "type": "number",
101
+ "minimum": 0
102
+ },
103
+ "new_to_brand_rate": {
104
+ "type": "number",
105
+ "minimum": 0,
106
+ "maximum": 1
107
+ },
108
+ "cost_per_acquisition": {
109
+ "type": "number",
110
+ "minimum": 0
111
+ },
112
+ "completion_rate": {
113
+ "type": [
114
+ "number",
115
+ "null"
116
+ ],
117
+ "minimum": 0,
118
+ "maximum": 1
119
+ },
120
+ "reach": {
121
+ "type": "number",
122
+ "minimum": 0
123
+ },
124
+ "reach_unit": {
125
+ "allOf": [
126
+ {
127
+ "$ref": "#/$defs/external:enums~1reach-unit.json"
128
+ }
129
+ ]
130
+ },
131
+ "frequency": {
132
+ "type": "number",
133
+ "minimum": 0
134
+ },
135
+ "media_buy_count": {
136
+ "type": "integer",
137
+ "minimum": 0
138
+ },
139
+ "metric_aggregates": {
140
+ "type": "array",
141
+ "items": {
142
+ "$ref": "#/$defs/external:core~1delivery-metric-aggregate.json"
143
+ }
144
+ }
145
+ },
146
+ "required": [
147
+ "impressions",
148
+ "spend",
149
+ "media_buy_count"
150
+ ],
151
+ "additionalProperties": true
152
+ },
153
+ "media_buy_deliveries": {
154
+ "type": "array",
155
+ "items": {
156
+ "type": "object",
157
+ "properties": {
158
+ "media_buy_id": {
159
+ "type": "string",
160
+ "x-entity": "media_buy"
161
+ },
162
+ "status": {
163
+ "type": "string",
164
+ "enum": [
165
+ "pending_creatives",
166
+ "pending_start",
167
+ "pending",
168
+ "active",
169
+ "paused",
170
+ "completed",
171
+ "rejected",
172
+ "canceled",
173
+ "failed",
174
+ "reporting_delayed"
175
+ ]
176
+ },
177
+ "expected_availability": {
178
+ "type": "string",
179
+ "format": "date-time"
180
+ },
181
+ "is_adjusted": {
182
+ "type": "boolean"
183
+ },
184
+ "is_final": {
185
+ "type": "boolean"
186
+ },
187
+ "finalized_at": {
188
+ "type": "string",
189
+ "format": "date-time"
190
+ },
191
+ "pricing_model": {
192
+ "$ref": "#/$defs/external:enums~1pricing-model.json"
193
+ },
194
+ "pacing_index": {
195
+ "type": "number",
196
+ "minimum": 0
197
+ },
198
+ "totals": {
199
+ "allOf": [
200
+ {
201
+ "$ref": "#/$defs/external:core~1delivery-metrics.json"
202
+ },
203
+ {
204
+ "type": "object",
205
+ "properties": {
206
+ "effective_rate": {
207
+ "type": "number",
208
+ "minimum": 0
209
+ }
210
+ },
211
+ "required": [
212
+ "spend"
213
+ ]
214
+ }
215
+ ]
216
+ },
217
+ "by_package": {
218
+ "type": "array",
219
+ "items": {
220
+ "allOf": [
221
+ {
222
+ "$ref": "#/$defs/external:core~1delivery-metrics.json"
223
+ },
224
+ {
225
+ "type": "object",
226
+ "properties": {
227
+ "package_id": {
228
+ "type": "string",
229
+ "x-entity": "package"
230
+ },
231
+ "pacing_index": {
232
+ "type": "number",
233
+ "minimum": 0
234
+ },
235
+ "pricing_model": {
236
+ "$ref": "#/$defs/external:enums~1pricing-model.json"
237
+ },
238
+ "rate": {
239
+ "type": "number",
240
+ "minimum": 0
241
+ },
242
+ "currency": {
243
+ "type": "string",
244
+ "pattern": "^[A-Z]{3}$"
245
+ },
246
+ "delivery_status": {
247
+ "$ref": "#/$defs/external:enums~1delivery-status.json"
248
+ },
249
+ "paused": {
250
+ "type": "boolean"
251
+ },
252
+ "is_final": {
253
+ "type": "boolean"
254
+ },
255
+ "finalized_at": {
256
+ "type": "string",
257
+ "format": "date-time"
258
+ },
259
+ "measurement_window": {
260
+ "type": "string",
261
+ "maxLength": 50
262
+ },
263
+ "supersedes_window": {
264
+ "type": "string",
265
+ "maxLength": 50
266
+ },
267
+ "missing_metrics": {
268
+ "type": "array",
269
+ "items": {
270
+ "$ref": "#/$defs/external:core~1missing-metric.json"
271
+ }
272
+ },
273
+ "by_catalog_item": {
274
+ "type": "array",
275
+ "items": {
276
+ "$ref": "#/$defs/external:core~1catalog-item-delivery-metrics.json"
277
+ }
278
+ },
279
+ "by_creative": {
280
+ "type": "array",
281
+ "items": {
282
+ "$ref": "#/$defs/external:core~1creative-delivery-metrics.json"
283
+ }
284
+ },
285
+ "by_keyword": {
286
+ "type": "array",
287
+ "items": {
288
+ "$ref": "#/$defs/external:core~1keyword-delivery-metrics.json"
289
+ }
290
+ },
291
+ "by_geo": {
292
+ "type": "array",
293
+ "items": {
294
+ "$ref": "#/$defs/external:core~1geo-delivery-metrics.json"
295
+ }
296
+ },
297
+ "by_geo_truncated": {
298
+ "type": "boolean"
299
+ },
300
+ "by_device_type": {
301
+ "type": "array",
302
+ "items": {
303
+ "allOf": [
304
+ {
305
+ "$ref": "#/$defs/external:core~1delivery-metrics.json"
306
+ },
307
+ {
308
+ "type": "object",
309
+ "properties": {
310
+ "device_type": {
311
+ "$ref": "#/$defs/external:enums~1device-type.json"
312
+ }
313
+ },
314
+ "required": [
315
+ "device_type",
316
+ "impressions",
317
+ "spend"
318
+ ]
319
+ }
320
+ ]
321
+ }
322
+ },
323
+ "by_device_type_truncated": {
324
+ "type": "boolean"
325
+ },
326
+ "by_device_platform": {
327
+ "type": "array",
328
+ "items": {
329
+ "allOf": [
330
+ {
331
+ "$ref": "#/$defs/external:core~1delivery-metrics.json"
332
+ },
333
+ {
334
+ "type": "object",
335
+ "properties": {
336
+ "device_platform": {
337
+ "$ref": "#/$defs/external:enums~1device-platform.json"
338
+ }
339
+ },
340
+ "required": [
341
+ "device_platform",
342
+ "impressions",
343
+ "spend"
344
+ ]
345
+ }
346
+ ]
347
+ }
348
+ },
349
+ "by_device_platform_truncated": {
350
+ "type": "boolean"
351
+ },
352
+ "by_audience": {
353
+ "type": "array",
354
+ "items": {
355
+ "allOf": [
356
+ {
357
+ "$ref": "#/$defs/external:core~1delivery-metrics.json"
358
+ },
359
+ {
360
+ "type": "object",
361
+ "properties": {
362
+ "audience_id": {
363
+ "type": "string",
364
+ "x-entity": "audience"
365
+ },
366
+ "audience_source": {
367
+ "$ref": "#/$defs/external:enums~1audience-source.json"
368
+ },
369
+ "audience_name": {
370
+ "type": "string"
371
+ }
372
+ },
373
+ "required": [
374
+ "audience_id",
375
+ "audience_source",
376
+ "impressions",
377
+ "spend"
378
+ ]
379
+ }
380
+ ]
381
+ }
382
+ },
383
+ "by_audience_truncated": {
384
+ "type": "boolean"
385
+ },
386
+ "by_demographic": {
387
+ "type": "array",
388
+ "items": {
389
+ "allOf": [
390
+ {
391
+ "$ref": "#/$defs/external:core~1delivery-metrics.json"
392
+ },
393
+ {
394
+ "type": "object",
395
+ "properties": {
396
+ "demographic": {
397
+ "type": "string",
398
+ "minLength": 1,
399
+ "pattern": "\\S"
400
+ },
401
+ "demographic_system": {
402
+ "$ref": "#/$defs/external:enums~1demographic-system.json"
403
+ },
404
+ "age": {
405
+ "$ref": "#/$defs/external:core~1demographic-age-range.json"
406
+ }
407
+ },
408
+ "required": [
409
+ "demographic",
410
+ "demographic_system",
411
+ "impressions",
412
+ "spend"
413
+ ]
414
+ }
415
+ ]
416
+ }
417
+ },
418
+ "by_demographic_truncated": {
419
+ "type": "boolean"
420
+ },
421
+ "by_demographic_suppressed": {
422
+ "type": "boolean"
423
+ },
424
+ "by_placement": {
425
+ "type": "array",
426
+ "items": {
427
+ "allOf": [
428
+ {
429
+ "$ref": "#/$defs/external:core~1delivery-metrics.json"
430
+ },
431
+ {
432
+ "type": "object",
433
+ "properties": {
434
+ "placement_id": {
435
+ "type": "string",
436
+ "x-entity": "placement"
437
+ },
438
+ "placement_name": {
439
+ "type": "string"
440
+ },
441
+ "publisher_domain": {
442
+ "type": "string",
443
+ "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
444
+ }
445
+ },
446
+ "required": [
447
+ "placement_id",
448
+ "impressions",
449
+ "spend"
450
+ ]
451
+ }
452
+ ]
453
+ }
454
+ },
455
+ "by_placement_truncated": {
456
+ "type": "boolean"
457
+ },
458
+ "by_spot": {
459
+ "type": "array",
460
+ "items": {
461
+ "allOf": [
462
+ {
463
+ "$ref": "#/$defs/external:core~1delivery-metrics.json"
464
+ },
465
+ {
466
+ "type": "object",
467
+ "properties": {
468
+ "spot_id": {
469
+ "type": "string",
470
+ "minLength": 1,
471
+ "x-entity": "spot_airing"
472
+ },
473
+ "aired_at": {
474
+ "type": "string",
475
+ "format": "date-time"
476
+ },
477
+ "network": {
478
+ "type": "string",
479
+ "minLength": 1
480
+ },
481
+ "station": {
482
+ "type": "string",
483
+ "minLength": 1
484
+ },
485
+ "daypart": {
486
+ "type": "string",
487
+ "minLength": 1
488
+ }
489
+ },
490
+ "required": [
491
+ "spot_id",
492
+ "aired_at"
493
+ ]
494
+ }
495
+ ]
496
+ }
497
+ },
498
+ "by_spot_truncated": {
499
+ "type": "boolean"
500
+ },
501
+ "daily_breakdown": {
502
+ "type": "array",
503
+ "items": {
504
+ "type": "object",
505
+ "properties": {
506
+ "date": {
507
+ "type": "string",
508
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
509
+ },
510
+ "impressions": {
511
+ "type": "number",
512
+ "minimum": 0
513
+ },
514
+ "spend": {
515
+ "type": "number",
516
+ "minimum": 0
517
+ },
518
+ "conversions": {
519
+ "type": "number",
520
+ "minimum": 0
521
+ },
522
+ "conversion_value": {
523
+ "type": "number",
524
+ "minimum": 0
525
+ },
526
+ "commissionable_value": {
527
+ "type": "number",
528
+ "minimum": 0
529
+ },
530
+ "roas": {
531
+ "type": "number",
532
+ "minimum": 0
533
+ },
534
+ "new_to_brand_rate": {
535
+ "type": "number",
536
+ "minimum": 0,
537
+ "maximum": 1
538
+ }
539
+ },
540
+ "required": [
541
+ "date",
542
+ "impressions",
543
+ "spend"
544
+ ],
545
+ "additionalProperties": true
546
+ }
547
+ }
548
+ },
549
+ "required": [
550
+ "package_id",
551
+ "spend",
552
+ "pricing_model",
553
+ "rate",
554
+ "currency"
555
+ ]
556
+ }
557
+ ]
558
+ }
559
+ },
560
+ "windows": {
561
+ "type": "array",
562
+ "items": {
563
+ "type": "object",
564
+ "properties": {
565
+ "window_start": {
566
+ "type": "string",
567
+ "format": "date-time"
568
+ },
569
+ "window_end": {
570
+ "type": "string",
571
+ "format": "date-time"
572
+ },
573
+ "totals": {
574
+ "allOf": [
575
+ {
576
+ "$ref": "#/$defs/external:core~1delivery-metrics.json"
577
+ }
578
+ ]
579
+ },
580
+ "by_package": {
581
+ "type": "array",
582
+ "items": {
583
+ "allOf": [
584
+ {
585
+ "$ref": "#/$defs/external:core~1delivery-metrics.json"
586
+ },
587
+ {
588
+ "type": "object",
589
+ "properties": {
590
+ "package_id": {
591
+ "type": "string",
592
+ "x-entity": "package"
593
+ }
594
+ },
595
+ "required": [
596
+ "package_id"
597
+ ]
598
+ }
599
+ ]
600
+ }
601
+ },
602
+ "is_final": {
603
+ "type": "boolean"
604
+ },
605
+ "measurement_window": {
606
+ "type": "string",
607
+ "maxLength": 50
608
+ }
609
+ },
610
+ "required": [
611
+ "window_start",
612
+ "window_end",
613
+ "totals"
614
+ ]
615
+ }
616
+ },
617
+ "daily_breakdown": {
618
+ "type": "array",
619
+ "items": {
620
+ "type": "object",
621
+ "properties": {
622
+ "date": {
623
+ "type": "string",
624
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
625
+ },
626
+ "impressions": {
627
+ "type": "number",
628
+ "minimum": 0
629
+ },
630
+ "spend": {
631
+ "type": "number",
632
+ "minimum": 0
633
+ },
634
+ "conversions": {
635
+ "type": "number",
636
+ "minimum": 0
637
+ },
638
+ "conversion_value": {
639
+ "type": "number",
640
+ "minimum": 0
641
+ },
642
+ "commissionable_value": {
643
+ "type": "number",
644
+ "minimum": 0
645
+ },
646
+ "roas": {
647
+ "type": "number",
648
+ "minimum": 0
649
+ },
650
+ "new_to_brand_rate": {
651
+ "type": "number",
652
+ "minimum": 0,
653
+ "maximum": 1
654
+ }
655
+ },
656
+ "required": [
657
+ "date",
658
+ "impressions",
659
+ "spend"
660
+ ],
661
+ "additionalProperties": true
662
+ }
663
+ }
664
+ },
665
+ "required": [
666
+ "media_buy_id",
667
+ "status",
668
+ "totals",
669
+ "by_package"
670
+ ],
671
+ "additionalProperties": true
672
+ }
673
+ },
674
+ "errors": {
675
+ "type": "array",
676
+ "items": {
677
+ "$ref": "#/$defs/external:core~1error.json"
678
+ }
679
+ },
680
+ "sandbox": {
681
+ "type": "boolean"
682
+ },
683
+ "context": {
684
+ "$ref": "#/$defs/external:core~1context.json"
685
+ },
686
+ "ext": {
687
+ "$ref": "#/$defs/external:core~1ext.json"
688
+ }
689
+ },
690
+ "required": [
691
+ "reporting_period",
692
+ "currency",
693
+ "media_buy_deliveries"
694
+ ],
695
+ "additionalProperties": true,
696
+ "$defs": {
697
+ "external:core/version-envelope.json": {
698
+ "type": "object",
699
+ "properties": {
700
+ "adcp_version": {
701
+ "type": "string",
702
+ "pattern": "^(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)(?:-[a-zA-Z0-9](?:[a-zA-Z0-9.-]*[a-zA-Z0-9])?)?$"
703
+ },
704
+ "adcp_major_version": {
705
+ "type": "integer",
706
+ "deprecated": true,
707
+ "minimum": 1,
708
+ "maximum": 99
709
+ }
710
+ }
711
+ },
712
+ "external:core/protocol-envelope.json": {
713
+ "type": "object",
714
+ "properties": {
715
+ "context_id": {
716
+ "type": "string"
717
+ },
718
+ "context": {
719
+ "$ref": "#/$defs/external:core~1context.json"
720
+ },
721
+ "task_id": {
722
+ "type": "string",
723
+ "x-entity": "task"
724
+ },
725
+ "status": {
726
+ "$ref": "#/$defs/external:enums~1task-status.json"
727
+ },
728
+ "message": {
729
+ "type": "string"
730
+ },
731
+ "timestamp": {
732
+ "type": "string",
733
+ "format": "date-time"
734
+ },
735
+ "replayed": {
736
+ "type": "boolean",
737
+ "default": false
738
+ },
739
+ "adcp_error": {
740
+ "$ref": "#/$defs/external:core~1error.json"
741
+ },
742
+ "push_notification_config": {
743
+ "$ref": "#/$defs/external:core~1push-notification-config.json"
744
+ },
745
+ "governance_context": {
746
+ "type": "string",
747
+ "minLength": 1,
748
+ "maxLength": 4096,
749
+ "pattern": "^[\\x20-\\x7E]+$"
750
+ },
751
+ "payload": {
752
+ "type": "object",
753
+ "x-adcp-open-payload": true,
754
+ "additionalProperties": true
755
+ }
756
+ },
757
+ "required": [
758
+ "status"
759
+ ],
760
+ "additionalProperties": true,
761
+ "not": {
762
+ "anyOf": [
763
+ {
764
+ "required": [
765
+ "task_status"
766
+ ]
767
+ },
768
+ {
769
+ "required": [
770
+ "response_status"
771
+ ]
772
+ }
773
+ ]
774
+ },
775
+ "notes": [
776
+ "Task response schemas (e.g., get-products-response.json) define ONLY the body fields; protocol-layer fields live on this envelope.",
777
+ "Transport serialization (normative):",
778
+ " - MCP: envelope fields and task-body fields are siblings at the root of the tool response. The `payload` object is NOT serialized as a nested key — its body fields are flattened to the root alongside `status`, `context_id`, `context`, etc. This matches MCP's native `structuredContent` convention and is what shipping SDKs (@adcp/client) emit. Conformant MCP receivers parse from the flat root; receivers that expect a nested `payload` key MUST migrate.",
779
+ " - A2A 1.0 with the AdCP profile extension: `task.status.state` carries the transport invocation lifecycle used to select the extraction location; `task.contextId` carries `context_id`, while `task.id` is an independent A2A transport identifier. The complete AdCP response, including its protocol-level `status` and any application-layer `task_id`, is canonically carried in `task.artifacts[0].parts[].DataPart` on final states; `task.status.message.parts[].DataPart` is the fallback container used only for interim A2A states (working, native submitted, input-required) where no final artifact has been emitted yet. For a structured AdCP business rejection or Submitted response, A2A is `completed` while the DataPart carries `status: rejected` or `status: submitted` because the handler invocation succeeded. An AdCP `task_id` MUST NOT be copied into artifact metadata or inferred from `task.id`. Receivers MUST prefer artifacts when present and MUST NOT overwrite a DataPart's status with the A2A state. See `a2a-profile-extension.mdx` and `a2a-response-extraction.mdx` for the full binding and extraction algorithm.",
780
+ " - REST: envelope fields MAY ride on HTTP headers (e.g., `X-AdCP-Status`, `X-AdCP-Context-Id`) or as JSON body siblings; body fields appear at the JSON body root. Implementers choosing the header path SHOULD also mirror to body siblings for non-streaming callers.",
781
+ "Across all three: envelope and body fields are conceptually a single response object. A task response schema MAY declare body fields with the same name as envelope fields (e.g., `errors[]` body-level for per-record validation results vs envelope-level for fatal task failure) and the two MUST be treated as distinct fields by name within their respective namespaces — see `error-handling.mdx#envelope-vs-payload-errors-the-two-layer-model`.",
782
+ "`status` is REQUIRED on the conceptual AdCP response across all transports. On MCP and REST it appears as a sibling field at the JSON root (or `structuredContent` root for MCP). On A2A it is carried inside the authoritative DataPart alongside the task body; `task.status.state` separately carries the A2A transport lifecycle and selects where that DataPart is found. Receivers MUST preserve the DataPart status when present. The schema-level `required: [status]` enforces the post-extraction AdCP shape. `payload` remains intentionally NOT required — it is a documentary grouping construct, never a required wire field. See `mcp-guide.mdx` and `a2a-guide.mdx` for the wire-level patterns receivers MUST implement.",
783
+ "Receivers MUST handle absence of an envelope field (e.g., `replayed` omitted) as the field's documented default — see each field's `default` clause."
784
+ ]
785
+ },
786
+ "external:core/context.json": {
787
+ "type": "object",
788
+ "additionalProperties": true
789
+ },
790
+ "external:enums/task-status.json": {
791
+ "type": "string",
792
+ "enum": [
793
+ "submitted",
794
+ "working",
795
+ "input-required",
796
+ "completed",
797
+ "canceled",
798
+ "failed",
799
+ "rejected",
800
+ "auth-required",
801
+ "unknown"
802
+ ]
803
+ },
804
+ "external:core/error.json": {
805
+ "type": "object",
806
+ "properties": {
807
+ "code": {
808
+ "type": "string",
809
+ "minLength": 1,
810
+ "maxLength": 64
811
+ },
812
+ "message": {
813
+ "type": "string"
814
+ },
815
+ "field": {
816
+ "type": "string"
817
+ },
818
+ "suggestion": {
819
+ "type": "string"
820
+ },
821
+ "retry_after": {
822
+ "type": "number",
823
+ "minimum": 1,
824
+ "maximum": 3600
825
+ },
826
+ "issues": {
827
+ "type": "array",
828
+ "items": {
829
+ "type": "object",
830
+ "properties": {
831
+ "pointer": {
832
+ "type": "string"
833
+ },
834
+ "message": {
835
+ "type": "string"
836
+ },
837
+ "keyword": {
838
+ "type": "string"
839
+ },
840
+ "schemaPath": {
841
+ "type": "string"
842
+ },
843
+ "schema_id": {
844
+ "type": "string"
845
+ },
846
+ "discriminator": {
847
+ "type": "array",
848
+ "items": {
849
+ "type": "object",
850
+ "properties": {
851
+ "property_name": {
852
+ "type": "string"
853
+ },
854
+ "value": {
855
+ "type": [
856
+ "string",
857
+ "number",
858
+ "boolean",
859
+ "null"
860
+ ]
861
+ }
862
+ },
863
+ "required": [
864
+ "property_name",
865
+ "value"
866
+ ],
867
+ "additionalProperties": false
868
+ }
869
+ }
870
+ },
871
+ "required": [
872
+ "pointer",
873
+ "message",
874
+ "keyword"
875
+ ],
876
+ "additionalProperties": true
877
+ }
878
+ },
879
+ "details": {
880
+ "type": "object",
881
+ "additionalProperties": true
882
+ },
883
+ "recovery": {
884
+ "type": "string",
885
+ "enum": [
886
+ "transient",
887
+ "correctable",
888
+ "terminal"
889
+ ]
890
+ },
891
+ "source": {
892
+ "type": "string",
893
+ "enum": [
894
+ "producer",
895
+ "sdk"
896
+ ]
897
+ },
898
+ "sdk_id": {
899
+ "type": "string"
900
+ }
901
+ },
902
+ "required": [
903
+ "code",
904
+ "message"
905
+ ],
906
+ "additionalProperties": true
907
+ },
908
+ "external:core/push-notification-config.json": {
909
+ "type": "object",
910
+ "properties": {
911
+ "url": {
912
+ "type": "string",
913
+ "format": "uri"
914
+ },
915
+ "operation_id": {
916
+ "type": "string",
917
+ "minLength": 1,
918
+ "maxLength": 255,
919
+ "pattern": "^[A-Za-z0-9_.:-]{1,255}$"
920
+ },
921
+ "token": {
922
+ "type": "string",
923
+ "minLength": 16,
924
+ "maxLength": 4096
925
+ },
926
+ "authentication": {
927
+ "type": "object",
928
+ "deprecated": true,
929
+ "properties": {
930
+ "schemes": {
931
+ "type": "array",
932
+ "items": {
933
+ "$ref": "#/$defs/external:enums~1auth-scheme.json"
934
+ },
935
+ "minItems": 1,
936
+ "maxItems": 1
937
+ },
938
+ "credentials": {
939
+ "type": "string",
940
+ "minLength": 32
941
+ }
942
+ },
943
+ "required": [
944
+ "schemes",
945
+ "credentials"
946
+ ],
947
+ "additionalProperties": false
948
+ }
949
+ },
950
+ "required": [
951
+ "url"
952
+ ]
953
+ },
954
+ "external:enums/auth-scheme.json": {
955
+ "deprecated": true,
956
+ "type": "string",
957
+ "enum": [
958
+ "Bearer",
959
+ "HMAC-SHA256"
960
+ ]
961
+ },
962
+ "external:core/attribution-window.json": {
963
+ "type": "object",
964
+ "properties": {
965
+ "post_click": {
966
+ "allOf": [
967
+ {
968
+ "$ref": "#/$defs/external:core~1duration.json"
969
+ }
970
+ ]
971
+ },
972
+ "post_view": {
973
+ "allOf": [
974
+ {
975
+ "$ref": "#/$defs/external:core~1duration.json"
976
+ }
977
+ ]
978
+ },
979
+ "model": {
980
+ "$ref": "#/$defs/external:enums~1attribution-model.json"
981
+ }
982
+ },
983
+ "additionalProperties": true
984
+ },
985
+ "external:core/duration.json": {
986
+ "type": "object",
987
+ "properties": {
988
+ "interval": {
989
+ "type": "integer",
990
+ "minimum": 1
991
+ },
992
+ "unit": {
993
+ "type": "string",
994
+ "enum": [
995
+ "seconds",
996
+ "minutes",
997
+ "hours",
998
+ "days",
999
+ "campaign"
1000
+ ]
1001
+ }
1002
+ },
1003
+ "required": [
1004
+ "interval",
1005
+ "unit"
1006
+ ],
1007
+ "additionalProperties": false
1008
+ },
1009
+ "external:enums/attribution-model.json": {
1010
+ "type": "string",
1011
+ "enum": [
1012
+ "last_touch",
1013
+ "first_touch",
1014
+ "linear",
1015
+ "time_decay",
1016
+ "data_driven"
1017
+ ]
1018
+ },
1019
+ "external:enums/reach-unit.json": {
1020
+ "type": "string",
1021
+ "enum": [
1022
+ "individuals",
1023
+ "households",
1024
+ "devices",
1025
+ "accounts",
1026
+ "cookies",
1027
+ "custom"
1028
+ ]
1029
+ },
1030
+ "external:core/delivery-metric-aggregate.json": {
1031
+ "type": "object",
1032
+ "discriminator": {
1033
+ "propertyName": "scope"
1034
+ },
1035
+ "oneOf": [
1036
+ {
1037
+ "properties": {
1038
+ "scope": {
1039
+ "type": "string",
1040
+ "const": "standard"
1041
+ },
1042
+ "metric_id": {
1043
+ "$ref": "#/$defs/external:enums~1available-metric.json"
1044
+ },
1045
+ "qualifier": {
1046
+ "type": "object",
1047
+ "properties": {
1048
+ "viewability_standard": {
1049
+ "$ref": "#/$defs/external:enums~1viewability-standard.json"
1050
+ },
1051
+ "completion_source": {
1052
+ "$ref": "#/$defs/external:enums~1completion-source.json"
1053
+ },
1054
+ "attribution_methodology": {
1055
+ "$ref": "#/$defs/external:enums~1attribution-methodology.json"
1056
+ },
1057
+ "attribution_window": {
1058
+ "$ref": "#/$defs/external:core~1duration.json"
1059
+ },
1060
+ "lift_dimension": {
1061
+ "$ref": "#/$defs/external:enums~1lift-dimension.json"
1062
+ }
1063
+ },
1064
+ "additionalProperties": false
1065
+ },
1066
+ "value": {
1067
+ "type": "number"
1068
+ },
1069
+ "measurable_impressions": {
1070
+ "type": "number",
1071
+ "minimum": 0
1072
+ },
1073
+ "viewable_impressions": {
1074
+ "type": "number",
1075
+ "minimum": 0
1076
+ },
1077
+ "impressions": {
1078
+ "type": "number",
1079
+ "minimum": 0
1080
+ },
1081
+ "completed_views": {
1082
+ "type": "number",
1083
+ "minimum": 0
1084
+ },
1085
+ "spend": {
1086
+ "type": "number",
1087
+ "minimum": 0
1088
+ },
1089
+ "conversions": {
1090
+ "type": "number",
1091
+ "minimum": 0
1092
+ },
1093
+ "conversion_value": {
1094
+ "type": "number",
1095
+ "minimum": 0
1096
+ },
1097
+ "clicks": {
1098
+ "type": "number",
1099
+ "minimum": 0
1100
+ }
1101
+ },
1102
+ "required": [
1103
+ "scope",
1104
+ "metric_id",
1105
+ "value"
1106
+ ],
1107
+ "additionalProperties": false,
1108
+ "allOf": [
1109
+ {
1110
+ "if": {
1111
+ "properties": {
1112
+ "metric_id": {
1113
+ "const": "viewable_rate"
1114
+ }
1115
+ }
1116
+ },
1117
+ "then": {
1118
+ "required": [
1119
+ "measurable_impressions",
1120
+ "viewable_impressions"
1121
+ ]
1122
+ }
1123
+ },
1124
+ {
1125
+ "if": {
1126
+ "properties": {
1127
+ "metric_id": {
1128
+ "const": "completion_rate"
1129
+ }
1130
+ }
1131
+ },
1132
+ "then": {
1133
+ "required": [
1134
+ "impressions",
1135
+ "completed_views"
1136
+ ]
1137
+ }
1138
+ },
1139
+ {
1140
+ "if": {
1141
+ "properties": {
1142
+ "metric_id": {
1143
+ "const": "cost_per_acquisition"
1144
+ }
1145
+ }
1146
+ },
1147
+ "then": {
1148
+ "required": [
1149
+ "spend",
1150
+ "conversions"
1151
+ ]
1152
+ }
1153
+ },
1154
+ {
1155
+ "if": {
1156
+ "properties": {
1157
+ "metric_id": {
1158
+ "const": "roas"
1159
+ }
1160
+ }
1161
+ },
1162
+ "then": {
1163
+ "required": [
1164
+ "spend",
1165
+ "conversion_value"
1166
+ ]
1167
+ }
1168
+ }
1169
+ ]
1170
+ },
1171
+ {
1172
+ "properties": {
1173
+ "scope": {
1174
+ "type": "string",
1175
+ "const": "vendor"
1176
+ },
1177
+ "vendor": {
1178
+ "$ref": "#/$defs/external:core~1brand-ref.json"
1179
+ },
1180
+ "metric_id": {
1181
+ "$ref": "#/$defs/external:core~1vendor-metric-id.json"
1182
+ },
1183
+ "qualifier": {
1184
+ "type": "object",
1185
+ "additionalProperties": false
1186
+ },
1187
+ "value": {
1188
+ "type": "number"
1189
+ },
1190
+ "measurable_impressions": {
1191
+ "type": "number",
1192
+ "minimum": 0
1193
+ }
1194
+ },
1195
+ "required": [
1196
+ "scope",
1197
+ "vendor",
1198
+ "metric_id",
1199
+ "value"
1200
+ ],
1201
+ "additionalProperties": false
1202
+ }
1203
+ ]
1204
+ },
1205
+ "external:enums/available-metric.json": {
1206
+ "type": "string",
1207
+ "enum": [
1208
+ "impressions",
1209
+ "spend",
1210
+ "clicks",
1211
+ "ctr",
1212
+ "views",
1213
+ "completed_views",
1214
+ "completion_rate",
1215
+ "conversions",
1216
+ "conversion_value",
1217
+ "commissionable_value",
1218
+ "roas",
1219
+ "cost_per_acquisition",
1220
+ "new_to_brand_rate",
1221
+ "leads",
1222
+ "reach",
1223
+ "frequency",
1224
+ "grps",
1225
+ "engagements",
1226
+ "engagement_rate",
1227
+ "follows",
1228
+ "saves",
1229
+ "profile_visits",
1230
+ "viewability",
1231
+ "quartile_data",
1232
+ "dooh_metrics",
1233
+ "cost_per_click",
1234
+ "cost_per_completed_view",
1235
+ "cpm",
1236
+ "downloads",
1237
+ "units_sold",
1238
+ "new_to_brand_units",
1239
+ "plays",
1240
+ "incremental_sales_lift",
1241
+ "brand_lift",
1242
+ "foot_traffic",
1243
+ "conversion_lift",
1244
+ "brand_search_lift"
1245
+ ]
1246
+ },
1247
+ "external:enums/viewability-standard.json": {
1248
+ "type": "string",
1249
+ "enum": [
1250
+ "mrc",
1251
+ "groupm"
1252
+ ]
1253
+ },
1254
+ "external:enums/completion-source.json": {
1255
+ "type": "string",
1256
+ "enum": [
1257
+ "seller_attested",
1258
+ "vendor_attested"
1259
+ ]
1260
+ },
1261
+ "external:enums/attribution-methodology.json": {
1262
+ "type": "string",
1263
+ "enum": [
1264
+ "deterministic_purchase",
1265
+ "probabilistic",
1266
+ "panel_based",
1267
+ "modeled"
1268
+ ]
1269
+ },
1270
+ "external:enums/lift-dimension.json": {
1271
+ "type": "string",
1272
+ "enum": [
1273
+ "awareness",
1274
+ "consideration",
1275
+ "favorability",
1276
+ "purchase_intent",
1277
+ "ad_recall"
1278
+ ]
1279
+ },
1280
+ "external:core/brand-ref.json": {
1281
+ "type": "object",
1282
+ "properties": {
1283
+ "domain": {
1284
+ "type": "string",
1285
+ "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
1286
+ },
1287
+ "brand_id": {
1288
+ "$ref": "#/$defs/external:core~1brand-id.json"
1289
+ },
1290
+ "countries": {
1291
+ "type": "array",
1292
+ "items": {
1293
+ "type": "string",
1294
+ "pattern": "^[A-Z]{2}$"
1295
+ },
1296
+ "minItems": 1,
1297
+ "uniqueItems": true
1298
+ },
1299
+ "industries": {
1300
+ "type": "array",
1301
+ "items": {
1302
+ "type": "string"
1303
+ }
1304
+ },
1305
+ "data_subject_contestation": {
1306
+ "type": "object",
1307
+ "properties": {
1308
+ "url": {
1309
+ "type": "string",
1310
+ "format": "uri",
1311
+ "pattern": "^https://"
1312
+ },
1313
+ "email": {
1314
+ "type": "string",
1315
+ "format": "email"
1316
+ },
1317
+ "languages": {
1318
+ "type": "array",
1319
+ "items": {
1320
+ "type": "string"
1321
+ }
1322
+ }
1323
+ },
1324
+ "anyOf": [
1325
+ {
1326
+ "required": [
1327
+ "url"
1328
+ ]
1329
+ },
1330
+ {
1331
+ "required": [
1332
+ "email"
1333
+ ]
1334
+ }
1335
+ ],
1336
+ "additionalProperties": false
1337
+ },
1338
+ "brand_kit_override": {
1339
+ "type": "object",
1340
+ "properties": {
1341
+ "logo": {
1342
+ "$ref": "#/$defs/external:core~1assets~1image-asset.json"
1343
+ },
1344
+ "colors": {
1345
+ "type": "object",
1346
+ "properties": {
1347
+ "primary": {
1348
+ "type": "string",
1349
+ "pattern": "^#[0-9a-fA-F]{6}$"
1350
+ },
1351
+ "secondary": {
1352
+ "type": "string",
1353
+ "pattern": "^#[0-9a-fA-F]{6}$"
1354
+ },
1355
+ "accent": {
1356
+ "type": "string",
1357
+ "pattern": "^#[0-9a-fA-F]{6}$"
1358
+ }
1359
+ },
1360
+ "additionalProperties": true
1361
+ },
1362
+ "voice": {
1363
+ "type": "string"
1364
+ },
1365
+ "tagline": {
1366
+ "type": "string"
1367
+ }
1368
+ },
1369
+ "additionalProperties": true
1370
+ }
1371
+ },
1372
+ "required": [
1373
+ "domain"
1374
+ ],
1375
+ "additionalProperties": false
1376
+ },
1377
+ "external:core/brand-id.json": {
1378
+ "type": "string",
1379
+ "pattern": "^[a-z0-9_]+$",
1380
+ "x-entity": "advertiser_brand"
1381
+ },
1382
+ "external:core/assets/image-asset.json": {
1383
+ "type": "object",
1384
+ "properties": {
1385
+ "asset_type": {
1386
+ "type": "string",
1387
+ "const": "image"
1388
+ },
1389
+ "url": {
1390
+ "type": "string",
1391
+ "format": "uri"
1392
+ },
1393
+ "width": {
1394
+ "type": "integer",
1395
+ "minimum": 1
1396
+ },
1397
+ "height": {
1398
+ "type": "integer",
1399
+ "minimum": 1
1400
+ },
1401
+ "pixel_ratio": {
1402
+ "type": "number",
1403
+ "exclusiveMinimum": 0
1404
+ },
1405
+ "format": {
1406
+ "type": "string"
1407
+ },
1408
+ "alt_text": {
1409
+ "type": "string",
1410
+ "x-accessibility": true
1411
+ },
1412
+ "provenance": {
1413
+ "$ref": "#/$defs/external:core~1provenance.json"
1414
+ }
1415
+ },
1416
+ "required": [
1417
+ "asset_type",
1418
+ "url",
1419
+ "width",
1420
+ "height"
1421
+ ],
1422
+ "additionalProperties": true
1423
+ },
1424
+ "external:core/provenance.json": {
1425
+ "type": "object",
1426
+ "properties": {
1427
+ "digital_source_type": {
1428
+ "$ref": "#/$defs/external:enums~1digital-source-type.json"
1429
+ },
1430
+ "synthetic_depiction": {
1431
+ "type": "boolean"
1432
+ },
1433
+ "ai_tool": {
1434
+ "type": "object",
1435
+ "properties": {
1436
+ "name": {
1437
+ "type": "string"
1438
+ },
1439
+ "version": {
1440
+ "type": "string"
1441
+ },
1442
+ "provider": {
1443
+ "type": "string"
1444
+ }
1445
+ },
1446
+ "required": [
1447
+ "name"
1448
+ ]
1449
+ },
1450
+ "human_oversight": {
1451
+ "type": "string",
1452
+ "enum": [
1453
+ "none",
1454
+ "prompt_only",
1455
+ "selected",
1456
+ "edited",
1457
+ "directed"
1458
+ ]
1459
+ },
1460
+ "declared_by": {
1461
+ "type": "object",
1462
+ "properties": {
1463
+ "agent_url": {
1464
+ "type": "string",
1465
+ "format": "uri"
1466
+ },
1467
+ "role": {
1468
+ "type": "string",
1469
+ "enum": [
1470
+ "creator",
1471
+ "advertiser",
1472
+ "agency",
1473
+ "platform",
1474
+ "tool"
1475
+ ]
1476
+ }
1477
+ },
1478
+ "required": [
1479
+ "role"
1480
+ ]
1481
+ },
1482
+ "declared_at": {
1483
+ "type": "string",
1484
+ "format": "date-time"
1485
+ },
1486
+ "created_time": {
1487
+ "type": "string",
1488
+ "format": "date-time"
1489
+ },
1490
+ "c2pa": {
1491
+ "type": "object",
1492
+ "properties": {
1493
+ "manifest_url": {
1494
+ "type": "string",
1495
+ "format": "uri"
1496
+ }
1497
+ },
1498
+ "required": [
1499
+ "manifest_url"
1500
+ ]
1501
+ },
1502
+ "embedded_provenance": {
1503
+ "type": "array",
1504
+ "minItems": 1,
1505
+ "items": {
1506
+ "type": "object",
1507
+ "properties": {
1508
+ "method": {
1509
+ "$ref": "#/$defs/external:enums~1embedded-provenance-method.json"
1510
+ },
1511
+ "standard": {
1512
+ "type": "string"
1513
+ },
1514
+ "provider": {
1515
+ "type": "string"
1516
+ },
1517
+ "verify_agent": {
1518
+ "type": "object",
1519
+ "properties": {
1520
+ "agent_url": {
1521
+ "type": "string",
1522
+ "format": "uri",
1523
+ "pattern": "^https://"
1524
+ },
1525
+ "feature_id": {
1526
+ "type": "string"
1527
+ }
1528
+ },
1529
+ "required": [
1530
+ "agent_url"
1531
+ ],
1532
+ "additionalProperties": false
1533
+ },
1534
+ "embedded_at": {
1535
+ "type": "string",
1536
+ "format": "date-time"
1537
+ }
1538
+ },
1539
+ "required": [
1540
+ "method",
1541
+ "provider"
1542
+ ]
1543
+ }
1544
+ },
1545
+ "watermarks": {
1546
+ "type": "array",
1547
+ "minItems": 1,
1548
+ "items": {
1549
+ "type": "object",
1550
+ "properties": {
1551
+ "media_type": {
1552
+ "$ref": "#/$defs/external:enums~1watermark-media-type.json"
1553
+ },
1554
+ "provider": {
1555
+ "type": "string"
1556
+ },
1557
+ "verify_agent": {
1558
+ "type": "object",
1559
+ "properties": {
1560
+ "agent_url": {
1561
+ "type": "string",
1562
+ "format": "uri",
1563
+ "pattern": "^https://"
1564
+ },
1565
+ "feature_id": {
1566
+ "type": "string"
1567
+ }
1568
+ },
1569
+ "required": [
1570
+ "agent_url"
1571
+ ],
1572
+ "additionalProperties": false
1573
+ },
1574
+ "c2pa_action": {
1575
+ "$ref": "#/$defs/external:enums~1c2pa-watermark-action.json"
1576
+ },
1577
+ "embedded_at": {
1578
+ "type": "string",
1579
+ "format": "date-time"
1580
+ }
1581
+ },
1582
+ "required": [
1583
+ "media_type",
1584
+ "provider"
1585
+ ]
1586
+ }
1587
+ },
1588
+ "disclosure": {
1589
+ "type": "object",
1590
+ "properties": {
1591
+ "required": {
1592
+ "type": "boolean"
1593
+ },
1594
+ "jurisdictions": {
1595
+ "type": "array",
1596
+ "items": {
1597
+ "type": "object",
1598
+ "properties": {
1599
+ "country": {
1600
+ "type": "string"
1601
+ },
1602
+ "region": {
1603
+ "type": "string"
1604
+ },
1605
+ "regulation": {
1606
+ "type": "string"
1607
+ },
1608
+ "label_text": {
1609
+ "type": "string"
1610
+ },
1611
+ "render_guidance": {
1612
+ "type": "object",
1613
+ "minProperties": 1,
1614
+ "properties": {
1615
+ "persistence": {
1616
+ "$ref": "#/$defs/external:enums~1disclosure-persistence.json"
1617
+ },
1618
+ "min_duration_ms": {
1619
+ "type": "integer",
1620
+ "minimum": 1
1621
+ },
1622
+ "positions": {
1623
+ "type": "array",
1624
+ "items": {
1625
+ "$ref": "#/$defs/external:enums~1disclosure-position.json"
1626
+ },
1627
+ "minItems": 1,
1628
+ "uniqueItems": true
1629
+ },
1630
+ "ext": {
1631
+ "$ref": "#/$defs/external:core~1ext.json"
1632
+ }
1633
+ }
1634
+ }
1635
+ },
1636
+ "required": [
1637
+ "country",
1638
+ "regulation"
1639
+ ]
1640
+ },
1641
+ "minItems": 1
1642
+ }
1643
+ },
1644
+ "required": [
1645
+ "required"
1646
+ ]
1647
+ },
1648
+ "verification": {
1649
+ "type": "array",
1650
+ "minItems": 1,
1651
+ "items": {
1652
+ "type": "object",
1653
+ "properties": {
1654
+ "verified_by": {
1655
+ "type": "string"
1656
+ },
1657
+ "verified_time": {
1658
+ "type": "string",
1659
+ "format": "date-time"
1660
+ },
1661
+ "result": {
1662
+ "type": "string",
1663
+ "enum": [
1664
+ "authentic",
1665
+ "ai_generated",
1666
+ "ai_modified",
1667
+ "inconclusive"
1668
+ ]
1669
+ },
1670
+ "confidence": {
1671
+ "type": "number",
1672
+ "minimum": 0,
1673
+ "maximum": 1
1674
+ },
1675
+ "details_url": {
1676
+ "type": "string",
1677
+ "format": "uri"
1678
+ }
1679
+ },
1680
+ "required": [
1681
+ "verified_by",
1682
+ "result"
1683
+ ]
1684
+ }
1685
+ },
1686
+ "ext": {
1687
+ "$ref": "#/$defs/external:core~1ext.json"
1688
+ }
1689
+ }
1690
+ },
1691
+ "external:enums/digital-source-type.json": {
1692
+ "type": "string",
1693
+ "enum": [
1694
+ "digital_capture",
1695
+ "digital_creation",
1696
+ "trained_algorithmic_media",
1697
+ "composite_with_trained_algorithmic_media",
1698
+ "algorithmic_media",
1699
+ "composite_capture",
1700
+ "composite_synthetic",
1701
+ "human_edits",
1702
+ "data_driven_media"
1703
+ ]
1704
+ },
1705
+ "external:enums/embedded-provenance-method.json": {
1706
+ "type": "string",
1707
+ "enum": [
1708
+ "manifest_wrapper",
1709
+ "provenance_markers"
1710
+ ]
1711
+ },
1712
+ "external:enums/watermark-media-type.json": {
1713
+ "type": "string",
1714
+ "enum": [
1715
+ "audio",
1716
+ "image",
1717
+ "video",
1718
+ "text"
1719
+ ]
1720
+ },
1721
+ "external:enums/c2pa-watermark-action.json": {
1722
+ "type": "string",
1723
+ "enum": [
1724
+ "c2pa.watermarked.bound",
1725
+ "c2pa.watermarked.unbound"
1726
+ ]
1727
+ },
1728
+ "external:enums/disclosure-persistence.json": {
1729
+ "type": "string",
1730
+ "enum": [
1731
+ "continuous",
1732
+ "initial",
1733
+ "flexible"
1734
+ ]
1735
+ },
1736
+ "external:enums/disclosure-position.json": {
1737
+ "type": "string",
1738
+ "enum": [
1739
+ "prominent",
1740
+ "footer",
1741
+ "audio",
1742
+ "subtitle",
1743
+ "overlay",
1744
+ "end_card",
1745
+ "pre_roll",
1746
+ "companion"
1747
+ ]
1748
+ },
1749
+ "external:core/ext.json": {
1750
+ "type": "object",
1751
+ "additionalProperties": true
1752
+ },
1753
+ "external:core/vendor-metric-id.json": {
1754
+ "type": "string",
1755
+ "x-entity": "vendor_metric",
1756
+ "minLength": 1,
1757
+ "maxLength": 64,
1758
+ "pattern": "^[a-z][a-z0-9_]*$"
1759
+ },
1760
+ "external:enums/pricing-model.json": {
1761
+ "type": "string",
1762
+ "enum": [
1763
+ "cpm",
1764
+ "vcpm",
1765
+ "cpc",
1766
+ "cpcv",
1767
+ "cpv",
1768
+ "cpp",
1769
+ "cpa",
1770
+ "revenue_share",
1771
+ "flat_rate",
1772
+ "time"
1773
+ ]
1774
+ },
1775
+ "external:core/delivery-metrics.json": {
1776
+ "type": "object",
1777
+ "properties": {
1778
+ "impressions": {
1779
+ "type": "number",
1780
+ "minimum": 0
1781
+ },
1782
+ "spend": {
1783
+ "type": "number",
1784
+ "minimum": 0
1785
+ },
1786
+ "clicks": {
1787
+ "type": "number",
1788
+ "minimum": 0
1789
+ },
1790
+ "ctr": {
1791
+ "type": "number",
1792
+ "minimum": 0,
1793
+ "maximum": 1
1794
+ },
1795
+ "views": {
1796
+ "type": "number",
1797
+ "minimum": 0
1798
+ },
1799
+ "completed_views": {
1800
+ "type": "number",
1801
+ "minimum": 0
1802
+ },
1803
+ "completion_rate": {
1804
+ "type": [
1805
+ "number",
1806
+ "null"
1807
+ ],
1808
+ "minimum": 0,
1809
+ "maximum": 1
1810
+ },
1811
+ "conversions": {
1812
+ "type": "number",
1813
+ "minimum": 0
1814
+ },
1815
+ "conversion_value": {
1816
+ "type": "number",
1817
+ "minimum": 0
1818
+ },
1819
+ "commissionable_value": {
1820
+ "type": "number",
1821
+ "minimum": 0
1822
+ },
1823
+ "roas": {
1824
+ "type": "number",
1825
+ "minimum": 0
1826
+ },
1827
+ "cost_per_acquisition": {
1828
+ "type": "number",
1829
+ "minimum": 0
1830
+ },
1831
+ "new_to_brand_rate": {
1832
+ "type": "number",
1833
+ "minimum": 0,
1834
+ "maximum": 1
1835
+ },
1836
+ "leads": {
1837
+ "type": "number",
1838
+ "minimum": 0
1839
+ },
1840
+ "incremental_sales_lift": {
1841
+ "type": "number",
1842
+ "minimum": 0
1843
+ },
1844
+ "brand_lift": {
1845
+ "type": "number",
1846
+ "minimum": 0
1847
+ },
1848
+ "foot_traffic": {
1849
+ "type": "number",
1850
+ "minimum": 0
1851
+ },
1852
+ "conversion_lift": {
1853
+ "type": "number",
1854
+ "minimum": 0
1855
+ },
1856
+ "brand_search_lift": {
1857
+ "type": "number",
1858
+ "minimum": 0
1859
+ },
1860
+ "plays": {
1861
+ "type": "number",
1862
+ "minimum": 0
1863
+ },
1864
+ "by_event_type": {
1865
+ "type": "array",
1866
+ "items": {
1867
+ "type": "object",
1868
+ "properties": {
1869
+ "event_type": {
1870
+ "$ref": "#/$defs/external:enums~1event-type.json"
1871
+ },
1872
+ "event_source_id": {
1873
+ "type": "string"
1874
+ },
1875
+ "count": {
1876
+ "type": "number",
1877
+ "minimum": 0
1878
+ },
1879
+ "value": {
1880
+ "type": "number",
1881
+ "minimum": 0
1882
+ }
1883
+ },
1884
+ "required": [
1885
+ "event_type",
1886
+ "count"
1887
+ ],
1888
+ "additionalProperties": true
1889
+ }
1890
+ },
1891
+ "grps": {
1892
+ "type": "number",
1893
+ "minimum": 0
1894
+ },
1895
+ "reach": {
1896
+ "type": "number",
1897
+ "minimum": 0
1898
+ },
1899
+ "reach_unit": {
1900
+ "allOf": [
1901
+ {
1902
+ "$ref": "#/$defs/external:enums~1reach-unit.json"
1903
+ }
1904
+ ]
1905
+ },
1906
+ "reach_window": {
1907
+ "type": "object",
1908
+ "properties": {
1909
+ "kind": {
1910
+ "type": "string",
1911
+ "enum": [
1912
+ "cumulative",
1913
+ "period",
1914
+ "rolling"
1915
+ ]
1916
+ },
1917
+ "period": {
1918
+ "allOf": [
1919
+ {
1920
+ "$ref": "#/$defs/external:core~1duration.json"
1921
+ }
1922
+ ]
1923
+ }
1924
+ },
1925
+ "required": [
1926
+ "kind"
1927
+ ],
1928
+ "allOf": [
1929
+ {
1930
+ "if": {
1931
+ "properties": {
1932
+ "kind": {
1933
+ "enum": [
1934
+ "period",
1935
+ "rolling"
1936
+ ]
1937
+ }
1938
+ },
1939
+ "required": [
1940
+ "kind"
1941
+ ]
1942
+ },
1943
+ "then": {
1944
+ "required": [
1945
+ "period"
1946
+ ]
1947
+ }
1948
+ }
1949
+ ],
1950
+ "additionalProperties": true
1951
+ },
1952
+ "frequency": {
1953
+ "type": "number",
1954
+ "minimum": 0
1955
+ },
1956
+ "quartile_data": {
1957
+ "type": [
1958
+ "object",
1959
+ "null"
1960
+ ],
1961
+ "properties": {
1962
+ "q1_views": {
1963
+ "type": "number",
1964
+ "minimum": 0
1965
+ },
1966
+ "q2_views": {
1967
+ "type": "number",
1968
+ "minimum": 0
1969
+ },
1970
+ "q3_views": {
1971
+ "type": "number",
1972
+ "minimum": 0
1973
+ },
1974
+ "q4_views": {
1975
+ "type": "number",
1976
+ "minimum": 0
1977
+ }
1978
+ }
1979
+ },
1980
+ "dooh_metrics": {
1981
+ "type": "object",
1982
+ "properties": {
1983
+ "loop_plays": {
1984
+ "type": "integer",
1985
+ "minimum": 0
1986
+ },
1987
+ "screens_used": {
1988
+ "type": "integer",
1989
+ "minimum": 0
1990
+ },
1991
+ "screen_time_seconds": {
1992
+ "type": "integer",
1993
+ "minimum": 0
1994
+ },
1995
+ "sov_achieved": {
1996
+ "type": "number",
1997
+ "minimum": 0,
1998
+ "maximum": 1
1999
+ },
2000
+ "calculation_notes": {
2001
+ "type": "string"
2002
+ },
2003
+ "venue_breakdown": {
2004
+ "type": "array",
2005
+ "items": {
2006
+ "type": "object",
2007
+ "properties": {
2008
+ "venue_id": {
2009
+ "type": "string"
2010
+ },
2011
+ "venue_name": {
2012
+ "type": "string"
2013
+ },
2014
+ "venue_type": {
2015
+ "type": "string"
2016
+ },
2017
+ "impressions": {
2018
+ "type": "integer",
2019
+ "minimum": 0
2020
+ },
2021
+ "loop_plays": {
2022
+ "type": "integer",
2023
+ "minimum": 0
2024
+ },
2025
+ "screens_used": {
2026
+ "type": "integer",
2027
+ "minimum": 0
2028
+ }
2029
+ },
2030
+ "required": [
2031
+ "venue_id",
2032
+ "impressions"
2033
+ ],
2034
+ "additionalProperties": true
2035
+ }
2036
+ }
2037
+ },
2038
+ "additionalProperties": true
2039
+ },
2040
+ "viewability": {
2041
+ "type": "object",
2042
+ "properties": {
2043
+ "vendor": {
2044
+ "$ref": "#/$defs/external:core~1brand-ref.json"
2045
+ },
2046
+ "measurable_impressions": {
2047
+ "type": "number",
2048
+ "minimum": 0
2049
+ },
2050
+ "viewable_impressions": {
2051
+ "type": "number",
2052
+ "minimum": 0
2053
+ },
2054
+ "viewable_rate": {
2055
+ "type": "number",
2056
+ "minimum": 0,
2057
+ "maximum": 1
2058
+ },
2059
+ "viewed_seconds": {
2060
+ "type": "number",
2061
+ "minimum": 0
2062
+ },
2063
+ "standard": {
2064
+ "$ref": "#/$defs/external:enums~1viewability-standard.json"
2065
+ }
2066
+ },
2067
+ "additionalProperties": true
2068
+ },
2069
+ "engagements": {
2070
+ "type": "number",
2071
+ "minimum": 0
2072
+ },
2073
+ "follows": {
2074
+ "type": "number",
2075
+ "minimum": 0
2076
+ },
2077
+ "saves": {
2078
+ "type": "number",
2079
+ "minimum": 0
2080
+ },
2081
+ "profile_visits": {
2082
+ "type": "number",
2083
+ "minimum": 0
2084
+ },
2085
+ "engagement_rate": {
2086
+ "type": "number",
2087
+ "minimum": 0,
2088
+ "maximum": 1
2089
+ },
2090
+ "cost_per_click": {
2091
+ "type": "number",
2092
+ "minimum": 0
2093
+ },
2094
+ "cost_per_completed_view": {
2095
+ "type": "number",
2096
+ "minimum": 0
2097
+ },
2098
+ "cpm": {
2099
+ "type": "number",
2100
+ "minimum": 0
2101
+ },
2102
+ "downloads": {
2103
+ "type": "number",
2104
+ "minimum": 0
2105
+ },
2106
+ "units_sold": {
2107
+ "type": "number",
2108
+ "minimum": 0
2109
+ },
2110
+ "new_to_brand_units": {
2111
+ "type": "number",
2112
+ "minimum": 0
2113
+ },
2114
+ "by_action_source": {
2115
+ "type": "array",
2116
+ "items": {
2117
+ "type": "object",
2118
+ "properties": {
2119
+ "action_source": {
2120
+ "$ref": "#/$defs/external:enums~1action-source.json"
2121
+ },
2122
+ "event_source_id": {
2123
+ "type": "string"
2124
+ },
2125
+ "count": {
2126
+ "type": "number",
2127
+ "minimum": 0
2128
+ },
2129
+ "value": {
2130
+ "type": "number",
2131
+ "minimum": 0
2132
+ }
2133
+ },
2134
+ "required": [
2135
+ "action_source",
2136
+ "count"
2137
+ ],
2138
+ "additionalProperties": true
2139
+ }
2140
+ },
2141
+ "vendor_metric_values": {
2142
+ "type": "array",
2143
+ "items": {
2144
+ "$ref": "#/$defs/external:core~1vendor-metric-value.json"
2145
+ }
2146
+ }
2147
+ },
2148
+ "additionalProperties": true,
2149
+ "dependentRequired": {
2150
+ "reach": [
2151
+ "reach_unit"
2152
+ ]
2153
+ }
2154
+ },
2155
+ "external:enums/event-type.json": {
2156
+ "type": "string",
2157
+ "enum": [
2158
+ "page_view",
2159
+ "view_content",
2160
+ "select_content",
2161
+ "select_item",
2162
+ "search",
2163
+ "share",
2164
+ "add_to_cart",
2165
+ "remove_from_cart",
2166
+ "viewed_cart",
2167
+ "add_to_wishlist",
2168
+ "initiate_checkout",
2169
+ "add_payment_info",
2170
+ "purchase",
2171
+ "refund",
2172
+ "lead",
2173
+ "qualify_lead",
2174
+ "close_convert_lead",
2175
+ "disqualify_lead",
2176
+ "complete_registration",
2177
+ "subscribe",
2178
+ "follow",
2179
+ "content_view",
2180
+ "watch_milestone",
2181
+ "start_trial",
2182
+ "app_install",
2183
+ "app_launch",
2184
+ "contact",
2185
+ "schedule",
2186
+ "donate",
2187
+ "submit_application",
2188
+ "custom"
2189
+ ]
2190
+ },
2191
+ "external:enums/action-source.json": {
2192
+ "type": "string",
2193
+ "enum": [
2194
+ "website",
2195
+ "app",
2196
+ "offline",
2197
+ "phone_call",
2198
+ "chat",
2199
+ "email",
2200
+ "in_store",
2201
+ "system_generated",
2202
+ "other"
2203
+ ]
2204
+ },
2205
+ "external:core/vendor-metric-value.json": {
2206
+ "type": "object",
2207
+ "properties": {
2208
+ "vendor": {
2209
+ "$ref": "#/$defs/external:core~1brand-ref.json"
2210
+ },
2211
+ "metric_id": {
2212
+ "$ref": "#/$defs/external:core~1vendor-metric-id.json"
2213
+ },
2214
+ "value": {
2215
+ "type": "number"
2216
+ },
2217
+ "unit": {
2218
+ "type": "string"
2219
+ },
2220
+ "measurable_impressions": {
2221
+ "type": "number",
2222
+ "minimum": 0
2223
+ },
2224
+ "breakdown": {
2225
+ "type": "object",
2226
+ "x-adcp-open-payload": true,
2227
+ "additionalProperties": true
2228
+ }
2229
+ },
2230
+ "required": [
2231
+ "vendor",
2232
+ "metric_id",
2233
+ "value"
2234
+ ],
2235
+ "additionalProperties": false
2236
+ },
2237
+ "external:enums/delivery-status.json": {
2238
+ "type": "string",
2239
+ "enum": [
2240
+ "delivering",
2241
+ "not_delivering",
2242
+ "completed",
2243
+ "budget_exhausted",
2244
+ "flight_ended",
2245
+ "goal_met"
2246
+ ]
2247
+ },
2248
+ "external:core/missing-metric.json": {
2249
+ "type": "object",
2250
+ "discriminator": {
2251
+ "propertyName": "scope"
2252
+ },
2253
+ "oneOf": [
2254
+ {
2255
+ "properties": {
2256
+ "scope": {
2257
+ "type": "string",
2258
+ "const": "standard"
2259
+ },
2260
+ "metric_id": {
2261
+ "$ref": "#/$defs/external:enums~1available-metric.json"
2262
+ },
2263
+ "qualifier": {
2264
+ "type": "object",
2265
+ "properties": {
2266
+ "viewability_standard": {
2267
+ "$ref": "#/$defs/external:enums~1viewability-standard.json"
2268
+ },
2269
+ "completion_source": {
2270
+ "$ref": "#/$defs/external:enums~1completion-source.json"
2271
+ },
2272
+ "attribution_methodology": {
2273
+ "$ref": "#/$defs/external:enums~1attribution-methodology.json"
2274
+ },
2275
+ "attribution_window": {
2276
+ "$ref": "#/$defs/external:core~1duration.json"
2277
+ },
2278
+ "lift_dimension": {
2279
+ "$ref": "#/$defs/external:enums~1lift-dimension.json"
2280
+ }
2281
+ },
2282
+ "additionalProperties": false
2283
+ }
2284
+ },
2285
+ "required": [
2286
+ "scope",
2287
+ "metric_id"
2288
+ ],
2289
+ "additionalProperties": false
2290
+ },
2291
+ {
2292
+ "properties": {
2293
+ "scope": {
2294
+ "type": "string",
2295
+ "const": "vendor"
2296
+ },
2297
+ "vendor": {
2298
+ "$ref": "#/$defs/external:core~1brand-ref.json"
2299
+ },
2300
+ "metric_id": {
2301
+ "$ref": "#/$defs/external:core~1vendor-metric-id.json"
2302
+ }
2303
+ },
2304
+ "required": [
2305
+ "scope",
2306
+ "vendor",
2307
+ "metric_id"
2308
+ ],
2309
+ "additionalProperties": false
2310
+ }
2311
+ ]
2312
+ },
2313
+ "external:core/catalog-item-delivery-metrics.json": {
2314
+ "allOf": [
2315
+ {
2316
+ "$ref": "#/$defs/external:core~1delivery-metrics.json"
2317
+ },
2318
+ {
2319
+ "type": "object",
2320
+ "properties": {
2321
+ "content_id": {
2322
+ "type": "string"
2323
+ },
2324
+ "content_id_type": {
2325
+ "$ref": "#/$defs/external:enums~1content-id-type.json"
2326
+ }
2327
+ },
2328
+ "required": [
2329
+ "content_id",
2330
+ "impressions",
2331
+ "spend"
2332
+ ]
2333
+ }
2334
+ ]
2335
+ },
2336
+ "external:enums/content-id-type.json": {
2337
+ "type": "string",
2338
+ "enum": [
2339
+ "sku",
2340
+ "gtin",
2341
+ "offering_id",
2342
+ "job_id",
2343
+ "hotel_id",
2344
+ "flight_id",
2345
+ "vehicle_id",
2346
+ "listing_id",
2347
+ "store_id",
2348
+ "program_id",
2349
+ "destination_id",
2350
+ "app_id"
2351
+ ]
2352
+ },
2353
+ "external:core/creative-delivery-metrics.json": {
2354
+ "allOf": [
2355
+ {
2356
+ "$ref": "#/$defs/external:core~1delivery-metrics.json"
2357
+ },
2358
+ {
2359
+ "type": "object",
2360
+ "properties": {
2361
+ "creative_id": {
2362
+ "type": "string",
2363
+ "x-entity": "creative"
2364
+ },
2365
+ "weight": {
2366
+ "type": "number",
2367
+ "minimum": 0,
2368
+ "maximum": 100
2369
+ }
2370
+ },
2371
+ "required": [
2372
+ "creative_id",
2373
+ "impressions",
2374
+ "spend"
2375
+ ]
2376
+ }
2377
+ ]
2378
+ },
2379
+ "external:core/keyword-delivery-metrics.json": {
2380
+ "allOf": [
2381
+ {
2382
+ "$ref": "#/$defs/external:core~1delivery-metrics.json"
2383
+ },
2384
+ {
2385
+ "type": "object",
2386
+ "properties": {
2387
+ "keyword": {
2388
+ "type": "string"
2389
+ },
2390
+ "match_type": {
2391
+ "$ref": "#/$defs/external:enums~1match-type.json"
2392
+ }
2393
+ },
2394
+ "required": [
2395
+ "keyword",
2396
+ "match_type",
2397
+ "impressions",
2398
+ "spend"
2399
+ ]
2400
+ }
2401
+ ]
2402
+ },
2403
+ "external:enums/match-type.json": {
2404
+ "type": "string",
2405
+ "enum": [
2406
+ "broad",
2407
+ "phrase",
2408
+ "exact"
2409
+ ]
2410
+ },
2411
+ "external:core/geo-delivery-metrics.json": {
2412
+ "allOf": [
2413
+ {
2414
+ "$ref": "#/$defs/external:core~1delivery-metrics.json"
2415
+ },
2416
+ {
2417
+ "type": "object",
2418
+ "properties": {
2419
+ "geo_level": {
2420
+ "$ref": "#/$defs/external:enums~1geo-level.json"
2421
+ },
2422
+ "system": {
2423
+ "type": "string"
2424
+ },
2425
+ "country": {
2426
+ "type": "string",
2427
+ "pattern": "^[A-Z]{2}$"
2428
+ },
2429
+ "geo_code": {
2430
+ "type": "string"
2431
+ },
2432
+ "geo_name": {
2433
+ "type": "string"
2434
+ }
2435
+ },
2436
+ "required": [
2437
+ "geo_level",
2438
+ "geo_code",
2439
+ "impressions",
2440
+ "spend"
2441
+ ],
2442
+ "allOf": [
2443
+ {
2444
+ "if": {
2445
+ "properties": {
2446
+ "geo_level": {
2447
+ "const": "country"
2448
+ }
2449
+ },
2450
+ "required": [
2451
+ "geo_level"
2452
+ ]
2453
+ },
2454
+ "then": {
2455
+ "not": {
2456
+ "anyOf": [
2457
+ {
2458
+ "required": [
2459
+ "system"
2460
+ ]
2461
+ },
2462
+ {
2463
+ "required": [
2464
+ "country"
2465
+ ]
2466
+ }
2467
+ ]
2468
+ }
2469
+ }
2470
+ },
2471
+ {
2472
+ "if": {
2473
+ "properties": {
2474
+ "geo_level": {
2475
+ "const": "region"
2476
+ }
2477
+ },
2478
+ "required": [
2479
+ "geo_level"
2480
+ ]
2481
+ },
2482
+ "then": {
2483
+ "not": {
2484
+ "anyOf": [
2485
+ {
2486
+ "required": [
2487
+ "system"
2488
+ ]
2489
+ },
2490
+ {
2491
+ "required": [
2492
+ "country"
2493
+ ]
2494
+ }
2495
+ ]
2496
+ }
2497
+ }
2498
+ },
2499
+ {
2500
+ "if": {
2501
+ "properties": {
2502
+ "geo_level": {
2503
+ "const": "metro"
2504
+ }
2505
+ },
2506
+ "required": [
2507
+ "geo_level"
2508
+ ]
2509
+ },
2510
+ "then": {
2511
+ "properties": {
2512
+ "system": {
2513
+ "$ref": "#/$defs/external:enums~1metro-system.json"
2514
+ }
2515
+ },
2516
+ "required": [
2517
+ "system"
2518
+ ],
2519
+ "not": {
2520
+ "required": [
2521
+ "country"
2522
+ ]
2523
+ }
2524
+ }
2525
+ },
2526
+ {
2527
+ "if": {
2528
+ "properties": {
2529
+ "geo_level": {
2530
+ "const": "postal_area"
2531
+ }
2532
+ },
2533
+ "required": [
2534
+ "geo_level"
2535
+ ]
2536
+ },
2537
+ "then": {
2538
+ "anyOf": [
2539
+ {
2540
+ "$ref": "#/$defs/external:core~1postal-country-system.json"
2541
+ },
2542
+ {
2543
+ "properties": {
2544
+ "system": {
2545
+ "$ref": "#/$defs/external:enums~1legacy-postal-system.json"
2546
+ }
2547
+ },
2548
+ "required": [
2549
+ "system"
2550
+ ],
2551
+ "not": {
2552
+ "required": [
2553
+ "country"
2554
+ ]
2555
+ }
2556
+ }
2557
+ ]
2558
+ }
2559
+ }
2560
+ ]
2561
+ }
2562
+ ]
2563
+ },
2564
+ "external:enums/geo-level.json": {
2565
+ "type": "string",
2566
+ "enum": [
2567
+ "country",
2568
+ "region",
2569
+ "metro",
2570
+ "postal_area"
2571
+ ]
2572
+ },
2573
+ "external:enums/metro-system.json": {
2574
+ "type": "string",
2575
+ "enum": [
2576
+ "nielsen_dma",
2577
+ "uk_itl1",
2578
+ "uk_itl2",
2579
+ "eurostat_nuts2",
2580
+ "custom"
2581
+ ]
2582
+ },
2583
+ "external:core/postal-country-system.json": {
2584
+ "type": "object",
2585
+ "properties": {
2586
+ "country": {
2587
+ "type": "string",
2588
+ "pattern": "^[A-Z]{2}$"
2589
+ },
2590
+ "system": {
2591
+ "$ref": "#/$defs/external:enums~1postal-system.json"
2592
+ }
2593
+ },
2594
+ "required": [
2595
+ "country",
2596
+ "system"
2597
+ ],
2598
+ "anyOf": [
2599
+ {
2600
+ "properties": {
2601
+ "country": {
2602
+ "const": "US"
2603
+ },
2604
+ "system": {
2605
+ "enum": [
2606
+ "zip",
2607
+ "zip_plus_four"
2608
+ ]
2609
+ }
2610
+ }
2611
+ },
2612
+ {
2613
+ "properties": {
2614
+ "country": {
2615
+ "const": "GB"
2616
+ },
2617
+ "system": {
2618
+ "enum": [
2619
+ "outward",
2620
+ "full"
2621
+ ]
2622
+ }
2623
+ }
2624
+ },
2625
+ {
2626
+ "properties": {
2627
+ "country": {
2628
+ "const": "CA"
2629
+ },
2630
+ "system": {
2631
+ "enum": [
2632
+ "fsa",
2633
+ "full"
2634
+ ]
2635
+ }
2636
+ }
2637
+ },
2638
+ {
2639
+ "properties": {
2640
+ "country": {
2641
+ "enum": [
2642
+ "DE",
2643
+ "CH",
2644
+ "AT"
2645
+ ]
2646
+ },
2647
+ "system": {
2648
+ "const": "plz"
2649
+ }
2650
+ }
2651
+ },
2652
+ {
2653
+ "properties": {
2654
+ "country": {
2655
+ "const": "FR"
2656
+ },
2657
+ "system": {
2658
+ "const": "code_postal"
2659
+ }
2660
+ }
2661
+ },
2662
+ {
2663
+ "properties": {
2664
+ "country": {
2665
+ "const": "AU"
2666
+ },
2667
+ "system": {
2668
+ "const": "postcode"
2669
+ }
2670
+ }
2671
+ },
2672
+ {
2673
+ "properties": {
2674
+ "country": {
2675
+ "const": "BR"
2676
+ },
2677
+ "system": {
2678
+ "const": "cep"
2679
+ }
2680
+ }
2681
+ },
2682
+ {
2683
+ "properties": {
2684
+ "country": {
2685
+ "const": "IN"
2686
+ },
2687
+ "system": {
2688
+ "const": "pin"
2689
+ }
2690
+ }
2691
+ },
2692
+ {
2693
+ "properties": {
2694
+ "country": {
2695
+ "const": "ZA"
2696
+ },
2697
+ "system": {
2698
+ "const": "postal_code"
2699
+ }
2700
+ }
2701
+ },
2702
+ {
2703
+ "properties": {
2704
+ "country": {
2705
+ "not": {
2706
+ "enum": [
2707
+ "US",
2708
+ "GB",
2709
+ "CA",
2710
+ "DE",
2711
+ "CH",
2712
+ "AT",
2713
+ "FR",
2714
+ "AU",
2715
+ "BR",
2716
+ "IN",
2717
+ "ZA"
2718
+ ]
2719
+ }
2720
+ },
2721
+ "system": {
2722
+ "enum": [
2723
+ "postal_code",
2724
+ "custom"
2725
+ ]
2726
+ }
2727
+ }
2728
+ }
2729
+ ]
2730
+ },
2731
+ "external:enums/postal-system.json": {
2732
+ "type": "string",
2733
+ "enum": [
2734
+ "postal_code",
2735
+ "zip",
2736
+ "zip_plus_four",
2737
+ "outward",
2738
+ "full",
2739
+ "fsa",
2740
+ "plz",
2741
+ "code_postal",
2742
+ "postcode",
2743
+ "cep",
2744
+ "pin",
2745
+ "custom",
2746
+ "us_zip",
2747
+ "us_zip_plus_four",
2748
+ "gb_outward",
2749
+ "gb_full",
2750
+ "ca_fsa",
2751
+ "ca_full",
2752
+ "de_plz",
2753
+ "fr_code_postal",
2754
+ "au_postcode",
2755
+ "ch_plz",
2756
+ "at_plz"
2757
+ ]
2758
+ },
2759
+ "external:enums/legacy-postal-system.json": {
2760
+ "type": "string",
2761
+ "deprecated": true,
2762
+ "enum": [
2763
+ "us_zip",
2764
+ "us_zip_plus_four",
2765
+ "gb_outward",
2766
+ "gb_full",
2767
+ "ca_fsa",
2768
+ "ca_full",
2769
+ "de_plz",
2770
+ "fr_code_postal",
2771
+ "au_postcode",
2772
+ "ch_plz",
2773
+ "at_plz"
2774
+ ]
2775
+ },
2776
+ "external:enums/device-type.json": {
2777
+ "type": "string",
2778
+ "enum": [
2779
+ "desktop",
2780
+ "mobile",
2781
+ "tablet",
2782
+ "ctv",
2783
+ "dooh",
2784
+ "unknown"
2785
+ ]
2786
+ },
2787
+ "external:enums/device-platform.json": {
2788
+ "type": "string",
2789
+ "enum": [
2790
+ "ios",
2791
+ "android",
2792
+ "windows",
2793
+ "macos",
2794
+ "linux",
2795
+ "chromeos",
2796
+ "tvos",
2797
+ "tizen",
2798
+ "webos",
2799
+ "fire_os",
2800
+ "roku_os",
2801
+ "unknown"
2802
+ ]
2803
+ },
2804
+ "external:enums/audience-source.json": {
2805
+ "type": "string",
2806
+ "enum": [
2807
+ "synced",
2808
+ "platform",
2809
+ "third_party",
2810
+ "lookalike",
2811
+ "retargeting",
2812
+ "unknown"
2813
+ ]
2814
+ },
2815
+ "external:enums/demographic-system.json": {
2816
+ "type": "string",
2817
+ "enum": [
2818
+ "nielsen",
2819
+ "barb",
2820
+ "agf",
2821
+ "oztam",
2822
+ "mediametrie",
2823
+ "custom"
2824
+ ]
2825
+ },
2826
+ "external:core/demographic-age-range.json": {
2827
+ "type": "object",
2828
+ "properties": {
2829
+ "min": {
2830
+ "type": "integer",
2831
+ "minimum": 0,
2832
+ "maximum": 150
2833
+ },
2834
+ "max": {
2835
+ "type": "integer",
2836
+ "minimum": 0,
2837
+ "maximum": 150
2838
+ },
2839
+ "include_unknown": {
2840
+ "type": "boolean"
2841
+ }
2842
+ },
2843
+ "required": [
2844
+ "include_unknown"
2845
+ ],
2846
+ "anyOf": [
2847
+ {
2848
+ "required": [
2849
+ "min"
2850
+ ]
2851
+ },
2852
+ {
2853
+ "required": [
2854
+ "max"
2855
+ ]
2856
+ }
2857
+ ],
2858
+ "additionalProperties": true
2859
+ }
2860
+ }
2861
+ }