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
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: core/media_buy_features.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 Field
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class MediaBuyFeatures(AdCPBaseModel):
|
|
14
|
+
content_standards: Annotated[
|
|
15
|
+
bool | None,
|
|
16
|
+
Field(
|
|
17
|
+
description='Full support for content_standards configuration including sampling rates and category filtering'
|
|
18
|
+
),
|
|
19
|
+
] = None
|
|
20
|
+
inline_creative_management: Annotated[
|
|
21
|
+
bool | None,
|
|
22
|
+
Field(description='Supports creatives provided inline in create_media_buy requests'),
|
|
23
|
+
] = None
|
|
24
|
+
property_list_filtering: Annotated[
|
|
25
|
+
bool | None,
|
|
26
|
+
Field(
|
|
27
|
+
description='Honors property_list parameter in get_products to filter results to buyer-approved properties'
|
|
28
|
+
),
|
|
29
|
+
] = None
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: core/offering.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated, Any
|
|
8
|
+
|
|
9
|
+
from adcp.types.base import AdCPBaseModel
|
|
10
|
+
from pydantic import AnyUrl, AwareDatetime, ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
from . import ext as ext_1
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class Offering(AdCPBaseModel):
|
|
16
|
+
model_config = ConfigDict(
|
|
17
|
+
extra='allow',
|
|
18
|
+
)
|
|
19
|
+
assets: Annotated[
|
|
20
|
+
list[dict[str, Any]] | None,
|
|
21
|
+
Field(description='Assets specific to this offering (images, videos, copy)'),
|
|
22
|
+
] = None
|
|
23
|
+
categories: Annotated[
|
|
24
|
+
list[str] | None,
|
|
25
|
+
Field(
|
|
26
|
+
description="Categories this offering belongs to (e.g., 'measurement', 'identity', 'programmatic')"
|
|
27
|
+
),
|
|
28
|
+
] = None
|
|
29
|
+
checkout_url: Annotated[
|
|
30
|
+
AnyUrl | None,
|
|
31
|
+
Field(
|
|
32
|
+
description="URL for checkout/purchase flow when the brand doesn't support agentic checkout."
|
|
33
|
+
),
|
|
34
|
+
] = None
|
|
35
|
+
description: Annotated[str | None, Field(description="Description of what's being offered")] = (
|
|
36
|
+
None
|
|
37
|
+
)
|
|
38
|
+
ext: ext_1.ExtensionObject | None = None
|
|
39
|
+
keywords: Annotated[
|
|
40
|
+
list[str] | None,
|
|
41
|
+
Field(
|
|
42
|
+
description='Keywords for matching this offering to user intent. Hosts use these for retrieval/relevance scoring.'
|
|
43
|
+
),
|
|
44
|
+
] = None
|
|
45
|
+
landing_url: Annotated[
|
|
46
|
+
AnyUrl | None, Field(description='Landing page URL for this offering.')
|
|
47
|
+
] = None
|
|
48
|
+
name: Annotated[
|
|
49
|
+
str,
|
|
50
|
+
Field(
|
|
51
|
+
description="Human-readable offering name (e.g., 'Winter Sale', 'Free Trial', 'Enterprise Platform')"
|
|
52
|
+
),
|
|
53
|
+
]
|
|
54
|
+
offering_id: Annotated[
|
|
55
|
+
str,
|
|
56
|
+
Field(
|
|
57
|
+
description='Unique identifier for this offering. Used by hosts to reference specific offerings in si_get_offering calls.'
|
|
58
|
+
),
|
|
59
|
+
]
|
|
60
|
+
portfolio_ref: Annotated[
|
|
61
|
+
AnyUrl | None,
|
|
62
|
+
Field(
|
|
63
|
+
description='Reference to a creative portfolio for this offering. Portfolios contain organized creative assets across formats, enabling consistent ad delivery for this specific offering.'
|
|
64
|
+
),
|
|
65
|
+
] = None
|
|
66
|
+
tagline: Annotated[
|
|
67
|
+
str | None, Field(description='Short promotional tagline for the offering')
|
|
68
|
+
] = None
|
|
69
|
+
valid_from: Annotated[
|
|
70
|
+
AwareDatetime | None,
|
|
71
|
+
Field(
|
|
72
|
+
description='When the offering becomes available. If not specified, offering is immediately available.'
|
|
73
|
+
),
|
|
74
|
+
] = None
|
|
75
|
+
valid_to: Annotated[
|
|
76
|
+
AwareDatetime | None,
|
|
77
|
+
Field(
|
|
78
|
+
description='When the offering expires. If not specified, offering has no expiration.'
|
|
79
|
+
),
|
|
80
|
+
] = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: core/package.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 . import format_id, targeting
|
|
|
17
17
|
|
|
18
18
|
class Package(AdCPBaseModel):
|
|
19
19
|
model_config = ConfigDict(
|
|
20
|
-
extra=
|
|
20
|
+
extra='allow',
|
|
21
21
|
)
|
|
22
22
|
bid_price: Annotated[
|
|
23
23
|
float | None,
|
|
24
24
|
Field(
|
|
25
|
-
description=
|
|
25
|
+
description='Bid price for auction-based CPM pricing (present if using cpm-auction-option)',
|
|
26
26
|
ge=0.0,
|
|
27
27
|
),
|
|
28
28
|
] = None
|
|
29
29
|
budget: Annotated[
|
|
30
30
|
float | None,
|
|
31
31
|
Field(
|
|
32
|
-
description=
|
|
32
|
+
description='Budget allocation for this package in the currency specified by the pricing option',
|
|
33
33
|
ge=0.0,
|
|
34
34
|
),
|
|
35
35
|
] = None
|
|
@@ -38,22 +38,22 @@ class Package(AdCPBaseModel):
|
|
|
38
38
|
] = None
|
|
39
39
|
creative_assignments: Annotated[
|
|
40
40
|
list[creative_assignment.CreativeAssignment] | None,
|
|
41
|
-
Field(description=
|
|
41
|
+
Field(description='Creative assets assigned to this package'),
|
|
42
42
|
] = None
|
|
43
43
|
ext: ext_1.ExtensionObject | None = None
|
|
44
44
|
format_ids_to_provide: Annotated[
|
|
45
45
|
list[format_id.FormatId] | None,
|
|
46
|
-
Field(description=
|
|
46
|
+
Field(description='Format IDs that creative assets will be provided for this package'),
|
|
47
47
|
] = None
|
|
48
48
|
impressions: Annotated[
|
|
49
|
-
float | None, Field(description=
|
|
49
|
+
float | None, Field(description='Impression goal for this package', ge=0.0)
|
|
50
50
|
] = None
|
|
51
51
|
pacing: pacing_1.Pacing | None = None
|
|
52
52
|
package_id: Annotated[str, Field(description="Publisher's unique identifier for the package")]
|
|
53
53
|
paused: Annotated[
|
|
54
54
|
bool | None,
|
|
55
55
|
Field(
|
|
56
|
-
description=
|
|
56
|
+
description='Whether this package is paused by the buyer. Paused packages do not deliver impressions. Defaults to false.'
|
|
57
57
|
),
|
|
58
58
|
] = False
|
|
59
59
|
pricing_option_id: Annotated[
|
|
@@ -63,6 +63,6 @@ class Package(AdCPBaseModel):
|
|
|
63
63
|
),
|
|
64
64
|
] = None
|
|
65
65
|
product_id: Annotated[
|
|
66
|
-
str | None, Field(description=
|
|
66
|
+
str | None, Field(description='ID of the product this package is based on')
|
|
67
67
|
] = None
|
|
68
68
|
targeting_overlay: targeting.TargetingOverlay | None = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: core/performance_feedback.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,63 +16,63 @@ from ..enums import metric_type as metric_type_1
|
|
|
16
16
|
|
|
17
17
|
class MeasurementPeriod(AdCPBaseModel):
|
|
18
18
|
model_config = ConfigDict(
|
|
19
|
-
extra=
|
|
19
|
+
extra='allow',
|
|
20
20
|
)
|
|
21
21
|
end: Annotated[
|
|
22
|
-
AwareDatetime, Field(description=
|
|
22
|
+
AwareDatetime, Field(description='ISO 8601 end timestamp for measurement period')
|
|
23
23
|
]
|
|
24
24
|
start: Annotated[
|
|
25
|
-
AwareDatetime, Field(description=
|
|
25
|
+
AwareDatetime, Field(description='ISO 8601 start timestamp for measurement period')
|
|
26
26
|
]
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
class Status(Enum):
|
|
30
|
-
accepted =
|
|
31
|
-
queued =
|
|
32
|
-
applied =
|
|
33
|
-
rejected =
|
|
30
|
+
accepted = 'accepted'
|
|
31
|
+
queued = 'queued'
|
|
32
|
+
applied = 'applied'
|
|
33
|
+
rejected = 'rejected'
|
|
34
34
|
|
|
35
35
|
|
|
36
36
|
class PerformanceFeedback(AdCPBaseModel):
|
|
37
37
|
model_config = ConfigDict(
|
|
38
|
-
extra=
|
|
38
|
+
extra='allow',
|
|
39
39
|
)
|
|
40
40
|
applied_at: Annotated[
|
|
41
41
|
AwareDatetime | None,
|
|
42
42
|
Field(
|
|
43
|
-
description=
|
|
43
|
+
description='ISO 8601 timestamp when feedback was applied to optimization algorithms'
|
|
44
44
|
),
|
|
45
45
|
] = None
|
|
46
46
|
creative_id: Annotated[
|
|
47
|
-
str | None, Field(description=
|
|
47
|
+
str | None, Field(description='Specific creative asset (if feedback is creative-specific)')
|
|
48
48
|
] = None
|
|
49
49
|
feedback_id: Annotated[
|
|
50
|
-
str, Field(description=
|
|
50
|
+
str, Field(description='Unique identifier for this performance feedback submission')
|
|
51
51
|
]
|
|
52
52
|
feedback_source: Annotated[
|
|
53
|
-
feedback_source_1.FeedbackSource, Field(description=
|
|
53
|
+
feedback_source_1.FeedbackSource, Field(description='Source of the performance data')
|
|
54
54
|
]
|
|
55
55
|
measurement_period: Annotated[
|
|
56
|
-
MeasurementPeriod, Field(description=
|
|
56
|
+
MeasurementPeriod, Field(description='Time period for performance measurement')
|
|
57
57
|
]
|
|
58
58
|
media_buy_id: Annotated[str, Field(description="Publisher's media buy identifier")]
|
|
59
59
|
metric_type: Annotated[
|
|
60
|
-
metric_type_1.MetricType, Field(description=
|
|
60
|
+
metric_type_1.MetricType, Field(description='The business metric being measured')
|
|
61
61
|
]
|
|
62
62
|
package_id: Annotated[
|
|
63
63
|
str | None,
|
|
64
64
|
Field(
|
|
65
|
-
description=
|
|
65
|
+
description='Specific package within the media buy (if feedback is package-specific)'
|
|
66
66
|
),
|
|
67
67
|
] = None
|
|
68
68
|
performance_index: Annotated[
|
|
69
69
|
float,
|
|
70
70
|
Field(
|
|
71
|
-
description=
|
|
71
|
+
description='Normalized performance score (0.0 = no value, 1.0 = expected, >1.0 = above expected)',
|
|
72
72
|
ge=0.0,
|
|
73
73
|
),
|
|
74
74
|
]
|
|
75
|
-
status: Annotated[Status, Field(description=
|
|
75
|
+
status: Annotated[Status, Field(description='Processing status of the performance feedback')]
|
|
76
76
|
submitted_at: Annotated[
|
|
77
|
-
AwareDatetime, Field(description=
|
|
77
|
+
AwareDatetime, Field(description='ISO 8601 timestamp when feedback was submitted')
|
|
78
78
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: core/placement.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -14,15 +14,15 @@ from . import format_id
|
|
|
14
14
|
|
|
15
15
|
class Placement(AdCPBaseModel):
|
|
16
16
|
model_config = ConfigDict(
|
|
17
|
-
extra=
|
|
17
|
+
extra='allow',
|
|
18
18
|
)
|
|
19
19
|
description: Annotated[
|
|
20
|
-
str | None, Field(description=
|
|
20
|
+
str | None, Field(description='Detailed description of where and how the placement appears')
|
|
21
21
|
] = None
|
|
22
22
|
format_ids: Annotated[
|
|
23
23
|
list[format_id.FormatId] | None,
|
|
24
24
|
Field(
|
|
25
|
-
description=
|
|
25
|
+
description='Format IDs supported by this specific placement. Can include: (1) concrete format_ids (fixed dimensions), (2) template format_ids without parameters (accepts any dimensions/duration), or (3) parameterized format_ids (specific dimension/duration constraints).',
|
|
26
26
|
min_length=1,
|
|
27
27
|
),
|
|
28
28
|
] = None
|
|
@@ -33,5 +33,5 @@ class Placement(AdCPBaseModel):
|
|
|
33
33
|
),
|
|
34
34
|
]
|
|
35
35
|
placement_id: Annotated[
|
|
36
|
-
str, Field(description=
|
|
36
|
+
str, Field(description='Unique identifier for the placement within the product')
|
|
37
37
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: core/pricing_option.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-26T11:40:01+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -11,22 +11,18 @@ from pydantic import Field, RootModel
|
|
|
11
11
|
from ..pricing_options import (
|
|
12
12
|
cpc_option,
|
|
13
13
|
cpcv_option,
|
|
14
|
-
|
|
15
|
-
cpm_fixed_option,
|
|
14
|
+
cpm_option,
|
|
16
15
|
cpp_option,
|
|
17
16
|
cpv_option,
|
|
18
17
|
flat_rate_option,
|
|
19
|
-
|
|
20
|
-
vcpm_fixed_option,
|
|
18
|
+
vcpm_option,
|
|
21
19
|
)
|
|
22
20
|
|
|
23
21
|
|
|
24
22
|
class PricingOption(
|
|
25
23
|
RootModel[
|
|
26
|
-
|
|
27
|
-
|
|
|
28
|
-
| vcpm_fixed_option.VcpmFixedRatePricingOption
|
|
29
|
-
| vcpm_auction_option.VcpmAuctionPricingOption
|
|
24
|
+
cpm_option.CpmPricingOption
|
|
25
|
+
| vcpm_option.VcpmPricingOption
|
|
30
26
|
| cpc_option.CpcPricingOption
|
|
31
27
|
| cpcv_option.CpcvPricingOption
|
|
32
28
|
| cpv_option.CpvPricingOption
|
|
@@ -35,17 +31,15 @@ class PricingOption(
|
|
|
35
31
|
]
|
|
36
32
|
):
|
|
37
33
|
root: Annotated[
|
|
38
|
-
|
|
39
|
-
|
|
|
40
|
-
| vcpm_fixed_option.VcpmFixedRatePricingOption
|
|
41
|
-
| vcpm_auction_option.VcpmAuctionPricingOption
|
|
34
|
+
cpm_option.CpmPricingOption
|
|
35
|
+
| vcpm_option.VcpmPricingOption
|
|
42
36
|
| cpc_option.CpcPricingOption
|
|
43
37
|
| cpcv_option.CpcvPricingOption
|
|
44
38
|
| cpv_option.CpvPricingOption
|
|
45
39
|
| cpp_option.CppPricingOption
|
|
46
40
|
| flat_rate_option.FlatRatePricingOption,
|
|
47
41
|
Field(
|
|
48
|
-
description="A pricing model option offered by a publisher for a product.
|
|
49
|
-
title=
|
|
42
|
+
description="A pricing model option offered by a publisher for a product. Discriminated by pricing_model field. If fixed_price is present, it's fixed pricing. If absent, it's auction-based (floor_price and price_guidance optional).",
|
|
43
|
+
title='Pricing Option',
|
|
50
44
|
),
|
|
51
45
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: core/product.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -35,100 +35,100 @@ class DeliveryMeasurement(AdCPBaseModel):
|
|
|
35
35
|
|
|
36
36
|
class ProductCard(AdCPBaseModel):
|
|
37
37
|
model_config = ConfigDict(
|
|
38
|
-
extra=
|
|
38
|
+
extra='allow',
|
|
39
39
|
)
|
|
40
40
|
format_id: Annotated[
|
|
41
41
|
format_id_1.FormatId,
|
|
42
42
|
Field(
|
|
43
|
-
description=
|
|
43
|
+
description='Creative format defining the card layout (typically product_card_standard)'
|
|
44
44
|
),
|
|
45
45
|
]
|
|
46
46
|
manifest: Annotated[
|
|
47
47
|
dict[str, Any],
|
|
48
|
-
Field(description=
|
|
48
|
+
Field(description='Asset manifest for rendering the card, structure defined by the format'),
|
|
49
49
|
]
|
|
50
50
|
|
|
51
51
|
|
|
52
52
|
class ProductCardDetailed(AdCPBaseModel):
|
|
53
53
|
model_config = ConfigDict(
|
|
54
|
-
extra=
|
|
54
|
+
extra='allow',
|
|
55
55
|
)
|
|
56
56
|
format_id: Annotated[
|
|
57
57
|
format_id_1.FormatId,
|
|
58
58
|
Field(
|
|
59
|
-
description=
|
|
59
|
+
description='Creative format defining the detailed card layout (typically product_card_detailed)'
|
|
60
60
|
),
|
|
61
61
|
]
|
|
62
62
|
manifest: Annotated[
|
|
63
63
|
dict[str, Any],
|
|
64
64
|
Field(
|
|
65
|
-
description=
|
|
65
|
+
description='Asset manifest for rendering the detailed card, structure defined by the format'
|
|
66
66
|
),
|
|
67
67
|
]
|
|
68
68
|
|
|
69
69
|
|
|
70
70
|
class Product(AdCPBaseModel):
|
|
71
71
|
model_config = ConfigDict(
|
|
72
|
-
extra=
|
|
72
|
+
extra='allow',
|
|
73
73
|
)
|
|
74
74
|
brief_relevance: Annotated[
|
|
75
75
|
str | None,
|
|
76
76
|
Field(
|
|
77
|
-
description=
|
|
77
|
+
description='Explanation of why this product matches the brief (only included when brief is provided)'
|
|
78
78
|
),
|
|
79
79
|
] = None
|
|
80
80
|
creative_policy: creative_policy_1.CreativePolicy | None = None
|
|
81
81
|
delivery_measurement: Annotated[
|
|
82
82
|
DeliveryMeasurement,
|
|
83
83
|
Field(
|
|
84
|
-
description=
|
|
84
|
+
description='Measurement provider and methodology for delivery metrics. The buyer accepts the declared provider as the source of truth for the buy. REQUIRED for all products.'
|
|
85
85
|
),
|
|
86
86
|
]
|
|
87
87
|
delivery_type: delivery_type_1.DeliveryType
|
|
88
88
|
description: Annotated[
|
|
89
|
-
str, Field(description=
|
|
89
|
+
str, Field(description='Detailed description of the product and its inventory')
|
|
90
90
|
]
|
|
91
91
|
estimated_exposures: Annotated[
|
|
92
92
|
int | None,
|
|
93
|
-
Field(description=
|
|
93
|
+
Field(description='Estimated exposures/impressions for guaranteed products', ge=0),
|
|
94
94
|
] = None
|
|
95
95
|
expires_at: Annotated[
|
|
96
|
-
AwareDatetime | None, Field(description=
|
|
96
|
+
AwareDatetime | None, Field(description='Expiration timestamp for custom products')
|
|
97
97
|
] = None
|
|
98
98
|
ext: ext_1.ExtensionObject | None = None
|
|
99
99
|
format_ids: Annotated[
|
|
100
100
|
list[format_id_1.FormatId],
|
|
101
101
|
Field(
|
|
102
|
-
description=
|
|
102
|
+
description='Array of supported creative format IDs - structured format_id objects with agent_url and id'
|
|
103
103
|
),
|
|
104
104
|
]
|
|
105
|
-
is_custom: Annotated[bool | None, Field(description=
|
|
105
|
+
is_custom: Annotated[bool | None, Field(description='Whether this is a custom product')] = None
|
|
106
106
|
measurement: measurement_1.Measurement | None = None
|
|
107
|
-
name: Annotated[str, Field(description=
|
|
107
|
+
name: Annotated[str, Field(description='Human-readable product name')]
|
|
108
108
|
placements: Annotated[
|
|
109
109
|
list[placement.Placement] | None,
|
|
110
110
|
Field(
|
|
111
|
-
description=
|
|
111
|
+
description='Optional array of specific placements within this product. When provided, buyers can target specific placements when assigning creatives.',
|
|
112
112
|
min_length=1,
|
|
113
113
|
),
|
|
114
114
|
] = None
|
|
115
115
|
pricing_options: Annotated[
|
|
116
116
|
list[pricing_option.PricingOption],
|
|
117
|
-
Field(description=
|
|
117
|
+
Field(description='Available pricing models for this product', min_length=1),
|
|
118
118
|
]
|
|
119
119
|
product_card: Annotated[
|
|
120
120
|
ProductCard | None,
|
|
121
121
|
Field(
|
|
122
|
-
description=
|
|
122
|
+
description='Optional standard visual card (300x400px) for displaying this product in user interfaces. Can be rendered via preview_creative or pre-generated.'
|
|
123
123
|
),
|
|
124
124
|
] = None
|
|
125
125
|
product_card_detailed: Annotated[
|
|
126
126
|
ProductCardDetailed | None,
|
|
127
127
|
Field(
|
|
128
|
-
description=
|
|
128
|
+
description='Optional detailed card with carousel and full specifications. Provides rich product presentation similar to media kit pages.'
|
|
129
129
|
),
|
|
130
130
|
] = None
|
|
131
|
-
product_id: Annotated[str, Field(description=
|
|
131
|
+
product_id: Annotated[str, Field(description='Unique identifier for the product')]
|
|
132
132
|
publisher_properties: Annotated[
|
|
133
133
|
list[publisher_property_selector.PublisherPropertySelector],
|
|
134
134
|
Field(
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: core/product_allocation.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
|
|
11
|
+
|
|
12
|
+
from . import ext as ext_1
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class ProductAllocation(AdCPBaseModel):
|
|
16
|
+
model_config = ConfigDict(
|
|
17
|
+
extra='allow',
|
|
18
|
+
)
|
|
19
|
+
allocation_percentage: Annotated[
|
|
20
|
+
float,
|
|
21
|
+
Field(
|
|
22
|
+
description='Percentage of total budget allocated to this product (0-100)',
|
|
23
|
+
ge=0.0,
|
|
24
|
+
le=100.0,
|
|
25
|
+
),
|
|
26
|
+
]
|
|
27
|
+
ext: ext_1.ExtensionObject | None = None
|
|
28
|
+
pricing_option_id: Annotated[
|
|
29
|
+
str | None,
|
|
30
|
+
Field(description="Recommended pricing option ID from the product's pricing_options array"),
|
|
31
|
+
] = None
|
|
32
|
+
product_id: Annotated[
|
|
33
|
+
str, Field(description='ID of the product (must reference a product in the products array)')
|
|
34
|
+
]
|
|
35
|
+
rationale: Annotated[
|
|
36
|
+
str | None,
|
|
37
|
+
Field(description='Explanation of why this product and allocation are recommended'),
|
|
38
|
+
] = None
|
|
39
|
+
sequence: Annotated[
|
|
40
|
+
int | None,
|
|
41
|
+
Field(description='Optional ordering hint for multi-line-item plans (1-based)', ge=1),
|
|
42
|
+
] = None
|
|
43
|
+
tags: Annotated[
|
|
44
|
+
list[str] | None,
|
|
45
|
+
Field(
|
|
46
|
+
description="Categorical tags for this allocation (e.g., 'desktop', 'german', 'mobile') - useful for grouping/filtering allocations by dimension"
|
|
47
|
+
),
|
|
48
|
+
] = None
|