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.
- adcp/__init__.py +1 -1
- adcp/protocols/mcp.py +3 -1
- adcp/types/_ergonomic.py +0 -4
- adcp/types/_generated.py +85 -4
- adcp/types/generated_poc/adagents.py +239 -149
- adcp/types/generated_poc/core/activation_key.py +8 -8
- adcp/types/generated_poc/core/assets/audio_asset.py +5 -5
- adcp/types/generated_poc/core/assets/css_asset.py +2 -2
- adcp/types/generated_poc/core/assets/daast_asset.py +18 -18
- adcp/types/generated_poc/core/assets/html_asset.py +2 -2
- adcp/types/generated_poc/core/assets/image_asset.py +6 -6
- adcp/types/generated_poc/core/assets/javascript_asset.py +3 -3
- adcp/types/generated_poc/core/assets/text_asset.py +2 -2
- adcp/types/generated_poc/core/assets/url_asset.py +3 -3
- adcp/types/generated_poc/core/assets/vast_asset.py +18 -18
- adcp/types/generated_poc/core/assets/video_asset.py +7 -7
- adcp/types/generated_poc/core/assets/webhook_asset.py +9 -9
- adcp/types/generated_poc/core/async_response_data.py +2 -2
- adcp/types/generated_poc/core/brand_manifest.py +55 -55
- adcp/types/generated_poc/core/brand_manifest_ref.py +9 -9
- adcp/types/generated_poc/core/context.py +1 -1
- adcp/types/generated_poc/core/creative_asset.py +13 -13
- adcp/types/generated_poc/core/creative_assignment.py +3 -3
- adcp/types/generated_poc/core/creative_filters.py +19 -19
- adcp/types/generated_poc/core/creative_manifest.py +2 -2
- adcp/types/generated_poc/core/creative_policy.py +4 -4
- adcp/types/generated_poc/core/delivery_metrics.py +32 -32
- adcp/types/generated_poc/core/deployment.py +20 -20
- adcp/types/generated_poc/core/destination.py +11 -11
- adcp/types/generated_poc/core/error.py +6 -6
- adcp/types/generated_poc/core/ext.py +1 -1
- adcp/types/generated_poc/core/format.py +67 -66
- adcp/types/generated_poc/core/format_id.py +5 -5
- adcp/types/generated_poc/core/frequency_cap.py +2 -2
- adcp/types/generated_poc/core/identifier.py +27 -0
- adcp/types/generated_poc/core/mcp_webhook_payload.py +10 -10
- adcp/types/generated_poc/core/measurement.py +8 -8
- adcp/types/generated_poc/core/media_buy.py +7 -7
- adcp/types/generated_poc/core/package.py +8 -8
- adcp/types/generated_poc/core/performance_feedback.py +18 -18
- adcp/types/generated_poc/core/placement.py +4 -4
- adcp/types/generated_poc/core/pricing_option.py +2 -2
- adcp/types/generated_poc/core/product.py +20 -20
- adcp/types/generated_poc/core/product_filters.py +18 -18
- adcp/types/generated_poc/core/promoted_offerings.py +20 -20
- adcp/types/generated_poc/core/promoted_products.py +2 -2
- adcp/types/generated_poc/core/property.py +9 -9
- adcp/types/generated_poc/core/property_id.py +4 -4
- adcp/types/generated_poc/core/property_list_ref.py +26 -0
- adcp/types/generated_poc/core/property_tag.py +4 -4
- adcp/types/generated_poc/core/protocol_envelope.py +8 -8
- adcp/types/generated_poc/core/publisher_property_selector.py +13 -13
- adcp/types/generated_poc/core/push_notification_config.py +5 -5
- adcp/types/generated_poc/core/reporting_capabilities.py +8 -8
- adcp/types/generated_poc/core/response.py +4 -4
- adcp/types/generated_poc/core/signal_filters.py +5 -5
- adcp/types/generated_poc/core/start_timing.py +5 -5
- adcp/types/generated_poc/core/sub_asset.py +14 -14
- adcp/types/generated_poc/core/targeting.py +8 -8
- adcp/types/generated_poc/creative/list_creative_formats_request.py +20 -20
- adcp/types/generated_poc/creative/list_creative_formats_response.py +5 -5
- adcp/types/generated_poc/creative/preview_creative_request.py +24 -24
- adcp/types/generated_poc/creative/preview_creative_response.py +31 -30
- adcp/types/generated_poc/creative/preview_render.py +25 -25
- adcp/types/generated_poc/enums/adcp_domain.py +5 -3
- adcp/types/generated_poc/enums/asset_content_type.py +13 -13
- adcp/types/generated_poc/enums/auth_scheme.py +2 -2
- adcp/types/generated_poc/enums/available_metric.py +9 -9
- adcp/types/generated_poc/enums/channels.py +9 -9
- adcp/types/generated_poc/enums/co_branding_requirement.py +3 -3
- adcp/types/generated_poc/enums/creative_action.py +5 -5
- adcp/types/generated_poc/enums/creative_agent_capability.py +4 -4
- adcp/types/generated_poc/enums/creative_sort_field.py +6 -6
- adcp/types/generated_poc/enums/creative_status.py +4 -4
- adcp/types/generated_poc/enums/daast_tracking_event.py +11 -11
- adcp/types/generated_poc/enums/daast_version.py +2 -2
- adcp/types/generated_poc/enums/delivery_type.py +2 -2
- adcp/types/generated_poc/enums/dimension_unit.py +4 -4
- adcp/types/generated_poc/enums/feed_format.py +3 -3
- adcp/types/generated_poc/enums/feedback_source.py +4 -4
- adcp/types/generated_poc/enums/format_category.py +7 -7
- adcp/types/generated_poc/enums/format_id_parameter.py +2 -2
- adcp/types/generated_poc/enums/frequency_cap_scope.py +3 -3
- adcp/types/generated_poc/enums/history_entry_type.py +2 -2
- adcp/types/generated_poc/enums/http_method.py +2 -2
- adcp/types/generated_poc/enums/identifier_types.py +19 -19
- adcp/types/generated_poc/enums/javascript_module_type.py +3 -3
- adcp/types/generated_poc/enums/landing_page_requirement.py +3 -3
- adcp/types/generated_poc/enums/markdown_flavor.py +2 -2
- adcp/types/generated_poc/enums/media_buy_status.py +4 -4
- adcp/types/generated_poc/enums/metric_type.py +8 -8
- adcp/types/generated_poc/enums/notification_type.py +4 -4
- adcp/types/generated_poc/enums/pacing.py +3 -3
- adcp/types/generated_poc/enums/preview_output_format.py +2 -2
- adcp/types/generated_poc/enums/pricing_model.py +7 -7
- adcp/types/generated_poc/enums/property_type.py +7 -7
- adcp/types/generated_poc/enums/publisher_identifier_types.py +5 -5
- adcp/types/generated_poc/enums/reporting_frequency.py +3 -3
- adcp/types/generated_poc/enums/signal_catalog_type.py +3 -3
- adcp/types/generated_poc/enums/sort_direction.py +2 -2
- adcp/types/generated_poc/enums/standard_format_ids.py +35 -35
- adcp/types/generated_poc/enums/task_status.py +9 -9
- adcp/types/generated_poc/enums/task_type.py +12 -6
- adcp/types/generated_poc/enums/update_frequency.py +4 -4
- adcp/types/generated_poc/enums/url_asset_type.py +3 -3
- adcp/types/generated_poc/enums/validation_mode.py +2 -2
- adcp/types/generated_poc/enums/vast_tracking_event.py +16 -16
- adcp/types/generated_poc/enums/vast_version.py +5 -5
- adcp/types/generated_poc/enums/webhook_response_type.py +4 -4
- adcp/types/generated_poc/enums/webhook_security_method.py +3 -3
- adcp/types/generated_poc/extensions/__init__.py +3 -0
- adcp/types/generated_poc/extensions/extension_meta.py +50 -0
- adcp/types/generated_poc/media_buy/build_creative_request.py +4 -4
- adcp/types/generated_poc/media_buy/build_creative_response.py +6 -6
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +5 -5
- 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 +5 -5
- adcp/types/generated_poc/media_buy/create_media_buy_request.py +25 -25
- adcp/types/generated_poc/media_buy/create_media_buy_response.py +7 -7
- adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +8 -8
- adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +51 -51
- adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +6 -6
- adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +2 -2
- adcp/types/generated_poc/media_buy/get_products_async_response_working.py +4 -4
- adcp/types/generated_poc/media_buy/get_products_request.py +11 -5
- adcp/types/generated_poc/media_buy/get_products_response.py +10 -4
- adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +3 -3
- adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +7 -7
- adcp/types/generated_poc/media_buy/list_creative_formats_request.py +9 -9
- adcp/types/generated_poc/media_buy/list_creative_formats_response.py +5 -5
- adcp/types/generated_poc/media_buy/list_creatives_request.py +24 -24
- adcp/types/generated_poc/media_buy/list_creatives_response.py +52 -52
- adcp/types/generated_poc/media_buy/package_request.py +16 -7
- adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +19 -19
- adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +6 -6
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +5 -5
- 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 +7 -7
- adcp/types/generated_poc/media_buy/sync_creatives_request.py +7 -7
- adcp/types/generated_poc/media_buy/sync_creatives_response.py +15 -15
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +4 -4
- 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 +5 -5
- adcp/types/generated_poc/media_buy/update_media_buy_request.py +37 -29
- adcp/types/generated_poc/media_buy/update_media_buy_response.py +7 -7
- adcp/types/generated_poc/pricing_options/cpc_option.py +8 -8
- adcp/types/generated_poc/pricing_options/cpcv_option.py +8 -8
- adcp/types/generated_poc/pricing_options/cpm_auction_option.py +13 -13
- adcp/types/generated_poc/pricing_options/cpm_fixed_option.py +8 -8
- adcp/types/generated_poc/pricing_options/cpp_option.py +13 -13
- adcp/types/generated_poc/pricing_options/cpv_option.py +12 -12
- adcp/types/generated_poc/pricing_options/flat_rate_option.py +15 -15
- adcp/types/generated_poc/pricing_options/vcpm_auction_option.py +13 -13
- adcp/types/generated_poc/pricing_options/vcpm_fixed_option.py +8 -8
- 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_features_request.py +25 -0
- adcp/types/generated_poc/property/list_property_features_response.py +24 -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/protocols/adcp_extension.py +26 -10
- adcp/types/generated_poc/signals/activate_signal_request.py +3 -3
- adcp/types/generated_poc/signals/activate_signal_response.py +6 -6
- adcp/types/generated_poc/signals/get_signals_request.py +8 -8
- adcp/types/generated_poc/signals/get_signals_response.py +15 -15
- {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/METADATA +1 -1
- adcp-2.19.0.dist-info/RECORD +220 -0
- adcp-2.18.0.dist-info/RECORD +0 -195
- {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/WHEEL +0 -0
- {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/entry_points.txt +0 -0
- {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/licenses/LICENSE +0 -0
- {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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
59
|
+
extra="allow",
|
|
60
60
|
)
|
|
61
61
|
currency: Annotated[
|
|
62
62
|
str,
|
|
63
63
|
Field(
|
|
64
|
-
description=
|
|
65
|
-
examples=[
|
|
66
|
-
pattern=
|
|
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=
|
|
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=
|
|
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=
|
|
82
|
+
Field(description="Flat rate parameters for DOOH and time-based campaigns"),
|
|
83
83
|
] = None
|
|
84
84
|
pricing_model: Annotated[
|
|
85
|
-
Literal[
|
|
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=
|
|
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=
|
|
14
|
+
floor: Annotated[float, Field(description="Minimum acceptable bid price", ge=0.0)]
|
|
15
15
|
p25: Annotated[
|
|
16
|
-
float | None, Field(description=
|
|
16
|
+
float | None, Field(description="25th percentile of recent winning bids", ge=0.0)
|
|
17
17
|
] = None
|
|
18
|
-
p50: Annotated[float | None, Field(description=
|
|
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=
|
|
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=
|
|
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=
|
|
29
|
+
extra="allow",
|
|
30
30
|
)
|
|
31
31
|
currency: Annotated[
|
|
32
32
|
str,
|
|
33
33
|
Field(
|
|
34
|
-
description=
|
|
35
|
-
examples=[
|
|
36
|
-
pattern=
|
|
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=
|
|
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=
|
|
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=
|
|
51
|
+
PriceGuidance, Field(description="Statistical guidance for auction pricing")
|
|
52
52
|
]
|
|
53
53
|
pricing_model: Annotated[
|
|
54
|
-
Literal[
|
|
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=
|
|
15
|
+
extra="allow",
|
|
16
16
|
)
|
|
17
17
|
currency: Annotated[
|
|
18
18
|
str,
|
|
19
19
|
Field(
|
|
20
|
-
description=
|
|
21
|
-
examples=[
|
|
22
|
-
pattern=
|
|
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=
|
|
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=
|
|
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[
|
|
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=
|
|
46
|
+
float, Field(description="Fixed vCPM rate (cost per 1,000 viewable impressions)", ge=0.0)
|
|
47
47
|
]
|
|
@@ -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
|