adcp 2.19.0__py3-none-any.whl → 3.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- adcp/ADCP_VERSION +1 -1
- adcp/__init__.py +6 -14
- adcp/__main__.py +94 -51
- adcp/adagents.py +91 -19
- adcp/client.py +865 -0
- adcp/protocols/a2a.py +84 -0
- adcp/protocols/base.py +101 -0
- adcp/protocols/mcp.py +84 -0
- adcp/server/__init__.py +49 -0
- adcp/server/base.py +368 -0
- adcp/server/content_standards.py +561 -0
- adcp/server/governance.py +491 -0
- adcp/server/mcp_tools.py +471 -0
- adcp/server/proposal.py +334 -0
- adcp/server/sponsored_intelligence.py +444 -0
- adcp/types/__init__.py +111 -23
- adcp/types/_ergonomic.py +35 -14
- adcp/types/_generated.py +346 -52
- adcp/types/aliases.py +13 -20
- adcp/types/base.py +1 -1
- adcp/types/generated_poc/adagents.py +196 -189
- adcp/types/generated_poc/content_standards/__init__.py +3 -0
- adcp/types/generated_poc/content_standards/artifact.py +208 -0
- adcp/types/generated_poc/content_standards/artifact_webhook_payload.py +64 -0
- adcp/types/generated_poc/content_standards/calibrate_content_request.py +17 -0
- adcp/types/generated_poc/content_standards/calibrate_content_response.py +74 -0
- adcp/types/generated_poc/content_standards/content_standards.py +66 -0
- adcp/types/generated_poc/content_standards/create_content_standards_request.py +97 -0
- adcp/types/generated_poc/content_standards/create_content_standards_response.py +52 -0
- adcp/types/generated_poc/content_standards/get_content_standards_request.py +21 -0
- adcp/types/generated_poc/content_standards/get_content_standards_response.py +43 -0
- adcp/types/generated_poc/content_standards/get_media_buy_artifacts_request.py +64 -0
- adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py +117 -0
- adcp/types/generated_poc/content_standards/list_content_standards_request.py +31 -0
- adcp/types/generated_poc/content_standards/list_content_standards_response.py +48 -0
- adcp/types/generated_poc/content_standards/update_content_standards_request.py +101 -0
- adcp/types/generated_poc/content_standards/update_content_standards_response.py +34 -0
- adcp/types/generated_poc/content_standards/validate_content_delivery_request.py +59 -0
- adcp/types/generated_poc/content_standards/validate_content_delivery_response.py +85 -0
- adcp/types/generated_poc/core/activation_key.py +9 -9
- adcp/types/generated_poc/core/assets/audio_asset.py +6 -6
- adcp/types/generated_poc/core/assets/css_asset.py +3 -3
- adcp/types/generated_poc/core/assets/daast_asset.py +19 -19
- adcp/types/generated_poc/core/assets/html_asset.py +3 -3
- adcp/types/generated_poc/core/assets/image_asset.py +7 -7
- adcp/types/generated_poc/core/assets/javascript_asset.py +4 -4
- adcp/types/generated_poc/core/assets/text_asset.py +3 -3
- adcp/types/generated_poc/core/assets/url_asset.py +4 -4
- adcp/types/generated_poc/core/assets/vast_asset.py +19 -19
- adcp/types/generated_poc/core/assets/video_asset.py +8 -8
- adcp/types/generated_poc/core/assets/webhook_asset.py +10 -10
- adcp/types/generated_poc/core/async_response_data.py +3 -3
- adcp/types/generated_poc/core/brand_manifest.py +122 -59
- adcp/types/generated_poc/core/brand_manifest_ref.py +10 -10
- adcp/types/generated_poc/core/context.py +2 -2
- adcp/types/generated_poc/core/creative_asset.py +20 -19
- adcp/types/generated_poc/core/creative_assignment.py +4 -4
- adcp/types/generated_poc/core/creative_filters.py +18 -28
- adcp/types/generated_poc/core/creative_manifest.py +3 -3
- adcp/types/generated_poc/core/creative_policy.py +5 -5
- adcp/types/generated_poc/core/delivery_metrics.py +33 -33
- adcp/types/generated_poc/core/deployment.py +21 -21
- adcp/types/generated_poc/core/destination.py +12 -12
- adcp/types/generated_poc/core/error.py +7 -7
- adcp/types/generated_poc/core/ext.py +2 -2
- adcp/types/generated_poc/core/format.py +66 -66
- adcp/types/generated_poc/core/format_id.py +6 -6
- adcp/types/generated_poc/core/frequency_cap.py +3 -3
- adcp/types/generated_poc/core/identifier.py +3 -3
- adcp/types/generated_poc/core/mcp_webhook_payload.py +11 -11
- adcp/types/generated_poc/core/measurement.py +9 -9
- adcp/types/generated_poc/core/media_buy.py +8 -8
- adcp/types/generated_poc/core/media_buy_features.py +29 -0
- adcp/types/generated_poc/core/offering.py +80 -0
- adcp/types/generated_poc/core/package.py +9 -9
- adcp/types/generated_poc/core/performance_feedback.py +19 -19
- adcp/types/generated_poc/core/placement.py +5 -5
- adcp/types/generated_poc/core/pricing_option.py +9 -15
- adcp/types/generated_poc/core/product.py +21 -21
- adcp/types/generated_poc/core/product_allocation.py +48 -0
- adcp/types/generated_poc/core/product_filters.py +89 -24
- adcp/types/generated_poc/core/promoted_offerings.py +29 -38
- adcp/types/generated_poc/core/promoted_products.py +3 -3
- adcp/types/generated_poc/core/property.py +10 -10
- adcp/types/generated_poc/core/property_id.py +5 -5
- adcp/types/generated_poc/core/property_list_ref.py +5 -5
- adcp/types/generated_poc/core/property_tag.py +5 -5
- adcp/types/generated_poc/core/proposal.py +64 -0
- adcp/types/generated_poc/core/protocol_envelope.py +9 -9
- adcp/types/generated_poc/core/publisher_property_selector.py +14 -14
- adcp/types/generated_poc/core/push_notification_config.py +6 -6
- adcp/types/generated_poc/core/reporting_capabilities.py +9 -9
- adcp/types/generated_poc/core/reporting_webhook.py +70 -0
- adcp/types/generated_poc/core/response.py +5 -5
- adcp/types/generated_poc/core/signal_filters.py +6 -6
- adcp/types/generated_poc/core/start_timing.py +4 -4
- adcp/types/generated_poc/core/sub_asset.py +15 -15
- adcp/types/generated_poc/core/targeting.py +59 -18
- adcp/types/generated_poc/creative/list_creative_formats_request.py +21 -21
- adcp/types/generated_poc/creative/list_creative_formats_response.py +6 -6
- adcp/types/generated_poc/creative/preview_creative_request.py +25 -25
- adcp/types/generated_poc/creative/preview_creative_response.py +29 -29
- adcp/types/generated_poc/creative/preview_render.py +26 -26
- adcp/types/generated_poc/enums/adcp_domain.py +5 -5
- adcp/types/generated_poc/enums/asset_content_type.py +14 -14
- adcp/types/generated_poc/enums/auth_scheme.py +3 -3
- adcp/types/generated_poc/enums/available_metric.py +10 -10
- adcp/types/generated_poc/enums/channels.py +21 -11
- adcp/types/generated_poc/enums/co_branding_requirement.py +4 -4
- adcp/types/generated_poc/enums/creative_action.py +6 -6
- adcp/types/generated_poc/enums/creative_agent_capability.py +5 -5
- adcp/types/generated_poc/enums/creative_sort_field.py +7 -7
- adcp/types/generated_poc/enums/creative_status.py +6 -5
- adcp/types/generated_poc/enums/daast_tracking_event.py +12 -12
- adcp/types/generated_poc/enums/daast_version.py +3 -3
- adcp/types/generated_poc/enums/delivery_type.py +3 -3
- adcp/types/generated_poc/enums/dimension_unit.py +5 -5
- adcp/types/generated_poc/enums/feed_format.py +4 -4
- adcp/types/generated_poc/enums/feedback_source.py +5 -5
- adcp/types/generated_poc/enums/format_category.py +8 -8
- adcp/types/generated_poc/enums/format_id_parameter.py +3 -3
- adcp/types/generated_poc/enums/frequency_cap_scope.py +4 -4
- adcp/types/generated_poc/enums/geo_level.py +14 -0
- adcp/types/generated_poc/enums/history_entry_type.py +3 -3
- adcp/types/generated_poc/enums/http_method.py +3 -3
- adcp/types/generated_poc/enums/identifier_types.py +20 -20
- adcp/types/generated_poc/enums/javascript_module_type.py +4 -4
- adcp/types/generated_poc/enums/landing_page_requirement.py +4 -4
- adcp/types/generated_poc/enums/markdown_flavor.py +3 -3
- adcp/types/generated_poc/enums/media_buy_status.py +5 -5
- adcp/types/generated_poc/enums/metric_type.py +9 -9
- adcp/types/generated_poc/enums/metro_system.py +15 -0
- adcp/types/generated_poc/enums/notification_type.py +5 -5
- adcp/types/generated_poc/enums/pacing.py +4 -4
- adcp/types/generated_poc/enums/postal_system.py +19 -0
- adcp/types/generated_poc/enums/preview_output_format.py +3 -3
- adcp/types/generated_poc/enums/pricing_model.py +8 -8
- adcp/types/generated_poc/enums/property_type.py +9 -8
- adcp/types/generated_poc/enums/publisher_identifier_types.py +6 -6
- adcp/types/generated_poc/enums/reporting_frequency.py +4 -4
- adcp/types/generated_poc/enums/signal_catalog_type.py +4 -4
- adcp/types/generated_poc/enums/sort_direction.py +3 -3
- adcp/types/generated_poc/enums/task_status.py +10 -10
- adcp/types/generated_poc/enums/task_type.py +12 -12
- adcp/types/generated_poc/enums/update_frequency.py +5 -5
- adcp/types/generated_poc/enums/url_asset_type.py +4 -4
- adcp/types/generated_poc/enums/validation_mode.py +3 -3
- adcp/types/generated_poc/enums/vast_tracking_event.py +17 -17
- adcp/types/generated_poc/enums/vast_version.py +6 -6
- adcp/types/generated_poc/enums/webhook_response_type.py +5 -5
- adcp/types/generated_poc/enums/webhook_security_method.py +4 -4
- adcp/types/generated_poc/extensions/extension_meta.py +20 -12
- adcp/types/generated_poc/media_buy/build_creative_request.py +5 -5
- adcp/types/generated_poc/media_buy/build_creative_response.py +7 -7
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +6 -6
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +2 -2
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +6 -6
- adcp/types/generated_poc/media_buy/create_media_buy_request.py +65 -37
- adcp/types/generated_poc/media_buy/create_media_buy_response.py +8 -8
- adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +9 -9
- adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +52 -52
- adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +7 -7
- adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +3 -3
- adcp/types/generated_poc/media_buy/get_products_async_response_working.py +5 -5
- adcp/types/generated_poc/media_buy/get_products_request.py +14 -5
- adcp/types/generated_poc/media_buy/get_products_response.py +12 -6
- adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +4 -4
- adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +9 -9
- adcp/types/generated_poc/media_buy/list_creative_formats_request.py +10 -10
- adcp/types/generated_poc/media_buy/list_creative_formats_response.py +6 -6
- adcp/types/generated_poc/media_buy/list_creatives_request.py +24 -24
- adcp/types/generated_poc/media_buy/list_creatives_response.py +54 -57
- adcp/types/generated_poc/media_buy/package_request.py +12 -12
- adcp/types/generated_poc/media_buy/package_update.py +119 -0
- adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +20 -20
- adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +7 -7
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +6 -6
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +2 -2
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +8 -8
- adcp/types/generated_poc/media_buy/sync_creatives_request.py +8 -8
- adcp/types/generated_poc/media_buy/sync_creatives_response.py +16 -16
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +5 -5
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +2 -2
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +6 -6
- adcp/types/generated_poc/media_buy/update_media_buy_request.py +28 -124
- adcp/types/generated_poc/media_buy/update_media_buy_response.py +8 -8
- adcp/types/generated_poc/pricing_options/cpc_option.py +40 -15
- adcp/types/generated_poc/pricing_options/cpcv_option.py +41 -16
- adcp/types/generated_poc/pricing_options/cpm_option.py +62 -0
- adcp/types/generated_poc/pricing_options/cpp_option.py +46 -23
- adcp/types/generated_poc/pricing_options/cpv_option.py +45 -26
- adcp/types/generated_poc/pricing_options/flat_rate_option.py +53 -47
- adcp/types/generated_poc/pricing_options/vcpm_option.py +70 -0
- adcp/types/generated_poc/property/base_property_source.py +16 -16
- adcp/types/generated_poc/property/create_property_list_request.py +5 -5
- adcp/types/generated_poc/property/create_property_list_response.py +4 -4
- adcp/types/generated_poc/property/delete_property_list_request.py +3 -3
- adcp/types/generated_poc/property/delete_property_list_response.py +4 -4
- adcp/types/generated_poc/property/feature_requirement.py +8 -8
- adcp/types/generated_poc/property/get_property_list_request.py +6 -6
- adcp/types/generated_poc/property/get_property_list_response.py +12 -12
- adcp/types/generated_poc/property/list_property_lists_request.py +6 -6
- adcp/types/generated_poc/property/list_property_lists_response.py +9 -9
- adcp/types/generated_poc/property/property_error.py +11 -11
- adcp/types/generated_poc/property/property_feature.py +5 -5
- adcp/types/generated_poc/property/property_feature_definition.py +19 -19
- adcp/types/generated_poc/property/property_list.py +12 -12
- adcp/types/generated_poc/property/property_list_changed_webhook.py +12 -12
- adcp/types/generated_poc/property/property_list_filters.py +9 -9
- adcp/types/generated_poc/property/update_property_list_request.py +9 -9
- adcp/types/generated_poc/property/update_property_list_response.py +3 -3
- adcp/types/generated_poc/protocol/__init__.py +3 -0
- adcp/types/generated_poc/protocol/get_adcp_capabilities_request.py +34 -0
- adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py +353 -0
- adcp/types/generated_poc/protocols/adcp_extension.py +14 -17
- adcp/types/generated_poc/signals/activate_signal_request.py +4 -4
- adcp/types/generated_poc/signals/activate_signal_response.py +7 -7
- adcp/types/generated_poc/signals/get_signals_request.py +9 -9
- adcp/types/generated_poc/signals/get_signals_response.py +16 -16
- adcp/types/generated_poc/sponsored_intelligence/__init__.py +3 -0
- adcp/types/generated_poc/sponsored_intelligence/si_capabilities.py +102 -0
- adcp/types/generated_poc/sponsored_intelligence/si_get_offering_request.py +34 -0
- adcp/types/generated_poc/sponsored_intelligence/si_get_offering_response.py +100 -0
- adcp/types/generated_poc/sponsored_intelligence/si_identity.py +78 -0
- adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_request.py +46 -0
- adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_response.py +44 -0
- adcp/types/generated_poc/sponsored_intelligence/si_send_message_request.py +58 -0
- adcp/types/generated_poc/sponsored_intelligence/si_send_message_response.py +101 -0
- adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_request.py +60 -0
- adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_response.py +54 -0
- adcp/types/generated_poc/sponsored_intelligence/si_ui_element.py +30 -0
- adcp/utils/format_assets.py +5 -5
- adcp/utils/preview_cache.py +2 -2
- {adcp-2.19.0.dist-info → adcp-3.0.0.dist-info}/METADATA +1 -1
- adcp-3.0.0.dist-info/RECORD +264 -0
- {adcp-2.19.0.dist-info → adcp-3.0.0.dist-info}/WHEEL +1 -1
- adcp/types/generated_poc/enums/standard_format_ids.py +0 -45
- adcp/types/generated_poc/pricing_options/cpm_auction_option.py +0 -58
- adcp/types/generated_poc/pricing_options/cpm_fixed_option.py +0 -43
- adcp/types/generated_poc/pricing_options/vcpm_auction_option.py +0 -61
- adcp/types/generated_poc/pricing_options/vcpm_fixed_option.py +0 -47
- adcp/types/generated_poc/property/list_property_features_request.py +0 -25
- adcp/types/generated_poc/property/list_property_features_response.py +0 -24
- adcp-2.19.0.dist-info/RECORD +0 -220
- {adcp-2.19.0.dist-info → adcp-3.0.0.dist-info}/entry_points.txt +0 -0
- {adcp-2.19.0.dist-info → adcp-3.0.0.dist-info}/licenses/LICENSE +0 -0
- {adcp-2.19.0.dist-info → adcp-3.0.0.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/package_request.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -9,7 +9,7 @@ from typing import Annotated
|
|
|
9
9
|
from adcp.types.base import AdCPBaseModel
|
|
10
10
|
from pydantic import ConfigDict, Field
|
|
11
11
|
|
|
12
|
-
from ..core import creative_asset
|
|
12
|
+
from ..core import creative_asset, creative_assignment
|
|
13
13
|
from ..core import ext as ext_1
|
|
14
14
|
from ..core import format_id, targeting
|
|
15
15
|
from ..enums import pacing as pacing_1
|
|
@@ -17,12 +17,12 @@ from ..enums import pacing as pacing_1
|
|
|
17
17
|
|
|
18
18
|
class PackageRequest(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 (required if using cpm-auction-option)',
|
|
26
26
|
ge=0.0,
|
|
27
27
|
),
|
|
28
28
|
] = None
|
|
@@ -31,16 +31,16 @@ class PackageRequest(AdCPBaseModel):
|
|
|
31
31
|
Field(description="Budget allocation for this package in the media buy's currency", ge=0.0),
|
|
32
32
|
]
|
|
33
33
|
buyer_ref: Annotated[str, Field(description="Buyer's reference identifier for this package")]
|
|
34
|
-
|
|
35
|
-
list[
|
|
34
|
+
creative_assignments: Annotated[
|
|
35
|
+
list[creative_assignment.CreativeAssignment] | None,
|
|
36
36
|
Field(
|
|
37
|
-
description=
|
|
37
|
+
description='Assign existing library creatives to this package with optional weights and placement targeting'
|
|
38
38
|
),
|
|
39
39
|
] = None
|
|
40
40
|
creatives: Annotated[
|
|
41
41
|
list[creative_asset.CreativeAsset] | None,
|
|
42
42
|
Field(
|
|
43
|
-
description=
|
|
43
|
+
description='Upload new creative assets and assign to this package (creatives will be added to library). Use creative_assignments instead for existing library creatives.',
|
|
44
44
|
max_length=100,
|
|
45
45
|
),
|
|
46
46
|
] = None
|
|
@@ -48,18 +48,18 @@ class PackageRequest(AdCPBaseModel):
|
|
|
48
48
|
format_ids: Annotated[
|
|
49
49
|
list[format_id.FormatId] | None,
|
|
50
50
|
Field(
|
|
51
|
-
description=
|
|
51
|
+
description='Array of format IDs that will be used for this package - must be supported by the product. If omitted, defaults to all formats supported by the product.',
|
|
52
52
|
min_length=1,
|
|
53
53
|
),
|
|
54
54
|
] = None
|
|
55
55
|
impressions: Annotated[
|
|
56
|
-
float | None, Field(description=
|
|
56
|
+
float | None, Field(description='Impression goal for this package', ge=0.0)
|
|
57
57
|
] = None
|
|
58
58
|
pacing: pacing_1.Pacing | None = None
|
|
59
59
|
paused: Annotated[
|
|
60
60
|
bool | None,
|
|
61
61
|
Field(
|
|
62
|
-
description=
|
|
62
|
+
description='Whether this package should be created in a paused state. Paused packages do not deliver impressions. Defaults to false.'
|
|
63
63
|
),
|
|
64
64
|
] = False
|
|
65
65
|
pricing_option_id: Annotated[
|
|
@@ -68,5 +68,5 @@ class PackageRequest(AdCPBaseModel):
|
|
|
68
68
|
description="ID of the selected pricing option from the product's pricing_options array"
|
|
69
69
|
),
|
|
70
70
|
]
|
|
71
|
-
product_id: Annotated[str, Field(description=
|
|
71
|
+
product_id: Annotated[str, Field(description='Product ID for this package')]
|
|
72
72
|
targeting_overlay: targeting.TargetingOverlay | None = None
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: media_buy/package_update.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated
|
|
8
|
+
|
|
9
|
+
from adcp.types.base import AdCPBaseModel
|
|
10
|
+
from pydantic import ConfigDict, Field, RootModel
|
|
11
|
+
|
|
12
|
+
from ..core import creative_asset, creative_assignment
|
|
13
|
+
from ..core import ext as ext_1
|
|
14
|
+
from ..core import targeting
|
|
15
|
+
from ..enums import pacing as pacing_1
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class PackageUpdate1(AdCPBaseModel):
|
|
19
|
+
model_config = ConfigDict(
|
|
20
|
+
extra='allow',
|
|
21
|
+
)
|
|
22
|
+
bid_price: Annotated[
|
|
23
|
+
float | None,
|
|
24
|
+
Field(
|
|
25
|
+
description='Updated bid price for auction-based pricing options (only applies when pricing_option is auction-based)',
|
|
26
|
+
ge=0.0,
|
|
27
|
+
),
|
|
28
|
+
] = None
|
|
29
|
+
budget: Annotated[
|
|
30
|
+
float | None,
|
|
31
|
+
Field(
|
|
32
|
+
description='Updated budget allocation for this package in the currency specified by the pricing option',
|
|
33
|
+
ge=0.0,
|
|
34
|
+
),
|
|
35
|
+
] = None
|
|
36
|
+
buyer_ref: Annotated[
|
|
37
|
+
str | None, Field(description="Buyer's reference for the package to update")
|
|
38
|
+
] = None
|
|
39
|
+
creative_assignments: Annotated[
|
|
40
|
+
list[creative_assignment.CreativeAssignment] | None,
|
|
41
|
+
Field(
|
|
42
|
+
description='Replace creative assignments for this package with optional weights and placement targeting. Uses replacement semantics - omit to leave assignments unchanged.'
|
|
43
|
+
),
|
|
44
|
+
] = None
|
|
45
|
+
creatives: Annotated[
|
|
46
|
+
list[creative_asset.CreativeAsset] | None,
|
|
47
|
+
Field(
|
|
48
|
+
description='Upload new creative assets and assign to this package (creatives will be added to library). Use creative_assignments instead for existing library creatives.',
|
|
49
|
+
max_length=100,
|
|
50
|
+
),
|
|
51
|
+
] = None
|
|
52
|
+
ext: ext_1.ExtensionObject | None = None
|
|
53
|
+
impressions: Annotated[
|
|
54
|
+
float | None, Field(description='Updated impression goal for this package', ge=0.0)
|
|
55
|
+
] = None
|
|
56
|
+
pacing: pacing_1.Pacing | None = None
|
|
57
|
+
package_id: Annotated[str, Field(description="Publisher's ID of package to update")]
|
|
58
|
+
paused: Annotated[
|
|
59
|
+
bool | None,
|
|
60
|
+
Field(description='Pause/resume specific package (true = paused, false = active)'),
|
|
61
|
+
] = None
|
|
62
|
+
targeting_overlay: targeting.TargetingOverlay | None = None
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class PackageUpdate2(AdCPBaseModel):
|
|
66
|
+
model_config = ConfigDict(
|
|
67
|
+
extra='allow',
|
|
68
|
+
)
|
|
69
|
+
bid_price: Annotated[
|
|
70
|
+
float | None,
|
|
71
|
+
Field(
|
|
72
|
+
description='Updated bid price for auction-based pricing options (only applies when pricing_option is auction-based)',
|
|
73
|
+
ge=0.0,
|
|
74
|
+
),
|
|
75
|
+
] = None
|
|
76
|
+
budget: Annotated[
|
|
77
|
+
float | None,
|
|
78
|
+
Field(
|
|
79
|
+
description='Updated budget allocation for this package in the currency specified by the pricing option',
|
|
80
|
+
ge=0.0,
|
|
81
|
+
),
|
|
82
|
+
] = None
|
|
83
|
+
buyer_ref: Annotated[str, Field(description="Buyer's reference for the package to update")]
|
|
84
|
+
creative_assignments: Annotated[
|
|
85
|
+
list[creative_assignment.CreativeAssignment] | None,
|
|
86
|
+
Field(
|
|
87
|
+
description='Replace creative assignments for this package with optional weights and placement targeting. Uses replacement semantics - omit to leave assignments unchanged.'
|
|
88
|
+
),
|
|
89
|
+
] = None
|
|
90
|
+
creatives: Annotated[
|
|
91
|
+
list[creative_asset.CreativeAsset] | None,
|
|
92
|
+
Field(
|
|
93
|
+
description='Upload new creative assets and assign to this package (creatives will be added to library). Use creative_assignments instead for existing library creatives.',
|
|
94
|
+
max_length=100,
|
|
95
|
+
),
|
|
96
|
+
] = None
|
|
97
|
+
ext: ext_1.ExtensionObject | None = None
|
|
98
|
+
impressions: Annotated[
|
|
99
|
+
float | None, Field(description='Updated impression goal for this package', ge=0.0)
|
|
100
|
+
] = None
|
|
101
|
+
pacing: pacing_1.Pacing | None = None
|
|
102
|
+
package_id: Annotated[str | None, Field(description="Publisher's ID of package to update")] = (
|
|
103
|
+
None
|
|
104
|
+
)
|
|
105
|
+
paused: Annotated[
|
|
106
|
+
bool | None,
|
|
107
|
+
Field(description='Pause/resume specific package (true = paused, false = active)'),
|
|
108
|
+
] = None
|
|
109
|
+
targeting_overlay: targeting.TargetingOverlay | None = None
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
class PackageUpdate(RootModel[PackageUpdate1 | PackageUpdate2]):
|
|
113
|
+
root: Annotated[
|
|
114
|
+
PackageUpdate1 | PackageUpdate2,
|
|
115
|
+
Field(
|
|
116
|
+
description='Package update configuration for update_media_buy. Identifies package by package_id or buyer_ref and specifies fields to modify. Fields not present are left unchanged. Note: product_id, format_ids, and pricing_option_id cannot be changed after creation.',
|
|
117
|
+
title='Package Update',
|
|
118
|
+
),
|
|
119
|
+
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/provide_performance_feedback_request.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -17,19 +17,19 @@ from ..enums import metric_type as metric_type_1
|
|
|
17
17
|
|
|
18
18
|
class MeasurementPeriod(AdCPBaseModel):
|
|
19
19
|
model_config = ConfigDict(
|
|
20
|
-
extra=
|
|
20
|
+
extra='allow',
|
|
21
21
|
)
|
|
22
22
|
end: Annotated[
|
|
23
|
-
AwareDatetime, Field(description=
|
|
23
|
+
AwareDatetime, Field(description='ISO 8601 end timestamp for measurement period')
|
|
24
24
|
]
|
|
25
25
|
start: Annotated[
|
|
26
|
-
AwareDatetime, Field(description=
|
|
26
|
+
AwareDatetime, Field(description='ISO 8601 start timestamp for measurement period')
|
|
27
27
|
]
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
class ProvidePerformanceFeedbackRequest1(AdCPBaseModel):
|
|
31
31
|
model_config = ConfigDict(
|
|
32
|
-
extra=
|
|
32
|
+
extra='allow',
|
|
33
33
|
)
|
|
34
34
|
buyer_ref: Annotated[
|
|
35
35
|
str | None, Field(description="Buyer's reference for the media buy", min_length=1)
|
|
@@ -38,33 +38,33 @@ class ProvidePerformanceFeedbackRequest1(AdCPBaseModel):
|
|
|
38
38
|
creative_id: Annotated[
|
|
39
39
|
str | None,
|
|
40
40
|
Field(
|
|
41
|
-
description=
|
|
41
|
+
description='Specific creative asset (if feedback is creative-specific)', min_length=1
|
|
42
42
|
),
|
|
43
43
|
] = None
|
|
44
44
|
ext: ext_1.ExtensionObject | None = None
|
|
45
45
|
feedback_source: Annotated[
|
|
46
|
-
feedback_source_1.FeedbackSource | None, Field(description=
|
|
46
|
+
feedback_source_1.FeedbackSource | None, Field(description='Source of the performance data')
|
|
47
47
|
] = feedback_source_1.FeedbackSource.buyer_attribution
|
|
48
48
|
measurement_period: Annotated[
|
|
49
|
-
MeasurementPeriod, Field(description=
|
|
49
|
+
MeasurementPeriod, Field(description='Time period for performance measurement')
|
|
50
50
|
]
|
|
51
51
|
media_buy_id: Annotated[
|
|
52
52
|
str, Field(description="Publisher's media buy identifier", min_length=1)
|
|
53
53
|
]
|
|
54
54
|
metric_type: Annotated[
|
|
55
|
-
metric_type_1.MetricType | None, Field(description=
|
|
55
|
+
metric_type_1.MetricType | None, Field(description='The business metric being measured')
|
|
56
56
|
] = metric_type_1.MetricType.overall_performance
|
|
57
57
|
package_id: Annotated[
|
|
58
58
|
str | None,
|
|
59
59
|
Field(
|
|
60
|
-
description=
|
|
60
|
+
description='Specific package within the media buy (if feedback is package-specific)',
|
|
61
61
|
min_length=1,
|
|
62
62
|
),
|
|
63
63
|
] = None
|
|
64
64
|
performance_index: Annotated[
|
|
65
65
|
float,
|
|
66
66
|
Field(
|
|
67
|
-
description=
|
|
67
|
+
description='Normalized performance score (0.0 = no value, 1.0 = expected, >1.0 = above expected)',
|
|
68
68
|
ge=0.0,
|
|
69
69
|
),
|
|
70
70
|
]
|
|
@@ -72,7 +72,7 @@ class ProvidePerformanceFeedbackRequest1(AdCPBaseModel):
|
|
|
72
72
|
|
|
73
73
|
class ProvidePerformanceFeedbackRequest2(AdCPBaseModel):
|
|
74
74
|
model_config = ConfigDict(
|
|
75
|
-
extra=
|
|
75
|
+
extra='allow',
|
|
76
76
|
)
|
|
77
77
|
buyer_ref: Annotated[
|
|
78
78
|
str, Field(description="Buyer's reference for the media buy", min_length=1)
|
|
@@ -81,33 +81,33 @@ class ProvidePerformanceFeedbackRequest2(AdCPBaseModel):
|
|
|
81
81
|
creative_id: Annotated[
|
|
82
82
|
str | None,
|
|
83
83
|
Field(
|
|
84
|
-
description=
|
|
84
|
+
description='Specific creative asset (if feedback is creative-specific)', min_length=1
|
|
85
85
|
),
|
|
86
86
|
] = None
|
|
87
87
|
ext: ext_1.ExtensionObject | None = None
|
|
88
88
|
feedback_source: Annotated[
|
|
89
|
-
feedback_source_1.FeedbackSource | None, Field(description=
|
|
89
|
+
feedback_source_1.FeedbackSource | None, Field(description='Source of the performance data')
|
|
90
90
|
] = feedback_source_1.FeedbackSource.buyer_attribution
|
|
91
91
|
measurement_period: Annotated[
|
|
92
|
-
MeasurementPeriod, Field(description=
|
|
92
|
+
MeasurementPeriod, Field(description='Time period for performance measurement')
|
|
93
93
|
]
|
|
94
94
|
media_buy_id: Annotated[
|
|
95
95
|
str | None, Field(description="Publisher's media buy identifier", min_length=1)
|
|
96
96
|
] = None
|
|
97
97
|
metric_type: Annotated[
|
|
98
|
-
metric_type_1.MetricType | None, Field(description=
|
|
98
|
+
metric_type_1.MetricType | None, Field(description='The business metric being measured')
|
|
99
99
|
] = metric_type_1.MetricType.overall_performance
|
|
100
100
|
package_id: Annotated[
|
|
101
101
|
str | None,
|
|
102
102
|
Field(
|
|
103
|
-
description=
|
|
103
|
+
description='Specific package within the media buy (if feedback is package-specific)',
|
|
104
104
|
min_length=1,
|
|
105
105
|
),
|
|
106
106
|
] = None
|
|
107
107
|
performance_index: Annotated[
|
|
108
108
|
float,
|
|
109
109
|
Field(
|
|
110
|
-
description=
|
|
110
|
+
description='Normalized performance score (0.0 = no value, 1.0 = expected, >1.0 = above expected)',
|
|
111
111
|
ge=0.0,
|
|
112
112
|
),
|
|
113
113
|
]
|
|
@@ -119,7 +119,7 @@ class ProvidePerformanceFeedbackRequest(
|
|
|
119
119
|
root: Annotated[
|
|
120
120
|
ProvidePerformanceFeedbackRequest1 | ProvidePerformanceFeedbackRequest2,
|
|
121
121
|
Field(
|
|
122
|
-
description=
|
|
123
|
-
title=
|
|
122
|
+
description='Request payload for provide_performance_feedback task',
|
|
123
|
+
title='Provide Performance Feedback Request',
|
|
124
124
|
),
|
|
125
125
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/provide_performance_feedback_response.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -16,25 +16,25 @@ from ..core import ext as ext_1
|
|
|
16
16
|
|
|
17
17
|
class ProvidePerformanceFeedbackResponse1(AdCPBaseModel):
|
|
18
18
|
model_config = ConfigDict(
|
|
19
|
-
extra=
|
|
19
|
+
extra='allow',
|
|
20
20
|
)
|
|
21
21
|
context: context_1.ContextObject | None = None
|
|
22
22
|
ext: ext_1.ExtensionObject | None = None
|
|
23
23
|
success: Annotated[
|
|
24
24
|
Literal[True],
|
|
25
|
-
Field(description=
|
|
25
|
+
Field(description='Whether the performance feedback was successfully received'),
|
|
26
26
|
]
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
class ProvidePerformanceFeedbackResponse2(AdCPBaseModel):
|
|
30
30
|
model_config = ConfigDict(
|
|
31
|
-
extra=
|
|
31
|
+
extra='allow',
|
|
32
32
|
)
|
|
33
33
|
context: context_1.ContextObject | None = None
|
|
34
34
|
errors: Annotated[
|
|
35
35
|
list[error.Error],
|
|
36
36
|
Field(
|
|
37
|
-
description=
|
|
37
|
+
description='Array of errors explaining why feedback was rejected (e.g., invalid measurement period, missing campaign data)',
|
|
38
38
|
min_length=1,
|
|
39
39
|
),
|
|
40
40
|
]
|
|
@@ -47,7 +47,7 @@ class ProvidePerformanceFeedbackResponse(
|
|
|
47
47
|
root: Annotated[
|
|
48
48
|
ProvidePerformanceFeedbackResponse1 | ProvidePerformanceFeedbackResponse2,
|
|
49
49
|
Field(
|
|
50
|
-
description=
|
|
51
|
-
title=
|
|
50
|
+
description='Response payload for provide_performance_feedback task. Returns either success confirmation OR error information, never both.',
|
|
51
|
+
title='Provide Performance Feedback Response',
|
|
52
52
|
),
|
|
53
53
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/sync_creatives_async_response_input_required.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -15,17 +15,17 @@ from ..core import ext as ext_1
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
class Reason(Enum):
|
|
18
|
-
APPROVAL_REQUIRED =
|
|
19
|
-
ASSET_CONFIRMATION =
|
|
20
|
-
FORMAT_CLARIFICATION =
|
|
18
|
+
APPROVAL_REQUIRED = 'APPROVAL_REQUIRED'
|
|
19
|
+
ASSET_CONFIRMATION = 'ASSET_CONFIRMATION'
|
|
20
|
+
FORMAT_CLARIFICATION = 'FORMAT_CLARIFICATION'
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
class SyncCreativesInputRequired(AdCPBaseModel):
|
|
24
24
|
model_config = ConfigDict(
|
|
25
|
-
extra=
|
|
25
|
+
extra='allow',
|
|
26
26
|
)
|
|
27
27
|
context: context_1.ContextObject | None = None
|
|
28
28
|
ext: ext_1.ExtensionObject | None = None
|
|
29
29
|
reason: Annotated[
|
|
30
|
-
Reason | None, Field(description=
|
|
30
|
+
Reason | None, Field(description='Reason code indicating why buyer input is needed')
|
|
31
31
|
] = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/sync_creatives_async_response_submitted.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -13,7 +13,7 @@ from ..core import ext as ext_1
|
|
|
13
13
|
|
|
14
14
|
class SyncCreativesSubmitted(AdCPBaseModel):
|
|
15
15
|
model_config = ConfigDict(
|
|
16
|
-
extra=
|
|
16
|
+
extra='allow',
|
|
17
17
|
)
|
|
18
18
|
context: context_1.ContextObject | None = None
|
|
19
19
|
ext: ext_1.ExtensionObject | None = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/sync_creatives_async_response_working.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -15,23 +15,23 @@ from ..core import ext as ext_1
|
|
|
15
15
|
|
|
16
16
|
class SyncCreativesWorking(AdCPBaseModel):
|
|
17
17
|
model_config = ConfigDict(
|
|
18
|
-
extra=
|
|
18
|
+
extra='allow',
|
|
19
19
|
)
|
|
20
20
|
context: context_1.ContextObject | None = None
|
|
21
21
|
creatives_processed: Annotated[
|
|
22
|
-
int | None, Field(description=
|
|
22
|
+
int | None, Field(description='Number of creatives processed so far', ge=0)
|
|
23
23
|
] = None
|
|
24
24
|
creatives_total: Annotated[
|
|
25
|
-
int | None, Field(description=
|
|
25
|
+
int | None, Field(description='Total number of creatives to process', ge=0)
|
|
26
26
|
] = None
|
|
27
27
|
current_step: Annotated[
|
|
28
|
-
str | None, Field(description=
|
|
28
|
+
str | None, Field(description='Current step or phase of the operation')
|
|
29
29
|
] = None
|
|
30
30
|
ext: ext_1.ExtensionObject | None = None
|
|
31
31
|
percentage: Annotated[
|
|
32
|
-
float | None, Field(description=
|
|
32
|
+
float | None, Field(description='Completion percentage (0-100)', ge=0.0, le=100.0)
|
|
33
33
|
] = None
|
|
34
|
-
step_number: Annotated[int | None, Field(description=
|
|
34
|
+
step_number: Annotated[int | None, Field(description='Current step number', ge=1)] = None
|
|
35
35
|
total_steps: Annotated[
|
|
36
|
-
int | None, Field(description=
|
|
36
|
+
int | None, Field(description='Total number of steps in the operation', ge=1)
|
|
37
37
|
] = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/sync_creatives_request.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -18,41 +18,41 @@ from ..enums import validation_mode as validation_mode_1
|
|
|
18
18
|
|
|
19
19
|
class SyncCreativesRequest(AdCPBaseModel):
|
|
20
20
|
model_config = ConfigDict(
|
|
21
|
-
extra=
|
|
21
|
+
extra='allow',
|
|
22
22
|
)
|
|
23
23
|
assignments: Annotated[
|
|
24
24
|
dict[str, list[str]] | None,
|
|
25
|
-
Field(description=
|
|
25
|
+
Field(description='Optional bulk assignment of creatives to packages'),
|
|
26
26
|
] = None
|
|
27
27
|
context: context_1.ContextObject | None = None
|
|
28
28
|
creative_ids: Annotated[
|
|
29
29
|
list[str] | None,
|
|
30
30
|
Field(
|
|
31
|
-
description=
|
|
31
|
+
description='Optional filter to limit sync scope to specific creative IDs. When provided, only these creatives will be created/updated. Other creatives in the library are unaffected. Useful for partial updates and error recovery.',
|
|
32
32
|
max_length=100,
|
|
33
33
|
),
|
|
34
34
|
] = None
|
|
35
35
|
creatives: Annotated[
|
|
36
36
|
list[creative_asset.CreativeAsset],
|
|
37
|
-
Field(description=
|
|
37
|
+
Field(description='Array of creative assets to sync (create or update)', max_length=100),
|
|
38
38
|
]
|
|
39
39
|
delete_missing: Annotated[
|
|
40
40
|
bool | None,
|
|
41
41
|
Field(
|
|
42
|
-
description=
|
|
42
|
+
description='When true, creatives not included in this sync will be archived. Use with caution for full library replacement.'
|
|
43
43
|
),
|
|
44
44
|
] = False
|
|
45
45
|
dry_run: Annotated[
|
|
46
46
|
bool | None,
|
|
47
47
|
Field(
|
|
48
|
-
description=
|
|
48
|
+
description='When true, preview changes without applying them. Returns what would be created/updated/deleted.'
|
|
49
49
|
),
|
|
50
50
|
] = False
|
|
51
51
|
ext: ext_1.ExtensionObject | None = None
|
|
52
52
|
push_notification_config: Annotated[
|
|
53
53
|
push_notification_config_1.PushNotificationConfig | None,
|
|
54
54
|
Field(
|
|
55
|
-
description=
|
|
55
|
+
description='Optional webhook configuration for async sync notifications. Publisher will send webhook when sync completes if operation takes longer than immediate response time (typically for large bulk operations or manual approval/HITL).'
|
|
56
56
|
),
|
|
57
57
|
] = None
|
|
58
58
|
validation_mode: Annotated[
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/sync_creatives_response.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -17,28 +17,28 @@ from ..enums import creative_action
|
|
|
17
17
|
|
|
18
18
|
class Creative(AdCPBaseModel):
|
|
19
19
|
model_config = ConfigDict(
|
|
20
|
-
extra=
|
|
20
|
+
extra='allow',
|
|
21
21
|
)
|
|
22
22
|
action: Annotated[
|
|
23
|
-
creative_action.CreativeAction, Field(description=
|
|
23
|
+
creative_action.CreativeAction, Field(description='Action taken for this creative')
|
|
24
24
|
]
|
|
25
25
|
assigned_to: Annotated[
|
|
26
26
|
list[str] | None,
|
|
27
27
|
Field(
|
|
28
|
-
description=
|
|
28
|
+
description='Package IDs this creative was successfully assigned to (only present when assignments were requested)'
|
|
29
29
|
),
|
|
30
30
|
] = None
|
|
31
31
|
assignment_errors: Annotated[
|
|
32
32
|
dict[str, str] | None,
|
|
33
33
|
Field(
|
|
34
|
-
description=
|
|
34
|
+
description='Assignment errors by package ID (only present when assignment failures occurred)'
|
|
35
35
|
),
|
|
36
36
|
] = None
|
|
37
37
|
changes: Annotated[
|
|
38
38
|
list[str] | None,
|
|
39
39
|
Field(description="Field names that were modified (only present when action='updated')"),
|
|
40
40
|
] = None
|
|
41
|
-
creative_id: Annotated[str, Field(description=
|
|
41
|
+
creative_id: Annotated[str, Field(description='Creative ID from the request')]
|
|
42
42
|
errors: Annotated[
|
|
43
43
|
list[str] | None,
|
|
44
44
|
Field(description="Validation or processing errors (only present when action='failed')"),
|
|
@@ -46,26 +46,26 @@ class Creative(AdCPBaseModel):
|
|
|
46
46
|
expires_at: Annotated[
|
|
47
47
|
AwareDatetime | None,
|
|
48
48
|
Field(
|
|
49
|
-
description=
|
|
49
|
+
description='ISO 8601 timestamp when preview link expires (only present when preview_url exists)'
|
|
50
50
|
),
|
|
51
51
|
] = None
|
|
52
52
|
platform_id: Annotated[
|
|
53
|
-
str | None, Field(description=
|
|
53
|
+
str | None, Field(description='Platform-specific ID assigned to the creative')
|
|
54
54
|
] = None
|
|
55
55
|
preview_url: Annotated[
|
|
56
56
|
AnyUrl | None,
|
|
57
57
|
Field(
|
|
58
|
-
description=
|
|
58
|
+
description='Preview URL for generative creatives (only present for generative formats)'
|
|
59
59
|
),
|
|
60
60
|
] = None
|
|
61
61
|
warnings: Annotated[
|
|
62
|
-
list[str] | None, Field(description=
|
|
62
|
+
list[str] | None, Field(description='Non-fatal warnings about this creative')
|
|
63
63
|
] = None
|
|
64
64
|
|
|
65
65
|
|
|
66
66
|
class SyncCreativesResponse1(AdCPBaseModel):
|
|
67
67
|
model_config = ConfigDict(
|
|
68
|
-
extra=
|
|
68
|
+
extra='allow',
|
|
69
69
|
)
|
|
70
70
|
context: context_1.ContextObject | None = None
|
|
71
71
|
creatives: Annotated[
|
|
@@ -75,20 +75,20 @@ class SyncCreativesResponse1(AdCPBaseModel):
|
|
|
75
75
|
),
|
|
76
76
|
]
|
|
77
77
|
dry_run: Annotated[
|
|
78
|
-
bool | None, Field(description=
|
|
78
|
+
bool | None, Field(description='Whether this was a dry run (no actual changes made)')
|
|
79
79
|
] = None
|
|
80
80
|
ext: ext_1.ExtensionObject | None = None
|
|
81
81
|
|
|
82
82
|
|
|
83
83
|
class SyncCreativesResponse2(AdCPBaseModel):
|
|
84
84
|
model_config = ConfigDict(
|
|
85
|
-
extra=
|
|
85
|
+
extra='allow',
|
|
86
86
|
)
|
|
87
87
|
context: context_1.ContextObject | None = None
|
|
88
88
|
errors: Annotated[
|
|
89
89
|
list[error.Error],
|
|
90
90
|
Field(
|
|
91
|
-
description=
|
|
91
|
+
description='Operation-level errors that prevented processing any creatives (e.g., authentication failure, service unavailable, invalid request format)',
|
|
92
92
|
min_length=1,
|
|
93
93
|
),
|
|
94
94
|
]
|
|
@@ -99,7 +99,7 @@ class SyncCreativesResponse(RootModel[SyncCreativesResponse1 | SyncCreativesResp
|
|
|
99
99
|
root: Annotated[
|
|
100
100
|
SyncCreativesResponse1 | SyncCreativesResponse2,
|
|
101
101
|
Field(
|
|
102
|
-
description=
|
|
103
|
-
title=
|
|
102
|
+
description='Response from creative sync operation. Returns either per-creative results (best-effort processing) OR operation-level errors (complete failure). This enforces atomic semantics at the operation level while allowing per-item failures within successful operations.',
|
|
103
|
+
title='Sync Creatives Response',
|
|
104
104
|
),
|
|
105
105
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/update_media_buy_async_response_input_required.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -15,16 +15,16 @@ from ..core import ext as ext_1
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
class Reason(Enum):
|
|
18
|
-
APPROVAL_REQUIRED =
|
|
19
|
-
CHANGE_CONFIRMATION =
|
|
18
|
+
APPROVAL_REQUIRED = 'APPROVAL_REQUIRED'
|
|
19
|
+
CHANGE_CONFIRMATION = 'CHANGE_CONFIRMATION'
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
class UpdateMediaBuyInputRequired(AdCPBaseModel):
|
|
23
23
|
model_config = ConfigDict(
|
|
24
|
-
extra=
|
|
24
|
+
extra='allow',
|
|
25
25
|
)
|
|
26
26
|
context: context_1.ContextObject | None = None
|
|
27
27
|
ext: ext_1.ExtensionObject | None = None
|
|
28
28
|
reason: Annotated[
|
|
29
|
-
Reason | None, Field(description=
|
|
29
|
+
Reason | None, Field(description='Reason code indicating why input is needed')
|
|
30
30
|
] = None
|