adcp 2.18.0__py3-none-any.whl → 3.0.0__py3-none-any.whl

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 (245) hide show
  1. adcp/ADCP_VERSION +1 -1
  2. adcp/__init__.py +6 -14
  3. adcp/__main__.py +94 -51
  4. adcp/adagents.py +91 -19
  5. adcp/client.py +865 -0
  6. adcp/protocols/a2a.py +84 -0
  7. adcp/protocols/base.py +101 -0
  8. adcp/protocols/mcp.py +87 -1
  9. adcp/server/__init__.py +49 -0
  10. adcp/server/base.py +368 -0
  11. adcp/server/content_standards.py +561 -0
  12. adcp/server/governance.py +491 -0
  13. adcp/server/mcp_tools.py +471 -0
  14. adcp/server/proposal.py +334 -0
  15. adcp/server/sponsored_intelligence.py +444 -0
  16. adcp/types/__init__.py +111 -23
  17. adcp/types/_ergonomic.py +35 -18
  18. adcp/types/_generated.py +419 -44
  19. adcp/types/aliases.py +13 -20
  20. adcp/types/base.py +1 -1
  21. adcp/types/generated_poc/adagents.py +103 -6
  22. adcp/types/generated_poc/content_standards/__init__.py +3 -0
  23. adcp/types/generated_poc/content_standards/artifact.py +208 -0
  24. adcp/types/generated_poc/content_standards/artifact_webhook_payload.py +64 -0
  25. adcp/types/generated_poc/content_standards/calibrate_content_request.py +17 -0
  26. adcp/types/generated_poc/content_standards/calibrate_content_response.py +74 -0
  27. adcp/types/generated_poc/content_standards/content_standards.py +66 -0
  28. adcp/types/generated_poc/content_standards/create_content_standards_request.py +97 -0
  29. adcp/types/generated_poc/content_standards/create_content_standards_response.py +52 -0
  30. adcp/types/generated_poc/content_standards/get_content_standards_request.py +21 -0
  31. adcp/types/generated_poc/content_standards/get_content_standards_response.py +43 -0
  32. adcp/types/generated_poc/content_standards/get_media_buy_artifacts_request.py +64 -0
  33. adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py +117 -0
  34. adcp/types/generated_poc/content_standards/list_content_standards_request.py +31 -0
  35. adcp/types/generated_poc/content_standards/list_content_standards_response.py +48 -0
  36. adcp/types/generated_poc/content_standards/update_content_standards_request.py +101 -0
  37. adcp/types/generated_poc/content_standards/update_content_standards_response.py +34 -0
  38. adcp/types/generated_poc/content_standards/validate_content_delivery_request.py +59 -0
  39. adcp/types/generated_poc/content_standards/validate_content_delivery_response.py +85 -0
  40. adcp/types/generated_poc/core/activation_key.py +1 -1
  41. adcp/types/generated_poc/core/assets/audio_asset.py +1 -1
  42. adcp/types/generated_poc/core/assets/css_asset.py +1 -1
  43. adcp/types/generated_poc/core/assets/daast_asset.py +1 -1
  44. adcp/types/generated_poc/core/assets/html_asset.py +1 -1
  45. adcp/types/generated_poc/core/assets/image_asset.py +1 -1
  46. adcp/types/generated_poc/core/assets/javascript_asset.py +1 -1
  47. adcp/types/generated_poc/core/assets/text_asset.py +1 -1
  48. adcp/types/generated_poc/core/assets/url_asset.py +1 -1
  49. adcp/types/generated_poc/core/assets/vast_asset.py +1 -1
  50. adcp/types/generated_poc/core/assets/video_asset.py +1 -1
  51. adcp/types/generated_poc/core/assets/webhook_asset.py +1 -1
  52. adcp/types/generated_poc/core/async_response_data.py +1 -1
  53. adcp/types/generated_poc/core/brand_manifest.py +68 -5
  54. adcp/types/generated_poc/core/brand_manifest_ref.py +1 -1
  55. adcp/types/generated_poc/core/context.py +1 -1
  56. adcp/types/generated_poc/core/creative_asset.py +8 -7
  57. adcp/types/generated_poc/core/creative_assignment.py +1 -1
  58. adcp/types/generated_poc/core/creative_filters.py +4 -14
  59. adcp/types/generated_poc/core/creative_manifest.py +1 -1
  60. adcp/types/generated_poc/core/creative_policy.py +1 -1
  61. adcp/types/generated_poc/core/delivery_metrics.py +1 -1
  62. adcp/types/generated_poc/core/deployment.py +1 -1
  63. adcp/types/generated_poc/core/destination.py +1 -1
  64. adcp/types/generated_poc/core/error.py +1 -1
  65. adcp/types/generated_poc/core/ext.py +1 -1
  66. adcp/types/generated_poc/core/format.py +6 -5
  67. adcp/types/generated_poc/core/format_id.py +1 -1
  68. adcp/types/generated_poc/core/frequency_cap.py +1 -1
  69. adcp/types/generated_poc/core/identifier.py +27 -0
  70. adcp/types/generated_poc/core/mcp_webhook_payload.py +1 -1
  71. adcp/types/generated_poc/core/measurement.py +1 -1
  72. adcp/types/generated_poc/core/media_buy.py +1 -1
  73. adcp/types/generated_poc/core/media_buy_features.py +29 -0
  74. adcp/types/generated_poc/core/offering.py +80 -0
  75. adcp/types/generated_poc/core/package.py +1 -1
  76. adcp/types/generated_poc/core/performance_feedback.py +1 -1
  77. adcp/types/generated_poc/core/placement.py +1 -1
  78. adcp/types/generated_poc/core/pricing_option.py +8 -14
  79. adcp/types/generated_poc/core/product.py +1 -1
  80. adcp/types/generated_poc/core/product_allocation.py +48 -0
  81. adcp/types/generated_poc/core/product_filters.py +72 -7
  82. adcp/types/generated_poc/core/promoted_offerings.py +12 -21
  83. adcp/types/generated_poc/core/promoted_products.py +1 -1
  84. adcp/types/generated_poc/core/property.py +1 -1
  85. adcp/types/generated_poc/core/property_id.py +1 -1
  86. adcp/types/generated_poc/core/property_list_ref.py +26 -0
  87. adcp/types/generated_poc/core/property_tag.py +1 -1
  88. adcp/types/generated_poc/core/proposal.py +64 -0
  89. adcp/types/generated_poc/core/protocol_envelope.py +1 -1
  90. adcp/types/generated_poc/core/publisher_property_selector.py +1 -1
  91. adcp/types/generated_poc/core/push_notification_config.py +1 -1
  92. adcp/types/generated_poc/core/reporting_capabilities.py +1 -1
  93. adcp/types/generated_poc/core/reporting_webhook.py +70 -0
  94. adcp/types/generated_poc/core/response.py +1 -1
  95. adcp/types/generated_poc/core/signal_filters.py +1 -1
  96. adcp/types/generated_poc/core/start_timing.py +4 -4
  97. adcp/types/generated_poc/core/sub_asset.py +1 -1
  98. adcp/types/generated_poc/core/targeting.py +55 -14
  99. adcp/types/generated_poc/creative/list_creative_formats_request.py +1 -1
  100. adcp/types/generated_poc/creative/list_creative_formats_response.py +1 -1
  101. adcp/types/generated_poc/creative/preview_creative_request.py +1 -1
  102. adcp/types/generated_poc/creative/preview_creative_response.py +3 -2
  103. adcp/types/generated_poc/creative/preview_render.py +1 -1
  104. adcp/types/generated_poc/enums/adcp_domain.py +3 -1
  105. adcp/types/generated_poc/enums/asset_content_type.py +1 -1
  106. adcp/types/generated_poc/enums/auth_scheme.py +1 -1
  107. adcp/types/generated_poc/enums/available_metric.py +1 -1
  108. adcp/types/generated_poc/enums/channels.py +18 -8
  109. adcp/types/generated_poc/enums/co_branding_requirement.py +1 -1
  110. adcp/types/generated_poc/enums/creative_action.py +1 -1
  111. adcp/types/generated_poc/enums/creative_agent_capability.py +1 -1
  112. adcp/types/generated_poc/enums/creative_sort_field.py +1 -1
  113. adcp/types/generated_poc/enums/creative_status.py +2 -1
  114. adcp/types/generated_poc/enums/daast_tracking_event.py +1 -1
  115. adcp/types/generated_poc/enums/daast_version.py +1 -1
  116. adcp/types/generated_poc/enums/delivery_type.py +1 -1
  117. adcp/types/generated_poc/enums/dimension_unit.py +1 -1
  118. adcp/types/generated_poc/enums/feed_format.py +1 -1
  119. adcp/types/generated_poc/enums/feedback_source.py +1 -1
  120. adcp/types/generated_poc/enums/format_category.py +1 -1
  121. adcp/types/generated_poc/enums/format_id_parameter.py +1 -1
  122. adcp/types/generated_poc/enums/frequency_cap_scope.py +1 -1
  123. adcp/types/generated_poc/enums/geo_level.py +14 -0
  124. adcp/types/generated_poc/enums/history_entry_type.py +1 -1
  125. adcp/types/generated_poc/enums/http_method.py +1 -1
  126. adcp/types/generated_poc/enums/identifier_types.py +1 -1
  127. adcp/types/generated_poc/enums/javascript_module_type.py +1 -1
  128. adcp/types/generated_poc/enums/landing_page_requirement.py +1 -1
  129. adcp/types/generated_poc/enums/markdown_flavor.py +1 -1
  130. adcp/types/generated_poc/enums/media_buy_status.py +1 -1
  131. adcp/types/generated_poc/enums/metric_type.py +1 -1
  132. adcp/types/generated_poc/enums/metro_system.py +15 -0
  133. adcp/types/generated_poc/enums/notification_type.py +1 -1
  134. adcp/types/generated_poc/enums/pacing.py +1 -1
  135. adcp/types/generated_poc/enums/postal_system.py +19 -0
  136. adcp/types/generated_poc/enums/preview_output_format.py +1 -1
  137. adcp/types/generated_poc/enums/pricing_model.py +1 -1
  138. adcp/types/generated_poc/enums/property_type.py +2 -1
  139. adcp/types/generated_poc/enums/publisher_identifier_types.py +1 -1
  140. adcp/types/generated_poc/enums/reporting_frequency.py +1 -1
  141. adcp/types/generated_poc/enums/signal_catalog_type.py +1 -1
  142. adcp/types/generated_poc/enums/sort_direction.py +1 -1
  143. adcp/types/generated_poc/enums/task_status.py +1 -1
  144. adcp/types/generated_poc/enums/task_type.py +7 -1
  145. adcp/types/generated_poc/enums/update_frequency.py +1 -1
  146. adcp/types/generated_poc/enums/url_asset_type.py +1 -1
  147. adcp/types/generated_poc/enums/validation_mode.py +1 -1
  148. adcp/types/generated_poc/enums/vast_tracking_event.py +1 -1
  149. adcp/types/generated_poc/enums/vast_version.py +1 -1
  150. adcp/types/generated_poc/enums/webhook_response_type.py +1 -1
  151. adcp/types/generated_poc/enums/webhook_security_method.py +1 -1
  152. adcp/types/generated_poc/extensions/__init__.py +3 -0
  153. adcp/types/generated_poc/extensions/extension_meta.py +58 -0
  154. adcp/types/generated_poc/media_buy/build_creative_request.py +1 -1
  155. adcp/types/generated_poc/media_buy/build_creative_response.py +1 -1
  156. adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +1 -1
  157. adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +1 -1
  158. adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +1 -1
  159. adcp/types/generated_poc/media_buy/create_media_buy_request.py +54 -26
  160. adcp/types/generated_poc/media_buy/create_media_buy_response.py +1 -1
  161. adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +1 -1
  162. adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +1 -1
  163. adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +1 -1
  164. adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +1 -1
  165. adcp/types/generated_poc/media_buy/get_products_async_response_working.py +1 -1
  166. adcp/types/generated_poc/media_buy/get_products_request.py +18 -3
  167. adcp/types/generated_poc/media_buy/get_products_response.py +14 -2
  168. adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +1 -1
  169. adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +2 -2
  170. adcp/types/generated_poc/media_buy/list_creative_formats_request.py +1 -1
  171. adcp/types/generated_poc/media_buy/list_creative_formats_response.py +1 -1
  172. adcp/types/generated_poc/media_buy/list_creatives_request.py +2 -2
  173. adcp/types/generated_poc/media_buy/list_creatives_response.py +7 -10
  174. adcp/types/generated_poc/media_buy/package_request.py +15 -6
  175. adcp/types/generated_poc/media_buy/package_update.py +119 -0
  176. adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +1 -1
  177. adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +1 -1
  178. adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +1 -1
  179. adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +1 -1
  180. adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +1 -1
  181. adcp/types/generated_poc/media_buy/sync_creatives_request.py +1 -1
  182. adcp/types/generated_poc/media_buy/sync_creatives_response.py +1 -1
  183. adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +1 -1
  184. adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +1 -1
  185. adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +1 -1
  186. adcp/types/generated_poc/media_buy/update_media_buy_request.py +20 -108
  187. adcp/types/generated_poc/media_buy/update_media_buy_response.py +1 -1
  188. adcp/types/generated_poc/pricing_options/cpc_option.py +35 -10
  189. adcp/types/generated_poc/pricing_options/cpcv_option.py +35 -10
  190. adcp/types/generated_poc/pricing_options/{cpm_auction_option.py → cpm_option.py} +23 -19
  191. adcp/types/generated_poc/pricing_options/cpp_option.py +39 -16
  192. adcp/types/generated_poc/pricing_options/cpv_option.py +37 -18
  193. adcp/types/generated_poc/pricing_options/flat_rate_option.py +45 -39
  194. adcp/types/generated_poc/pricing_options/{vcpm_auction_option.py → vcpm_option.py} +23 -14
  195. adcp/types/generated_poc/property/__init__.py +3 -0
  196. adcp/types/generated_poc/property/base_property_source.py +86 -0
  197. adcp/types/generated_poc/property/create_property_list_request.py +43 -0
  198. adcp/types/generated_poc/property/create_property_list_response.py +27 -0
  199. adcp/types/generated_poc/property/delete_property_list_request.py +22 -0
  200. adcp/types/generated_poc/property/delete_property_list_response.py +21 -0
  201. adcp/types/generated_poc/property/feature_requirement.py +42 -0
  202. adcp/types/generated_poc/property/get_property_list_request.py +34 -0
  203. adcp/types/generated_poc/property/get_property_list_response.py +61 -0
  204. adcp/types/generated_poc/property/list_property_lists_request.py +29 -0
  205. adcp/types/generated_poc/property/list_property_lists_response.py +39 -0
  206. adcp/types/generated_poc/property/property_error.py +33 -0
  207. adcp/types/generated_poc/property/property_feature.py +22 -0
  208. adcp/types/generated_poc/property/property_feature_definition.py +80 -0
  209. adcp/types/generated_poc/property/property_list.py +62 -0
  210. adcp/types/generated_poc/property/property_list_changed_webhook.py +51 -0
  211. adcp/types/generated_poc/property/property_list_filters.py +47 -0
  212. adcp/types/generated_poc/property/update_property_list_request.py +46 -0
  213. adcp/types/generated_poc/property/update_property_list_response.py +21 -0
  214. adcp/types/generated_poc/protocol/__init__.py +3 -0
  215. adcp/types/generated_poc/protocol/get_adcp_capabilities_request.py +34 -0
  216. adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py +353 -0
  217. adcp/types/generated_poc/protocols/adcp_extension.py +18 -5
  218. adcp/types/generated_poc/signals/activate_signal_request.py +1 -1
  219. adcp/types/generated_poc/signals/activate_signal_response.py +1 -1
  220. adcp/types/generated_poc/signals/get_signals_request.py +1 -1
  221. adcp/types/generated_poc/signals/get_signals_response.py +1 -1
  222. adcp/types/generated_poc/sponsored_intelligence/__init__.py +3 -0
  223. adcp/types/generated_poc/sponsored_intelligence/si_capabilities.py +102 -0
  224. adcp/types/generated_poc/sponsored_intelligence/si_get_offering_request.py +34 -0
  225. adcp/types/generated_poc/sponsored_intelligence/si_get_offering_response.py +100 -0
  226. adcp/types/generated_poc/sponsored_intelligence/si_identity.py +78 -0
  227. adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_request.py +46 -0
  228. adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_response.py +44 -0
  229. adcp/types/generated_poc/sponsored_intelligence/si_send_message_request.py +58 -0
  230. adcp/types/generated_poc/sponsored_intelligence/si_send_message_response.py +101 -0
  231. adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_request.py +60 -0
  232. adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_response.py +54 -0
  233. adcp/types/generated_poc/sponsored_intelligence/si_ui_element.py +30 -0
  234. adcp/utils/format_assets.py +5 -5
  235. adcp/utils/preview_cache.py +2 -2
  236. {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/METADATA +1 -1
  237. adcp-3.0.0.dist-info/RECORD +264 -0
  238. {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/WHEEL +1 -1
  239. adcp/types/generated_poc/enums/standard_format_ids.py +0 -45
  240. adcp/types/generated_poc/pricing_options/cpm_fixed_option.py +0 -43
  241. adcp/types/generated_poc/pricing_options/vcpm_fixed_option.py +0 -47
  242. adcp-2.18.0.dist-info/RECORD +0 -195
  243. {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/entry_points.txt +0 -0
  244. {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/licenses/LICENSE +0 -0
  245. {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,61 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: property/get_property_list_response.json
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Annotated
8
+
9
+ from adcp.types.base import AdCPBaseModel
10
+ from pydantic import AwareDatetime, ConfigDict, Field
11
+
12
+ from ..core import ext as ext_1
13
+ from ..core import identifier
14
+ from . import property_list
15
+
16
+
17
+ class Pagination(AdCPBaseModel):
18
+ model_config = ConfigDict(
19
+ extra='forbid',
20
+ )
21
+ cursor: Annotated[str | None, Field(description='Cursor for next page')] = None
22
+ has_more: Annotated[bool | None, Field(description='Whether more results are available')] = None
23
+
24
+
25
+ class GetPropertyListResponse(AdCPBaseModel):
26
+ model_config = ConfigDict(
27
+ extra='forbid',
28
+ )
29
+ cache_valid_until: Annotated[
30
+ AwareDatetime | None,
31
+ Field(
32
+ description='Cache expiration timestamp. Re-fetch the list after this time to get updated identifiers.'
33
+ ),
34
+ ] = None
35
+ coverage_gaps: Annotated[
36
+ dict[str, list[identifier.Identifier]] | None,
37
+ Field(
38
+ description="Properties included in the list despite missing feature data. Only present when a feature_requirement has if_not_covered='include'. Maps feature_id to list of identifiers not covered for that feature."
39
+ ),
40
+ ] = None
41
+ ext: ext_1.ExtensionObject | None = None
42
+ identifiers: Annotated[
43
+ list[identifier.Identifier] | None,
44
+ Field(
45
+ description='Resolved identifiers that passed filters (if resolve=true). Cache these locally for real-time use.'
46
+ ),
47
+ ] = None
48
+ list: Annotated[
49
+ property_list.PropertyList,
50
+ Field(description='The property list metadata (always returned)'),
51
+ ]
52
+ pagination: Annotated[Pagination | None, Field(description='Pagination information')] = None
53
+ resolved_at: Annotated[
54
+ AwareDatetime | None, Field(description='When the list was resolved')
55
+ ] = None
56
+ returned_count: Annotated[
57
+ int | None, Field(description='Number of identifiers returned in this response')
58
+ ] = None
59
+ total_count: Annotated[
60
+ int | None, Field(description='Total number of identifiers in resolved list')
61
+ ] = None
@@ -0,0 +1,29 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: property/list_property_lists_request.json
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Annotated
8
+
9
+ from adcp.types.base import AdCPBaseModel
10
+ from pydantic import ConfigDict, Field
11
+
12
+ from ..core import context as context_1
13
+ from ..core import ext as ext_1
14
+
15
+
16
+ class ListPropertyListsRequest(AdCPBaseModel):
17
+ model_config = ConfigDict(
18
+ extra='forbid',
19
+ )
20
+ context: context_1.ContextObject | None = None
21
+ cursor: Annotated[str | None, Field(description='Pagination cursor')] = None
22
+ ext: ext_1.ExtensionObject | None = None
23
+ max_results: Annotated[int | None, Field(description='Maximum lists to return', ge=1)] = 100
24
+ name_contains: Annotated[
25
+ str | None, Field(description='Filter to lists whose name contains this string')
26
+ ] = None
27
+ principal: Annotated[
28
+ str | None, Field(description='Filter to lists owned by this principal')
29
+ ] = None
@@ -0,0 +1,39 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: property/list_property_lists_response.json
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Annotated
8
+
9
+ from adcp.types.base import AdCPBaseModel
10
+ from pydantic import ConfigDict, Field
11
+
12
+ from ..core import ext as ext_1
13
+ from . import property_list
14
+
15
+
16
+ class Pagination(AdCPBaseModel):
17
+ model_config = ConfigDict(
18
+ extra='forbid',
19
+ )
20
+ cursor: Annotated[str | None, Field(description='Cursor for next page')] = None
21
+ has_more: Annotated[bool | None, Field(description='Whether more results are available')] = None
22
+
23
+
24
+ class ListPropertyListsResponse(AdCPBaseModel):
25
+ model_config = ConfigDict(
26
+ extra='forbid',
27
+ )
28
+ ext: ext_1.ExtensionObject | None = None
29
+ lists: Annotated[
30
+ list[property_list.PropertyList],
31
+ Field(description='Array of property lists (metadata only, not resolved properties)'),
32
+ ]
33
+ pagination: Annotated[Pagination | None, Field(description='Pagination information')] = None
34
+ returned_count: Annotated[
35
+ int | None, Field(description='Number of lists returned in this response')
36
+ ] = None
37
+ total_count: Annotated[
38
+ int | None, Field(description='Total number of lists matching criteria')
39
+ ] = None
@@ -0,0 +1,33 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: property/property_error.json
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+ from typing import Annotated
9
+
10
+ from adcp.types.base import AdCPBaseModel
11
+ from pydantic import ConfigDict, Field
12
+
13
+ from ..core import property as property_1
14
+
15
+
16
+ class Code(Enum):
17
+ PROPERTY_NOT_FOUND = 'PROPERTY_NOT_FOUND'
18
+ PROPERTY_NOT_MONITORED = 'PROPERTY_NOT_MONITORED'
19
+ LIST_NOT_FOUND = 'LIST_NOT_FOUND'
20
+ LIST_ACCESS_DENIED = 'LIST_ACCESS_DENIED'
21
+ METHODOLOGY_NOT_SUPPORTED = 'METHODOLOGY_NOT_SUPPORTED'
22
+ JURISDICTION_NOT_SUPPORTED = 'JURISDICTION_NOT_SUPPORTED'
23
+
24
+
25
+ class PropertyError(AdCPBaseModel):
26
+ model_config = ConfigDict(
27
+ extra='forbid',
28
+ )
29
+ code: Annotated[Code, Field(description='Error code')]
30
+ message: Annotated[str, Field(description='Human-readable error message')]
31
+ property: Annotated[
32
+ property_1.Property | None, Field(description='The property that caused the error')
33
+ ] = None
@@ -0,0 +1,22 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: property/property_feature.json
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Annotated
8
+
9
+ from adcp.types.base import AdCPBaseModel
10
+ from pydantic import ConfigDict, Field
11
+
12
+
13
+ class PropertyFeature(AdCPBaseModel):
14
+ model_config = ConfigDict(
15
+ extra='forbid',
16
+ )
17
+ feature_id: Annotated[str, Field(description='Identifier for the feature being assessed')]
18
+ source: Annotated[
19
+ str | None,
20
+ Field(description='Source of the feature data (e.g., app_store_privacy_label, tcf_string)'),
21
+ ] = None
22
+ value: Annotated[str, Field(description='The feature value')]
@@ -0,0 +1,80 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: property/property_feature_definition.json
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+ from typing import Annotated
9
+
10
+ from adcp.types.base import AdCPBaseModel
11
+ from pydantic import AnyUrl, ConfigDict, Field
12
+
13
+ from ..core import ext as ext_1
14
+
15
+
16
+ class Coverage(AdCPBaseModel):
17
+ model_config = ConfigDict(
18
+ extra='forbid',
19
+ )
20
+ countries: Annotated[
21
+ list[str] | None, Field(description='Countries where this feature is available')
22
+ ] = None
23
+ property_types: Annotated[
24
+ list[str] | None, Field(description='Property types this feature applies to')
25
+ ] = None
26
+
27
+
28
+ class Range(AdCPBaseModel):
29
+ model_config = ConfigDict(
30
+ extra='forbid',
31
+ )
32
+ max: Annotated[float, Field(description='Maximum value')]
33
+ min: Annotated[float, Field(description='Minimum value')]
34
+
35
+
36
+ class Type(Enum):
37
+ binary = 'binary'
38
+ quantitative = 'quantitative'
39
+ categorical = 'categorical'
40
+
41
+
42
+ class PropertyFeatureDefinition(AdCPBaseModel):
43
+ model_config = ConfigDict(
44
+ extra='forbid',
45
+ )
46
+ allowed_values: Annotated[
47
+ list[str] | None, Field(description='For categorical features, the set of valid values')
48
+ ] = None
49
+ coverage: Annotated[
50
+ Coverage | None, Field(description='What this feature covers (empty arrays = all)')
51
+ ] = None
52
+ description: Annotated[
53
+ str | None, Field(description='Description of what this feature measures or represents')
54
+ ] = None
55
+ ext: ext_1.ExtensionObject | None = None
56
+ feature_id: Annotated[
57
+ str,
58
+ Field(
59
+ description="Unique identifier for this feature (e.g., 'consent_quality', 'carbon_score', 'coppa_certified')"
60
+ ),
61
+ ]
62
+ methodology_url: Annotated[
63
+ AnyUrl,
64
+ Field(
65
+ description='URL to documentation explaining how this feature is calculated/measured'
66
+ ),
67
+ ]
68
+ methodology_version: Annotated[
69
+ str | None, Field(description='Version identifier for the methodology (for audit trails)')
70
+ ] = None
71
+ name: Annotated[str, Field(description='Human-readable name for the feature')]
72
+ range: Annotated[
73
+ Range | None, Field(description='For quantitative features, the valid range of values')
74
+ ] = None
75
+ type: Annotated[
76
+ Type,
77
+ Field(
78
+ description='The type of values this feature produces: binary (true/false), quantitative (numeric range), categorical (enumerated values)'
79
+ ),
80
+ ]
@@ -0,0 +1,62 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: property/property_list.json
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Annotated
8
+
9
+ from adcp.types.base import AdCPBaseModel
10
+ from pydantic import AnyUrl, AwareDatetime, ConfigDict, Field
11
+
12
+ from ..core import brand_manifest as brand_manifest_1
13
+ from . import base_property_source, property_list_filters
14
+
15
+
16
+ class PropertyList(AdCPBaseModel):
17
+ model_config = ConfigDict(
18
+ extra='forbid',
19
+ )
20
+ base_properties: Annotated[
21
+ list[base_property_source.BasePropertySource] | None,
22
+ Field(
23
+ description="Array of property sources to evaluate. Each entry is a discriminated union: publisher_tags (publisher_domain + tags), publisher_ids (publisher_domain + property_ids), or identifiers (direct identifiers). If omitted, queries the agent's entire property database."
24
+ ),
25
+ ] = None
26
+ brand_manifest: Annotated[
27
+ brand_manifest_1.BrandManifest | None,
28
+ Field(description='Brand identity used to automatically apply appropriate rules'),
29
+ ] = None
30
+ cache_duration_hours: Annotated[
31
+ int | None,
32
+ Field(
33
+ description='Recommended cache duration for resolved list. Consumers should re-fetch after this period.',
34
+ ge=1,
35
+ ),
36
+ ] = 24
37
+ created_at: Annotated[AwareDatetime | None, Field(description='When the list was created')] = (
38
+ None
39
+ )
40
+ description: Annotated[str | None, Field(description="Description of the list's purpose")] = (
41
+ None
42
+ )
43
+ filters: Annotated[
44
+ property_list_filters.PropertyListFilters | None,
45
+ Field(description='Dynamic filters applied when resolving the list'),
46
+ ] = None
47
+ list_id: Annotated[str, Field(description='Unique identifier for this property list')]
48
+ name: Annotated[str, Field(description='Human-readable name for the list')]
49
+ principal: Annotated[
50
+ str | None, Field(description='Principal identity that owns this list')
51
+ ] = None
52
+ property_count: Annotated[
53
+ int | None,
54
+ Field(description='Number of properties in the resolved list (at time of last resolution)'),
55
+ ] = None
56
+ updated_at: Annotated[
57
+ AwareDatetime | None, Field(description='When the list was last modified')
58
+ ] = None
59
+ webhook_url: Annotated[
60
+ AnyUrl | None,
61
+ Field(description='URL to receive notifications when the resolved list changes'),
62
+ ] = None
@@ -0,0 +1,51 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: property/property_list_changed_webhook.json
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Annotated, Literal
8
+
9
+ from adcp.types.base import AdCPBaseModel
10
+ from pydantic import AwareDatetime, ConfigDict, Field
11
+
12
+ from ..core import ext as ext_1
13
+
14
+
15
+ class ChangeSummary(AdCPBaseModel):
16
+ model_config = ConfigDict(
17
+ extra='forbid',
18
+ )
19
+ properties_added: Annotated[
20
+ int | None, Field(description='Number of properties added since last resolution')
21
+ ] = None
22
+ properties_removed: Annotated[
23
+ int | None, Field(description='Number of properties removed since last resolution')
24
+ ] = None
25
+ total_properties: Annotated[
26
+ int | None, Field(description='Total properties in the resolved list')
27
+ ] = None
28
+
29
+
30
+ class PropertyListChangedWebhook(AdCPBaseModel):
31
+ model_config = ConfigDict(
32
+ extra='forbid',
33
+ )
34
+ cache_valid_until: Annotated[
35
+ AwareDatetime | None,
36
+ Field(description='When the consumer should refresh from the governance agent'),
37
+ ] = None
38
+ change_summary: Annotated[
39
+ ChangeSummary | None, Field(description='Summary of changes to the resolved list')
40
+ ] = None
41
+ event: Annotated[Literal['property_list_changed'], Field(description='The event type')]
42
+ ext: ext_1.ExtensionObject | None = None
43
+ list_id: Annotated[str, Field(description='ID of the property list that changed')]
44
+ list_name: Annotated[str | None, Field(description='Name of the property list')] = None
45
+ resolved_at: Annotated[AwareDatetime, Field(description='When the list was re-resolved')]
46
+ signature: Annotated[
47
+ str,
48
+ Field(
49
+ description="Cryptographic signature of the webhook payload, signed with the agent's private key. Recipients MUST verify this signature."
50
+ ),
51
+ ]
@@ -0,0 +1,47 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: property/property_list_filters.json
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Annotated
8
+
9
+ from adcp.types.base import AdCPBaseModel
10
+ from pydantic import ConfigDict, Field, RootModel
11
+
12
+ from ..core import identifier
13
+ from ..enums import channels, property_type
14
+ from . import feature_requirement
15
+
16
+
17
+ class CountriesAllItem(RootModel[str]):
18
+ root: Annotated[str, Field(pattern='^[A-Z]{2}$')]
19
+
20
+
21
+ class PropertyListFilters(AdCPBaseModel):
22
+ model_config = ConfigDict(
23
+ extra='forbid',
24
+ )
25
+ channels_any: Annotated[
26
+ list[channels.MediaChannel],
27
+ Field(description='Property must support ANY of the listed channels. Required.'),
28
+ ]
29
+ countries_all: Annotated[
30
+ list[CountriesAllItem],
31
+ Field(
32
+ description='Property must have feature data for ALL listed countries (ISO codes). Required.'
33
+ ),
34
+ ]
35
+ exclude_identifiers: Annotated[
36
+ list[identifier.Identifier] | None,
37
+ Field(description='Identifiers to always exclude from results'),
38
+ ] = None
39
+ feature_requirements: Annotated[
40
+ list[feature_requirement.FeatureRequirement] | None,
41
+ Field(
42
+ description='Feature-based requirements. Property must pass ALL requirements (AND logic).'
43
+ ),
44
+ ] = None
45
+ property_types: Annotated[
46
+ list[property_type.PropertyType] | None, Field(description='Filter to these property types')
47
+ ] = None
@@ -0,0 +1,46 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: property/update_property_list_request.json
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Annotated
8
+
9
+ from adcp.types.base import AdCPBaseModel
10
+ from pydantic import AnyUrl, ConfigDict, Field
11
+
12
+ from ..core import brand_manifest as brand_manifest_1
13
+ from ..core import context as context_1
14
+ from ..core import ext as ext_1
15
+ from . import base_property_source, property_list_filters
16
+
17
+
18
+ class UpdatePropertyListRequest(AdCPBaseModel):
19
+ model_config = ConfigDict(
20
+ extra='forbid',
21
+ )
22
+ base_properties: Annotated[
23
+ list[base_property_source.BasePropertySource] | None,
24
+ Field(
25
+ description='Complete replacement for the base properties list (not a patch). Each entry is a discriminated union: publisher_tags (publisher_domain + tags), publisher_ids (publisher_domain + property_ids), or identifiers (direct identifiers).'
26
+ ),
27
+ ] = None
28
+ brand_manifest: Annotated[
29
+ brand_manifest_1.BrandManifest | None,
30
+ Field(description='Update brand identity and requirements'),
31
+ ] = None
32
+ context: context_1.ContextObject | None = None
33
+ description: Annotated[str | None, Field(description='New description')] = None
34
+ ext: ext_1.ExtensionObject | None = None
35
+ filters: Annotated[
36
+ property_list_filters.PropertyListFilters | None,
37
+ Field(description='Complete replacement for the filters (not a patch)'),
38
+ ] = None
39
+ list_id: Annotated[str, Field(description='ID of the property list to update')]
40
+ name: Annotated[str | None, Field(description='New name for the list')] = None
41
+ webhook_url: Annotated[
42
+ AnyUrl | None,
43
+ Field(
44
+ description='Update the webhook URL for list change notifications (set to empty string to remove)'
45
+ ),
46
+ ] = None
@@ -0,0 +1,21 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: property/update_property_list_response.json
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Annotated
8
+
9
+ from adcp.types.base import AdCPBaseModel
10
+ from pydantic import ConfigDict, Field
11
+
12
+ from ..core import ext as ext_1
13
+ from . import property_list
14
+
15
+
16
+ class UpdatePropertyListResponse(AdCPBaseModel):
17
+ model_config = ConfigDict(
18
+ extra='forbid',
19
+ )
20
+ ext: ext_1.ExtensionObject | None = None
21
+ list: Annotated[property_list.PropertyList, Field(description='The updated property list')]
@@ -0,0 +1,3 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: .schema_temp
3
+ # timestamp: 2026-01-25T21:17:54+00:00
@@ -0,0 +1,34 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: protocol/get_adcp_capabilities_request.json
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+ from typing import Annotated
9
+
10
+ from adcp.types.base import AdCPBaseModel
11
+ from pydantic import ConfigDict, Field
12
+
13
+ from ..core import context as context_1
14
+ from ..core import ext as ext_1
15
+
16
+
17
+ class Protocol(Enum):
18
+ media_buy = 'media_buy'
19
+ signals = 'signals'
20
+ sponsored_intelligence = 'sponsored_intelligence'
21
+
22
+
23
+ class GetAdcpCapabilitiesRequest(AdCPBaseModel):
24
+ model_config = ConfigDict(
25
+ extra='allow',
26
+ )
27
+ context: context_1.ContextObject | None = None
28
+ ext: ext_1.ExtensionObject | None = None
29
+ protocols: Annotated[
30
+ list[Protocol] | None,
31
+ Field(
32
+ description='Specific protocols to query capabilities for. If omitted, returns capabilities for all supported protocols.'
33
+ ),
34
+ ] = None