adcp 2.17.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/ADCP_VERSION +1 -1
- adcp/__init__.py +22 -1
- adcp/__main__.py +72 -0
- adcp/protocols/mcp.py +3 -1
- adcp/types/_ergonomic.py +0 -4
- adcp/types/_generated.py +91 -4
- adcp/types/generated_poc/adagents.py +239 -149
- 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 +2 -2
- adcp/types/generated_poc/core/brand_manifest.py +56 -56
- adcp/types/generated_poc/core/brand_manifest_ref.py +9 -9
- adcp/types/generated_poc/core/context.py +2 -3
- adcp/types/generated_poc/core/creative_asset.py +14 -14
- adcp/types/generated_poc/core/creative_assignment.py +4 -4
- adcp/types/generated_poc/core/creative_filters.py +20 -20
- 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 +9 -9
- adcp/types/generated_poc/core/ext.py +2 -3
- adcp/types/generated_poc/core/format.py +139 -51
- 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 +27 -0
- adcp/types/generated_poc/core/mcp_webhook_payload.py +10 -10
- adcp/types/generated_poc/core/measurement.py +9 -9
- adcp/types/generated_poc/core/media_buy.py +8 -8
- 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 +2 -2
- adcp/types/generated_poc/core/product.py +21 -21
- adcp/types/generated_poc/core/product_filters.py +19 -19
- adcp/types/generated_poc/core/promoted_offerings.py +21 -21
- 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 +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 +9 -9
- adcp/types/generated_poc/core/publisher_property_selector.py +14 -14
- adcp/types/generated_poc/core/push_notification_config.py +5 -5
- adcp/types/generated_poc/core/reporting_capabilities.py +9 -9
- 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 +5 -5
- adcp/types/generated_poc/core/sub_asset.py +15 -15
- adcp/types/generated_poc/core/targeting.py +9 -9
- 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 +26 -26
- adcp/types/generated_poc/creative/preview_creative_response.py +31 -30
- adcp/types/generated_poc/creative/preview_render.py +26 -26
- 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 +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 +64 -23
- 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 +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 +4 -4
- adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +8 -8
- 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 +53 -53
- adcp/types/generated_poc/media_buy/package_request.py +16 -7
- 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 +37 -29
- adcp/types/generated_poc/media_buy/update_media_buy_response.py +8 -8
- adcp/types/generated_poc/pricing_options/cpc_option.py +9 -9
- adcp/types/generated_poc/pricing_options/cpcv_option.py +9 -9
- adcp/types/generated_poc/pricing_options/cpm_auction_option.py +14 -14
- adcp/types/generated_poc/pricing_options/cpm_fixed_option.py +9 -9
- adcp/types/generated_poc/pricing_options/cpp_option.py +14 -14
- adcp/types/generated_poc/pricing_options/cpv_option.py +13 -13
- adcp/types/generated_poc/pricing_options/flat_rate_option.py +16 -16
- adcp/types/generated_poc/pricing_options/vcpm_auction_option.py +14 -14
- adcp/types/generated_poc/pricing_options/vcpm_fixed_option.py +9 -9
- 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 +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/utils/__init__.py +24 -1
- adcp/utils/format_assets.py +224 -0
- adcp/utils/preview_cache.py +29 -7
- {adcp-2.17.0.dist-info → adcp-2.19.0.dist-info}/METADATA +1 -1
- adcp-2.19.0.dist-info/RECORD +220 -0
- adcp-2.17.0.dist-info/RECORD +0 -194
- {adcp-2.17.0.dist-info → adcp-2.19.0.dist-info}/WHEEL +0 -0
- {adcp-2.17.0.dist-info → adcp-2.19.0.dist-info}/entry_points.txt +0 -0
- {adcp-2.17.0.dist-info → adcp-2.19.0.dist-info}/licenses/LICENSE +0 -0
- {adcp-2.17.0.dist-info → adcp-2.19.0.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: pricing_options/cpm_auction_option.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -14,42 +14,42 @@ class PriceGuidance(AdCPBaseModel):
|
|
|
14
14
|
floor: Annotated[
|
|
15
15
|
float,
|
|
16
16
|
Field(
|
|
17
|
-
description=
|
|
17
|
+
description="Minimum bid price - publisher will reject bids under this value", ge=0.0
|
|
18
18
|
),
|
|
19
19
|
]
|
|
20
|
-
p25: Annotated[float | None, Field(description=
|
|
21
|
-
p50: Annotated[float | None, Field(description=
|
|
22
|
-
p75: Annotated[float | None, Field(description=
|
|
23
|
-
p90: Annotated[float | None, Field(description=
|
|
20
|
+
p25: Annotated[float | None, Field(description="25th percentile winning price", ge=0.0)] = None
|
|
21
|
+
p50: Annotated[float | None, Field(description="Median winning price", ge=0.0)] = None
|
|
22
|
+
p75: Annotated[float | None, Field(description="75th percentile winning price", ge=0.0)] = None
|
|
23
|
+
p90: Annotated[float | None, Field(description="90th percentile winning price", ge=0.0)] = None
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
class CpmAuctionPricingOption(AdCPBaseModel):
|
|
27
27
|
model_config = ConfigDict(
|
|
28
|
-
extra=
|
|
28
|
+
extra="allow",
|
|
29
29
|
)
|
|
30
30
|
currency: Annotated[
|
|
31
31
|
str,
|
|
32
32
|
Field(
|
|
33
|
-
description=
|
|
34
|
-
examples=[
|
|
35
|
-
pattern=
|
|
33
|
+
description="ISO 4217 currency code",
|
|
34
|
+
examples=["USD", "EUR", "GBP", "JPY"],
|
|
35
|
+
pattern="^[A-Z]{3}$",
|
|
36
36
|
),
|
|
37
37
|
]
|
|
38
38
|
is_fixed: Annotated[
|
|
39
39
|
Literal[False],
|
|
40
|
-
Field(description=
|
|
40
|
+
Field(description="Whether this is a fixed rate (true) or auction-based (false)"),
|
|
41
41
|
]
|
|
42
42
|
min_spend_per_package: Annotated[
|
|
43
43
|
float | None,
|
|
44
44
|
Field(
|
|
45
|
-
description=
|
|
45
|
+
description="Minimum spend requirement per package using this pricing option, in the specified currency",
|
|
46
46
|
ge=0.0,
|
|
47
47
|
),
|
|
48
48
|
] = None
|
|
49
49
|
price_guidance: Annotated[
|
|
50
|
-
PriceGuidance, Field(description=
|
|
50
|
+
PriceGuidance, Field(description="Pricing guidance for auction-based CPM bidding")
|
|
51
51
|
]
|
|
52
|
-
pricing_model: Annotated[Literal[
|
|
52
|
+
pricing_model: Annotated[Literal["cpm"], Field(description="Cost per 1,000 impressions")]
|
|
53
53
|
pricing_option_id: Annotated[
|
|
54
54
|
str,
|
|
55
55
|
Field(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: pricing_options/cpm_fixed_option.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -12,32 +12,32 @@ from pydantic import ConfigDict, Field
|
|
|
12
12
|
|
|
13
13
|
class CpmFixedRatePricingOption(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
|
-
pricing_model: Annotated[Literal[
|
|
36
|
+
pricing_model: Annotated[Literal["cpm"], Field(description="Cost per 1,000 impressions")]
|
|
37
37
|
pricing_option_id: Annotated[
|
|
38
38
|
str,
|
|
39
39
|
Field(
|
|
40
40
|
description="Unique identifier for this pricing option within the product (e.g., 'cpm_usd_guaranteed')"
|
|
41
41
|
),
|
|
42
42
|
]
|
|
43
|
-
rate: Annotated[float, Field(description=
|
|
43
|
+
rate: Annotated[float, Field(description="Fixed CPM rate (cost per 1,000 impressions)", ge=0.0)]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: pricing_options/cpp_option.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -12,53 +12,53 @@ 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
|
demographic: Annotated[
|
|
18
18
|
str,
|
|
19
19
|
Field(
|
|
20
|
-
description=
|
|
21
|
-
pattern=
|
|
20
|
+
description="Target demographic in Nielsen format: P/M/W/A/C + age range. Examples: P18-49 (Persons 18-49), M25-54 (Men 25-54), W35+ (Women 35+), A18-34 (Adults 18-34), C2-11 (Children 2-11)",
|
|
21
|
+
pattern="^[PMWAC][0-9]{2}(-[0-9]{2}|\\+)$",
|
|
22
22
|
),
|
|
23
23
|
]
|
|
24
24
|
min_points: Annotated[
|
|
25
25
|
float | None,
|
|
26
|
-
Field(description=
|
|
26
|
+
Field(description="Minimum GRPs/TRPs required for this pricing option", ge=0.0),
|
|
27
27
|
] = None
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
class CppPricingOption(AdCPBaseModel):
|
|
31
31
|
model_config = ConfigDict(
|
|
32
|
-
extra=
|
|
32
|
+
extra="allow",
|
|
33
33
|
)
|
|
34
34
|
currency: Annotated[
|
|
35
35
|
str,
|
|
36
36
|
Field(
|
|
37
|
-
description=
|
|
38
|
-
examples=[
|
|
39
|
-
pattern=
|
|
37
|
+
description="ISO 4217 currency code",
|
|
38
|
+
examples=["USD", "EUR", "GBP", "JPY"],
|
|
39
|
+
pattern="^[A-Z]{3}$",
|
|
40
40
|
),
|
|
41
41
|
]
|
|
42
42
|
is_fixed: Annotated[
|
|
43
43
|
Literal[True],
|
|
44
|
-
Field(description=
|
|
44
|
+
Field(description="Whether this is a fixed rate (true) or auction-based (false)"),
|
|
45
45
|
]
|
|
46
46
|
min_spend_per_package: Annotated[
|
|
47
47
|
float | None,
|
|
48
48
|
Field(
|
|
49
|
-
description=
|
|
49
|
+
description="Minimum spend requirement per package using this pricing option, in the specified currency",
|
|
50
50
|
ge=0.0,
|
|
51
51
|
),
|
|
52
52
|
] = None
|
|
53
53
|
parameters: Annotated[
|
|
54
54
|
Parameters,
|
|
55
|
-
Field(description=
|
|
55
|
+
Field(description="CPP-specific parameters for demographic targeting and GRP requirements"),
|
|
56
56
|
]
|
|
57
|
-
pricing_model: Annotated[Literal[
|
|
57
|
+
pricing_model: Annotated[Literal["cpp"], Field(description="Cost per Gross Rating Point")]
|
|
58
58
|
pricing_option_id: Annotated[
|
|
59
59
|
str,
|
|
60
60
|
Field(
|
|
61
61
|
description="Unique identifier for this pricing option within the product (e.g., 'cpp_usd_p18-49')"
|
|
62
62
|
),
|
|
63
63
|
]
|
|
64
|
-
rate: Annotated[float, Field(description=
|
|
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:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+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 for CPV pricing (0.0 to 1.0, e.g., 0.5 = 50% completion)",
|
|
18
18
|
ge=0.0,
|
|
19
19
|
le=1.0,
|
|
20
20
|
),
|
|
@@ -23,7 +23,7 @@ class ViewThreshold(RootModel[float]):
|
|
|
23
23
|
|
|
24
24
|
class ViewThreshold1(AdCPBaseModel):
|
|
25
25
|
model_config = ConfigDict(
|
|
26
|
-
extra=
|
|
26
|
+
extra="allow",
|
|
27
27
|
)
|
|
28
28
|
duration_seconds: Annotated[
|
|
29
29
|
int,
|
|
@@ -36,42 +36,42 @@ class ViewThreshold1(AdCPBaseModel):
|
|
|
36
36
|
|
|
37
37
|
class Parameters(AdCPBaseModel):
|
|
38
38
|
model_config = ConfigDict(
|
|
39
|
-
extra=
|
|
39
|
+
extra="allow",
|
|
40
40
|
)
|
|
41
41
|
view_threshold: ViewThreshold | ViewThreshold1
|
|
42
42
|
|
|
43
43
|
|
|
44
44
|
class CpvPricingOption(AdCPBaseModel):
|
|
45
45
|
model_config = ConfigDict(
|
|
46
|
-
extra=
|
|
46
|
+
extra="allow",
|
|
47
47
|
)
|
|
48
48
|
currency: Annotated[
|
|
49
49
|
str,
|
|
50
50
|
Field(
|
|
51
|
-
description=
|
|
52
|
-
examples=[
|
|
53
|
-
pattern=
|
|
51
|
+
description="ISO 4217 currency code",
|
|
52
|
+
examples=["USD", "EUR", "GBP", "JPY"],
|
|
53
|
+
pattern="^[A-Z]{3}$",
|
|
54
54
|
),
|
|
55
55
|
]
|
|
56
56
|
is_fixed: Annotated[
|
|
57
57
|
Literal[True],
|
|
58
|
-
Field(description=
|
|
58
|
+
Field(description="Whether this is a fixed rate (true) or auction-based (false)"),
|
|
59
59
|
]
|
|
60
60
|
min_spend_per_package: Annotated[
|
|
61
61
|
float | None,
|
|
62
62
|
Field(
|
|
63
|
-
description=
|
|
63
|
+
description="Minimum spend requirement per package using this pricing option, in the specified currency",
|
|
64
64
|
ge=0.0,
|
|
65
65
|
),
|
|
66
66
|
] = None
|
|
67
67
|
parameters: Annotated[
|
|
68
|
-
Parameters, Field(description=
|
|
68
|
+
Parameters, Field(description="CPV-specific parameters defining the view threshold")
|
|
69
69
|
]
|
|
70
|
-
pricing_model: Annotated[Literal[
|
|
70
|
+
pricing_model: Annotated[Literal["cpv"], Field(description="Cost per view at threshold")]
|
|
71
71
|
pricing_option_id: Annotated[
|
|
72
72
|
str,
|
|
73
73
|
Field(
|
|
74
74
|
description="Unique identifier for this pricing option within the product (e.g., 'cpv_usd_50pct')"
|
|
75
75
|
),
|
|
76
76
|
]
|
|
77
|
-
rate: Annotated[float, Field(description=
|
|
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:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -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)]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: pricing_options/vcpm_auction_option.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -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,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: pricing_options/vcpm_fixed_option.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -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")]
|