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
@@ -12,7 +12,7 @@ from pydantic import ConfigDict, Field
12
12
 
13
13
  class Parameters(AdCPBaseModel):
14
14
  model_config = ConfigDict(
15
- extra='allow',
15
+ extra="allow",
16
16
  )
17
17
  daypart: Annotated[
18
18
  str | None,
@@ -22,28 +22,28 @@ class Parameters(AdCPBaseModel):
22
22
  ] = None
23
23
  duration_hours: Annotated[
24
24
  float | None,
25
- Field(description='Duration in hours for time-based flat rate pricing (DOOH)', ge=0.0),
25
+ Field(description="Duration in hours for time-based flat rate pricing (DOOH)", ge=0.0),
26
26
  ] = None
27
27
  estimated_impressions: Annotated[
28
28
  int | None,
29
29
  Field(
30
- description='Estimated impressions for this flat rate option (informational, commonly used with SOV or time-based DOOH)',
30
+ description="Estimated impressions for this flat rate option (informational, commonly used with SOV or time-based DOOH)",
31
31
  ge=0,
32
32
  ),
33
33
  ] = None
34
34
  loop_duration_seconds: Annotated[
35
- int | None, Field(description='Duration of ad loop rotation in seconds (DOOH)', ge=1)
35
+ int | None, Field(description="Duration of ad loop rotation in seconds (DOOH)", ge=1)
36
36
  ] = None
37
37
  min_plays_per_hour: Annotated[
38
38
  int | None,
39
39
  Field(
40
- description='Minimum number of times ad plays per hour (DOOH frequency guarantee)', ge=0
40
+ description="Minimum number of times ad plays per hour (DOOH frequency guarantee)", ge=0
41
41
  ),
42
42
  ] = None
43
43
  sov_percentage: Annotated[
44
44
  float | None,
45
45
  Field(
46
- description='Guaranteed share of voice as percentage (DOOH, 0-100)', ge=0.0, le=100.0
46
+ description="Guaranteed share of voice as percentage (DOOH, 0-100)", ge=0.0, le=100.0
47
47
  ),
48
48
  ] = None
49
49
  venue_package: Annotated[
@@ -56,33 +56,33 @@ class Parameters(AdCPBaseModel):
56
56
 
57
57
  class FlatRatePricingOption(AdCPBaseModel):
58
58
  model_config = ConfigDict(
59
- extra='allow',
59
+ extra="allow",
60
60
  )
61
61
  currency: Annotated[
62
62
  str,
63
63
  Field(
64
- description='ISO 4217 currency code',
65
- examples=['USD', 'EUR', 'GBP', 'JPY'],
66
- pattern='^[A-Z]{3}$',
64
+ description="ISO 4217 currency code",
65
+ examples=["USD", "EUR", "GBP", "JPY"],
66
+ pattern="^[A-Z]{3}$",
67
67
  ),
68
68
  ]
69
69
  is_fixed: Annotated[
70
70
  Literal[True],
71
- Field(description='Whether this is a fixed rate (true) or auction-based (false)'),
71
+ Field(description="Whether this is a fixed rate (true) or auction-based (false)"),
72
72
  ]
73
73
  min_spend_per_package: Annotated[
74
74
  float | None,
75
75
  Field(
76
- description='Minimum spend requirement per package using this pricing option, in the specified currency',
76
+ description="Minimum spend requirement per package using this pricing option, in the specified currency",
77
77
  ge=0.0,
78
78
  ),
79
79
  ] = None
80
80
  parameters: Annotated[
81
81
  Parameters | None,
82
- Field(description='Flat rate parameters for DOOH and time-based campaigns'),
82
+ Field(description="Flat rate parameters for DOOH and time-based campaigns"),
83
83
  ] = None
84
84
  pricing_model: Annotated[
85
- Literal['flat_rate'], Field(description='Fixed cost regardless of delivery volume')
85
+ Literal["flat_rate"], Field(description="Fixed cost regardless of delivery volume")
86
86
  ]
87
87
  pricing_option_id: Annotated[
88
88
  str,
@@ -90,4 +90,4 @@ class FlatRatePricingOption(AdCPBaseModel):
90
90
  description="Unique identifier for this pricing option within the product (e.g., 'flat_rate_usd_24h_takeover')"
91
91
  ),
92
92
  ]
93
- rate: Annotated[float, Field(description='Flat rate cost', ge=0.0)]
93
+ rate: Annotated[float, Field(description="Flat rate cost", ge=0.0)]
@@ -11,47 +11,47 @@ from pydantic import ConfigDict, Field
11
11
 
12
12
 
13
13
  class PriceGuidance(AdCPBaseModel):
14
- floor: Annotated[float, Field(description='Minimum acceptable bid price', ge=0.0)]
14
+ floor: Annotated[float, Field(description="Minimum acceptable bid price", ge=0.0)]
15
15
  p25: Annotated[
16
- float | None, Field(description='25th percentile of recent winning bids', ge=0.0)
16
+ float | None, Field(description="25th percentile of recent winning bids", ge=0.0)
17
17
  ] = None
18
- p50: Annotated[float | None, Field(description='Median of recent winning bids', ge=0.0)] = None
18
+ p50: Annotated[float | None, Field(description="Median of recent winning bids", ge=0.0)] = None
19
19
  p75: Annotated[
20
- float | None, Field(description='75th percentile of recent winning bids', ge=0.0)
20
+ float | None, Field(description="75th percentile of recent winning bids", ge=0.0)
21
21
  ] = None
22
22
  p90: Annotated[
23
- float | None, Field(description='90th percentile of recent winning bids', ge=0.0)
23
+ float | None, Field(description="90th percentile of recent winning bids", ge=0.0)
24
24
  ] = None
25
25
 
26
26
 
27
27
  class VcpmAuctionPricingOption(AdCPBaseModel):
28
28
  model_config = ConfigDict(
29
- extra='allow',
29
+ extra="allow",
30
30
  )
31
31
  currency: Annotated[
32
32
  str,
33
33
  Field(
34
- description='ISO 4217 currency code',
35
- examples=['USD', 'EUR', 'GBP', 'JPY'],
36
- pattern='^[A-Z]{3}$',
34
+ description="ISO 4217 currency code",
35
+ examples=["USD", "EUR", "GBP", "JPY"],
36
+ pattern="^[A-Z]{3}$",
37
37
  ),
38
38
  ]
39
39
  is_fixed: Annotated[
40
40
  Literal[False],
41
- Field(description='Whether this is a fixed rate (true) or auction-based (false)'),
41
+ Field(description="Whether this is a fixed rate (true) or auction-based (false)"),
42
42
  ]
43
43
  min_spend_per_package: Annotated[
44
44
  float | None,
45
45
  Field(
46
- description='Minimum spend requirement per package using this pricing option, in the specified currency',
46
+ description="Minimum spend requirement per package using this pricing option, in the specified currency",
47
47
  ge=0.0,
48
48
  ),
49
49
  ] = None
50
50
  price_guidance: Annotated[
51
- PriceGuidance, Field(description='Statistical guidance for auction pricing')
51
+ PriceGuidance, Field(description="Statistical guidance for auction pricing")
52
52
  ]
53
53
  pricing_model: Annotated[
54
- Literal['vcpm'], Field(description='Cost per 1,000 viewable impressions (MRC standard)')
54
+ Literal["vcpm"], Field(description="Cost per 1,000 viewable impressions (MRC standard)")
55
55
  ]
56
56
  pricing_option_id: Annotated[
57
57
  str,
@@ -12,29 +12,29 @@ from pydantic import ConfigDict, Field
12
12
 
13
13
  class VcpmFixedRatePricingOption(AdCPBaseModel):
14
14
  model_config = ConfigDict(
15
- extra='allow',
15
+ extra="allow",
16
16
  )
17
17
  currency: Annotated[
18
18
  str,
19
19
  Field(
20
- description='ISO 4217 currency code',
21
- examples=['USD', 'EUR', 'GBP', 'JPY'],
22
- pattern='^[A-Z]{3}$',
20
+ description="ISO 4217 currency code",
21
+ examples=["USD", "EUR", "GBP", "JPY"],
22
+ pattern="^[A-Z]{3}$",
23
23
  ),
24
24
  ]
25
25
  is_fixed: Annotated[
26
26
  Literal[True],
27
- Field(description='Whether this is a fixed rate (true) or auction-based (false)'),
27
+ Field(description="Whether this is a fixed rate (true) or auction-based (false)"),
28
28
  ]
29
29
  min_spend_per_package: Annotated[
30
30
  float | None,
31
31
  Field(
32
- description='Minimum spend requirement per package using this pricing option, in the specified currency',
32
+ description="Minimum spend requirement per package using this pricing option, in the specified currency",
33
33
  ge=0.0,
34
34
  ),
35
35
  ] = None
36
36
  pricing_model: Annotated[
37
- Literal['vcpm'], Field(description='Cost per 1,000 viewable impressions (MRC standard)')
37
+ Literal["vcpm"], Field(description="Cost per 1,000 viewable impressions (MRC standard)")
38
38
  ]
39
39
  pricing_option_id: Annotated[
40
40
  str,
@@ -43,5 +43,5 @@ class VcpmFixedRatePricingOption(AdCPBaseModel):
43
43
  ),
44
44
  ]
45
45
  rate: Annotated[
46
- float, Field(description='Fixed vCPM rate (cost per 1,000 viewable impressions)', ge=0.0)
46
+ float, Field(description="Fixed vCPM rate (cost per 1,000 viewable impressions)", ge=0.0)
47
47
  ]
@@ -0,0 +1,3 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: .schema_temp
3
+ # timestamp: 2026-01-14T17:08:13+00:00
@@ -0,0 +1,86 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: property/base_property_source.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 ConfigDict, Field, RootModel
11
+
12
+ from ..core import identifier, property_id, property_tag
13
+
14
+
15
+ class BasePropertySource1(AdCPBaseModel):
16
+ model_config = ConfigDict(
17
+ extra="forbid",
18
+ )
19
+ publisher_domain: Annotated[
20
+ str,
21
+ Field(
22
+ description="Domain where publisher's adagents.json is hosted (e.g., 'raptive.com')",
23
+ pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$",
24
+ ),
25
+ ]
26
+ selection_type: Annotated[
27
+ Literal["publisher_tags"],
28
+ Field(description="Discriminator indicating selection by property tags within a publisher"),
29
+ ]
30
+ tags: Annotated[
31
+ list[property_tag.PropertyTag],
32
+ Field(
33
+ description="Property tags from the publisher's adagents.json. Selects all properties with these tags.",
34
+ min_length=1,
35
+ ),
36
+ ]
37
+
38
+
39
+ class BasePropertySource2(AdCPBaseModel):
40
+ model_config = ConfigDict(
41
+ extra="forbid",
42
+ )
43
+ property_ids: Annotated[
44
+ list[property_id.PropertyId],
45
+ Field(description="Specific property IDs from the publisher's adagents.json", min_length=1),
46
+ ]
47
+ publisher_domain: Annotated[
48
+ str,
49
+ Field(
50
+ description="Domain where publisher's adagents.json is hosted (e.g., 'raptive.com')",
51
+ pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$",
52
+ ),
53
+ ]
54
+ selection_type: Annotated[
55
+ Literal["publisher_ids"],
56
+ Field(
57
+ description="Discriminator indicating selection by specific property IDs within a publisher"
58
+ ),
59
+ ]
60
+
61
+
62
+ class BasePropertySource3(AdCPBaseModel):
63
+ model_config = ConfigDict(
64
+ extra="forbid",
65
+ )
66
+ identifiers: Annotated[
67
+ list[identifier.Identifier],
68
+ Field(description="Direct property identifiers (domains, app IDs, etc.)", min_length=1),
69
+ ]
70
+ selection_type: Annotated[
71
+ Literal["identifiers"],
72
+ Field(description="Discriminator indicating selection by direct identifiers"),
73
+ ]
74
+
75
+
76
+ class BasePropertySource(
77
+ RootModel[BasePropertySource1 | BasePropertySource2 | BasePropertySource3]
78
+ ):
79
+ root: Annotated[
80
+ BasePropertySource1 | BasePropertySource2 | BasePropertySource3,
81
+ Field(
82
+ description="A source of properties for a property list. Supports three selection patterns: publisher with tags, publisher with property IDs, or direct identifiers.",
83
+ discriminator="selection_type",
84
+ title="Base Property Source",
85
+ ),
86
+ ]
@@ -0,0 +1,43 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: property/create_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 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 CreatePropertyListRequest(AdCPBaseModel):
19
+ model_config = ConfigDict(
20
+ extra="forbid",
21
+ )
22
+ base_properties: Annotated[
23
+ list[base_property_source.BasePropertySource] | None,
24
+ Field(
25
+ 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."
26
+ ),
27
+ ] = None
28
+ brand_manifest: Annotated[
29
+ brand_manifest_1.BrandManifest | None,
30
+ Field(
31
+ description="Brand identity and requirements. When provided, the agent automatically applies appropriate rules based on brand characteristics (industry, target_audience, etc.)."
32
+ ),
33
+ ] = None
34
+ context: context_1.ContextObject | None = None
35
+ description: Annotated[str | None, Field(description="Description of the list's purpose")] = (
36
+ None
37
+ )
38
+ ext: ext_1.ExtensionObject | None = None
39
+ filters: Annotated[
40
+ property_list_filters.PropertyListFilters | None,
41
+ Field(description="Dynamic filters to apply when resolving the list"),
42
+ ] = None
43
+ name: Annotated[str, Field(description="Human-readable name for the list")]
@@ -0,0 +1,27 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: property/create_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 CreatePropertyListResponse(AdCPBaseModel):
17
+ model_config = ConfigDict(
18
+ extra="forbid",
19
+ )
20
+ auth_token: Annotated[
21
+ str,
22
+ Field(
23
+ description="Token that can be shared with sellers to authorize fetching this list. Store this - it is only returned at creation time."
24
+ ),
25
+ ]
26
+ ext: ext_1.ExtensionObject | None = None
27
+ list: Annotated[property_list.PropertyList, Field(description="The created property list")]
@@ -0,0 +1,22 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: property/delete_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 ConfigDict, Field
11
+
12
+ from ..core import context as context_1
13
+ from ..core import ext as ext_1
14
+
15
+
16
+ class DeletePropertyListRequest(AdCPBaseModel):
17
+ model_config = ConfigDict(
18
+ extra="forbid",
19
+ )
20
+ context: context_1.ContextObject | None = None
21
+ ext: ext_1.ExtensionObject | None = None
22
+ list_id: Annotated[str, Field(description="ID of the property list to delete")]
@@ -0,0 +1,21 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: property/delete_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
+
14
+
15
+ class DeletePropertyListResponse(AdCPBaseModel):
16
+ model_config = ConfigDict(
17
+ extra="forbid",
18
+ )
19
+ deleted: Annotated[bool, Field(description="Whether the list was successfully deleted")]
20
+ ext: ext_1.ExtensionObject | None = None
21
+ list_id: Annotated[str, Field(description="ID of the deleted list")]
@@ -0,0 +1,42 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: property/feature_requirement.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, Any
9
+
10
+ from adcp.types.base import AdCPBaseModel
11
+ from pydantic import ConfigDict, Field
12
+
13
+
14
+ class IfNotCovered(Enum):
15
+ exclude = "exclude"
16
+ include = "include"
17
+
18
+
19
+ class FeatureRequirement(AdCPBaseModel):
20
+ model_config = ConfigDict(
21
+ extra="forbid",
22
+ )
23
+ allowed_values: Annotated[
24
+ list[Any] | None,
25
+ Field(description="Values that pass the requirement (for binary/categorical features)"),
26
+ ] = None
27
+ feature_id: Annotated[
28
+ str, Field(description="Feature to evaluate (discovered via list_property_features)")
29
+ ]
30
+ if_not_covered: Annotated[
31
+ IfNotCovered | None,
32
+ Field(
33
+ description="How to handle properties where this feature is not covered. 'exclude' (default): property is removed from the list. 'include': property passes this requirement (fail-open)."
34
+ ),
35
+ ] = IfNotCovered.exclude
36
+ max_value: Annotated[
37
+ float | None, Field(description="Maximum numeric value allowed (for quantitative features)")
38
+ ] = None
39
+ min_value: Annotated[
40
+ float | None,
41
+ Field(description="Minimum numeric value required (for quantitative features)"),
42
+ ] = None
@@ -0,0 +1,34 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: property/get_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 ConfigDict, Field
11
+
12
+ from ..core import context as context_1
13
+ from ..core import ext as ext_1
14
+
15
+
16
+ class GetPropertyListRequest(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 for large result sets")] = (
22
+ None
23
+ )
24
+ ext: ext_1.ExtensionObject | None = None
25
+ list_id: Annotated[str, Field(description="ID of the property list to retrieve")]
26
+ max_results: Annotated[
27
+ int | None, Field(description="Maximum identifiers to return (for large lists)", ge=1)
28
+ ] = None
29
+ resolve: Annotated[
30
+ bool | None,
31
+ Field(
32
+ description="Whether to apply filters and return resolved identifiers (default: true)"
33
+ ),
34
+ ] = True
@@ -0,0 +1,61 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: property/get_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 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,25 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: property/list_property_features_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 ConfigDict, Field
11
+
12
+ from ..core import ext as ext_1
13
+
14
+
15
+ class ListPropertyFeaturesRequest(AdCPBaseModel):
16
+ model_config = ConfigDict(
17
+ extra="forbid",
18
+ )
19
+ countries: Annotated[
20
+ list[str] | None, Field(description="Filter to features available in these countries")
21
+ ] = None
22
+ ext: ext_1.ExtensionObject | None = None
23
+ property_types: Annotated[
24
+ list[str] | None, Field(description="Filter to features available for these property types")
25
+ ] = None
@@ -0,0 +1,24 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: property/list_property_features_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_feature_definition
14
+
15
+
16
+ class ListPropertyFeaturesResponse(AdCPBaseModel):
17
+ model_config = ConfigDict(
18
+ extra="forbid",
19
+ )
20
+ ext: ext_1.ExtensionObject | None = None
21
+ features: Annotated[
22
+ list[property_feature_definition.PropertyFeatureDefinition],
23
+ Field(description="Features this agent can evaluate"),
24
+ ]
@@ -0,0 +1,29 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: property/list_property_lists_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 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-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 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