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.
- adcp/ADCP_VERSION +1 -1
- adcp/__init__.py +6 -14
- adcp/__main__.py +94 -51
- adcp/adagents.py +91 -19
- adcp/client.py +865 -0
- adcp/protocols/a2a.py +84 -0
- adcp/protocols/base.py +101 -0
- adcp/protocols/mcp.py +87 -1
- adcp/server/__init__.py +49 -0
- adcp/server/base.py +368 -0
- adcp/server/content_standards.py +561 -0
- adcp/server/governance.py +491 -0
- adcp/server/mcp_tools.py +471 -0
- adcp/server/proposal.py +334 -0
- adcp/server/sponsored_intelligence.py +444 -0
- adcp/types/__init__.py +111 -23
- adcp/types/_ergonomic.py +35 -18
- adcp/types/_generated.py +419 -44
- adcp/types/aliases.py +13 -20
- adcp/types/base.py +1 -1
- adcp/types/generated_poc/adagents.py +103 -6
- adcp/types/generated_poc/content_standards/__init__.py +3 -0
- adcp/types/generated_poc/content_standards/artifact.py +208 -0
- adcp/types/generated_poc/content_standards/artifact_webhook_payload.py +64 -0
- adcp/types/generated_poc/content_standards/calibrate_content_request.py +17 -0
- adcp/types/generated_poc/content_standards/calibrate_content_response.py +74 -0
- adcp/types/generated_poc/content_standards/content_standards.py +66 -0
- adcp/types/generated_poc/content_standards/create_content_standards_request.py +97 -0
- adcp/types/generated_poc/content_standards/create_content_standards_response.py +52 -0
- adcp/types/generated_poc/content_standards/get_content_standards_request.py +21 -0
- adcp/types/generated_poc/content_standards/get_content_standards_response.py +43 -0
- adcp/types/generated_poc/content_standards/get_media_buy_artifacts_request.py +64 -0
- adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py +117 -0
- adcp/types/generated_poc/content_standards/list_content_standards_request.py +31 -0
- adcp/types/generated_poc/content_standards/list_content_standards_response.py +48 -0
- adcp/types/generated_poc/content_standards/update_content_standards_request.py +101 -0
- adcp/types/generated_poc/content_standards/update_content_standards_response.py +34 -0
- adcp/types/generated_poc/content_standards/validate_content_delivery_request.py +59 -0
- adcp/types/generated_poc/content_standards/validate_content_delivery_response.py +85 -0
- adcp/types/generated_poc/core/activation_key.py +1 -1
- adcp/types/generated_poc/core/assets/audio_asset.py +1 -1
- adcp/types/generated_poc/core/assets/css_asset.py +1 -1
- adcp/types/generated_poc/core/assets/daast_asset.py +1 -1
- adcp/types/generated_poc/core/assets/html_asset.py +1 -1
- adcp/types/generated_poc/core/assets/image_asset.py +1 -1
- adcp/types/generated_poc/core/assets/javascript_asset.py +1 -1
- adcp/types/generated_poc/core/assets/text_asset.py +1 -1
- adcp/types/generated_poc/core/assets/url_asset.py +1 -1
- adcp/types/generated_poc/core/assets/vast_asset.py +1 -1
- adcp/types/generated_poc/core/assets/video_asset.py +1 -1
- adcp/types/generated_poc/core/assets/webhook_asset.py +1 -1
- adcp/types/generated_poc/core/async_response_data.py +1 -1
- adcp/types/generated_poc/core/brand_manifest.py +68 -5
- adcp/types/generated_poc/core/brand_manifest_ref.py +1 -1
- adcp/types/generated_poc/core/context.py +1 -1
- adcp/types/generated_poc/core/creative_asset.py +8 -7
- adcp/types/generated_poc/core/creative_assignment.py +1 -1
- adcp/types/generated_poc/core/creative_filters.py +4 -14
- adcp/types/generated_poc/core/creative_manifest.py +1 -1
- adcp/types/generated_poc/core/creative_policy.py +1 -1
- adcp/types/generated_poc/core/delivery_metrics.py +1 -1
- adcp/types/generated_poc/core/deployment.py +1 -1
- adcp/types/generated_poc/core/destination.py +1 -1
- adcp/types/generated_poc/core/error.py +1 -1
- adcp/types/generated_poc/core/ext.py +1 -1
- adcp/types/generated_poc/core/format.py +6 -5
- adcp/types/generated_poc/core/format_id.py +1 -1
- adcp/types/generated_poc/core/frequency_cap.py +1 -1
- adcp/types/generated_poc/core/identifier.py +27 -0
- adcp/types/generated_poc/core/mcp_webhook_payload.py +1 -1
- adcp/types/generated_poc/core/measurement.py +1 -1
- adcp/types/generated_poc/core/media_buy.py +1 -1
- adcp/types/generated_poc/core/media_buy_features.py +29 -0
- adcp/types/generated_poc/core/offering.py +80 -0
- adcp/types/generated_poc/core/package.py +1 -1
- adcp/types/generated_poc/core/performance_feedback.py +1 -1
- adcp/types/generated_poc/core/placement.py +1 -1
- adcp/types/generated_poc/core/pricing_option.py +8 -14
- adcp/types/generated_poc/core/product.py +1 -1
- adcp/types/generated_poc/core/product_allocation.py +48 -0
- adcp/types/generated_poc/core/product_filters.py +72 -7
- adcp/types/generated_poc/core/promoted_offerings.py +12 -21
- adcp/types/generated_poc/core/promoted_products.py +1 -1
- adcp/types/generated_poc/core/property.py +1 -1
- adcp/types/generated_poc/core/property_id.py +1 -1
- adcp/types/generated_poc/core/property_list_ref.py +26 -0
- adcp/types/generated_poc/core/property_tag.py +1 -1
- adcp/types/generated_poc/core/proposal.py +64 -0
- adcp/types/generated_poc/core/protocol_envelope.py +1 -1
- adcp/types/generated_poc/core/publisher_property_selector.py +1 -1
- adcp/types/generated_poc/core/push_notification_config.py +1 -1
- adcp/types/generated_poc/core/reporting_capabilities.py +1 -1
- adcp/types/generated_poc/core/reporting_webhook.py +70 -0
- adcp/types/generated_poc/core/response.py +1 -1
- adcp/types/generated_poc/core/signal_filters.py +1 -1
- adcp/types/generated_poc/core/start_timing.py +4 -4
- adcp/types/generated_poc/core/sub_asset.py +1 -1
- adcp/types/generated_poc/core/targeting.py +55 -14
- adcp/types/generated_poc/creative/list_creative_formats_request.py +1 -1
- adcp/types/generated_poc/creative/list_creative_formats_response.py +1 -1
- adcp/types/generated_poc/creative/preview_creative_request.py +1 -1
- adcp/types/generated_poc/creative/preview_creative_response.py +3 -2
- adcp/types/generated_poc/creative/preview_render.py +1 -1
- adcp/types/generated_poc/enums/adcp_domain.py +3 -1
- adcp/types/generated_poc/enums/asset_content_type.py +1 -1
- adcp/types/generated_poc/enums/auth_scheme.py +1 -1
- adcp/types/generated_poc/enums/available_metric.py +1 -1
- adcp/types/generated_poc/enums/channels.py +18 -8
- adcp/types/generated_poc/enums/co_branding_requirement.py +1 -1
- adcp/types/generated_poc/enums/creative_action.py +1 -1
- adcp/types/generated_poc/enums/creative_agent_capability.py +1 -1
- adcp/types/generated_poc/enums/creative_sort_field.py +1 -1
- adcp/types/generated_poc/enums/creative_status.py +2 -1
- adcp/types/generated_poc/enums/daast_tracking_event.py +1 -1
- adcp/types/generated_poc/enums/daast_version.py +1 -1
- adcp/types/generated_poc/enums/delivery_type.py +1 -1
- adcp/types/generated_poc/enums/dimension_unit.py +1 -1
- adcp/types/generated_poc/enums/feed_format.py +1 -1
- adcp/types/generated_poc/enums/feedback_source.py +1 -1
- adcp/types/generated_poc/enums/format_category.py +1 -1
- adcp/types/generated_poc/enums/format_id_parameter.py +1 -1
- adcp/types/generated_poc/enums/frequency_cap_scope.py +1 -1
- adcp/types/generated_poc/enums/geo_level.py +14 -0
- adcp/types/generated_poc/enums/history_entry_type.py +1 -1
- adcp/types/generated_poc/enums/http_method.py +1 -1
- adcp/types/generated_poc/enums/identifier_types.py +1 -1
- adcp/types/generated_poc/enums/javascript_module_type.py +1 -1
- adcp/types/generated_poc/enums/landing_page_requirement.py +1 -1
- adcp/types/generated_poc/enums/markdown_flavor.py +1 -1
- adcp/types/generated_poc/enums/media_buy_status.py +1 -1
- adcp/types/generated_poc/enums/metric_type.py +1 -1
- adcp/types/generated_poc/enums/metro_system.py +15 -0
- adcp/types/generated_poc/enums/notification_type.py +1 -1
- adcp/types/generated_poc/enums/pacing.py +1 -1
- adcp/types/generated_poc/enums/postal_system.py +19 -0
- adcp/types/generated_poc/enums/preview_output_format.py +1 -1
- adcp/types/generated_poc/enums/pricing_model.py +1 -1
- adcp/types/generated_poc/enums/property_type.py +2 -1
- adcp/types/generated_poc/enums/publisher_identifier_types.py +1 -1
- adcp/types/generated_poc/enums/reporting_frequency.py +1 -1
- adcp/types/generated_poc/enums/signal_catalog_type.py +1 -1
- adcp/types/generated_poc/enums/sort_direction.py +1 -1
- adcp/types/generated_poc/enums/task_status.py +1 -1
- adcp/types/generated_poc/enums/task_type.py +7 -1
- adcp/types/generated_poc/enums/update_frequency.py +1 -1
- adcp/types/generated_poc/enums/url_asset_type.py +1 -1
- adcp/types/generated_poc/enums/validation_mode.py +1 -1
- adcp/types/generated_poc/enums/vast_tracking_event.py +1 -1
- adcp/types/generated_poc/enums/vast_version.py +1 -1
- adcp/types/generated_poc/enums/webhook_response_type.py +1 -1
- adcp/types/generated_poc/enums/webhook_security_method.py +1 -1
- adcp/types/generated_poc/extensions/__init__.py +3 -0
- adcp/types/generated_poc/extensions/extension_meta.py +58 -0
- adcp/types/generated_poc/media_buy/build_creative_request.py +1 -1
- adcp/types/generated_poc/media_buy/build_creative_response.py +1 -1
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +1 -1
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +1 -1
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +1 -1
- adcp/types/generated_poc/media_buy/create_media_buy_request.py +54 -26
- adcp/types/generated_poc/media_buy/create_media_buy_response.py +1 -1
- adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +1 -1
- adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +1 -1
- adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +1 -1
- adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +1 -1
- adcp/types/generated_poc/media_buy/get_products_async_response_working.py +1 -1
- adcp/types/generated_poc/media_buy/get_products_request.py +18 -3
- adcp/types/generated_poc/media_buy/get_products_response.py +14 -2
- adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +1 -1
- adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +2 -2
- adcp/types/generated_poc/media_buy/list_creative_formats_request.py +1 -1
- adcp/types/generated_poc/media_buy/list_creative_formats_response.py +1 -1
- adcp/types/generated_poc/media_buy/list_creatives_request.py +2 -2
- adcp/types/generated_poc/media_buy/list_creatives_response.py +7 -10
- adcp/types/generated_poc/media_buy/package_request.py +15 -6
- adcp/types/generated_poc/media_buy/package_update.py +119 -0
- adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +1 -1
- adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +1 -1
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +1 -1
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +1 -1
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +1 -1
- adcp/types/generated_poc/media_buy/sync_creatives_request.py +1 -1
- adcp/types/generated_poc/media_buy/sync_creatives_response.py +1 -1
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +1 -1
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +1 -1
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +1 -1
- adcp/types/generated_poc/media_buy/update_media_buy_request.py +20 -108
- adcp/types/generated_poc/media_buy/update_media_buy_response.py +1 -1
- adcp/types/generated_poc/pricing_options/cpc_option.py +35 -10
- adcp/types/generated_poc/pricing_options/cpcv_option.py +35 -10
- adcp/types/generated_poc/pricing_options/{cpm_auction_option.py → cpm_option.py} +23 -19
- adcp/types/generated_poc/pricing_options/cpp_option.py +39 -16
- adcp/types/generated_poc/pricing_options/cpv_option.py +37 -18
- adcp/types/generated_poc/pricing_options/flat_rate_option.py +45 -39
- adcp/types/generated_poc/pricing_options/{vcpm_auction_option.py → vcpm_option.py} +23 -14
- adcp/types/generated_poc/property/__init__.py +3 -0
- adcp/types/generated_poc/property/base_property_source.py +86 -0
- adcp/types/generated_poc/property/create_property_list_request.py +43 -0
- adcp/types/generated_poc/property/create_property_list_response.py +27 -0
- adcp/types/generated_poc/property/delete_property_list_request.py +22 -0
- adcp/types/generated_poc/property/delete_property_list_response.py +21 -0
- adcp/types/generated_poc/property/feature_requirement.py +42 -0
- adcp/types/generated_poc/property/get_property_list_request.py +34 -0
- adcp/types/generated_poc/property/get_property_list_response.py +61 -0
- adcp/types/generated_poc/property/list_property_lists_request.py +29 -0
- adcp/types/generated_poc/property/list_property_lists_response.py +39 -0
- adcp/types/generated_poc/property/property_error.py +33 -0
- adcp/types/generated_poc/property/property_feature.py +22 -0
- adcp/types/generated_poc/property/property_feature_definition.py +80 -0
- adcp/types/generated_poc/property/property_list.py +62 -0
- adcp/types/generated_poc/property/property_list_changed_webhook.py +51 -0
- adcp/types/generated_poc/property/property_list_filters.py +47 -0
- adcp/types/generated_poc/property/update_property_list_request.py +46 -0
- adcp/types/generated_poc/property/update_property_list_response.py +21 -0
- adcp/types/generated_poc/protocol/__init__.py +3 -0
- adcp/types/generated_poc/protocol/get_adcp_capabilities_request.py +34 -0
- adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py +353 -0
- adcp/types/generated_poc/protocols/adcp_extension.py +18 -5
- adcp/types/generated_poc/signals/activate_signal_request.py +1 -1
- adcp/types/generated_poc/signals/activate_signal_response.py +1 -1
- adcp/types/generated_poc/signals/get_signals_request.py +1 -1
- adcp/types/generated_poc/signals/get_signals_response.py +1 -1
- adcp/types/generated_poc/sponsored_intelligence/__init__.py +3 -0
- adcp/types/generated_poc/sponsored_intelligence/si_capabilities.py +102 -0
- adcp/types/generated_poc/sponsored_intelligence/si_get_offering_request.py +34 -0
- adcp/types/generated_poc/sponsored_intelligence/si_get_offering_response.py +100 -0
- adcp/types/generated_poc/sponsored_intelligence/si_identity.py +78 -0
- adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_request.py +46 -0
- adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_response.py +44 -0
- adcp/types/generated_poc/sponsored_intelligence/si_send_message_request.py +58 -0
- adcp/types/generated_poc/sponsored_intelligence/si_send_message_response.py +101 -0
- adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_request.py +60 -0
- adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_response.py +54 -0
- adcp/types/generated_poc/sponsored_intelligence/si_ui_element.py +30 -0
- adcp/utils/format_assets.py +5 -5
- adcp/utils/preview_cache.py +2 -2
- {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/METADATA +1 -1
- adcp-3.0.0.dist-info/RECORD +264 -0
- {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/WHEEL +1 -1
- adcp/types/generated_poc/enums/standard_format_ids.py +0 -45
- adcp/types/generated_poc/pricing_options/cpm_fixed_option.py +0 -43
- adcp/types/generated_poc/pricing_options/vcpm_fixed_option.py +0 -47
- adcp-2.18.0.dist-info/RECORD +0 -195
- {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/entry_points.txt +0 -0
- {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/licenses/LICENSE +0 -0
- {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: pricing_options/cpp_option.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-26T11:40:01+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -17,13 +17,25 @@ class Parameters(AdCPBaseModel):
|
|
|
17
17
|
demographic: Annotated[
|
|
18
18
|
str,
|
|
19
19
|
Field(
|
|
20
|
-
description='Target demographic in Nielsen format
|
|
20
|
+
description='Target demographic in Nielsen format (P18-49, M25-54, W35+, etc.)',
|
|
21
21
|
pattern='^[PMWAC][0-9]{2}(-[0-9]{2}|\\+)$',
|
|
22
22
|
),
|
|
23
23
|
]
|
|
24
|
-
min_points: Annotated[
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
min_points: Annotated[float | None, Field(description='Minimum GRPs/TRPs required', ge=0.0)] = (
|
|
25
|
+
None
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class PriceGuidance(AdCPBaseModel):
|
|
30
|
+
p25: Annotated[
|
|
31
|
+
float | None, Field(description='25th percentile of recent winning bids', ge=0.0)
|
|
32
|
+
] = None
|
|
33
|
+
p50: Annotated[float | None, Field(description='Median of recent winning bids', ge=0.0)] = None
|
|
34
|
+
p75: Annotated[
|
|
35
|
+
float | None, Field(description='75th percentile of recent winning bids', ge=0.0)
|
|
36
|
+
] = None
|
|
37
|
+
p90: Annotated[
|
|
38
|
+
float | None, Field(description='90th percentile of recent winning bids', ge=0.0)
|
|
27
39
|
] = None
|
|
28
40
|
|
|
29
41
|
|
|
@@ -39,10 +51,20 @@ class CppPricingOption(AdCPBaseModel):
|
|
|
39
51
|
pattern='^[A-Z]{3}$',
|
|
40
52
|
),
|
|
41
53
|
]
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
Field(
|
|
45
|
-
|
|
54
|
+
fixed_price: Annotated[
|
|
55
|
+
float | None,
|
|
56
|
+
Field(
|
|
57
|
+
description='Fixed price per rating point. If present, this is fixed pricing. If absent, auction-based.',
|
|
58
|
+
ge=0.0,
|
|
59
|
+
),
|
|
60
|
+
] = None
|
|
61
|
+
floor_price: Annotated[
|
|
62
|
+
float | None,
|
|
63
|
+
Field(
|
|
64
|
+
description='Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.',
|
|
65
|
+
ge=0.0,
|
|
66
|
+
),
|
|
67
|
+
] = None
|
|
46
68
|
min_spend_per_package: Annotated[
|
|
47
69
|
float | None,
|
|
48
70
|
Field(
|
|
@@ -51,14 +73,15 @@ class CppPricingOption(AdCPBaseModel):
|
|
|
51
73
|
),
|
|
52
74
|
] = None
|
|
53
75
|
parameters: Annotated[
|
|
54
|
-
Parameters,
|
|
55
|
-
Field(description='CPP-specific parameters for demographic targeting and GRP requirements'),
|
|
76
|
+
Parameters, Field(description='CPP-specific parameters for demographic targeting')
|
|
56
77
|
]
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
str,
|
|
78
|
+
price_guidance: Annotated[
|
|
79
|
+
PriceGuidance | None,
|
|
60
80
|
Field(
|
|
61
|
-
description=
|
|
81
|
+
description='Optional pricing guidance for auction-based bidding. Helps buyers calibrate bids with historical percentiles.'
|
|
62
82
|
),
|
|
83
|
+
] = None
|
|
84
|
+
pricing_model: Annotated[Literal['cpp'], Field(description='Cost per Gross Rating Point')]
|
|
85
|
+
pricing_option_id: Annotated[
|
|
86
|
+
str, Field(description='Unique identifier for this pricing option within the product')
|
|
63
87
|
]
|
|
64
|
-
rate: Annotated[float, Field(description='Fixed CPP rate (cost per rating point)', ge=0.0)]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: pricing_options/cpv_option.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-26T11:40:01+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -14,7 +14,7 @@ class ViewThreshold(RootModel[float]):
|
|
|
14
14
|
root: Annotated[
|
|
15
15
|
float,
|
|
16
16
|
Field(
|
|
17
|
-
description='Percentage completion threshold
|
|
17
|
+
description='Percentage completion threshold (0.0 to 1.0, e.g., 0.5 = 50%)',
|
|
18
18
|
ge=0.0,
|
|
19
19
|
le=1.0,
|
|
20
20
|
),
|
|
@@ -25,13 +25,7 @@ class ViewThreshold1(AdCPBaseModel):
|
|
|
25
25
|
model_config = ConfigDict(
|
|
26
26
|
extra='allow',
|
|
27
27
|
)
|
|
28
|
-
duration_seconds: Annotated[
|
|
29
|
-
int,
|
|
30
|
-
Field(
|
|
31
|
-
description="Seconds of viewing required (e.g., 30 for YouTube-style '30 seconds = view')",
|
|
32
|
-
ge=1,
|
|
33
|
-
),
|
|
34
|
-
]
|
|
28
|
+
duration_seconds: Annotated[int, Field(description='Seconds of viewing required', ge=1)]
|
|
35
29
|
|
|
36
30
|
|
|
37
31
|
class Parameters(AdCPBaseModel):
|
|
@@ -41,6 +35,19 @@ class Parameters(AdCPBaseModel):
|
|
|
41
35
|
view_threshold: ViewThreshold | ViewThreshold1
|
|
42
36
|
|
|
43
37
|
|
|
38
|
+
class PriceGuidance(AdCPBaseModel):
|
|
39
|
+
p25: Annotated[
|
|
40
|
+
float | None, Field(description='25th percentile of recent winning bids', ge=0.0)
|
|
41
|
+
] = None
|
|
42
|
+
p50: Annotated[float | None, Field(description='Median of recent winning bids', ge=0.0)] = None
|
|
43
|
+
p75: Annotated[
|
|
44
|
+
float | None, Field(description='75th percentile of recent winning bids', ge=0.0)
|
|
45
|
+
] = None
|
|
46
|
+
p90: Annotated[
|
|
47
|
+
float | None, Field(description='90th percentile of recent winning bids', ge=0.0)
|
|
48
|
+
] = None
|
|
49
|
+
|
|
50
|
+
|
|
44
51
|
class CpvPricingOption(AdCPBaseModel):
|
|
45
52
|
model_config = ConfigDict(
|
|
46
53
|
extra='allow',
|
|
@@ -53,10 +60,20 @@ class CpvPricingOption(AdCPBaseModel):
|
|
|
53
60
|
pattern='^[A-Z]{3}$',
|
|
54
61
|
),
|
|
55
62
|
]
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
Field(
|
|
59
|
-
|
|
63
|
+
fixed_price: Annotated[
|
|
64
|
+
float | None,
|
|
65
|
+
Field(
|
|
66
|
+
description='Fixed price per view. If present, this is fixed pricing. If absent, auction-based.',
|
|
67
|
+
ge=0.0,
|
|
68
|
+
),
|
|
69
|
+
] = None
|
|
70
|
+
floor_price: Annotated[
|
|
71
|
+
float | None,
|
|
72
|
+
Field(
|
|
73
|
+
description='Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.',
|
|
74
|
+
ge=0.0,
|
|
75
|
+
),
|
|
76
|
+
] = None
|
|
60
77
|
min_spend_per_package: Annotated[
|
|
61
78
|
float | None,
|
|
62
79
|
Field(
|
|
@@ -67,11 +84,13 @@ class CpvPricingOption(AdCPBaseModel):
|
|
|
67
84
|
parameters: Annotated[
|
|
68
85
|
Parameters, Field(description='CPV-specific parameters defining the view threshold')
|
|
69
86
|
]
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
str,
|
|
87
|
+
price_guidance: Annotated[
|
|
88
|
+
PriceGuidance | None,
|
|
73
89
|
Field(
|
|
74
|
-
description=
|
|
90
|
+
description='Optional pricing guidance for auction-based bidding. Helps buyers calibrate bids with historical percentiles.'
|
|
75
91
|
),
|
|
92
|
+
] = None
|
|
93
|
+
pricing_model: Annotated[Literal['cpv'], Field(description='Cost per view at threshold')]
|
|
94
|
+
pricing_option_id: Annotated[
|
|
95
|
+
str, Field(description='Unique identifier for this pricing option within the product')
|
|
76
96
|
]
|
|
77
|
-
rate: Annotated[float, Field(description='Fixed CPV rate (cost per view)', ge=0.0)]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: pricing_options/flat_rate_option.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-26T11:40:01+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -14,43 +14,37 @@ class Parameters(AdCPBaseModel):
|
|
|
14
14
|
model_config = ConfigDict(
|
|
15
15
|
extra='allow',
|
|
16
16
|
)
|
|
17
|
-
daypart: Annotated[
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
description="Specific daypart for time-based pricing (e.g., 'morning_commute', 'evening_prime', 'overnight')"
|
|
21
|
-
),
|
|
22
|
-
] = None
|
|
17
|
+
daypart: Annotated[str | None, Field(description='Specific daypart for time-based pricing')] = (
|
|
18
|
+
None
|
|
19
|
+
)
|
|
23
20
|
duration_hours: Annotated[
|
|
24
|
-
float | None,
|
|
25
|
-
Field(description='Duration in hours for time-based flat rate pricing (DOOH)', ge=0.0),
|
|
21
|
+
float | None, Field(description='Duration in hours for time-based pricing', ge=0.0)
|
|
26
22
|
] = None
|
|
27
23
|
estimated_impressions: Annotated[
|
|
28
|
-
int | None,
|
|
29
|
-
Field(
|
|
30
|
-
description='Estimated impressions for this flat rate option (informational, commonly used with SOV or time-based DOOH)',
|
|
31
|
-
ge=0,
|
|
32
|
-
),
|
|
24
|
+
int | None, Field(description='Estimated impressions (informational)', ge=0)
|
|
33
25
|
] = None
|
|
34
26
|
loop_duration_seconds: Annotated[
|
|
35
|
-
int | None, Field(description='Duration of ad loop rotation in seconds
|
|
36
|
-
] = None
|
|
37
|
-
min_plays_per_hour: Annotated[
|
|
38
|
-
int | None,
|
|
39
|
-
Field(
|
|
40
|
-
description='Minimum number of times ad plays per hour (DOOH frequency guarantee)', ge=0
|
|
41
|
-
),
|
|
27
|
+
int | None, Field(description='Duration of ad loop rotation in seconds', ge=1)
|
|
42
28
|
] = None
|
|
29
|
+
min_plays_per_hour: Annotated[int | None, Field(description='Minimum plays per hour', ge=0)] = (
|
|
30
|
+
None
|
|
31
|
+
)
|
|
43
32
|
sov_percentage: Annotated[
|
|
44
|
-
float | None,
|
|
45
|
-
Field(
|
|
46
|
-
description='Guaranteed share of voice as percentage (DOOH, 0-100)', ge=0.0, le=100.0
|
|
47
|
-
),
|
|
33
|
+
float | None, Field(description='Guaranteed share of voice (0-100)', ge=0.0, le=100.0)
|
|
48
34
|
] = None
|
|
49
|
-
venue_package: Annotated[
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
35
|
+
venue_package: Annotated[str | None, Field(description='Named venue package identifier')] = None
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class PriceGuidance(AdCPBaseModel):
|
|
39
|
+
p25: Annotated[
|
|
40
|
+
float | None, Field(description='25th percentile of recent winning bids', ge=0.0)
|
|
41
|
+
] = None
|
|
42
|
+
p50: Annotated[float | None, Field(description='Median of recent winning bids', ge=0.0)] = None
|
|
43
|
+
p75: Annotated[
|
|
44
|
+
float | None, Field(description='75th percentile of recent winning bids', ge=0.0)
|
|
45
|
+
] = None
|
|
46
|
+
p90: Annotated[
|
|
47
|
+
float | None, Field(description='90th percentile of recent winning bids', ge=0.0)
|
|
54
48
|
] = None
|
|
55
49
|
|
|
56
50
|
|
|
@@ -66,10 +60,20 @@ class FlatRatePricingOption(AdCPBaseModel):
|
|
|
66
60
|
pattern='^[A-Z]{3}$',
|
|
67
61
|
),
|
|
68
62
|
]
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
Field(
|
|
72
|
-
|
|
63
|
+
fixed_price: Annotated[
|
|
64
|
+
float | None,
|
|
65
|
+
Field(
|
|
66
|
+
description='Flat rate cost. If present, this is fixed pricing. If absent, auction-based.',
|
|
67
|
+
ge=0.0,
|
|
68
|
+
),
|
|
69
|
+
] = None
|
|
70
|
+
floor_price: Annotated[
|
|
71
|
+
float | None,
|
|
72
|
+
Field(
|
|
73
|
+
description='Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.',
|
|
74
|
+
ge=0.0,
|
|
75
|
+
),
|
|
76
|
+
] = None
|
|
73
77
|
min_spend_per_package: Annotated[
|
|
74
78
|
float | None,
|
|
75
79
|
Field(
|
|
@@ -81,13 +85,15 @@ class FlatRatePricingOption(AdCPBaseModel):
|
|
|
81
85
|
Parameters | None,
|
|
82
86
|
Field(description='Flat rate parameters for DOOH and time-based campaigns'),
|
|
83
87
|
] = None
|
|
88
|
+
price_guidance: Annotated[
|
|
89
|
+
PriceGuidance | None,
|
|
90
|
+
Field(
|
|
91
|
+
description='Optional pricing guidance for auction-based bidding. Helps buyers calibrate bids with historical percentiles.'
|
|
92
|
+
),
|
|
93
|
+
] = None
|
|
84
94
|
pricing_model: Annotated[
|
|
85
95
|
Literal['flat_rate'], Field(description='Fixed cost regardless of delivery volume')
|
|
86
96
|
]
|
|
87
97
|
pricing_option_id: Annotated[
|
|
88
|
-
str,
|
|
89
|
-
Field(
|
|
90
|
-
description="Unique identifier for this pricing option within the product (e.g., 'flat_rate_usd_24h_takeover')"
|
|
91
|
-
),
|
|
98
|
+
str, Field(description='Unique identifier for this pricing option within the product')
|
|
92
99
|
]
|
|
93
|
-
rate: Annotated[float, Field(description='Flat rate cost', ge=0.0)]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
|
-
# filename: pricing_options/
|
|
3
|
-
# timestamp: 2026-01-
|
|
2
|
+
# filename: pricing_options/vcpm_option.json
|
|
3
|
+
# timestamp: 2026-01-26T11:40:01+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -11,7 +11,6 @@ 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)]
|
|
15
14
|
p25: Annotated[
|
|
16
15
|
float | None, Field(description='25th percentile of recent winning bids', ge=0.0)
|
|
17
16
|
] = None
|
|
@@ -24,7 +23,7 @@ class PriceGuidance(AdCPBaseModel):
|
|
|
24
23
|
] = None
|
|
25
24
|
|
|
26
25
|
|
|
27
|
-
class
|
|
26
|
+
class VcpmPricingOption(AdCPBaseModel):
|
|
28
27
|
model_config = ConfigDict(
|
|
29
28
|
extra='allow',
|
|
30
29
|
)
|
|
@@ -36,10 +35,20 @@ class VcpmAuctionPricingOption(AdCPBaseModel):
|
|
|
36
35
|
pattern='^[A-Z]{3}$',
|
|
37
36
|
),
|
|
38
37
|
]
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
Field(
|
|
42
|
-
|
|
38
|
+
fixed_price: Annotated[
|
|
39
|
+
float | None,
|
|
40
|
+
Field(
|
|
41
|
+
description='Fixed price per unit. If present, this is fixed pricing. If absent, auction-based.',
|
|
42
|
+
ge=0.0,
|
|
43
|
+
),
|
|
44
|
+
] = None
|
|
45
|
+
floor_price: Annotated[
|
|
46
|
+
float | None,
|
|
47
|
+
Field(
|
|
48
|
+
description='Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.',
|
|
49
|
+
ge=0.0,
|
|
50
|
+
),
|
|
51
|
+
] = None
|
|
43
52
|
min_spend_per_package: Annotated[
|
|
44
53
|
float | None,
|
|
45
54
|
Field(
|
|
@@ -48,14 +57,14 @@ class VcpmAuctionPricingOption(AdCPBaseModel):
|
|
|
48
57
|
),
|
|
49
58
|
] = None
|
|
50
59
|
price_guidance: Annotated[
|
|
51
|
-
PriceGuidance
|
|
52
|
-
|
|
60
|
+
PriceGuidance | None,
|
|
61
|
+
Field(
|
|
62
|
+
description='Optional pricing guidance for auction-based bidding. Helps buyers calibrate bids with historical percentiles.'
|
|
63
|
+
),
|
|
64
|
+
] = None
|
|
53
65
|
pricing_model: Annotated[
|
|
54
66
|
Literal['vcpm'], Field(description='Cost per 1,000 viewable impressions (MRC standard)')
|
|
55
67
|
]
|
|
56
68
|
pricing_option_id: Annotated[
|
|
57
|
-
str,
|
|
58
|
-
Field(
|
|
59
|
-
description="Unique identifier for this pricing option within the product (e.g., 'vcpm_usd_auction')"
|
|
60
|
-
),
|
|
69
|
+
str, Field(description='Unique identifier for this pricing option within the product')
|
|
61
70
|
]
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: property/base_property_source.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 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-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 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-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 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-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 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-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
|
+
|
|
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-25T21:17:54+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-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 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
|