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
|
@@ -17,19 +17,19 @@ from . import format_id, targeting
|
|
|
17
17
|
|
|
18
18
|
class Package(AdCPBaseModel):
|
|
19
19
|
model_config = ConfigDict(
|
|
20
|
-
extra=
|
|
20
|
+
extra="allow",
|
|
21
21
|
)
|
|
22
22
|
bid_price: Annotated[
|
|
23
23
|
float | None,
|
|
24
24
|
Field(
|
|
25
|
-
description=
|
|
25
|
+
description="Bid price for auction-based CPM pricing (present if using cpm-auction-option)",
|
|
26
26
|
ge=0.0,
|
|
27
27
|
),
|
|
28
28
|
] = None
|
|
29
29
|
budget: Annotated[
|
|
30
30
|
float | None,
|
|
31
31
|
Field(
|
|
32
|
-
description=
|
|
32
|
+
description="Budget allocation for this package in the currency specified by the pricing option",
|
|
33
33
|
ge=0.0,
|
|
34
34
|
),
|
|
35
35
|
] = None
|
|
@@ -38,22 +38,22 @@ class Package(AdCPBaseModel):
|
|
|
38
38
|
] = None
|
|
39
39
|
creative_assignments: Annotated[
|
|
40
40
|
list[creative_assignment.CreativeAssignment] | None,
|
|
41
|
-
Field(description=
|
|
41
|
+
Field(description="Creative assets assigned to this package"),
|
|
42
42
|
] = None
|
|
43
43
|
ext: ext_1.ExtensionObject | None = None
|
|
44
44
|
format_ids_to_provide: Annotated[
|
|
45
45
|
list[format_id.FormatId] | None,
|
|
46
|
-
Field(description=
|
|
46
|
+
Field(description="Format IDs that creative assets will be provided for this package"),
|
|
47
47
|
] = None
|
|
48
48
|
impressions: Annotated[
|
|
49
|
-
float | None, Field(description=
|
|
49
|
+
float | None, Field(description="Impression goal for this package", ge=0.0)
|
|
50
50
|
] = None
|
|
51
51
|
pacing: pacing_1.Pacing | None = None
|
|
52
52
|
package_id: Annotated[str, Field(description="Publisher's unique identifier for the package")]
|
|
53
53
|
paused: Annotated[
|
|
54
54
|
bool | None,
|
|
55
55
|
Field(
|
|
56
|
-
description=
|
|
56
|
+
description="Whether this package is paused by the buyer. Paused packages do not deliver impressions. Defaults to false."
|
|
57
57
|
),
|
|
58
58
|
] = False
|
|
59
59
|
pricing_option_id: Annotated[
|
|
@@ -63,6 +63,6 @@ class Package(AdCPBaseModel):
|
|
|
63
63
|
),
|
|
64
64
|
] = None
|
|
65
65
|
product_id: Annotated[
|
|
66
|
-
str | None, Field(description=
|
|
66
|
+
str | None, Field(description="ID of the product this package is based on")
|
|
67
67
|
] = None
|
|
68
68
|
targeting_overlay: targeting.TargetingOverlay | None = None
|
|
@@ -16,63 +16,63 @@ from ..enums import metric_type as metric_type_1
|
|
|
16
16
|
|
|
17
17
|
class MeasurementPeriod(AdCPBaseModel):
|
|
18
18
|
model_config = ConfigDict(
|
|
19
|
-
extra=
|
|
19
|
+
extra="allow",
|
|
20
20
|
)
|
|
21
21
|
end: Annotated[
|
|
22
|
-
AwareDatetime, Field(description=
|
|
22
|
+
AwareDatetime, Field(description="ISO 8601 end timestamp for measurement period")
|
|
23
23
|
]
|
|
24
24
|
start: Annotated[
|
|
25
|
-
AwareDatetime, Field(description=
|
|
25
|
+
AwareDatetime, Field(description="ISO 8601 start timestamp for measurement period")
|
|
26
26
|
]
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
class Status(Enum):
|
|
30
|
-
accepted =
|
|
31
|
-
queued =
|
|
32
|
-
applied =
|
|
33
|
-
rejected =
|
|
30
|
+
accepted = "accepted"
|
|
31
|
+
queued = "queued"
|
|
32
|
+
applied = "applied"
|
|
33
|
+
rejected = "rejected"
|
|
34
34
|
|
|
35
35
|
|
|
36
36
|
class PerformanceFeedback(AdCPBaseModel):
|
|
37
37
|
model_config = ConfigDict(
|
|
38
|
-
extra=
|
|
38
|
+
extra="allow",
|
|
39
39
|
)
|
|
40
40
|
applied_at: Annotated[
|
|
41
41
|
AwareDatetime | None,
|
|
42
42
|
Field(
|
|
43
|
-
description=
|
|
43
|
+
description="ISO 8601 timestamp when feedback was applied to optimization algorithms"
|
|
44
44
|
),
|
|
45
45
|
] = None
|
|
46
46
|
creative_id: Annotated[
|
|
47
|
-
str | None, Field(description=
|
|
47
|
+
str | None, Field(description="Specific creative asset (if feedback is creative-specific)")
|
|
48
48
|
] = None
|
|
49
49
|
feedback_id: Annotated[
|
|
50
|
-
str, Field(description=
|
|
50
|
+
str, Field(description="Unique identifier for this performance feedback submission")
|
|
51
51
|
]
|
|
52
52
|
feedback_source: Annotated[
|
|
53
|
-
feedback_source_1.FeedbackSource, Field(description=
|
|
53
|
+
feedback_source_1.FeedbackSource, Field(description="Source of the performance data")
|
|
54
54
|
]
|
|
55
55
|
measurement_period: Annotated[
|
|
56
|
-
MeasurementPeriod, Field(description=
|
|
56
|
+
MeasurementPeriod, Field(description="Time period for performance measurement")
|
|
57
57
|
]
|
|
58
58
|
media_buy_id: Annotated[str, Field(description="Publisher's media buy identifier")]
|
|
59
59
|
metric_type: Annotated[
|
|
60
|
-
metric_type_1.MetricType, Field(description=
|
|
60
|
+
metric_type_1.MetricType, Field(description="The business metric being measured")
|
|
61
61
|
]
|
|
62
62
|
package_id: Annotated[
|
|
63
63
|
str | None,
|
|
64
64
|
Field(
|
|
65
|
-
description=
|
|
65
|
+
description="Specific package within the media buy (if feedback is package-specific)"
|
|
66
66
|
),
|
|
67
67
|
] = None
|
|
68
68
|
performance_index: Annotated[
|
|
69
69
|
float,
|
|
70
70
|
Field(
|
|
71
|
-
description=
|
|
71
|
+
description="Normalized performance score (0.0 = no value, 1.0 = expected, >1.0 = above expected)",
|
|
72
72
|
ge=0.0,
|
|
73
73
|
),
|
|
74
74
|
]
|
|
75
|
-
status: Annotated[Status, Field(description=
|
|
75
|
+
status: Annotated[Status, Field(description="Processing status of the performance feedback")]
|
|
76
76
|
submitted_at: Annotated[
|
|
77
|
-
AwareDatetime, Field(description=
|
|
77
|
+
AwareDatetime, Field(description="ISO 8601 timestamp when feedback was submitted")
|
|
78
78
|
]
|
|
@@ -14,15 +14,15 @@ from . import format_id
|
|
|
14
14
|
|
|
15
15
|
class Placement(AdCPBaseModel):
|
|
16
16
|
model_config = ConfigDict(
|
|
17
|
-
extra=
|
|
17
|
+
extra="allow",
|
|
18
18
|
)
|
|
19
19
|
description: Annotated[
|
|
20
|
-
str | None, Field(description=
|
|
20
|
+
str | None, Field(description="Detailed description of where and how the placement appears")
|
|
21
21
|
] = None
|
|
22
22
|
format_ids: Annotated[
|
|
23
23
|
list[format_id.FormatId] | None,
|
|
24
24
|
Field(
|
|
25
|
-
description=
|
|
25
|
+
description="Format IDs supported by this specific placement. Can include: (1) concrete format_ids (fixed dimensions), (2) template format_ids without parameters (accepts any dimensions/duration), or (3) parameterized format_ids (specific dimension/duration constraints).",
|
|
26
26
|
min_length=1,
|
|
27
27
|
),
|
|
28
28
|
] = None
|
|
@@ -33,5 +33,5 @@ class Placement(AdCPBaseModel):
|
|
|
33
33
|
),
|
|
34
34
|
]
|
|
35
35
|
placement_id: Annotated[
|
|
36
|
-
str, Field(description=
|
|
36
|
+
str, Field(description="Unique identifier for the placement within the product")
|
|
37
37
|
]
|
|
@@ -45,7 +45,7 @@ class PricingOption(
|
|
|
45
45
|
| cpp_option.CppPricingOption
|
|
46
46
|
| flat_rate_option.FlatRatePricingOption,
|
|
47
47
|
Field(
|
|
48
|
-
description=
|
|
49
|
-
title=
|
|
48
|
+
description="A pricing model option offered by a publisher for a product. Each pricing model has its own schema with model-specific requirements.",
|
|
49
|
+
title="Pricing Option",
|
|
50
50
|
),
|
|
51
51
|
]
|
|
@@ -35,100 +35,100 @@ class DeliveryMeasurement(AdCPBaseModel):
|
|
|
35
35
|
|
|
36
36
|
class ProductCard(AdCPBaseModel):
|
|
37
37
|
model_config = ConfigDict(
|
|
38
|
-
extra=
|
|
38
|
+
extra="allow",
|
|
39
39
|
)
|
|
40
40
|
format_id: Annotated[
|
|
41
41
|
format_id_1.FormatId,
|
|
42
42
|
Field(
|
|
43
|
-
description=
|
|
43
|
+
description="Creative format defining the card layout (typically product_card_standard)"
|
|
44
44
|
),
|
|
45
45
|
]
|
|
46
46
|
manifest: Annotated[
|
|
47
47
|
dict[str, Any],
|
|
48
|
-
Field(description=
|
|
48
|
+
Field(description="Asset manifest for rendering the card, structure defined by the format"),
|
|
49
49
|
]
|
|
50
50
|
|
|
51
51
|
|
|
52
52
|
class ProductCardDetailed(AdCPBaseModel):
|
|
53
53
|
model_config = ConfigDict(
|
|
54
|
-
extra=
|
|
54
|
+
extra="allow",
|
|
55
55
|
)
|
|
56
56
|
format_id: Annotated[
|
|
57
57
|
format_id_1.FormatId,
|
|
58
58
|
Field(
|
|
59
|
-
description=
|
|
59
|
+
description="Creative format defining the detailed card layout (typically product_card_detailed)"
|
|
60
60
|
),
|
|
61
61
|
]
|
|
62
62
|
manifest: Annotated[
|
|
63
63
|
dict[str, Any],
|
|
64
64
|
Field(
|
|
65
|
-
description=
|
|
65
|
+
description="Asset manifest for rendering the detailed card, structure defined by the format"
|
|
66
66
|
),
|
|
67
67
|
]
|
|
68
68
|
|
|
69
69
|
|
|
70
70
|
class Product(AdCPBaseModel):
|
|
71
71
|
model_config = ConfigDict(
|
|
72
|
-
extra=
|
|
72
|
+
extra="allow",
|
|
73
73
|
)
|
|
74
74
|
brief_relevance: Annotated[
|
|
75
75
|
str | None,
|
|
76
76
|
Field(
|
|
77
|
-
description=
|
|
77
|
+
description="Explanation of why this product matches the brief (only included when brief is provided)"
|
|
78
78
|
),
|
|
79
79
|
] = None
|
|
80
80
|
creative_policy: creative_policy_1.CreativePolicy | None = None
|
|
81
81
|
delivery_measurement: Annotated[
|
|
82
82
|
DeliveryMeasurement,
|
|
83
83
|
Field(
|
|
84
|
-
description=
|
|
84
|
+
description="Measurement provider and methodology for delivery metrics. The buyer accepts the declared provider as the source of truth for the buy. REQUIRED for all products."
|
|
85
85
|
),
|
|
86
86
|
]
|
|
87
87
|
delivery_type: delivery_type_1.DeliveryType
|
|
88
88
|
description: Annotated[
|
|
89
|
-
str, Field(description=
|
|
89
|
+
str, Field(description="Detailed description of the product and its inventory")
|
|
90
90
|
]
|
|
91
91
|
estimated_exposures: Annotated[
|
|
92
92
|
int | None,
|
|
93
|
-
Field(description=
|
|
93
|
+
Field(description="Estimated exposures/impressions for guaranteed products", ge=0),
|
|
94
94
|
] = None
|
|
95
95
|
expires_at: Annotated[
|
|
96
|
-
AwareDatetime | None, Field(description=
|
|
96
|
+
AwareDatetime | None, Field(description="Expiration timestamp for custom products")
|
|
97
97
|
] = None
|
|
98
98
|
ext: ext_1.ExtensionObject | None = None
|
|
99
99
|
format_ids: Annotated[
|
|
100
100
|
list[format_id_1.FormatId],
|
|
101
101
|
Field(
|
|
102
|
-
description=
|
|
102
|
+
description="Array of supported creative format IDs - structured format_id objects with agent_url and id"
|
|
103
103
|
),
|
|
104
104
|
]
|
|
105
|
-
is_custom: Annotated[bool | None, Field(description=
|
|
105
|
+
is_custom: Annotated[bool | None, Field(description="Whether this is a custom product")] = None
|
|
106
106
|
measurement: measurement_1.Measurement | None = None
|
|
107
|
-
name: Annotated[str, Field(description=
|
|
107
|
+
name: Annotated[str, Field(description="Human-readable product name")]
|
|
108
108
|
placements: Annotated[
|
|
109
109
|
list[placement.Placement] | None,
|
|
110
110
|
Field(
|
|
111
|
-
description=
|
|
111
|
+
description="Optional array of specific placements within this product. When provided, buyers can target specific placements when assigning creatives.",
|
|
112
112
|
min_length=1,
|
|
113
113
|
),
|
|
114
114
|
] = None
|
|
115
115
|
pricing_options: Annotated[
|
|
116
116
|
list[pricing_option.PricingOption],
|
|
117
|
-
Field(description=
|
|
117
|
+
Field(description="Available pricing models for this product", min_length=1),
|
|
118
118
|
]
|
|
119
119
|
product_card: Annotated[
|
|
120
120
|
ProductCard | None,
|
|
121
121
|
Field(
|
|
122
|
-
description=
|
|
122
|
+
description="Optional standard visual card (300x400px) for displaying this product in user interfaces. Can be rendered via preview_creative or pre-generated."
|
|
123
123
|
),
|
|
124
124
|
] = None
|
|
125
125
|
product_card_detailed: Annotated[
|
|
126
126
|
ProductCardDetailed | None,
|
|
127
127
|
Field(
|
|
128
|
-
description=
|
|
128
|
+
description="Optional detailed card with carousel and full specifications. Provides rich product presentation similar to media kit pages."
|
|
129
129
|
),
|
|
130
130
|
] = None
|
|
131
|
-
product_id: Annotated[str, Field(description=
|
|
131
|
+
product_id: Annotated[str, Field(description="Unique identifier for the product")]
|
|
132
132
|
publisher_properties: Annotated[
|
|
133
133
|
list[publisher_property_selector.PublisherPropertySelector],
|
|
134
134
|
Field(
|
|
@@ -18,43 +18,43 @@ from . import format_id
|
|
|
18
18
|
|
|
19
19
|
class BudgetRange(AdCPBaseModel):
|
|
20
20
|
model_config = ConfigDict(
|
|
21
|
-
extra=
|
|
21
|
+
extra="allow",
|
|
22
22
|
)
|
|
23
23
|
currency: Annotated[
|
|
24
24
|
str,
|
|
25
25
|
Field(
|
|
26
|
-
description="ISO 4217 currency code (e.g., 'USD', 'EUR', 'GBP')", pattern=
|
|
26
|
+
description="ISO 4217 currency code (e.g., 'USD', 'EUR', 'GBP')", pattern="^[A-Z]{3}$"
|
|
27
27
|
),
|
|
28
28
|
]
|
|
29
|
-
max: Annotated[float | None, Field(description=
|
|
30
|
-
min: Annotated[float, Field(description=
|
|
29
|
+
max: Annotated[float | None, Field(description="Maximum budget amount", ge=0.0)] = None
|
|
30
|
+
min: Annotated[float, Field(description="Minimum budget amount", ge=0.0)]
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
class BudgetRange1(AdCPBaseModel):
|
|
34
34
|
model_config = ConfigDict(
|
|
35
|
-
extra=
|
|
35
|
+
extra="allow",
|
|
36
36
|
)
|
|
37
37
|
currency: Annotated[
|
|
38
38
|
str,
|
|
39
39
|
Field(
|
|
40
|
-
description="ISO 4217 currency code (e.g., 'USD', 'EUR', 'GBP')", pattern=
|
|
40
|
+
description="ISO 4217 currency code (e.g., 'USD', 'EUR', 'GBP')", pattern="^[A-Z]{3}$"
|
|
41
41
|
),
|
|
42
42
|
]
|
|
43
|
-
max: Annotated[float, Field(description=
|
|
44
|
-
min: Annotated[float | None, Field(description=
|
|
43
|
+
max: Annotated[float, Field(description="Maximum budget amount", ge=0.0)]
|
|
44
|
+
min: Annotated[float | None, Field(description="Minimum budget amount", ge=0.0)] = None
|
|
45
45
|
|
|
46
46
|
|
|
47
47
|
class Country(RootModel[str]):
|
|
48
|
-
root: Annotated[str, Field(pattern=
|
|
48
|
+
root: Annotated[str, Field(pattern="^[A-Z]{2}$")]
|
|
49
49
|
|
|
50
50
|
|
|
51
51
|
class ProductFilters(AdCPBaseModel):
|
|
52
52
|
model_config = ConfigDict(
|
|
53
|
-
extra=
|
|
53
|
+
extra="allow",
|
|
54
54
|
)
|
|
55
55
|
budget_range: Annotated[
|
|
56
56
|
BudgetRange | BudgetRange1 | None,
|
|
57
|
-
Field(description=
|
|
57
|
+
Field(description="Budget range to filter appropriate products"),
|
|
58
58
|
] = None
|
|
59
59
|
channels: Annotated[
|
|
60
60
|
list[channels_1.AdvertisingChannels] | None,
|
|
@@ -70,28 +70,28 @@ class ProductFilters(AdCPBaseModel):
|
|
|
70
70
|
end_date: Annotated[
|
|
71
71
|
date | None,
|
|
72
72
|
Field(
|
|
73
|
-
description=
|
|
73
|
+
description="Campaign end date (ISO 8601 date format: YYYY-MM-DD) for availability checks"
|
|
74
74
|
),
|
|
75
75
|
] = None
|
|
76
76
|
format_ids: Annotated[
|
|
77
|
-
list[format_id.FormatId] | None, Field(description=
|
|
77
|
+
list[format_id.FormatId] | None, Field(description="Filter by specific format IDs")
|
|
78
78
|
] = None
|
|
79
79
|
format_types: Annotated[
|
|
80
|
-
list[format_category.FormatCategory] | None, Field(description=
|
|
80
|
+
list[format_category.FormatCategory] | None, Field(description="Filter by format types")
|
|
81
81
|
] = None
|
|
82
82
|
is_fixed_price: Annotated[
|
|
83
|
-
bool | None, Field(description=
|
|
83
|
+
bool | None, Field(description="Filter for fixed price vs auction products")
|
|
84
84
|
] = None
|
|
85
85
|
min_exposures: Annotated[
|
|
86
86
|
int | None,
|
|
87
|
-
Field(description=
|
|
87
|
+
Field(description="Minimum exposures/impressions needed for measurement validity", ge=1),
|
|
88
88
|
] = None
|
|
89
89
|
standard_formats_only: Annotated[
|
|
90
|
-
bool | None, Field(description=
|
|
90
|
+
bool | None, Field(description="Only return products accepting IAB standard formats")
|
|
91
91
|
] = None
|
|
92
92
|
start_date: Annotated[
|
|
93
93
|
date | None,
|
|
94
94
|
Field(
|
|
95
|
-
description=
|
|
95
|
+
description="Campaign start date (ISO 8601 date format: YYYY-MM-DD) for availability checks"
|
|
96
96
|
),
|
|
97
97
|
] = None
|
|
@@ -14,28 +14,28 @@ from . import brand_manifest_ref, promoted_products
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class AssetType(Enum):
|
|
17
|
-
image =
|
|
18
|
-
video =
|
|
19
|
-
audio =
|
|
20
|
-
vast =
|
|
21
|
-
daast =
|
|
22
|
-
text =
|
|
23
|
-
url =
|
|
24
|
-
html =
|
|
25
|
-
css =
|
|
26
|
-
javascript =
|
|
27
|
-
webhook =
|
|
17
|
+
image = "image"
|
|
18
|
+
video = "video"
|
|
19
|
+
audio = "audio"
|
|
20
|
+
vast = "vast"
|
|
21
|
+
daast = "daast"
|
|
22
|
+
text = "text"
|
|
23
|
+
url = "url"
|
|
24
|
+
html = "html"
|
|
25
|
+
css = "css"
|
|
26
|
+
javascript = "javascript"
|
|
27
|
+
webhook = "webhook"
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
class AssetSelectors(AdCPBaseModel):
|
|
31
31
|
model_config = ConfigDict(
|
|
32
|
-
extra=
|
|
32
|
+
extra="allow",
|
|
33
33
|
)
|
|
34
34
|
asset_types: Annotated[
|
|
35
35
|
list[AssetType] | None, Field(description="Filter by asset type (e.g., ['image', 'video'])")
|
|
36
36
|
] = None
|
|
37
37
|
exclude_tags: Annotated[
|
|
38
|
-
list[str] | None, Field(description=
|
|
38
|
+
list[str] | None, Field(description="Exclude assets with these tags")
|
|
39
39
|
] = None
|
|
40
40
|
tags: Annotated[
|
|
41
41
|
list[str] | None,
|
|
@@ -45,10 +45,10 @@ class AssetSelectors(AdCPBaseModel):
|
|
|
45
45
|
|
|
46
46
|
class Offering(AdCPBaseModel):
|
|
47
47
|
model_config = ConfigDict(
|
|
48
|
-
extra=
|
|
48
|
+
extra="allow",
|
|
49
49
|
)
|
|
50
50
|
assets: Annotated[
|
|
51
|
-
list[dict[str, Any]] | None, Field(description=
|
|
51
|
+
list[dict[str, Any]] | None, Field(description="Assets specific to this offering")
|
|
52
52
|
] = None
|
|
53
53
|
description: Annotated[str | None, Field(description="Description of what's being offered")] = (
|
|
54
54
|
None
|
|
@@ -60,27 +60,27 @@ class Offering(AdCPBaseModel):
|
|
|
60
60
|
|
|
61
61
|
class PromotedOfferings(AdCPBaseModel):
|
|
62
62
|
model_config = ConfigDict(
|
|
63
|
-
extra=
|
|
63
|
+
extra="allow",
|
|
64
64
|
)
|
|
65
65
|
asset_selectors: Annotated[
|
|
66
66
|
AssetSelectors | None,
|
|
67
|
-
Field(description=
|
|
67
|
+
Field(description="Selectors to choose specific assets from the brand manifest"),
|
|
68
68
|
] = None
|
|
69
69
|
brand_manifest: Annotated[
|
|
70
70
|
brand_manifest_ref.BrandManifestReference,
|
|
71
71
|
Field(
|
|
72
|
-
description=
|
|
72
|
+
description="Brand information manifest containing assets, themes, and guidelines. Can be provided inline or as a URL reference to a hosted manifest."
|
|
73
73
|
),
|
|
74
74
|
]
|
|
75
75
|
offerings: Annotated[
|
|
76
76
|
list[Offering] | None,
|
|
77
77
|
Field(
|
|
78
|
-
description=
|
|
78
|
+
description="Inline offerings for campaigns without a product catalog. Each offering has a name, description, and associated assets."
|
|
79
79
|
),
|
|
80
80
|
] = None
|
|
81
81
|
product_selectors: Annotated[
|
|
82
82
|
promoted_products.PromotedProducts | None,
|
|
83
83
|
Field(
|
|
84
|
-
description=
|
|
84
|
+
description="Selectors to choose which products/offerings from the brand manifest product catalog to promote"
|
|
85
85
|
),
|
|
86
86
|
] = None
|
|
@@ -12,7 +12,7 @@ from pydantic import ConfigDict, Field
|
|
|
12
12
|
|
|
13
13
|
class PromotedProducts(AdCPBaseModel):
|
|
14
14
|
model_config = ConfigDict(
|
|
15
|
-
extra=
|
|
15
|
+
extra="allow",
|
|
16
16
|
)
|
|
17
17
|
manifest_category: Annotated[
|
|
18
18
|
str | None,
|
|
@@ -28,7 +28,7 @@ class PromotedProducts(AdCPBaseModel):
|
|
|
28
28
|
] = None
|
|
29
29
|
manifest_skus: Annotated[
|
|
30
30
|
list[str] | None,
|
|
31
|
-
Field(description=
|
|
31
|
+
Field(description="Direct product SKU references from the brand manifest product catalog"),
|
|
32
32
|
] = None
|
|
33
33
|
manifest_tags: Annotated[
|
|
34
34
|
list[str] | None,
|
|
@@ -17,11 +17,11 @@ from . import property_tag
|
|
|
17
17
|
|
|
18
18
|
class Identifier(AdCPBaseModel):
|
|
19
19
|
model_config = ConfigDict(
|
|
20
|
-
extra=
|
|
20
|
+
extra="allow",
|
|
21
21
|
)
|
|
22
22
|
type: Annotated[
|
|
23
23
|
identifier_types.PropertyIdentifierTypes,
|
|
24
|
-
Field(description=
|
|
24
|
+
Field(description="Type of identifier for this property"),
|
|
25
25
|
]
|
|
26
26
|
value: Annotated[
|
|
27
27
|
str,
|
|
@@ -33,30 +33,30 @@ class Identifier(AdCPBaseModel):
|
|
|
33
33
|
|
|
34
34
|
class Property(AdCPBaseModel):
|
|
35
35
|
model_config = ConfigDict(
|
|
36
|
-
extra=
|
|
36
|
+
extra="allow",
|
|
37
37
|
)
|
|
38
38
|
identifiers: Annotated[
|
|
39
|
-
list[Identifier], Field(description=
|
|
39
|
+
list[Identifier], Field(description="Array of identifiers for this property", min_length=1)
|
|
40
40
|
]
|
|
41
|
-
name: Annotated[str, Field(description=
|
|
41
|
+
name: Annotated[str, Field(description="Human-readable property name")]
|
|
42
42
|
property_id: Annotated[
|
|
43
43
|
property_id_1.PropertyId | None,
|
|
44
44
|
Field(
|
|
45
|
-
description=
|
|
45
|
+
description="Unique identifier for this property (optional). Enables referencing properties by ID instead of repeating full objects."
|
|
46
46
|
),
|
|
47
47
|
] = None
|
|
48
48
|
property_type: Annotated[
|
|
49
|
-
property_type_1.PropertyType, Field(description=
|
|
49
|
+
property_type_1.PropertyType, Field(description="Type of advertising property")
|
|
50
50
|
]
|
|
51
51
|
publisher_domain: Annotated[
|
|
52
52
|
str | None,
|
|
53
53
|
Field(
|
|
54
|
-
description=
|
|
54
|
+
description="Domain where adagents.json should be checked for authorization validation. Required for list_authorized_properties response. Optional in adagents.json (file location implies domain)."
|
|
55
55
|
),
|
|
56
56
|
] = None
|
|
57
57
|
tags: Annotated[
|
|
58
58
|
list[property_tag.PropertyTag] | None,
|
|
59
59
|
Field(
|
|
60
|
-
description=
|
|
60
|
+
description="Tags for categorization and grouping (e.g., network membership, content categories)"
|
|
61
61
|
),
|
|
62
62
|
] = None
|
|
@@ -13,9 +13,9 @@ class PropertyId(RootModel[str]):
|
|
|
13
13
|
root: Annotated[
|
|
14
14
|
str,
|
|
15
15
|
Field(
|
|
16
|
-
description=
|
|
17
|
-
examples=[
|
|
18
|
-
pattern=
|
|
19
|
-
title=
|
|
16
|
+
description="Identifier for a publisher property. Must be lowercase alphanumeric with underscores only.",
|
|
17
|
+
examples=["cnn_ctv_app", "homepage", "mobile_ios", "instagram"],
|
|
18
|
+
pattern="^[a-z0-9_]+$",
|
|
19
|
+
title="Property ID",
|
|
20
20
|
),
|
|
21
21
|
]
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: core/property_list_ref.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 AnyUrl, ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class PropertyListReference(AdCPBaseModel):
|
|
14
|
+
model_config = ConfigDict(
|
|
15
|
+
extra="forbid",
|
|
16
|
+
)
|
|
17
|
+
agent_url: Annotated[AnyUrl, Field(description="URL of the agent managing the property list")]
|
|
18
|
+
auth_token: Annotated[
|
|
19
|
+
str | None,
|
|
20
|
+
Field(
|
|
21
|
+
description="JWT or other authorization token for accessing the list. Optional if the list is public or caller has implicit access."
|
|
22
|
+
),
|
|
23
|
+
] = None
|
|
24
|
+
list_id: Annotated[
|
|
25
|
+
str, Field(description="Identifier for the property list within the agent", min_length=1)
|
|
26
|
+
]
|
|
@@ -13,9 +13,9 @@ class PropertyTag(RootModel[str]):
|
|
|
13
13
|
root: Annotated[
|
|
14
14
|
str,
|
|
15
15
|
Field(
|
|
16
|
-
description=
|
|
17
|
-
examples=[
|
|
18
|
-
pattern=
|
|
19
|
-
title=
|
|
16
|
+
description="Tag for categorizing publisher properties. Must be lowercase alphanumeric with underscores only.",
|
|
17
|
+
examples=["ctv", "premium", "news", "sports", "meta_network", "social_media"],
|
|
18
|
+
pattern="^[a-z0-9_]+$",
|
|
19
|
+
title="Property Tag",
|
|
20
20
|
),
|
|
21
21
|
]
|