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: media_buy/sync_creatives_async_response_working.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+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:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+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:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+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:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/update_media_buy_async_response_submitted.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+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 UpdateMediaBuySubmitted(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/update_media_buy_async_response_working.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+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
|
class UpdateMediaBuyWorking(AdCPBaseModel):
|
|
17
17
|
model_config = ConfigDict(
|
|
18
|
-
extra=
|
|
18
|
+
extra="allow",
|
|
19
19
|
)
|
|
20
20
|
context: context_1.ContextObject | None = None
|
|
21
21
|
current_step: Annotated[
|
|
22
|
-
str | None, Field(description=
|
|
22
|
+
str | None, Field(description="Current step or phase of the operation")
|
|
23
23
|
] = None
|
|
24
24
|
ext: ext_1.ExtensionObject | None = None
|
|
25
25
|
percentage: Annotated[
|
|
26
|
-
float | None, Field(description=
|
|
26
|
+
float | None, Field(description="Completion percentage (0-100)", ge=0.0, le=100.0)
|
|
27
27
|
] = None
|
|
28
|
-
step_number: Annotated[int | None, Field(description=
|
|
28
|
+
step_number: Annotated[int | None, Field(description="Current step number", ge=1)] = None
|
|
29
29
|
total_steps: Annotated[
|
|
30
|
-
int | None, Field(description=
|
|
30
|
+
int | None, Field(description="Total number of steps in the operation", ge=1)
|
|
31
31
|
] = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/update_media_buy_request.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-14T17:08:13+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -19,19 +19,19 @@ from ..enums import pacing as pacing_1
|
|
|
19
19
|
|
|
20
20
|
class Packages(AdCPBaseModel):
|
|
21
21
|
model_config = ConfigDict(
|
|
22
|
-
extra=
|
|
22
|
+
extra="allow",
|
|
23
23
|
)
|
|
24
24
|
bid_price: Annotated[
|
|
25
25
|
float | None,
|
|
26
26
|
Field(
|
|
27
|
-
description=
|
|
27
|
+
description="Updated bid price for auction-based pricing options (only applies when pricing_option is auction-based)",
|
|
28
28
|
ge=0.0,
|
|
29
29
|
),
|
|
30
30
|
] = None
|
|
31
31
|
budget: Annotated[
|
|
32
32
|
float | None,
|
|
33
33
|
Field(
|
|
34
|
-
description=
|
|
34
|
+
description="Updated budget allocation for this package in the currency specified by the pricing option",
|
|
35
35
|
ge=0.0,
|
|
36
36
|
),
|
|
37
37
|
] = None
|
|
@@ -41,44 +41,47 @@ class Packages(AdCPBaseModel):
|
|
|
41
41
|
creative_assignments: Annotated[
|
|
42
42
|
list[creative_assignment.CreativeAssignment] | None,
|
|
43
43
|
Field(
|
|
44
|
-
description=
|
|
44
|
+
description="Full creative assignment objects with weights and placement targeting (alternative to creative_ids - provides granular control over weights and placement targeting). Uses replacement semantics like creative_ids."
|
|
45
45
|
),
|
|
46
46
|
] = None
|
|
47
47
|
creative_ids: Annotated[
|
|
48
48
|
list[str] | None,
|
|
49
|
-
Field(description=
|
|
49
|
+
Field(description="Update creative assignments (references existing library creatives)"),
|
|
50
50
|
] = None
|
|
51
51
|
creatives: Annotated[
|
|
52
52
|
list[creative_asset.CreativeAsset] | None,
|
|
53
53
|
Field(
|
|
54
|
-
description=
|
|
54
|
+
description="Full creative objects to upload and assign to this package (alternative to creative_ids - creatives will be added to library). Supports both static and generative creatives.",
|
|
55
55
|
max_length=100,
|
|
56
56
|
),
|
|
57
57
|
] = None
|
|
58
|
+
impressions: Annotated[
|
|
59
|
+
float | None, Field(description="Updated impression goal for this package", ge=0.0)
|
|
60
|
+
] = None
|
|
58
61
|
pacing: pacing_1.Pacing | None = None
|
|
59
62
|
package_id: Annotated[str, Field(description="Publisher's ID of package to update")]
|
|
60
63
|
paused: Annotated[
|
|
61
64
|
bool | None,
|
|
62
|
-
Field(description=
|
|
65
|
+
Field(description="Pause/resume specific package (true = paused, false = active)"),
|
|
63
66
|
] = None
|
|
64
67
|
targeting_overlay: targeting.TargetingOverlay | None = None
|
|
65
68
|
|
|
66
69
|
|
|
67
70
|
class Packages1(AdCPBaseModel):
|
|
68
71
|
model_config = ConfigDict(
|
|
69
|
-
extra=
|
|
72
|
+
extra="allow",
|
|
70
73
|
)
|
|
71
74
|
bid_price: Annotated[
|
|
72
75
|
float | None,
|
|
73
76
|
Field(
|
|
74
|
-
description=
|
|
77
|
+
description="Updated bid price for auction-based pricing options (only applies when pricing_option is auction-based)",
|
|
75
78
|
ge=0.0,
|
|
76
79
|
),
|
|
77
80
|
] = None
|
|
78
81
|
budget: Annotated[
|
|
79
82
|
float | None,
|
|
80
83
|
Field(
|
|
81
|
-
description=
|
|
84
|
+
description="Updated budget allocation for this package in the currency specified by the pricing option",
|
|
82
85
|
ge=0.0,
|
|
83
86
|
),
|
|
84
87
|
] = None
|
|
@@ -86,90 +89,95 @@ class Packages1(AdCPBaseModel):
|
|
|
86
89
|
creative_assignments: Annotated[
|
|
87
90
|
list[creative_assignment.CreativeAssignment] | None,
|
|
88
91
|
Field(
|
|
89
|
-
description=
|
|
92
|
+
description="Full creative assignment objects with weights and placement targeting (alternative to creative_ids - provides granular control over weights and placement targeting). Uses replacement semantics like creative_ids."
|
|
90
93
|
),
|
|
91
94
|
] = None
|
|
92
95
|
creative_ids: Annotated[
|
|
93
96
|
list[str] | None,
|
|
94
|
-
Field(description=
|
|
97
|
+
Field(description="Update creative assignments (references existing library creatives)"),
|
|
95
98
|
] = None
|
|
96
99
|
creatives: Annotated[
|
|
97
100
|
list[creative_asset.CreativeAsset] | None,
|
|
98
101
|
Field(
|
|
99
|
-
description=
|
|
102
|
+
description="Full creative objects to upload and assign to this package (alternative to creative_ids - creatives will be added to library). Supports both static and generative creatives.",
|
|
100
103
|
max_length=100,
|
|
101
104
|
),
|
|
102
105
|
] = None
|
|
106
|
+
impressions: Annotated[
|
|
107
|
+
float | None, Field(description="Updated impression goal for this package", ge=0.0)
|
|
108
|
+
] = None
|
|
103
109
|
pacing: pacing_1.Pacing | None = None
|
|
104
110
|
package_id: Annotated[str | None, Field(description="Publisher's ID of package to update")] = (
|
|
105
111
|
None
|
|
106
112
|
)
|
|
107
113
|
paused: Annotated[
|
|
108
114
|
bool | None,
|
|
109
|
-
Field(description=
|
|
115
|
+
Field(description="Pause/resume specific package (true = paused, false = active)"),
|
|
110
116
|
] = None
|
|
111
117
|
targeting_overlay: targeting.TargetingOverlay | None = None
|
|
112
118
|
|
|
113
119
|
|
|
114
120
|
class UpdateMediaBuyRequest1(AdCPBaseModel):
|
|
115
121
|
model_config = ConfigDict(
|
|
116
|
-
extra=
|
|
122
|
+
extra="allow",
|
|
117
123
|
)
|
|
118
124
|
buyer_ref: Annotated[
|
|
119
125
|
str | None, Field(description="Buyer's reference for the media buy to update")
|
|
120
126
|
] = None
|
|
121
127
|
context: context_1.ContextObject | None = None
|
|
122
128
|
end_time: Annotated[
|
|
123
|
-
AwareDatetime | None, Field(description=
|
|
129
|
+
AwareDatetime | None, Field(description="New end date/time in ISO 8601 format")
|
|
124
130
|
] = None
|
|
125
131
|
ext: ext_1.ExtensionObject | None = None
|
|
126
132
|
media_buy_id: Annotated[str, Field(description="Publisher's ID of the media buy to update")]
|
|
127
133
|
packages: Annotated[
|
|
128
|
-
list[Packages | Packages1] | None, Field(description=
|
|
134
|
+
list[Packages | Packages1] | None, Field(description="Package-specific updates")
|
|
129
135
|
] = None
|
|
130
136
|
paused: Annotated[
|
|
131
137
|
bool | None,
|
|
132
|
-
Field(description=
|
|
138
|
+
Field(description="Pause/resume the entire media buy (true = paused, false = active)"),
|
|
133
139
|
] = None
|
|
134
140
|
push_notification_config: Annotated[
|
|
135
141
|
push_notification_config_1.PushNotificationConfig | None,
|
|
136
142
|
Field(
|
|
137
|
-
description=
|
|
143
|
+
description="Optional webhook configuration for async update notifications. Publisher will send webhook when update completes if operation takes longer than immediate response time."
|
|
138
144
|
),
|
|
139
145
|
] = None
|
|
140
146
|
start_time: start_timing.StartTiming | None = None
|
|
141
147
|
|
|
142
148
|
|
|
143
|
-
Packages2
|
|
149
|
+
class Packages2(Packages):
|
|
150
|
+
pass
|
|
144
151
|
|
|
145
152
|
|
|
146
|
-
Packages3
|
|
153
|
+
class Packages3(Packages1):
|
|
154
|
+
pass
|
|
147
155
|
|
|
148
156
|
|
|
149
157
|
class UpdateMediaBuyRequest2(AdCPBaseModel):
|
|
150
158
|
model_config = ConfigDict(
|
|
151
|
-
extra=
|
|
159
|
+
extra="allow",
|
|
152
160
|
)
|
|
153
161
|
buyer_ref: Annotated[str, Field(description="Buyer's reference for the media buy to update")]
|
|
154
162
|
context: context_1.ContextObject | None = None
|
|
155
163
|
end_time: Annotated[
|
|
156
|
-
AwareDatetime | None, Field(description=
|
|
164
|
+
AwareDatetime | None, Field(description="New end date/time in ISO 8601 format")
|
|
157
165
|
] = None
|
|
158
166
|
ext: ext_1.ExtensionObject | None = None
|
|
159
167
|
media_buy_id: Annotated[
|
|
160
168
|
str | None, Field(description="Publisher's ID of the media buy to update")
|
|
161
169
|
] = None
|
|
162
170
|
packages: Annotated[
|
|
163
|
-
list[Packages2 | Packages3] | None, Field(description=
|
|
171
|
+
list[Packages2 | Packages3] | None, Field(description="Package-specific updates")
|
|
164
172
|
] = None
|
|
165
173
|
paused: Annotated[
|
|
166
174
|
bool | None,
|
|
167
|
-
Field(description=
|
|
175
|
+
Field(description="Pause/resume the entire media buy (true = paused, false = active)"),
|
|
168
176
|
] = None
|
|
169
177
|
push_notification_config: Annotated[
|
|
170
178
|
push_notification_config_1.PushNotificationConfig | None,
|
|
171
179
|
Field(
|
|
172
|
-
description=
|
|
180
|
+
description="Optional webhook configuration for async update notifications. Publisher will send webhook when update completes if operation takes longer than immediate response time."
|
|
173
181
|
),
|
|
174
182
|
] = None
|
|
175
183
|
start_time: start_timing.StartTiming | None = None
|
|
@@ -179,7 +187,7 @@ class UpdateMediaBuyRequest(RootModel[UpdateMediaBuyRequest1 | UpdateMediaBuyReq
|
|
|
179
187
|
root: Annotated[
|
|
180
188
|
UpdateMediaBuyRequest1 | UpdateMediaBuyRequest2,
|
|
181
189
|
Field(
|
|
182
|
-
description=
|
|
183
|
-
title=
|
|
190
|
+
description="Request parameters for updating campaign and package settings",
|
|
191
|
+
title="Update Media Buy Request",
|
|
184
192
|
),
|
|
185
193
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/update_media_buy_response.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -17,30 +17,30 @@ from ..core import package
|
|
|
17
17
|
|
|
18
18
|
class UpdateMediaBuyResponse2(AdCPBaseModel):
|
|
19
19
|
model_config = ConfigDict(
|
|
20
|
-
extra=
|
|
20
|
+
extra="allow",
|
|
21
21
|
)
|
|
22
22
|
context: context_1.ContextObject | None = None
|
|
23
23
|
errors: Annotated[
|
|
24
24
|
list[error.Error],
|
|
25
|
-
Field(description=
|
|
25
|
+
Field(description="Array of errors explaining why the operation failed", min_length=1),
|
|
26
26
|
]
|
|
27
27
|
ext: ext_1.ExtensionObject | None = None
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
class UpdateMediaBuyResponse1(AdCPBaseModel):
|
|
31
31
|
model_config = ConfigDict(
|
|
32
|
-
extra=
|
|
32
|
+
extra="allow",
|
|
33
33
|
)
|
|
34
34
|
affected_packages: Annotated[
|
|
35
35
|
list[package.Package] | None,
|
|
36
|
-
Field(description=
|
|
36
|
+
Field(description="Array of packages that were modified with complete state information"),
|
|
37
37
|
] = None
|
|
38
38
|
buyer_ref: Annotated[str, Field(description="Buyer's reference identifier for the media buy")]
|
|
39
39
|
context: context_1.ContextObject | None = None
|
|
40
40
|
ext: ext_1.ExtensionObject | None = None
|
|
41
41
|
implementation_date: Annotated[
|
|
42
42
|
AwareDatetime | None,
|
|
43
|
-
Field(description=
|
|
43
|
+
Field(description="ISO 8601 timestamp when changes take effect (null if pending approval)"),
|
|
44
44
|
] = None
|
|
45
45
|
media_buy_id: Annotated[str, Field(description="Publisher's identifier for the media buy")]
|
|
46
46
|
|
|
@@ -49,7 +49,7 @@ class UpdateMediaBuyResponse(RootModel[UpdateMediaBuyResponse1 | UpdateMediaBuyR
|
|
|
49
49
|
root: Annotated[
|
|
50
50
|
UpdateMediaBuyResponse1 | UpdateMediaBuyResponse2,
|
|
51
51
|
Field(
|
|
52
|
-
description=
|
|
53
|
-
title=
|
|
52
|
+
description="Response payload for update_media_buy task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - updates are either fully applied or not applied at all.",
|
|
53
|
+
title="Update Media Buy Response",
|
|
54
54
|
),
|
|
55
55
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: pricing_options/cpc_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 CpcPricingOption(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["cpc"], Field(description="Cost per click")]
|
|
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., 'cpc_usd_fixed')"
|
|
41
41
|
),
|
|
42
42
|
]
|
|
43
|
-
rate: Annotated[float, Field(description=
|
|
43
|
+
rate: Annotated[float, Field(description="Fixed CPC rate (cost per click)", ge=0.0)]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: pricing_options/cpcv_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 CpcvPricingOption(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["cpcv"], Field(description="Cost per completed view (100% completion)")
|
|
38
38
|
]
|
|
39
39
|
pricing_option_id: Annotated[
|
|
40
40
|
str,
|
|
@@ -42,4 +42,4 @@ class CpcvPricingOption(AdCPBaseModel):
|
|
|
42
42
|
description="Unique identifier for this pricing option within the product (e.g., 'cpcv_usd_guaranteed')"
|
|
43
43
|
),
|
|
44
44
|
]
|
|
45
|
-
rate: Annotated[float, Field(description=
|
|
45
|
+
rate: Annotated[float, Field(description="Fixed CPCV rate (cost per 100% completion)", ge=0.0)]
|