adcp 2.18.0__py3-none-any.whl → 2.19.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 (187) hide show
  1. adcp/__init__.py +1 -1
  2. adcp/protocols/mcp.py +3 -1
  3. adcp/types/_ergonomic.py +0 -4
  4. adcp/types/_generated.py +85 -4
  5. adcp/types/generated_poc/adagents.py +239 -149
  6. adcp/types/generated_poc/core/activation_key.py +8 -8
  7. adcp/types/generated_poc/core/assets/audio_asset.py +5 -5
  8. adcp/types/generated_poc/core/assets/css_asset.py +2 -2
  9. adcp/types/generated_poc/core/assets/daast_asset.py +18 -18
  10. adcp/types/generated_poc/core/assets/html_asset.py +2 -2
  11. adcp/types/generated_poc/core/assets/image_asset.py +6 -6
  12. adcp/types/generated_poc/core/assets/javascript_asset.py +3 -3
  13. adcp/types/generated_poc/core/assets/text_asset.py +2 -2
  14. adcp/types/generated_poc/core/assets/url_asset.py +3 -3
  15. adcp/types/generated_poc/core/assets/vast_asset.py +18 -18
  16. adcp/types/generated_poc/core/assets/video_asset.py +7 -7
  17. adcp/types/generated_poc/core/assets/webhook_asset.py +9 -9
  18. adcp/types/generated_poc/core/async_response_data.py +2 -2
  19. adcp/types/generated_poc/core/brand_manifest.py +55 -55
  20. adcp/types/generated_poc/core/brand_manifest_ref.py +9 -9
  21. adcp/types/generated_poc/core/context.py +1 -1
  22. adcp/types/generated_poc/core/creative_asset.py +13 -13
  23. adcp/types/generated_poc/core/creative_assignment.py +3 -3
  24. adcp/types/generated_poc/core/creative_filters.py +19 -19
  25. adcp/types/generated_poc/core/creative_manifest.py +2 -2
  26. adcp/types/generated_poc/core/creative_policy.py +4 -4
  27. adcp/types/generated_poc/core/delivery_metrics.py +32 -32
  28. adcp/types/generated_poc/core/deployment.py +20 -20
  29. adcp/types/generated_poc/core/destination.py +11 -11
  30. adcp/types/generated_poc/core/error.py +6 -6
  31. adcp/types/generated_poc/core/ext.py +1 -1
  32. adcp/types/generated_poc/core/format.py +67 -66
  33. adcp/types/generated_poc/core/format_id.py +5 -5
  34. adcp/types/generated_poc/core/frequency_cap.py +2 -2
  35. adcp/types/generated_poc/core/identifier.py +27 -0
  36. adcp/types/generated_poc/core/mcp_webhook_payload.py +10 -10
  37. adcp/types/generated_poc/core/measurement.py +8 -8
  38. adcp/types/generated_poc/core/media_buy.py +7 -7
  39. adcp/types/generated_poc/core/package.py +8 -8
  40. adcp/types/generated_poc/core/performance_feedback.py +18 -18
  41. adcp/types/generated_poc/core/placement.py +4 -4
  42. adcp/types/generated_poc/core/pricing_option.py +2 -2
  43. adcp/types/generated_poc/core/product.py +20 -20
  44. adcp/types/generated_poc/core/product_filters.py +18 -18
  45. adcp/types/generated_poc/core/promoted_offerings.py +20 -20
  46. adcp/types/generated_poc/core/promoted_products.py +2 -2
  47. adcp/types/generated_poc/core/property.py +9 -9
  48. adcp/types/generated_poc/core/property_id.py +4 -4
  49. adcp/types/generated_poc/core/property_list_ref.py +26 -0
  50. adcp/types/generated_poc/core/property_tag.py +4 -4
  51. adcp/types/generated_poc/core/protocol_envelope.py +8 -8
  52. adcp/types/generated_poc/core/publisher_property_selector.py +13 -13
  53. adcp/types/generated_poc/core/push_notification_config.py +5 -5
  54. adcp/types/generated_poc/core/reporting_capabilities.py +8 -8
  55. adcp/types/generated_poc/core/response.py +4 -4
  56. adcp/types/generated_poc/core/signal_filters.py +5 -5
  57. adcp/types/generated_poc/core/start_timing.py +5 -5
  58. adcp/types/generated_poc/core/sub_asset.py +14 -14
  59. adcp/types/generated_poc/core/targeting.py +8 -8
  60. adcp/types/generated_poc/creative/list_creative_formats_request.py +20 -20
  61. adcp/types/generated_poc/creative/list_creative_formats_response.py +5 -5
  62. adcp/types/generated_poc/creative/preview_creative_request.py +24 -24
  63. adcp/types/generated_poc/creative/preview_creative_response.py +31 -30
  64. adcp/types/generated_poc/creative/preview_render.py +25 -25
  65. adcp/types/generated_poc/enums/adcp_domain.py +5 -3
  66. adcp/types/generated_poc/enums/asset_content_type.py +13 -13
  67. adcp/types/generated_poc/enums/auth_scheme.py +2 -2
  68. adcp/types/generated_poc/enums/available_metric.py +9 -9
  69. adcp/types/generated_poc/enums/channels.py +9 -9
  70. adcp/types/generated_poc/enums/co_branding_requirement.py +3 -3
  71. adcp/types/generated_poc/enums/creative_action.py +5 -5
  72. adcp/types/generated_poc/enums/creative_agent_capability.py +4 -4
  73. adcp/types/generated_poc/enums/creative_sort_field.py +6 -6
  74. adcp/types/generated_poc/enums/creative_status.py +4 -4
  75. adcp/types/generated_poc/enums/daast_tracking_event.py +11 -11
  76. adcp/types/generated_poc/enums/daast_version.py +2 -2
  77. adcp/types/generated_poc/enums/delivery_type.py +2 -2
  78. adcp/types/generated_poc/enums/dimension_unit.py +4 -4
  79. adcp/types/generated_poc/enums/feed_format.py +3 -3
  80. adcp/types/generated_poc/enums/feedback_source.py +4 -4
  81. adcp/types/generated_poc/enums/format_category.py +7 -7
  82. adcp/types/generated_poc/enums/format_id_parameter.py +2 -2
  83. adcp/types/generated_poc/enums/frequency_cap_scope.py +3 -3
  84. adcp/types/generated_poc/enums/history_entry_type.py +2 -2
  85. adcp/types/generated_poc/enums/http_method.py +2 -2
  86. adcp/types/generated_poc/enums/identifier_types.py +19 -19
  87. adcp/types/generated_poc/enums/javascript_module_type.py +3 -3
  88. adcp/types/generated_poc/enums/landing_page_requirement.py +3 -3
  89. adcp/types/generated_poc/enums/markdown_flavor.py +2 -2
  90. adcp/types/generated_poc/enums/media_buy_status.py +4 -4
  91. adcp/types/generated_poc/enums/metric_type.py +8 -8
  92. adcp/types/generated_poc/enums/notification_type.py +4 -4
  93. adcp/types/generated_poc/enums/pacing.py +3 -3
  94. adcp/types/generated_poc/enums/preview_output_format.py +2 -2
  95. adcp/types/generated_poc/enums/pricing_model.py +7 -7
  96. adcp/types/generated_poc/enums/property_type.py +7 -7
  97. adcp/types/generated_poc/enums/publisher_identifier_types.py +5 -5
  98. adcp/types/generated_poc/enums/reporting_frequency.py +3 -3
  99. adcp/types/generated_poc/enums/signal_catalog_type.py +3 -3
  100. adcp/types/generated_poc/enums/sort_direction.py +2 -2
  101. adcp/types/generated_poc/enums/standard_format_ids.py +35 -35
  102. adcp/types/generated_poc/enums/task_status.py +9 -9
  103. adcp/types/generated_poc/enums/task_type.py +12 -6
  104. adcp/types/generated_poc/enums/update_frequency.py +4 -4
  105. adcp/types/generated_poc/enums/url_asset_type.py +3 -3
  106. adcp/types/generated_poc/enums/validation_mode.py +2 -2
  107. adcp/types/generated_poc/enums/vast_tracking_event.py +16 -16
  108. adcp/types/generated_poc/enums/vast_version.py +5 -5
  109. adcp/types/generated_poc/enums/webhook_response_type.py +4 -4
  110. adcp/types/generated_poc/enums/webhook_security_method.py +3 -3
  111. adcp/types/generated_poc/extensions/__init__.py +3 -0
  112. adcp/types/generated_poc/extensions/extension_meta.py +50 -0
  113. adcp/types/generated_poc/media_buy/build_creative_request.py +4 -4
  114. adcp/types/generated_poc/media_buy/build_creative_response.py +6 -6
  115. adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +5 -5
  116. adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +1 -1
  117. adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +5 -5
  118. adcp/types/generated_poc/media_buy/create_media_buy_request.py +25 -25
  119. adcp/types/generated_poc/media_buy/create_media_buy_response.py +7 -7
  120. adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +8 -8
  121. adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +51 -51
  122. adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +6 -6
  123. adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +2 -2
  124. adcp/types/generated_poc/media_buy/get_products_async_response_working.py +4 -4
  125. adcp/types/generated_poc/media_buy/get_products_request.py +11 -5
  126. adcp/types/generated_poc/media_buy/get_products_response.py +10 -4
  127. adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +3 -3
  128. adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +7 -7
  129. adcp/types/generated_poc/media_buy/list_creative_formats_request.py +9 -9
  130. adcp/types/generated_poc/media_buy/list_creative_formats_response.py +5 -5
  131. adcp/types/generated_poc/media_buy/list_creatives_request.py +24 -24
  132. adcp/types/generated_poc/media_buy/list_creatives_response.py +52 -52
  133. adcp/types/generated_poc/media_buy/package_request.py +16 -7
  134. adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +19 -19
  135. adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +6 -6
  136. adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +5 -5
  137. adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +1 -1
  138. adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +7 -7
  139. adcp/types/generated_poc/media_buy/sync_creatives_request.py +7 -7
  140. adcp/types/generated_poc/media_buy/sync_creatives_response.py +15 -15
  141. adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +4 -4
  142. adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +1 -1
  143. adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +5 -5
  144. adcp/types/generated_poc/media_buy/update_media_buy_request.py +37 -29
  145. adcp/types/generated_poc/media_buy/update_media_buy_response.py +7 -7
  146. adcp/types/generated_poc/pricing_options/cpc_option.py +8 -8
  147. adcp/types/generated_poc/pricing_options/cpcv_option.py +8 -8
  148. adcp/types/generated_poc/pricing_options/cpm_auction_option.py +13 -13
  149. adcp/types/generated_poc/pricing_options/cpm_fixed_option.py +8 -8
  150. adcp/types/generated_poc/pricing_options/cpp_option.py +13 -13
  151. adcp/types/generated_poc/pricing_options/cpv_option.py +12 -12
  152. adcp/types/generated_poc/pricing_options/flat_rate_option.py +15 -15
  153. adcp/types/generated_poc/pricing_options/vcpm_auction_option.py +13 -13
  154. adcp/types/generated_poc/pricing_options/vcpm_fixed_option.py +8 -8
  155. adcp/types/generated_poc/property/__init__.py +3 -0
  156. adcp/types/generated_poc/property/base_property_source.py +86 -0
  157. adcp/types/generated_poc/property/create_property_list_request.py +43 -0
  158. adcp/types/generated_poc/property/create_property_list_response.py +27 -0
  159. adcp/types/generated_poc/property/delete_property_list_request.py +22 -0
  160. adcp/types/generated_poc/property/delete_property_list_response.py +21 -0
  161. adcp/types/generated_poc/property/feature_requirement.py +42 -0
  162. adcp/types/generated_poc/property/get_property_list_request.py +34 -0
  163. adcp/types/generated_poc/property/get_property_list_response.py +61 -0
  164. adcp/types/generated_poc/property/list_property_features_request.py +25 -0
  165. adcp/types/generated_poc/property/list_property_features_response.py +24 -0
  166. adcp/types/generated_poc/property/list_property_lists_request.py +29 -0
  167. adcp/types/generated_poc/property/list_property_lists_response.py +39 -0
  168. adcp/types/generated_poc/property/property_error.py +33 -0
  169. adcp/types/generated_poc/property/property_feature.py +22 -0
  170. adcp/types/generated_poc/property/property_feature_definition.py +80 -0
  171. adcp/types/generated_poc/property/property_list.py +62 -0
  172. adcp/types/generated_poc/property/property_list_changed_webhook.py +51 -0
  173. adcp/types/generated_poc/property/property_list_filters.py +47 -0
  174. adcp/types/generated_poc/property/update_property_list_request.py +46 -0
  175. adcp/types/generated_poc/property/update_property_list_response.py +21 -0
  176. adcp/types/generated_poc/protocols/adcp_extension.py +26 -10
  177. adcp/types/generated_poc/signals/activate_signal_request.py +3 -3
  178. adcp/types/generated_poc/signals/activate_signal_response.py +6 -6
  179. adcp/types/generated_poc/signals/get_signals_request.py +8 -8
  180. adcp/types/generated_poc/signals/get_signals_response.py +15 -15
  181. {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/METADATA +1 -1
  182. adcp-2.19.0.dist-info/RECORD +220 -0
  183. adcp-2.18.0.dist-info/RECORD +0 -195
  184. {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/WHEEL +0 -0
  185. {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/entry_points.txt +0 -0
  186. {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/licenses/LICENSE +0 -0
  187. {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,33 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: property/property_error.json
3
+ # timestamp: 2026-01-14T17:08:13+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-14T17:08:13+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-14T17:08:13+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-14T17:08:13+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-14T17:08:13+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-14T17:08:13+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.AdvertisingChannels],
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-14T17:08:13+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-14T17:08:13+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")]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: protocols/adcp_extension.json
3
- # timestamp: 2026-01-08T19:25:24+00:00
3
+ # timestamp: 2026-01-14T17:08:13+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -8,30 +8,46 @@ from enum import Enum
8
8
  from typing import Annotated
9
9
 
10
10
  from adcp.types.base import AdCPBaseModel
11
- from pydantic import ConfigDict, Field
11
+ from pydantic import ConfigDict, Field, RootModel
12
+
13
+
14
+ class ExtensionsSupportedItem(RootModel[str]):
15
+ root: Annotated[
16
+ str,
17
+ Field(
18
+ description="Extension namespace (e.g., 'sustainability'). Must be lowercase alphanumeric with underscores.",
19
+ pattern="^[a-z][a-z0-9_]*$",
20
+ ),
21
+ ]
12
22
 
13
23
 
14
24
  class ProtocolsSupportedEnum(Enum):
15
- media_buy = 'media_buy'
16
- creative = 'creative'
17
- signals = 'signals'
25
+ media_buy = "media_buy"
26
+ creative = "creative"
27
+ signals = "signals"
18
28
 
19
29
 
20
- class AdcpAgentCardExtension(AdCPBaseModel):
30
+ class AdcpAgentCardExtensionParams(AdCPBaseModel):
21
31
  model_config = ConfigDict(
22
- extra='allow',
32
+ extra="allow",
23
33
  )
24
34
  adcp_version: Annotated[
25
35
  str,
26
36
  Field(
27
- description="Semantic version of the AdCP specification this agent implements (e.g., '2.4.0')",
28
- pattern='^\\d+\\.\\d+\\.\\d+$',
37
+ description="Semantic version of the AdCP specification this agent implements (e.g., '2.5.0'). Extension schemas are versioned along with the AdCP spec.",
38
+ pattern="^\\d+\\.\\d+\\.\\d+$",
29
39
  ),
30
40
  ]
41
+ extensions_supported: Annotated[
42
+ list[ExtensionsSupportedItem] | None,
43
+ Field(
44
+ description="Typed extensions this agent supports. Each extension has a formal schema in /schemas/extensions/. Extension version is determined by adcp_version."
45
+ ),
46
+ ] = None
31
47
  protocols_supported: Annotated[
32
48
  list[ProtocolsSupportedEnum],
33
49
  Field(
34
- description='AdCP protocol domains supported by this agent. At least one must be specified.',
50
+ description="AdCP protocol domains supported by this agent. At least one must be specified.",
35
51
  min_length=1,
36
52
  ),
37
53
  ]
@@ -16,17 +16,17 @@ from ..core import ext as ext_1
16
16
 
17
17
  class ActivateSignalRequest(AdCPBaseModel):
18
18
  model_config = ConfigDict(
19
- extra='allow',
19
+ extra="allow",
20
20
  )
21
21
  context: context_1.ContextObject | None = None
22
22
  deployments: Annotated[
23
23
  list[destination.Destination],
24
24
  Field(
25
- description='Target deployment(s) for activation. If the authenticated caller matches one of these deployment targets, activation keys will be included in the response.',
25
+ description="Target deployment(s) for activation. If the authenticated caller matches one of these deployment targets, activation keys will be included in the response.",
26
26
  min_length=1,
27
27
  ),
28
28
  ]
29
29
  ext: ext_1.ExtensionObject | None = None
30
30
  signal_agent_segment_id: Annotated[
31
- str, Field(description='The universal identifier for the signal to activate')
31
+ str, Field(description="The universal identifier for the signal to activate")
32
32
  ]
@@ -16,25 +16,25 @@ from ..core import ext as ext_1
16
16
 
17
17
  class ActivateSignalResponse1(AdCPBaseModel):
18
18
  model_config = ConfigDict(
19
- extra='allow',
19
+ extra="allow",
20
20
  )
21
21
  context: context_1.ContextObject | None = None
22
22
  deployments: Annotated[
23
23
  list[deployment.Deployment],
24
- Field(description='Array of deployment results for each deployment target'),
24
+ Field(description="Array of deployment results for each deployment target"),
25
25
  ]
26
26
  ext: ext_1.ExtensionObject | None = None
27
27
 
28
28
 
29
29
  class ActivateSignalResponse2(AdCPBaseModel):
30
30
  model_config = ConfigDict(
31
- extra='allow',
31
+ extra="allow",
32
32
  )
33
33
  context: context_1.ContextObject | None = None
34
34
  errors: Annotated[
35
35
  list[error.Error],
36
36
  Field(
37
- description='Array of errors explaining why activation failed (e.g., platform connectivity issues, signal definition problems, authentication failures)',
37
+ description="Array of errors explaining why activation failed (e.g., platform connectivity issues, signal definition problems, authentication failures)",
38
38
  min_length=1,
39
39
  ),
40
40
  ]
@@ -45,7 +45,7 @@ class ActivateSignalResponse(RootModel[ActivateSignalResponse1 | ActivateSignalR
45
45
  root: Annotated[
46
46
  ActivateSignalResponse1 | ActivateSignalResponse2,
47
47
  Field(
48
- description='Response payload for activate_signal task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - the signal is either fully activated or not activated at all.',
49
- title='Activate Signal Response',
48
+ description="Response payload for activate_signal task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - the signal is either fully activated or not activated at all.",
49
+ title="Activate Signal Response",
50
50
  ),
51
51
  ]
@@ -16,20 +16,20 @@ from ..core import signal_filters
16
16
 
17
17
 
18
18
  class Country(RootModel[str]):
19
- root: Annotated[str, Field(pattern='^[A-Z]{2}$')]
19
+ root: Annotated[str, Field(pattern="^[A-Z]{2}$")]
20
20
 
21
21
 
22
22
  class DeliverTo(AdCPBaseModel):
23
23
  model_config = ConfigDict(
24
- extra='allow',
24
+ extra="allow",
25
25
  )
26
26
  countries: Annotated[
27
- list[Country], Field(description='Countries where signals will be used (ISO codes)')
27
+ list[Country], Field(description="Countries where signals will be used (ISO codes)")
28
28
  ]
29
29
  deployments: Annotated[
30
30
  list[destination.Destination],
31
31
  Field(
32
- description='List of deployment targets (DSPs, sales agents, etc.). If the authenticated caller matches one of these deployment targets, activation keys will be included in the response.',
32
+ description="List of deployment targets (DSPs, sales agents, etc.). If the authenticated caller matches one of these deployment targets, activation keys will be included in the response.",
33
33
  min_length=1,
34
34
  ),
35
35
  ]
@@ -37,17 +37,17 @@ class DeliverTo(AdCPBaseModel):
37
37
 
38
38
  class GetSignalsRequest(AdCPBaseModel):
39
39
  model_config = ConfigDict(
40
- extra='allow',
40
+ extra="allow",
41
41
  )
42
42
  context: context_1.ContextObject | None = None
43
43
  deliver_to: Annotated[
44
- DeliverTo, Field(description='Deployment targets where signals need to be activated')
44
+ DeliverTo, Field(description="Deployment targets where signals need to be activated")
45
45
  ]
46
46
  ext: ext_1.ExtensionObject | None = None
47
47
  filters: signal_filters.SignalFilters | None = None
48
48
  max_results: Annotated[
49
- int | None, Field(description='Maximum number of results to return', ge=1)
49
+ int | None, Field(description="Maximum number of results to return", ge=1)
50
50
  ] = None
51
51
  signal_spec: Annotated[
52
- str, Field(description='Natural language description of the desired signals')
52
+ str, Field(description="Natural language description of the desired signals")
53
53
  ]
@@ -17,42 +17,42 @@ from ..enums import signal_catalog_type
17
17
 
18
18
  class Pricing(AdCPBaseModel):
19
19
  model_config = ConfigDict(
20
- extra='allow',
20
+ extra="allow",
21
21
  )
22
- cpm: Annotated[float, Field(description='Cost per thousand impressions', ge=0.0)]
23
- currency: Annotated[str, Field(description='Currency code', pattern='^[A-Z]{3}$')]
22
+ cpm: Annotated[float, Field(description="Cost per thousand impressions", ge=0.0)]
23
+ currency: Annotated[str, Field(description="Currency code", pattern="^[A-Z]{3}$")]
24
24
 
25
25
 
26
26
  class Signal(AdCPBaseModel):
27
27
  model_config = ConfigDict(
28
- extra='allow',
28
+ extra="allow",
29
29
  )
30
30
  coverage_percentage: Annotated[
31
- float, Field(description='Percentage of audience coverage', ge=0.0, le=100.0)
31
+ float, Field(description="Percentage of audience coverage", ge=0.0, le=100.0)
32
32
  ]
33
- data_provider: Annotated[str, Field(description='Name of the data provider')]
33
+ data_provider: Annotated[str, Field(description="Name of the data provider")]
34
34
  deployments: Annotated[
35
- list[deployment.Deployment], Field(description='Array of deployment targets')
35
+ list[deployment.Deployment], Field(description="Array of deployment targets")
36
36
  ]
37
- description: Annotated[str, Field(description='Detailed signal description')]
38
- name: Annotated[str, Field(description='Human-readable signal name')]
39
- pricing: Annotated[Pricing, Field(description='Pricing information')]
40
- signal_agent_segment_id: Annotated[str, Field(description='Unique identifier for the signal')]
37
+ description: Annotated[str, Field(description="Detailed signal description")]
38
+ name: Annotated[str, Field(description="Human-readable signal name")]
39
+ pricing: Annotated[Pricing, Field(description="Pricing information")]
40
+ signal_agent_segment_id: Annotated[str, Field(description="Unique identifier for the signal")]
41
41
  signal_type: Annotated[
42
- signal_catalog_type.SignalCatalogType, Field(description='Type of signal')
42
+ signal_catalog_type.SignalCatalogType, Field(description="Type of signal")
43
43
  ]
44
44
 
45
45
 
46
46
  class GetSignalsResponse(AdCPBaseModel):
47
47
  model_config = ConfigDict(
48
- extra='allow',
48
+ extra="allow",
49
49
  )
50
50
  context: context_1.ContextObject | None = None
51
51
  errors: Annotated[
52
52
  list[error.Error] | None,
53
53
  Field(
54
- description='Task-specific errors and warnings (e.g., signal discovery or pricing issues)'
54
+ description="Task-specific errors and warnings (e.g., signal discovery or pricing issues)"
55
55
  ),
56
56
  ] = None
57
57
  ext: ext_1.ExtensionObject | None = None
58
- signals: Annotated[list[Signal], Field(description='Array of matching signals')]
58
+ signals: Annotated[list[Signal], Field(description="Array of matching signals")]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: adcp
3
- Version: 2.18.0
3
+ Version: 2.19.0
4
4
  Summary: Official Python client for the Ad Context Protocol (AdCP)
5
5
  Author-email: AdCP Community <maintainers@adcontextprotocol.org>
6
6
  License: Apache-2.0