adcp 3.0.0__py3-none-any.whl → 3.2.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 +13 -5
- adcp/__main__.py +4 -4
- adcp/adagents.py +5 -9
- adcp/client.py +14 -12
- adcp/protocols/a2a.py +3 -3
- adcp/protocols/base.py +2 -2
- adcp/protocols/mcp.py +3 -3
- adcp/server/base.py +6 -10
- adcp/server/content_standards.py +17 -49
- adcp/server/governance.py +20 -59
- adcp/server/mcp_tools.py +8 -4
- adcp/server/proposal.py +1 -3
- adcp/server/sponsored_intelligence.py +10 -28
- adcp/simple.py +10 -10
- adcp/types/__init__.py +14 -6
- adcp/types/_generated.py +44 -27
- adcp/types/aliases.py +55 -0
- adcp/types/base.py +7 -7
- adcp/types/generated_poc/{protocols → a2ui}/__init__.py +1 -1
- adcp/types/generated_poc/a2ui/component.py +24 -0
- adcp/types/generated_poc/a2ui/surface.py +33 -0
- adcp/types/generated_poc/account/__init__.py +3 -0
- adcp/types/generated_poc/account/list_accounts_request.py +30 -0
- adcp/types/generated_poc/account/list_accounts_response.py +30 -0
- adcp/types/generated_poc/adagents.py +192 -195
- adcp/types/generated_poc/content_standards/artifact.py +69 -69
- adcp/types/generated_poc/content_standards/artifact_webhook_payload.py +13 -13
- adcp/types/generated_poc/content_standards/calibrate_content_request.py +2 -2
- adcp/types/generated_poc/content_standards/calibrate_content_response.py +17 -17
- adcp/types/generated_poc/content_standards/content_standards.py +8 -8
- adcp/types/generated_poc/content_standards/create_content_standards_request.py +13 -13
- adcp/types/generated_poc/content_standards/create_content_standards_response.py +6 -6
- adcp/types/generated_poc/content_standards/get_content_standards_request.py +1 -1
- adcp/types/generated_poc/content_standards/get_content_standards_response.py +4 -4
- adcp/types/generated_poc/content_standards/get_media_buy_artifacts_request.py +14 -14
- adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py +30 -30
- adcp/types/generated_poc/content_standards/list_content_standards_request.py +4 -4
- adcp/types/generated_poc/content_standards/list_content_standards_response.py +5 -5
- adcp/types/generated_poc/content_standards/update_content_standards_request.py +14 -14
- adcp/types/generated_poc/content_standards/update_content_standards_response.py +4 -4
- adcp/types/generated_poc/content_standards/validate_content_delivery_request.py +13 -13
- adcp/types/generated_poc/content_standards/validate_content_delivery_response.py +16 -16
- adcp/types/generated_poc/core/account.py +54 -0
- adcp/types/generated_poc/core/activation_key.py +8 -8
- adcp/types/generated_poc/core/assets/audio_asset.py +37 -8
- 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 +126 -10
- 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 +66 -66
- 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 +12 -12
- adcp/types/generated_poc/core/creative_assignment.py +3 -3
- adcp/types/generated_poc/core/creative_filters.py +23 -17
- adcp/types/generated_poc/core/creative_manifest.py +4 -4
- 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 +49 -124
- 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 +2 -2
- 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 +12 -8
- adcp/types/generated_poc/core/media_buy_features.py +3 -3
- adcp/types/generated_poc/core/offering.py +9 -9
- 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 +1 -1
- adcp/types/generated_poc/core/product.py +27 -21
- adcp/types/generated_poc/core/product_allocation.py +5 -5
- adcp/types/generated_poc/core/product_filters.py +27 -27
- adcp/types/generated_poc/core/promoted_offerings.py +18 -18
- adcp/types/generated_poc/core/promoted_products.py +2 -2
- 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 +4 -4
- adcp/types/generated_poc/core/property_tag.py +4 -4
- adcp/types/generated_poc/core/proposal.py +13 -13
- 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/reporting_webhook.py +10 -10
- 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 +3 -3
- adcp/types/generated_poc/core/sub_asset.py +14 -14
- adcp/types/generated_poc/core/targeting.py +17 -10
- 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 +28 -28
- adcp/types/generated_poc/creative/preview_render.py +25 -25
- adcp/types/generated_poc/enums/adcp_domain.py +4 -4
- 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 +19 -19
- 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 +5 -5
- 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/geo_level.py +4 -4
- 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/metro_system.py +5 -5
- adcp/types/generated_poc/enums/notification_type.py +4 -4
- adcp/types/generated_poc/enums/pacing.py +3 -3
- adcp/types/generated_poc/enums/postal_system.py +9 -9
- 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 +8 -8
- 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/task_status.py +9 -9
- adcp/types/generated_poc/enums/task_type.py +11 -12
- 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/extension_meta.py +14 -14
- 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 +27 -21
- adcp/types/generated_poc/media_buy/create_media_buy_response.py +15 -8
- 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 +5 -5
- 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 +23 -23
- adcp/types/generated_poc/media_buy/list_creatives_response.py +53 -49
- adcp/types/generated_poc/media_buy/package_request.py +8 -8
- adcp/types/generated_poc/media_buy/package_update.py +16 -16
- 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 +14 -8
- adcp/types/generated_poc/media_buy/sync_creatives_response.py +33 -29
- 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 +14 -14
- adcp/types/generated_poc/media_buy/update_media_buy_response.py +7 -7
- adcp/types/generated_poc/pricing_options/cpc_option.py +13 -26
- adcp/types/generated_poc/pricing_options/cpcv_option.py +13 -26
- adcp/types/generated_poc/pricing_options/cpm_option.py +13 -20
- adcp/types/generated_poc/pricing_options/cpp_option.py +19 -32
- adcp/types/generated_poc/pricing_options/cpv_option.py +19 -32
- adcp/types/generated_poc/pricing_options/flat_rate_option.py +23 -36
- adcp/types/generated_poc/pricing_options/price_guidance.py +26 -0
- adcp/types/generated_poc/pricing_options/vcpm_option.py +13 -26
- adcp/types/generated_poc/property/base_property_source.py +15 -15
- adcp/types/generated_poc/property/create_property_list_request.py +4 -4
- adcp/types/generated_poc/property/create_property_list_response.py +3 -3
- adcp/types/generated_poc/property/delete_property_list_request.py +2 -2
- adcp/types/generated_poc/property/delete_property_list_response.py +3 -3
- adcp/types/generated_poc/property/feature_requirement.py +8 -8
- adcp/types/generated_poc/property/get_property_list_request.py +5 -5
- adcp/types/generated_poc/property/get_property_list_response.py +11 -11
- adcp/types/generated_poc/property/list_property_lists_request.py +5 -5
- adcp/types/generated_poc/property/list_property_lists_response.py +8 -8
- adcp/types/generated_poc/property/property_error.py +10 -10
- adcp/types/generated_poc/property/property_feature.py +4 -4
- adcp/types/generated_poc/property/property_feature_definition.py +18 -18
- adcp/types/generated_poc/property/property_list.py +11 -11
- adcp/types/generated_poc/property/property_list_changed_webhook.py +11 -11
- adcp/types/generated_poc/property/property_list_filters.py +7 -7
- adcp/types/generated_poc/property/update_property_list_request.py +8 -8
- adcp/types/generated_poc/property/update_property_list_response.py +2 -2
- adcp/types/generated_poc/protocol/get_adcp_capabilities_request.py +8 -6
- adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py +59 -58
- 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/types/generated_poc/sponsored_intelligence/si_capabilities.py +45 -30
- adcp/types/generated_poc/sponsored_intelligence/si_get_offering_request.py +4 -4
- adcp/types/generated_poc/sponsored_intelligence/si_get_offering_response.py +23 -23
- adcp/types/generated_poc/sponsored_intelligence/si_identity.py +16 -16
- adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_request.py +5 -5
- adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_response.py +7 -7
- adcp/types/generated_poc/sponsored_intelligence/si_send_message_request.py +11 -11
- adcp/types/generated_poc/sponsored_intelligence/si_send_message_response.py +37 -23
- adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_request.py +17 -17
- adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_response.py +15 -15
- adcp/types/generated_poc/sponsored_intelligence/si_ui_element.py +11 -11
- adcp/utils/format_assets.py +32 -32
- {adcp-3.0.0.dist-info → adcp-3.2.0.dist-info}/METADATA +10 -5
- adcp-3.2.0.dist-info/RECORD +268 -0
- adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +0 -38
- adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +0 -84
- adcp/types/generated_poc/protocols/adcp_extension.py +0 -50
- adcp-3.0.0.dist-info/RECORD +0 -264
- {adcp-3.0.0.dist-info → adcp-3.2.0.dist-info}/WHEEL +0 -0
- {adcp-3.0.0.dist-info → adcp-3.2.0.dist-info}/entry_points.txt +0 -0
- {adcp-3.0.0.dist-info → adcp-3.2.0.dist-info}/licenses/LICENSE +0 -0
- {adcp-3.0.0.dist-info → adcp-3.2.0.dist-info}/top_level.txt +0 -0
|
@@ -12,15 +12,15 @@ from pydantic import ConfigDict, Field
|
|
|
12
12
|
|
|
13
13
|
class VenueBreakdownItem(AdCPBaseModel):
|
|
14
14
|
model_config = ConfigDict(
|
|
15
|
-
extra=
|
|
15
|
+
extra="allow",
|
|
16
16
|
)
|
|
17
|
-
impressions: Annotated[int, Field(description=
|
|
18
|
-
loop_plays: Annotated[int | None, Field(description=
|
|
17
|
+
impressions: Annotated[int, Field(description="Impressions delivered at this venue", ge=0)]
|
|
18
|
+
loop_plays: Annotated[int | None, Field(description="Loop plays at this venue", ge=0)] = None
|
|
19
19
|
screens_used: Annotated[
|
|
20
|
-
int | None, Field(description=
|
|
20
|
+
int | None, Field(description="Number of screens used at this venue", ge=0)
|
|
21
21
|
] = None
|
|
22
|
-
venue_id: Annotated[str, Field(description=
|
|
23
|
-
venue_name: Annotated[str | None, Field(description=
|
|
22
|
+
venue_id: Annotated[str, Field(description="Venue identifier")]
|
|
23
|
+
venue_name: Annotated[str | None, Field(description="Human-readable venue name")] = None
|
|
24
24
|
venue_type: Annotated[
|
|
25
25
|
str | None,
|
|
26
26
|
Field(description="Venue type (e.g., 'airport', 'transit', 'retail', 'billboard')"),
|
|
@@ -29,83 +29,83 @@ class VenueBreakdownItem(AdCPBaseModel):
|
|
|
29
29
|
|
|
30
30
|
class DoohMetrics(AdCPBaseModel):
|
|
31
31
|
model_config = ConfigDict(
|
|
32
|
-
extra=
|
|
32
|
+
extra="allow",
|
|
33
33
|
)
|
|
34
34
|
calculation_notes: Annotated[
|
|
35
|
-
str | None, Field(description=
|
|
35
|
+
str | None, Field(description="Explanation of how DOOH impressions were calculated")
|
|
36
36
|
] = None
|
|
37
37
|
loop_plays: Annotated[
|
|
38
|
-
int | None, Field(description=
|
|
38
|
+
int | None, Field(description="Number of times ad played in rotation", ge=0)
|
|
39
39
|
] = None
|
|
40
40
|
screen_time_seconds: Annotated[
|
|
41
|
-
int | None, Field(description=
|
|
41
|
+
int | None, Field(description="Total display time in seconds", ge=0)
|
|
42
42
|
] = None
|
|
43
43
|
screens_used: Annotated[
|
|
44
|
-
int | None, Field(description=
|
|
44
|
+
int | None, Field(description="Number of unique screens displaying the ad", ge=0)
|
|
45
45
|
] = None
|
|
46
46
|
sov_achieved: Annotated[
|
|
47
47
|
float | None,
|
|
48
|
-
Field(description=
|
|
48
|
+
Field(description="Actual share of voice delivered (0.0 to 1.0)", ge=0.0, le=1.0),
|
|
49
49
|
] = None
|
|
50
50
|
venue_breakdown: Annotated[
|
|
51
|
-
list[VenueBreakdownItem] | None, Field(description=
|
|
51
|
+
list[VenueBreakdownItem] | None, Field(description="Per-venue performance breakdown")
|
|
52
52
|
] = None
|
|
53
53
|
|
|
54
54
|
|
|
55
55
|
class QuartileData(AdCPBaseModel):
|
|
56
|
-
q1_views: Annotated[float | None, Field(description=
|
|
57
|
-
q2_views: Annotated[float | None, Field(description=
|
|
58
|
-
q3_views: Annotated[float | None, Field(description=
|
|
59
|
-
q4_views: Annotated[float | None, Field(description=
|
|
56
|
+
q1_views: Annotated[float | None, Field(description="25% completion views", ge=0.0)] = None
|
|
57
|
+
q2_views: Annotated[float | None, Field(description="50% completion views", ge=0.0)] = None
|
|
58
|
+
q3_views: Annotated[float | None, Field(description="75% completion views", ge=0.0)] = None
|
|
59
|
+
q4_views: Annotated[float | None, Field(description="100% completion views", ge=0.0)] = None
|
|
60
60
|
|
|
61
61
|
|
|
62
62
|
class DeliveryMetrics(AdCPBaseModel):
|
|
63
63
|
model_config = ConfigDict(
|
|
64
|
-
extra=
|
|
64
|
+
extra="allow",
|
|
65
65
|
)
|
|
66
|
-
clicks: Annotated[float | None, Field(description=
|
|
66
|
+
clicks: Annotated[float | None, Field(description="Total clicks", ge=0.0)] = None
|
|
67
67
|
completed_views: Annotated[
|
|
68
|
-
float | None, Field(description=
|
|
68
|
+
float | None, Field(description="100% completions (for CPCV)", ge=0.0)
|
|
69
69
|
] = None
|
|
70
70
|
completion_rate: Annotated[
|
|
71
71
|
float | None,
|
|
72
|
-
Field(description=
|
|
72
|
+
Field(description="Completion rate (completed_views/impressions)", ge=0.0, le=1.0),
|
|
73
73
|
] = None
|
|
74
74
|
conversions: Annotated[
|
|
75
75
|
float | None,
|
|
76
|
-
Field(description=
|
|
76
|
+
Field(description="Conversions (reserved for future CPA pricing support)", ge=0.0),
|
|
77
77
|
] = None
|
|
78
78
|
ctr: Annotated[
|
|
79
|
-
float | None, Field(description=
|
|
79
|
+
float | None, Field(description="Click-through rate (clicks/impressions)", ge=0.0, le=1.0)
|
|
80
80
|
] = None
|
|
81
81
|
dooh_metrics: Annotated[
|
|
82
82
|
DoohMetrics | None,
|
|
83
|
-
Field(description=
|
|
83
|
+
Field(description="DOOH-specific metrics (only included for DOOH campaigns)"),
|
|
84
84
|
] = None
|
|
85
85
|
frequency: Annotated[
|
|
86
86
|
float | None,
|
|
87
87
|
Field(
|
|
88
|
-
description=
|
|
88
|
+
description="Average frequency per individual (typically measured over campaign duration, but can vary by measurement provider)",
|
|
89
89
|
ge=0.0,
|
|
90
90
|
),
|
|
91
91
|
] = None
|
|
92
92
|
grps: Annotated[
|
|
93
|
-
float | None, Field(description=
|
|
93
|
+
float | None, Field(description="Gross Rating Points delivered (for CPP)", ge=0.0)
|
|
94
94
|
] = None
|
|
95
|
-
impressions: Annotated[float | None, Field(description=
|
|
95
|
+
impressions: Annotated[float | None, Field(description="Impressions delivered", ge=0.0)] = None
|
|
96
96
|
leads: Annotated[
|
|
97
97
|
float | None,
|
|
98
|
-
Field(description=
|
|
98
|
+
Field(description="Leads generated (reserved for future CPL pricing support)", ge=0.0),
|
|
99
99
|
] = None
|
|
100
100
|
quartile_data: Annotated[
|
|
101
|
-
QuartileData | None, Field(description=
|
|
101
|
+
QuartileData | None, Field(description="Video quartile completion data")
|
|
102
102
|
] = None
|
|
103
103
|
reach: Annotated[
|
|
104
104
|
float | None,
|
|
105
105
|
Field(
|
|
106
|
-
description=
|
|
106
|
+
description="Unique reach - units depend on measurement provider (e.g., individuals, households, devices, cookies). See delivery_measurement.provider for methodology.",
|
|
107
107
|
ge=0.0,
|
|
108
108
|
),
|
|
109
109
|
] = None
|
|
110
|
-
spend: Annotated[float | None, Field(description=
|
|
111
|
-
views: Annotated[float | None, Field(description=
|
|
110
|
+
spend: Annotated[float | None, Field(description="Amount spent", ge=0.0)] = None
|
|
111
|
+
views: Annotated[float | None, Field(description="Views at threshold (for CPV)", ge=0.0)] = None
|
|
@@ -14,65 +14,65 @@ from . import activation_key as activation_key_1
|
|
|
14
14
|
|
|
15
15
|
class Deployment1(AdCPBaseModel):
|
|
16
16
|
model_config = ConfigDict(
|
|
17
|
-
extra=
|
|
17
|
+
extra="allow",
|
|
18
18
|
)
|
|
19
|
-
account: Annotated[str | None, Field(description=
|
|
19
|
+
account: Annotated[str | None, Field(description="Account identifier if applicable")] = None
|
|
20
20
|
activation_key: Annotated[
|
|
21
21
|
activation_key_1.ActivationKey | None,
|
|
22
22
|
Field(
|
|
23
|
-
description=
|
|
23
|
+
description="The key to use for targeting. Only present if is_live=true AND requester has access to this deployment."
|
|
24
24
|
),
|
|
25
25
|
] = None
|
|
26
26
|
deployed_at: Annotated[
|
|
27
27
|
AwareDatetime | None,
|
|
28
|
-
Field(description=
|
|
28
|
+
Field(description="Timestamp when activation completed (if is_live=true)"),
|
|
29
29
|
] = None
|
|
30
30
|
estimated_activation_duration_minutes: Annotated[
|
|
31
31
|
float | None,
|
|
32
32
|
Field(
|
|
33
|
-
description=
|
|
33
|
+
description="Estimated time to activate if not live, or to complete activation if in progress",
|
|
34
34
|
ge=0.0,
|
|
35
35
|
),
|
|
36
36
|
] = None
|
|
37
37
|
is_live: Annotated[
|
|
38
|
-
bool, Field(description=
|
|
38
|
+
bool, Field(description="Whether signal is currently active on this deployment")
|
|
39
39
|
]
|
|
40
|
-
platform: Annotated[str, Field(description=
|
|
40
|
+
platform: Annotated[str, Field(description="Platform identifier for DSPs")]
|
|
41
41
|
type: Annotated[
|
|
42
|
-
Literal[
|
|
43
|
-
Field(description=
|
|
42
|
+
Literal["platform"],
|
|
43
|
+
Field(description="Discriminator indicating this is a platform-based deployment"),
|
|
44
44
|
]
|
|
45
45
|
|
|
46
46
|
|
|
47
47
|
class Deployment2(AdCPBaseModel):
|
|
48
48
|
model_config = ConfigDict(
|
|
49
|
-
extra=
|
|
49
|
+
extra="allow",
|
|
50
50
|
)
|
|
51
|
-
account: Annotated[str | None, Field(description=
|
|
51
|
+
account: Annotated[str | None, Field(description="Account identifier if applicable")] = None
|
|
52
52
|
activation_key: Annotated[
|
|
53
53
|
activation_key_1.ActivationKey | None,
|
|
54
54
|
Field(
|
|
55
|
-
description=
|
|
55
|
+
description="The key to use for targeting. Only present if is_live=true AND requester has access to this deployment."
|
|
56
56
|
),
|
|
57
57
|
] = None
|
|
58
|
-
agent_url: Annotated[AnyUrl, Field(description=
|
|
58
|
+
agent_url: Annotated[AnyUrl, Field(description="URL identifying the deployment agent")]
|
|
59
59
|
deployed_at: Annotated[
|
|
60
60
|
AwareDatetime | None,
|
|
61
|
-
Field(description=
|
|
61
|
+
Field(description="Timestamp when activation completed (if is_live=true)"),
|
|
62
62
|
] = None
|
|
63
63
|
estimated_activation_duration_minutes: Annotated[
|
|
64
64
|
float | None,
|
|
65
65
|
Field(
|
|
66
|
-
description=
|
|
66
|
+
description="Estimated time to activate if not live, or to complete activation if in progress",
|
|
67
67
|
ge=0.0,
|
|
68
68
|
),
|
|
69
69
|
] = None
|
|
70
70
|
is_live: Annotated[
|
|
71
|
-
bool, Field(description=
|
|
71
|
+
bool, Field(description="Whether signal is currently active on this deployment")
|
|
72
72
|
]
|
|
73
73
|
type: Annotated[
|
|
74
|
-
Literal[
|
|
75
|
-
Field(description=
|
|
74
|
+
Literal["agent"],
|
|
75
|
+
Field(description="Discriminator indicating this is an agent URL-based deployment"),
|
|
76
76
|
]
|
|
77
77
|
|
|
78
78
|
|
|
@@ -80,7 +80,7 @@ class Deployment(RootModel[Deployment1 | Deployment2]):
|
|
|
80
80
|
root: Annotated[
|
|
81
81
|
Deployment1 | Deployment2,
|
|
82
82
|
Field(
|
|
83
|
-
description=
|
|
84
|
-
title=
|
|
83
|
+
description="A signal deployment to a specific deployment target with activation status and key",
|
|
84
|
+
title="Deployment",
|
|
85
85
|
),
|
|
86
86
|
]
|
|
@@ -12,34 +12,34 @@ from pydantic import AnyUrl, ConfigDict, Field, RootModel
|
|
|
12
12
|
|
|
13
13
|
class Destination1(AdCPBaseModel):
|
|
14
14
|
model_config = ConfigDict(
|
|
15
|
-
extra=
|
|
15
|
+
extra="allow",
|
|
16
16
|
)
|
|
17
17
|
account: Annotated[
|
|
18
|
-
str | None, Field(description=
|
|
18
|
+
str | None, Field(description="Optional account identifier on the platform")
|
|
19
19
|
] = None
|
|
20
20
|
platform: Annotated[
|
|
21
21
|
str,
|
|
22
22
|
Field(description="Platform identifier for DSPs (e.g., 'the-trade-desk', 'amazon-dsp')"),
|
|
23
23
|
]
|
|
24
24
|
type: Annotated[
|
|
25
|
-
Literal[
|
|
26
|
-
Field(description=
|
|
25
|
+
Literal["platform"],
|
|
26
|
+
Field(description="Discriminator indicating this is a platform-based deployment"),
|
|
27
27
|
]
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
class Destination2(AdCPBaseModel):
|
|
31
31
|
model_config = ConfigDict(
|
|
32
|
-
extra=
|
|
32
|
+
extra="allow",
|
|
33
33
|
)
|
|
34
34
|
account: Annotated[
|
|
35
|
-
str | None, Field(description=
|
|
35
|
+
str | None, Field(description="Optional account identifier on the agent")
|
|
36
36
|
] = None
|
|
37
37
|
agent_url: Annotated[
|
|
38
|
-
AnyUrl, Field(description=
|
|
38
|
+
AnyUrl, Field(description="URL identifying the deployment agent (for sales agents, etc.)")
|
|
39
39
|
]
|
|
40
40
|
type: Annotated[
|
|
41
|
-
Literal[
|
|
42
|
-
Field(description=
|
|
41
|
+
Literal["agent"],
|
|
42
|
+
Field(description="Discriminator indicating this is an agent URL-based deployment"),
|
|
43
43
|
]
|
|
44
44
|
|
|
45
45
|
|
|
@@ -47,7 +47,7 @@ class Destination(RootModel[Destination1 | Destination2]):
|
|
|
47
47
|
root: Annotated[
|
|
48
48
|
Destination1 | Destination2,
|
|
49
49
|
Field(
|
|
50
|
-
description=
|
|
51
|
-
title=
|
|
50
|
+
description="A deployment target where signals can be activated (DSP, sales agent, etc.)",
|
|
51
|
+
title="Destination",
|
|
52
52
|
),
|
|
53
53
|
]
|
|
@@ -12,18 +12,18 @@ from pydantic import ConfigDict, Field
|
|
|
12
12
|
|
|
13
13
|
class Error(AdCPBaseModel):
|
|
14
14
|
model_config = ConfigDict(
|
|
15
|
-
extra=
|
|
15
|
+
extra="allow",
|
|
16
16
|
)
|
|
17
|
-
code: Annotated[str, Field(description=
|
|
17
|
+
code: Annotated[str, Field(description="Error code for programmatic handling")]
|
|
18
18
|
details: Annotated[
|
|
19
|
-
dict[str, Any] | None, Field(description=
|
|
19
|
+
dict[str, Any] | None, Field(description="Additional task-specific error details")
|
|
20
20
|
] = None
|
|
21
21
|
field: Annotated[
|
|
22
22
|
str | None,
|
|
23
23
|
Field(description="Field path associated with the error (e.g., 'packages[0].targeting')"),
|
|
24
24
|
] = None
|
|
25
|
-
message: Annotated[str, Field(description=
|
|
25
|
+
message: Annotated[str, Field(description="Human-readable error message")]
|
|
26
26
|
retry_after: Annotated[
|
|
27
|
-
float | None, Field(description=
|
|
27
|
+
float | None, Field(description="Seconds to wait before retrying the operation", ge=0.0)
|
|
28
28
|
] = None
|
|
29
|
-
suggestion: Annotated[str | None, Field(description=
|
|
29
|
+
suggestion: Annotated[str | None, Field(description="Suggested fix for the error")] = None
|