adcp 2.19.0__py3-none-any.whl → 3.1.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 +14 -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 +84 -0
- 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 +115 -23
- adcp/types/_ergonomic.py +35 -14
- adcp/types/_generated.py +346 -52
- adcp/types/aliases.py +68 -20
- adcp/types/base.py +1 -1
- adcp/types/generated_poc/adagents.py +196 -189
- 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 +9 -9
- adcp/types/generated_poc/core/assets/audio_asset.py +6 -6
- adcp/types/generated_poc/core/assets/css_asset.py +3 -3
- adcp/types/generated_poc/core/assets/daast_asset.py +19 -19
- adcp/types/generated_poc/core/assets/html_asset.py +3 -3
- adcp/types/generated_poc/core/assets/image_asset.py +7 -7
- adcp/types/generated_poc/core/assets/javascript_asset.py +4 -4
- adcp/types/generated_poc/core/assets/text_asset.py +3 -3
- adcp/types/generated_poc/core/assets/url_asset.py +4 -4
- adcp/types/generated_poc/core/assets/vast_asset.py +19 -19
- adcp/types/generated_poc/core/assets/video_asset.py +8 -8
- adcp/types/generated_poc/core/assets/webhook_asset.py +10 -10
- adcp/types/generated_poc/core/async_response_data.py +3 -3
- adcp/types/generated_poc/core/brand_manifest.py +122 -59
- adcp/types/generated_poc/core/brand_manifest_ref.py +10 -10
- adcp/types/generated_poc/core/context.py +2 -2
- adcp/types/generated_poc/core/creative_asset.py +20 -19
- adcp/types/generated_poc/core/creative_assignment.py +4 -4
- adcp/types/generated_poc/core/creative_filters.py +18 -28
- adcp/types/generated_poc/core/creative_manifest.py +3 -3
- adcp/types/generated_poc/core/creative_policy.py +5 -5
- adcp/types/generated_poc/core/delivery_metrics.py +33 -33
- adcp/types/generated_poc/core/deployment.py +21 -21
- adcp/types/generated_poc/core/destination.py +12 -12
- adcp/types/generated_poc/core/error.py +7 -7
- adcp/types/generated_poc/core/ext.py +2 -2
- adcp/types/generated_poc/core/format.py +66 -66
- adcp/types/generated_poc/core/format_id.py +6 -6
- adcp/types/generated_poc/core/frequency_cap.py +3 -3
- adcp/types/generated_poc/core/identifier.py +3 -3
- adcp/types/generated_poc/core/mcp_webhook_payload.py +11 -11
- adcp/types/generated_poc/core/measurement.py +9 -9
- adcp/types/generated_poc/core/media_buy.py +8 -8
- 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 +9 -9
- adcp/types/generated_poc/core/performance_feedback.py +19 -19
- adcp/types/generated_poc/core/placement.py +5 -5
- adcp/types/generated_poc/core/pricing_option.py +9 -15
- adcp/types/generated_poc/core/product.py +21 -21
- adcp/types/generated_poc/core/product_allocation.py +48 -0
- adcp/types/generated_poc/core/product_filters.py +89 -24
- adcp/types/generated_poc/core/promoted_offerings.py +29 -38
- adcp/types/generated_poc/core/promoted_products.py +3 -3
- adcp/types/generated_poc/core/property.py +10 -10
- adcp/types/generated_poc/core/property_id.py +5 -5
- adcp/types/generated_poc/core/property_list_ref.py +5 -5
- adcp/types/generated_poc/core/property_tag.py +5 -5
- adcp/types/generated_poc/core/proposal.py +64 -0
- adcp/types/generated_poc/core/protocol_envelope.py +9 -9
- adcp/types/generated_poc/core/publisher_property_selector.py +14 -14
- adcp/types/generated_poc/core/push_notification_config.py +6 -6
- adcp/types/generated_poc/core/reporting_capabilities.py +9 -9
- adcp/types/generated_poc/core/reporting_webhook.py +70 -0
- adcp/types/generated_poc/core/response.py +5 -5
- adcp/types/generated_poc/core/signal_filters.py +6 -6
- adcp/types/generated_poc/core/start_timing.py +4 -4
- adcp/types/generated_poc/core/sub_asset.py +15 -15
- adcp/types/generated_poc/core/targeting.py +59 -18
- adcp/types/generated_poc/creative/list_creative_formats_request.py +21 -21
- adcp/types/generated_poc/creative/list_creative_formats_response.py +6 -6
- adcp/types/generated_poc/creative/preview_creative_request.py +25 -25
- adcp/types/generated_poc/creative/preview_creative_response.py +29 -29
- adcp/types/generated_poc/creative/preview_render.py +26 -26
- adcp/types/generated_poc/enums/adcp_domain.py +5 -5
- adcp/types/generated_poc/enums/asset_content_type.py +14 -14
- adcp/types/generated_poc/enums/auth_scheme.py +3 -3
- adcp/types/generated_poc/enums/available_metric.py +10 -10
- adcp/types/generated_poc/enums/channels.py +21 -11
- adcp/types/generated_poc/enums/co_branding_requirement.py +4 -4
- adcp/types/generated_poc/enums/creative_action.py +6 -6
- adcp/types/generated_poc/enums/creative_agent_capability.py +5 -5
- adcp/types/generated_poc/enums/creative_sort_field.py +7 -7
- adcp/types/generated_poc/enums/creative_status.py +6 -5
- adcp/types/generated_poc/enums/daast_tracking_event.py +12 -12
- adcp/types/generated_poc/enums/daast_version.py +3 -3
- adcp/types/generated_poc/enums/delivery_type.py +3 -3
- adcp/types/generated_poc/enums/dimension_unit.py +5 -5
- adcp/types/generated_poc/enums/feed_format.py +4 -4
- adcp/types/generated_poc/enums/feedback_source.py +5 -5
- adcp/types/generated_poc/enums/format_category.py +8 -8
- adcp/types/generated_poc/enums/format_id_parameter.py +3 -3
- adcp/types/generated_poc/enums/frequency_cap_scope.py +4 -4
- adcp/types/generated_poc/enums/geo_level.py +14 -0
- adcp/types/generated_poc/enums/history_entry_type.py +3 -3
- adcp/types/generated_poc/enums/http_method.py +3 -3
- adcp/types/generated_poc/enums/identifier_types.py +20 -20
- adcp/types/generated_poc/enums/javascript_module_type.py +4 -4
- adcp/types/generated_poc/enums/landing_page_requirement.py +4 -4
- adcp/types/generated_poc/enums/markdown_flavor.py +3 -3
- adcp/types/generated_poc/enums/media_buy_status.py +5 -5
- adcp/types/generated_poc/enums/metric_type.py +9 -9
- adcp/types/generated_poc/enums/metro_system.py +15 -0
- adcp/types/generated_poc/enums/notification_type.py +5 -5
- adcp/types/generated_poc/enums/pacing.py +4 -4
- adcp/types/generated_poc/enums/postal_system.py +19 -0
- adcp/types/generated_poc/enums/preview_output_format.py +3 -3
- adcp/types/generated_poc/enums/pricing_model.py +8 -8
- adcp/types/generated_poc/enums/property_type.py +9 -8
- adcp/types/generated_poc/enums/publisher_identifier_types.py +6 -6
- adcp/types/generated_poc/enums/reporting_frequency.py +4 -4
- adcp/types/generated_poc/enums/signal_catalog_type.py +4 -4
- adcp/types/generated_poc/enums/sort_direction.py +3 -3
- adcp/types/generated_poc/enums/task_status.py +10 -10
- adcp/types/generated_poc/enums/task_type.py +12 -12
- adcp/types/generated_poc/enums/update_frequency.py +5 -5
- adcp/types/generated_poc/enums/url_asset_type.py +4 -4
- adcp/types/generated_poc/enums/validation_mode.py +3 -3
- adcp/types/generated_poc/enums/vast_tracking_event.py +17 -17
- adcp/types/generated_poc/enums/vast_version.py +6 -6
- adcp/types/generated_poc/enums/webhook_response_type.py +5 -5
- adcp/types/generated_poc/enums/webhook_security_method.py +4 -4
- adcp/types/generated_poc/extensions/extension_meta.py +20 -12
- adcp/types/generated_poc/media_buy/build_creative_request.py +5 -5
- adcp/types/generated_poc/media_buy/build_creative_response.py +7 -7
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +6 -6
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +2 -2
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +6 -6
- adcp/types/generated_poc/media_buy/create_media_buy_request.py +65 -37
- adcp/types/generated_poc/media_buy/create_media_buy_response.py +8 -8
- adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +9 -9
- adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +52 -52
- adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +7 -7
- adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +3 -3
- adcp/types/generated_poc/media_buy/get_products_async_response_working.py +5 -5
- adcp/types/generated_poc/media_buy/get_products_request.py +14 -5
- adcp/types/generated_poc/media_buy/get_products_response.py +12 -6
- adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +4 -4
- adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +9 -9
- adcp/types/generated_poc/media_buy/list_creative_formats_request.py +10 -10
- adcp/types/generated_poc/media_buy/list_creative_formats_response.py +6 -6
- adcp/types/generated_poc/media_buy/list_creatives_request.py +24 -24
- adcp/types/generated_poc/media_buy/list_creatives_response.py +54 -57
- adcp/types/generated_poc/media_buy/package_request.py +12 -12
- adcp/types/generated_poc/media_buy/package_update.py +119 -0
- adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +20 -20
- adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +7 -7
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +6 -6
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +2 -2
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +8 -8
- adcp/types/generated_poc/media_buy/sync_creatives_request.py +8 -8
- adcp/types/generated_poc/media_buy/sync_creatives_response.py +16 -16
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +5 -5
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +2 -2
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +6 -6
- adcp/types/generated_poc/media_buy/update_media_buy_request.py +28 -124
- adcp/types/generated_poc/media_buy/update_media_buy_response.py +8 -8
- adcp/types/generated_poc/pricing_options/cpc_option.py +40 -15
- adcp/types/generated_poc/pricing_options/cpcv_option.py +41 -16
- adcp/types/generated_poc/pricing_options/cpm_option.py +62 -0
- adcp/types/generated_poc/pricing_options/cpp_option.py +46 -23
- adcp/types/generated_poc/pricing_options/cpv_option.py +45 -26
- adcp/types/generated_poc/pricing_options/flat_rate_option.py +53 -47
- adcp/types/generated_poc/pricing_options/vcpm_option.py +70 -0
- adcp/types/generated_poc/property/base_property_source.py +16 -16
- adcp/types/generated_poc/property/create_property_list_request.py +5 -5
- adcp/types/generated_poc/property/create_property_list_response.py +4 -4
- adcp/types/generated_poc/property/delete_property_list_request.py +3 -3
- adcp/types/generated_poc/property/delete_property_list_response.py +4 -4
- adcp/types/generated_poc/property/feature_requirement.py +8 -8
- adcp/types/generated_poc/property/get_property_list_request.py +6 -6
- adcp/types/generated_poc/property/get_property_list_response.py +12 -12
- adcp/types/generated_poc/property/list_property_lists_request.py +6 -6
- adcp/types/generated_poc/property/list_property_lists_response.py +9 -9
- adcp/types/generated_poc/property/property_error.py +11 -11
- adcp/types/generated_poc/property/property_feature.py +5 -5
- adcp/types/generated_poc/property/property_feature_definition.py +19 -19
- adcp/types/generated_poc/property/property_list.py +12 -12
- adcp/types/generated_poc/property/property_list_changed_webhook.py +12 -12
- adcp/types/generated_poc/property/property_list_filters.py +9 -9
- adcp/types/generated_poc/property/update_property_list_request.py +9 -9
- adcp/types/generated_poc/property/update_property_list_response.py +3 -3
- 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 +14 -17
- adcp/types/generated_poc/signals/activate_signal_request.py +4 -4
- adcp/types/generated_poc/signals/activate_signal_response.py +7 -7
- adcp/types/generated_poc/signals/get_signals_request.py +9 -9
- adcp/types/generated_poc/signals/get_signals_response.py +16 -16
- 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.19.0.dist-info → adcp-3.1.0.dist-info}/METADATA +1 -1
- adcp-3.1.0.dist-info/RECORD +264 -0
- {adcp-2.19.0.dist-info → adcp-3.1.0.dist-info}/WHEEL +1 -1
- adcp/types/generated_poc/enums/standard_format_ids.py +0 -45
- adcp/types/generated_poc/pricing_options/cpm_auction_option.py +0 -58
- adcp/types/generated_poc/pricing_options/cpm_fixed_option.py +0 -43
- adcp/types/generated_poc/pricing_options/vcpm_auction_option.py +0 -61
- adcp/types/generated_poc/pricing_options/vcpm_fixed_option.py +0 -47
- adcp/types/generated_poc/property/list_property_features_request.py +0 -25
- adcp/types/generated_poc/property/list_property_features_response.py +0 -24
- adcp-2.19.0.dist-info/RECORD +0 -220
- {adcp-2.19.0.dist-info → adcp-3.1.0.dist-info}/entry_points.txt +0 -0
- {adcp-2.19.0.dist-info → adcp-3.1.0.dist-info}/licenses/LICENSE +0 -0
- {adcp-2.19.0.dist-info → adcp-3.1.0.dist-info}/top_level.txt +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=
|
|
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
|
),
|
|
@@ -23,55 +23,74 @@ class ViewThreshold(RootModel[float]):
|
|
|
23
23
|
|
|
24
24
|
class ViewThreshold1(AdCPBaseModel):
|
|
25
25
|
model_config = ConfigDict(
|
|
26
|
-
extra=
|
|
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):
|
|
38
32
|
model_config = ConfigDict(
|
|
39
|
-
extra=
|
|
33
|
+
extra='allow',
|
|
40
34
|
)
|
|
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
|
-
extra=
|
|
53
|
+
extra='allow',
|
|
47
54
|
)
|
|
48
55
|
currency: Annotated[
|
|
49
56
|
str,
|
|
50
57
|
Field(
|
|
51
|
-
description=
|
|
52
|
-
examples=[
|
|
53
|
-
pattern=
|
|
58
|
+
description='ISO 4217 currency code',
|
|
59
|
+
examples=['USD', 'EUR', 'GBP', 'JPY'],
|
|
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(
|
|
63
|
-
description=
|
|
80
|
+
description='Minimum spend requirement per package using this pricing option, in the specified currency',
|
|
64
81
|
ge=0.0,
|
|
65
82
|
),
|
|
66
83
|
] = None
|
|
67
84
|
parameters: Annotated[
|
|
68
|
-
Parameters, Field(description=
|
|
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
|
|
|
@@ -12,82 +12,88 @@ from pydantic import ConfigDict, Field
|
|
|
12
12
|
|
|
13
13
|
class Parameters(AdCPBaseModel):
|
|
14
14
|
model_config = ConfigDict(
|
|
15
|
-
extra=
|
|
15
|
+
extra='allow',
|
|
16
|
+
)
|
|
17
|
+
daypart: Annotated[str | None, Field(description='Specific daypart for time-based pricing')] = (
|
|
18
|
+
None
|
|
16
19
|
)
|
|
17
|
-
daypart: Annotated[
|
|
18
|
-
str | None,
|
|
19
|
-
Field(
|
|
20
|
-
description="Specific daypart for time-based pricing (e.g., 'morning_commute', 'evening_prime', 'overnight')"
|
|
21
|
-
),
|
|
22
|
-
] = None
|
|
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=
|
|
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
|
|
|
57
51
|
class FlatRatePricingOption(AdCPBaseModel):
|
|
58
52
|
model_config = ConfigDict(
|
|
59
|
-
extra=
|
|
53
|
+
extra='allow',
|
|
60
54
|
)
|
|
61
55
|
currency: Annotated[
|
|
62
56
|
str,
|
|
63
57
|
Field(
|
|
64
|
-
description=
|
|
65
|
-
examples=[
|
|
66
|
-
pattern=
|
|
58
|
+
description='ISO 4217 currency code',
|
|
59
|
+
examples=['USD', 'EUR', 'GBP', 'JPY'],
|
|
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(
|
|
76
|
-
description=
|
|
80
|
+
description='Minimum spend requirement per package using this pricing option, in the specified currency',
|
|
77
81
|
ge=0.0,
|
|
78
82
|
),
|
|
79
83
|
] = None
|
|
80
84
|
parameters: Annotated[
|
|
81
85
|
Parameters | None,
|
|
82
|
-
Field(description=
|
|
86
|
+
Field(description='Flat rate parameters for DOOH and time-based campaigns'),
|
|
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
|
+
),
|
|
83
93
|
] = None
|
|
84
94
|
pricing_model: Annotated[
|
|
85
|
-
Literal[
|
|
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)]
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: pricing_options/vcpm_option.json
|
|
3
|
+
# timestamp: 2026-01-26T11:40:01+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
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class PriceGuidance(AdCPBaseModel):
|
|
14
|
+
p25: Annotated[
|
|
15
|
+
float | None, Field(description='25th percentile of recent winning bids', ge=0.0)
|
|
16
|
+
] = None
|
|
17
|
+
p50: Annotated[float | None, Field(description='Median of recent winning bids', ge=0.0)] = None
|
|
18
|
+
p75: Annotated[
|
|
19
|
+
float | None, Field(description='75th percentile of recent winning bids', ge=0.0)
|
|
20
|
+
] = None
|
|
21
|
+
p90: Annotated[
|
|
22
|
+
float | None, Field(description='90th percentile of recent winning bids', ge=0.0)
|
|
23
|
+
] = None
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class VcpmPricingOption(AdCPBaseModel):
|
|
27
|
+
model_config = ConfigDict(
|
|
28
|
+
extra='allow',
|
|
29
|
+
)
|
|
30
|
+
currency: Annotated[
|
|
31
|
+
str,
|
|
32
|
+
Field(
|
|
33
|
+
description='ISO 4217 currency code',
|
|
34
|
+
examples=['USD', 'EUR', 'GBP', 'JPY'],
|
|
35
|
+
pattern='^[A-Z]{3}$',
|
|
36
|
+
),
|
|
37
|
+
]
|
|
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
|
|
52
|
+
min_spend_per_package: Annotated[
|
|
53
|
+
float | None,
|
|
54
|
+
Field(
|
|
55
|
+
description='Minimum spend requirement per package using this pricing option, in the specified currency',
|
|
56
|
+
ge=0.0,
|
|
57
|
+
),
|
|
58
|
+
] = None
|
|
59
|
+
price_guidance: Annotated[
|
|
60
|
+
PriceGuidance | None,
|
|
61
|
+
Field(
|
|
62
|
+
description='Optional pricing guidance for auction-based bidding. Helps buyers calibrate bids with historical percentiles.'
|
|
63
|
+
),
|
|
64
|
+
] = None
|
|
65
|
+
pricing_model: Annotated[
|
|
66
|
+
Literal['vcpm'], Field(description='Cost per 1,000 viewable impressions (MRC standard)')
|
|
67
|
+
]
|
|
68
|
+
pricing_option_id: Annotated[
|
|
69
|
+
str, Field(description='Unique identifier for this pricing option within the product')
|
|
70
|
+
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: property/base_property_source.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -14,18 +14,18 @@ from ..core import identifier, property_id, property_tag
|
|
|
14
14
|
|
|
15
15
|
class BasePropertySource1(AdCPBaseModel):
|
|
16
16
|
model_config = ConfigDict(
|
|
17
|
-
extra=
|
|
17
|
+
extra='forbid',
|
|
18
18
|
)
|
|
19
19
|
publisher_domain: Annotated[
|
|
20
20
|
str,
|
|
21
21
|
Field(
|
|
22
22
|
description="Domain where publisher's adagents.json is hosted (e.g., 'raptive.com')",
|
|
23
|
-
pattern=
|
|
23
|
+
pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$',
|
|
24
24
|
),
|
|
25
25
|
]
|
|
26
26
|
selection_type: Annotated[
|
|
27
|
-
Literal[
|
|
28
|
-
Field(description=
|
|
27
|
+
Literal['publisher_tags'],
|
|
28
|
+
Field(description='Discriminator indicating selection by property tags within a publisher'),
|
|
29
29
|
]
|
|
30
30
|
tags: Annotated[
|
|
31
31
|
list[property_tag.PropertyTag],
|
|
@@ -38,7 +38,7 @@ class BasePropertySource1(AdCPBaseModel):
|
|
|
38
38
|
|
|
39
39
|
class BasePropertySource2(AdCPBaseModel):
|
|
40
40
|
model_config = ConfigDict(
|
|
41
|
-
extra=
|
|
41
|
+
extra='forbid',
|
|
42
42
|
)
|
|
43
43
|
property_ids: Annotated[
|
|
44
44
|
list[property_id.PropertyId],
|
|
@@ -48,28 +48,28 @@ class BasePropertySource2(AdCPBaseModel):
|
|
|
48
48
|
str,
|
|
49
49
|
Field(
|
|
50
50
|
description="Domain where publisher's adagents.json is hosted (e.g., 'raptive.com')",
|
|
51
|
-
pattern=
|
|
51
|
+
pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$',
|
|
52
52
|
),
|
|
53
53
|
]
|
|
54
54
|
selection_type: Annotated[
|
|
55
|
-
Literal[
|
|
55
|
+
Literal['publisher_ids'],
|
|
56
56
|
Field(
|
|
57
|
-
description=
|
|
57
|
+
description='Discriminator indicating selection by specific property IDs within a publisher'
|
|
58
58
|
),
|
|
59
59
|
]
|
|
60
60
|
|
|
61
61
|
|
|
62
62
|
class BasePropertySource3(AdCPBaseModel):
|
|
63
63
|
model_config = ConfigDict(
|
|
64
|
-
extra=
|
|
64
|
+
extra='forbid',
|
|
65
65
|
)
|
|
66
66
|
identifiers: Annotated[
|
|
67
67
|
list[identifier.Identifier],
|
|
68
|
-
Field(description=
|
|
68
|
+
Field(description='Direct property identifiers (domains, app IDs, etc.)', min_length=1),
|
|
69
69
|
]
|
|
70
70
|
selection_type: Annotated[
|
|
71
|
-
Literal[
|
|
72
|
-
Field(description=
|
|
71
|
+
Literal['identifiers'],
|
|
72
|
+
Field(description='Discriminator indicating selection by direct identifiers'),
|
|
73
73
|
]
|
|
74
74
|
|
|
75
75
|
|
|
@@ -79,8 +79,8 @@ class BasePropertySource(
|
|
|
79
79
|
root: Annotated[
|
|
80
80
|
BasePropertySource1 | BasePropertySource2 | BasePropertySource3,
|
|
81
81
|
Field(
|
|
82
|
-
description=
|
|
83
|
-
discriminator=
|
|
84
|
-
title=
|
|
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
85
|
),
|
|
86
86
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: property/create_property_list_request.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -17,7 +17,7 @@ from . import base_property_source, property_list_filters
|
|
|
17
17
|
|
|
18
18
|
class CreatePropertyListRequest(AdCPBaseModel):
|
|
19
19
|
model_config = ConfigDict(
|
|
20
|
-
extra=
|
|
20
|
+
extra='forbid',
|
|
21
21
|
)
|
|
22
22
|
base_properties: Annotated[
|
|
23
23
|
list[base_property_source.BasePropertySource] | None,
|
|
@@ -28,7 +28,7 @@ class CreatePropertyListRequest(AdCPBaseModel):
|
|
|
28
28
|
brand_manifest: Annotated[
|
|
29
29
|
brand_manifest_1.BrandManifest | None,
|
|
30
30
|
Field(
|
|
31
|
-
description=
|
|
31
|
+
description='Brand identity and requirements. When provided, the agent automatically applies appropriate rules based on brand characteristics (industry, target_audience, etc.).'
|
|
32
32
|
),
|
|
33
33
|
] = None
|
|
34
34
|
context: context_1.ContextObject | None = None
|
|
@@ -38,6 +38,6 @@ class CreatePropertyListRequest(AdCPBaseModel):
|
|
|
38
38
|
ext: ext_1.ExtensionObject | None = None
|
|
39
39
|
filters: Annotated[
|
|
40
40
|
property_list_filters.PropertyListFilters | None,
|
|
41
|
-
Field(description=
|
|
41
|
+
Field(description='Dynamic filters to apply when resolving the list'),
|
|
42
42
|
] = None
|
|
43
|
-
name: Annotated[str, Field(description=
|
|
43
|
+
name: Annotated[str, Field(description='Human-readable name for the list')]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: property/create_property_list_response.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -15,13 +15,13 @@ from . import property_list
|
|
|
15
15
|
|
|
16
16
|
class CreatePropertyListResponse(AdCPBaseModel):
|
|
17
17
|
model_config = ConfigDict(
|
|
18
|
-
extra=
|
|
18
|
+
extra='forbid',
|
|
19
19
|
)
|
|
20
20
|
auth_token: Annotated[
|
|
21
21
|
str,
|
|
22
22
|
Field(
|
|
23
|
-
description=
|
|
23
|
+
description='Token that can be shared with sellers to authorize fetching this list. Store this - it is only returned at creation time.'
|
|
24
24
|
),
|
|
25
25
|
]
|
|
26
26
|
ext: ext_1.ExtensionObject | None = None
|
|
27
|
-
list: Annotated[property_list.PropertyList, Field(description=
|
|
27
|
+
list: Annotated[property_list.PropertyList, Field(description='The created property list')]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: property/delete_property_list_request.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -15,8 +15,8 @@ from ..core import ext as ext_1
|
|
|
15
15
|
|
|
16
16
|
class DeletePropertyListRequest(AdCPBaseModel):
|
|
17
17
|
model_config = ConfigDict(
|
|
18
|
-
extra=
|
|
18
|
+
extra='forbid',
|
|
19
19
|
)
|
|
20
20
|
context: context_1.ContextObject | None = None
|
|
21
21
|
ext: ext_1.ExtensionObject | None = None
|
|
22
|
-
list_id: Annotated[str, Field(description=
|
|
22
|
+
list_id: Annotated[str, Field(description='ID of the property list to delete')]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: property/delete_property_list_response.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -14,8 +14,8 @@ from ..core import ext as ext_1
|
|
|
14
14
|
|
|
15
15
|
class DeletePropertyListResponse(AdCPBaseModel):
|
|
16
16
|
model_config = ConfigDict(
|
|
17
|
-
extra=
|
|
17
|
+
extra='forbid',
|
|
18
18
|
)
|
|
19
|
-
deleted: Annotated[bool, Field(description=
|
|
19
|
+
deleted: Annotated[bool, Field(description='Whether the list was successfully deleted')]
|
|
20
20
|
ext: ext_1.ExtensionObject | None = None
|
|
21
|
-
list_id: Annotated[str, Field(description=
|
|
21
|
+
list_id: Annotated[str, Field(description='ID of the deleted list')]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: property/feature_requirement.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -12,20 +12,20 @@ from pydantic import ConfigDict, Field
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
class IfNotCovered(Enum):
|
|
15
|
-
exclude =
|
|
16
|
-
include =
|
|
15
|
+
exclude = 'exclude'
|
|
16
|
+
include = 'include'
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
class FeatureRequirement(AdCPBaseModel):
|
|
20
20
|
model_config = ConfigDict(
|
|
21
|
-
extra=
|
|
21
|
+
extra='forbid',
|
|
22
22
|
)
|
|
23
23
|
allowed_values: Annotated[
|
|
24
24
|
list[Any] | None,
|
|
25
|
-
Field(description=
|
|
25
|
+
Field(description='Values that pass the requirement (for binary/categorical features)'),
|
|
26
26
|
] = None
|
|
27
27
|
feature_id: Annotated[
|
|
28
|
-
str, Field(description=
|
|
28
|
+
str, Field(description='Feature to evaluate (discovered via list_property_features)')
|
|
29
29
|
]
|
|
30
30
|
if_not_covered: Annotated[
|
|
31
31
|
IfNotCovered | None,
|
|
@@ -34,9 +34,9 @@ class FeatureRequirement(AdCPBaseModel):
|
|
|
34
34
|
),
|
|
35
35
|
] = IfNotCovered.exclude
|
|
36
36
|
max_value: Annotated[
|
|
37
|
-
float | None, Field(description=
|
|
37
|
+
float | None, Field(description='Maximum numeric value allowed (for quantitative features)')
|
|
38
38
|
] = None
|
|
39
39
|
min_value: Annotated[
|
|
40
40
|
float | None,
|
|
41
|
-
Field(description=
|
|
41
|
+
Field(description='Minimum numeric value required (for quantitative features)'),
|
|
42
42
|
] = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: property/get_property_list_request.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -15,20 +15,20 @@ from ..core import ext as ext_1
|
|
|
15
15
|
|
|
16
16
|
class GetPropertyListRequest(AdCPBaseModel):
|
|
17
17
|
model_config = ConfigDict(
|
|
18
|
-
extra=
|
|
18
|
+
extra='forbid',
|
|
19
19
|
)
|
|
20
20
|
context: context_1.ContextObject | None = None
|
|
21
|
-
cursor: Annotated[str | None, Field(description=
|
|
21
|
+
cursor: Annotated[str | None, Field(description='Pagination cursor for large result sets')] = (
|
|
22
22
|
None
|
|
23
23
|
)
|
|
24
24
|
ext: ext_1.ExtensionObject | None = None
|
|
25
|
-
list_id: Annotated[str, Field(description=
|
|
25
|
+
list_id: Annotated[str, Field(description='ID of the property list to retrieve')]
|
|
26
26
|
max_results: Annotated[
|
|
27
|
-
int | None, Field(description=
|
|
27
|
+
int | None, Field(description='Maximum identifiers to return (for large lists)', ge=1)
|
|
28
28
|
] = None
|
|
29
29
|
resolve: Annotated[
|
|
30
30
|
bool | None,
|
|
31
31
|
Field(
|
|
32
|
-
description=
|
|
32
|
+
description='Whether to apply filters and return resolved identifiers (default: true)'
|
|
33
33
|
),
|
|
34
34
|
] = True
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: property/get_property_list_response.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -16,20 +16,20 @@ from . import property_list
|
|
|
16
16
|
|
|
17
17
|
class Pagination(AdCPBaseModel):
|
|
18
18
|
model_config = ConfigDict(
|
|
19
|
-
extra=
|
|
19
|
+
extra='forbid',
|
|
20
20
|
)
|
|
21
|
-
cursor: Annotated[str | None, Field(description=
|
|
22
|
-
has_more: Annotated[bool | None, Field(description=
|
|
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
23
|
|
|
24
24
|
|
|
25
25
|
class GetPropertyListResponse(AdCPBaseModel):
|
|
26
26
|
model_config = ConfigDict(
|
|
27
|
-
extra=
|
|
27
|
+
extra='forbid',
|
|
28
28
|
)
|
|
29
29
|
cache_valid_until: Annotated[
|
|
30
30
|
AwareDatetime | None,
|
|
31
31
|
Field(
|
|
32
|
-
description=
|
|
32
|
+
description='Cache expiration timestamp. Re-fetch the list after this time to get updated identifiers.'
|
|
33
33
|
),
|
|
34
34
|
] = None
|
|
35
35
|
coverage_gaps: Annotated[
|
|
@@ -42,20 +42,20 @@ class GetPropertyListResponse(AdCPBaseModel):
|
|
|
42
42
|
identifiers: Annotated[
|
|
43
43
|
list[identifier.Identifier] | None,
|
|
44
44
|
Field(
|
|
45
|
-
description=
|
|
45
|
+
description='Resolved identifiers that passed filters (if resolve=true). Cache these locally for real-time use.'
|
|
46
46
|
),
|
|
47
47
|
] = None
|
|
48
48
|
list: Annotated[
|
|
49
49
|
property_list.PropertyList,
|
|
50
|
-
Field(description=
|
|
50
|
+
Field(description='The property list metadata (always returned)'),
|
|
51
51
|
]
|
|
52
|
-
pagination: Annotated[Pagination | None, Field(description=
|
|
52
|
+
pagination: Annotated[Pagination | None, Field(description='Pagination information')] = None
|
|
53
53
|
resolved_at: Annotated[
|
|
54
|
-
AwareDatetime | None, Field(description=
|
|
54
|
+
AwareDatetime | None, Field(description='When the list was resolved')
|
|
55
55
|
] = None
|
|
56
56
|
returned_count: Annotated[
|
|
57
|
-
int | None, Field(description=
|
|
57
|
+
int | None, Field(description='Number of identifiers returned in this response')
|
|
58
58
|
] = None
|
|
59
59
|
total_count: Annotated[
|
|
60
|
-
int | None, Field(description=
|
|
60
|
+
int | None, Field(description='Total number of identifiers in resolved list')
|
|
61
61
|
] = None
|