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,64 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: content_standards/get_media_buy_artifacts_request.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import Enum
|
|
8
|
+
from typing import Annotated
|
|
9
|
+
|
|
10
|
+
from adcp.types.base import AdCPBaseModel
|
|
11
|
+
from pydantic import AwareDatetime, Field
|
|
12
|
+
|
|
13
|
+
from ..core import context as context_1
|
|
14
|
+
from ..core import ext as ext_1
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class Method(Enum):
|
|
18
|
+
random = 'random'
|
|
19
|
+
stratified = 'stratified'
|
|
20
|
+
recent = 'recent'
|
|
21
|
+
failures_only = 'failures_only'
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class Sampling(AdCPBaseModel):
|
|
25
|
+
method: Annotated[Method | None, Field(description='How to select the sample')] = None
|
|
26
|
+
rate: Annotated[
|
|
27
|
+
float | None,
|
|
28
|
+
Field(
|
|
29
|
+
description='Sampling rate (0-1). 1.0 = all deliveries, 0.25 = 25% sample.',
|
|
30
|
+
ge=0.0,
|
|
31
|
+
le=1.0,
|
|
32
|
+
),
|
|
33
|
+
] = None
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class TimeRange(AdCPBaseModel):
|
|
37
|
+
end: Annotated[AwareDatetime | None, Field(description='End of time range (exclusive)')] = None
|
|
38
|
+
start: Annotated[AwareDatetime | None, Field(description='Start of time range (inclusive)')] = (
|
|
39
|
+
None
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class GetMediaBuyArtifactsRequest(AdCPBaseModel):
|
|
44
|
+
context: context_1.ContextObject | None = None
|
|
45
|
+
cursor: Annotated[
|
|
46
|
+
str | None, Field(description='Pagination cursor for fetching subsequent pages')
|
|
47
|
+
] = None
|
|
48
|
+
ext: ext_1.ExtensionObject | None = None
|
|
49
|
+
limit: Annotated[
|
|
50
|
+
int | None, Field(description='Maximum artifacts to return per request', ge=1, le=10000)
|
|
51
|
+
] = 1000
|
|
52
|
+
media_buy_id: Annotated[str, Field(description='Media buy to get artifacts from')]
|
|
53
|
+
package_ids: Annotated[
|
|
54
|
+
list[str] | None, Field(description='Filter to specific packages within the media buy')
|
|
55
|
+
] = None
|
|
56
|
+
sampling: Annotated[
|
|
57
|
+
Sampling | None,
|
|
58
|
+
Field(
|
|
59
|
+
description='Sampling parameters. Defaults to the sampling rate agreed in the media buy.'
|
|
60
|
+
),
|
|
61
|
+
] = None
|
|
62
|
+
time_range: Annotated[TimeRange | None, Field(description='Filter to specific time period')] = (
|
|
63
|
+
None
|
|
64
|
+
)
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: content_standards/get_media_buy_artifacts_response.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import Enum
|
|
8
|
+
from typing import Annotated, Any
|
|
9
|
+
|
|
10
|
+
from adcp.types.base import AdCPBaseModel
|
|
11
|
+
from pydantic import AwareDatetime, Field, RootModel
|
|
12
|
+
|
|
13
|
+
from ..core import context as context_1
|
|
14
|
+
from ..core import error
|
|
15
|
+
from ..core import ext as ext_1
|
|
16
|
+
from . import artifact as artifact_1
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class BrandContext(AdCPBaseModel):
|
|
20
|
+
brand_id: Annotated[str | None, Field(description='Brand identifier')] = None
|
|
21
|
+
sku_id: Annotated[str | None, Field(description='Product/SKU identifier if applicable')] = None
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class LocalVerdict(Enum):
|
|
25
|
+
pass_ = 'pass'
|
|
26
|
+
fail = 'fail'
|
|
27
|
+
unevaluated = 'unevaluated'
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class Pagination(AdCPBaseModel):
|
|
31
|
+
cursor: Annotated[str | None, Field(description='Cursor for fetching the next page')] = None
|
|
32
|
+
has_more: Annotated[bool | None, Field(description='Whether more results are available')] = None
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class Method(Enum):
|
|
36
|
+
random = 'random'
|
|
37
|
+
stratified = 'stratified'
|
|
38
|
+
recent = 'recent'
|
|
39
|
+
failures_only = 'failures_only'
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class SamplingInfo(AdCPBaseModel):
|
|
43
|
+
effective_rate: Annotated[float | None, Field(description='Actual sampling rate achieved')] = (
|
|
44
|
+
None
|
|
45
|
+
)
|
|
46
|
+
method: Annotated[Method | None, Field(description='Sampling method used')] = None
|
|
47
|
+
sampled_count: Annotated[
|
|
48
|
+
int | None, Field(description='Number of artifacts in this response')
|
|
49
|
+
] = None
|
|
50
|
+
total_deliveries: Annotated[
|
|
51
|
+
int | None, Field(description='Total deliveries in the time range')
|
|
52
|
+
] = None
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class GetMediaBuyArtifactsResponse2(AdCPBaseModel):
|
|
56
|
+
context: context_1.ContextObject | None = None
|
|
57
|
+
errors: list[error.Error]
|
|
58
|
+
ext: ext_1.ExtensionObject | None = None
|
|
59
|
+
media_buy_id: Annotated[
|
|
60
|
+
Any | None, Field(description='Field must not be present in error response')
|
|
61
|
+
] = None
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class Artifact(AdCPBaseModel):
|
|
65
|
+
artifact: Annotated[artifact_1.Artifact, Field(description='Full artifact with content assets')]
|
|
66
|
+
brand_context: Annotated[
|
|
67
|
+
BrandContext | None,
|
|
68
|
+
Field(
|
|
69
|
+
description='Brand information for policy evaluation. Schema TBD - placeholder for brand identifiers.'
|
|
70
|
+
),
|
|
71
|
+
] = None
|
|
72
|
+
channel: Annotated[
|
|
73
|
+
str | None, Field(description='Channel type (e.g., display, video, audio, social)')
|
|
74
|
+
] = None
|
|
75
|
+
country: Annotated[
|
|
76
|
+
str | None, Field(description='ISO 3166-1 alpha-2 country code where delivery occurred')
|
|
77
|
+
] = None
|
|
78
|
+
local_verdict: Annotated[
|
|
79
|
+
LocalVerdict | None, Field(description="Seller's local model verdict for this artifact")
|
|
80
|
+
] = None
|
|
81
|
+
package_id: Annotated[
|
|
82
|
+
str | None, Field(description='Which package this delivery belongs to')
|
|
83
|
+
] = None
|
|
84
|
+
record_id: Annotated[str, Field(description='Unique identifier for this delivery record')]
|
|
85
|
+
timestamp: Annotated[AwareDatetime | None, Field(description='When the delivery occurred')] = (
|
|
86
|
+
None
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
class GetMediaBuyArtifactsResponse1(AdCPBaseModel):
|
|
91
|
+
artifacts: Annotated[
|
|
92
|
+
list[Artifact], Field(description='Delivery records with full artifact content')
|
|
93
|
+
]
|
|
94
|
+
context: context_1.ContextObject | None = None
|
|
95
|
+
errors: Annotated[
|
|
96
|
+
Any | None, Field(description='Field must not be present in success response')
|
|
97
|
+
] = None
|
|
98
|
+
ext: ext_1.ExtensionObject | None = None
|
|
99
|
+
media_buy_id: Annotated[str, Field(description='Media buy these artifacts belong to')]
|
|
100
|
+
pagination: Annotated[
|
|
101
|
+
Pagination | None, Field(description='Pagination information for large result sets')
|
|
102
|
+
] = None
|
|
103
|
+
sampling_info: Annotated[
|
|
104
|
+
SamplingInfo | None, Field(description='Information about how the sample was generated')
|
|
105
|
+
] = None
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
class GetMediaBuyArtifactsResponse(
|
|
109
|
+
RootModel[GetMediaBuyArtifactsResponse1 | GetMediaBuyArtifactsResponse2]
|
|
110
|
+
):
|
|
111
|
+
root: Annotated[
|
|
112
|
+
GetMediaBuyArtifactsResponse1 | GetMediaBuyArtifactsResponse2,
|
|
113
|
+
Field(
|
|
114
|
+
description='Response containing content artifacts from a media buy for validation',
|
|
115
|
+
title='Get Media Buy Artifacts Response',
|
|
116
|
+
),
|
|
117
|
+
]
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: content_standards/list_content_standards_request.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 ..core import context as context_1
|
|
13
|
+
from ..core import ext as ext_1
|
|
14
|
+
from ..enums import channels as channels_1
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class ListContentStandardsRequest(AdCPBaseModel):
|
|
18
|
+
model_config = ConfigDict(
|
|
19
|
+
extra='allow',
|
|
20
|
+
)
|
|
21
|
+
channels: Annotated[
|
|
22
|
+
list[channels_1.MediaChannel] | None, Field(description='Filter by channel')
|
|
23
|
+
] = None
|
|
24
|
+
context: context_1.ContextObject | None = None
|
|
25
|
+
countries: Annotated[
|
|
26
|
+
list[str] | None, Field(description='Filter by ISO 3166-1 alpha-2 country codes')
|
|
27
|
+
] = None
|
|
28
|
+
ext: ext_1.ExtensionObject | None = None
|
|
29
|
+
languages: Annotated[list[str] | None, Field(description='Filter by BCP 47 language tags')] = (
|
|
30
|
+
None
|
|
31
|
+
)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: content_standards/list_content_standards_response.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 Field, RootModel
|
|
11
|
+
|
|
12
|
+
from ..core import context as context_1
|
|
13
|
+
from ..core import error
|
|
14
|
+
from ..core import ext as ext_1
|
|
15
|
+
from . import content_standards
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class ListContentStandardsResponse2(AdCPBaseModel):
|
|
19
|
+
context: context_1.ContextObject | None = None
|
|
20
|
+
errors: list[error.Error]
|
|
21
|
+
ext: ext_1.ExtensionObject | None = None
|
|
22
|
+
standards: Annotated[
|
|
23
|
+
Any | None, Field(description='Field must not be present in error response')
|
|
24
|
+
] = None
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class ListContentStandardsResponse1(AdCPBaseModel):
|
|
28
|
+
context: context_1.ContextObject | None = None
|
|
29
|
+
errors: Annotated[
|
|
30
|
+
Any | None, Field(description='Field must not be present in success response')
|
|
31
|
+
] = None
|
|
32
|
+
ext: ext_1.ExtensionObject | None = None
|
|
33
|
+
standards: Annotated[
|
|
34
|
+
list[content_standards.ContentStandards],
|
|
35
|
+
Field(description='Array of content standards configurations matching the filter criteria'),
|
|
36
|
+
]
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class ListContentStandardsResponse(
|
|
40
|
+
RootModel[ListContentStandardsResponse1 | ListContentStandardsResponse2]
|
|
41
|
+
):
|
|
42
|
+
root: Annotated[
|
|
43
|
+
ListContentStandardsResponse1 | ListContentStandardsResponse2,
|
|
44
|
+
Field(
|
|
45
|
+
description='Response payload with list of content standards configurations',
|
|
46
|
+
title='List Content Standards Response',
|
|
47
|
+
),
|
|
48
|
+
]
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: content_standards/update_content_standards_request.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated, Literal
|
|
8
|
+
|
|
9
|
+
from adcp.types.base import AdCPBaseModel
|
|
10
|
+
from pydantic import AnyUrl, ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
from ..core import context as context_1
|
|
13
|
+
from ..core import ext as ext_1
|
|
14
|
+
from ..enums import channels
|
|
15
|
+
from . import artifact
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class Fail(AdCPBaseModel):
|
|
19
|
+
language: Annotated[
|
|
20
|
+
str | None, Field(description='BCP 47 language tag for content at this URL')
|
|
21
|
+
] = None
|
|
22
|
+
type: Annotated[Literal['url'], Field(description='Indicates this is a URL reference')]
|
|
23
|
+
value: Annotated[
|
|
24
|
+
AnyUrl,
|
|
25
|
+
Field(
|
|
26
|
+
description="Full URL to a specific page (e.g., 'https://news.example.com/controversial-article')"
|
|
27
|
+
),
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class Pass(AdCPBaseModel):
|
|
32
|
+
language: Annotated[
|
|
33
|
+
str | None, Field(description='BCP 47 language tag for content at this URL')
|
|
34
|
+
] = None
|
|
35
|
+
type: Annotated[Literal['url'], Field(description='Indicates this is a URL reference')]
|
|
36
|
+
value: Annotated[
|
|
37
|
+
AnyUrl,
|
|
38
|
+
Field(
|
|
39
|
+
description="Full URL to a specific page (e.g., 'https://espn.com/nba/story/_/id/12345/lakers-win')"
|
|
40
|
+
),
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class Scope(AdCPBaseModel):
|
|
45
|
+
channels_any: Annotated[
|
|
46
|
+
list[channels.MediaChannel] | None,
|
|
47
|
+
Field(
|
|
48
|
+
description='Advertising channels. Standards apply to ANY of the listed channels (OR logic).'
|
|
49
|
+
),
|
|
50
|
+
] = None
|
|
51
|
+
countries_all: Annotated[
|
|
52
|
+
list[str] | None,
|
|
53
|
+
Field(
|
|
54
|
+
description='ISO 3166-1 alpha-2 country codes. Standards apply in ALL listed countries (AND logic).'
|
|
55
|
+
),
|
|
56
|
+
] = None
|
|
57
|
+
description: Annotated[
|
|
58
|
+
str | None, Field(description='Human-readable description of this scope')
|
|
59
|
+
] = None
|
|
60
|
+
languages_any: Annotated[
|
|
61
|
+
list[str] | None,
|
|
62
|
+
Field(
|
|
63
|
+
description="BCP 47 language tags (e.g., 'en', 'de', 'fr'). Standards apply to content in ANY of these languages (OR logic). Content in unlisted languages is not covered by these standards.",
|
|
64
|
+
min_length=1,
|
|
65
|
+
),
|
|
66
|
+
] = None
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class CalibrationExemplars(AdCPBaseModel):
|
|
70
|
+
fail: Annotated[
|
|
71
|
+
list[Fail | artifact.Artifact] | None, Field(description='Content that fails the standards')
|
|
72
|
+
] = None
|
|
73
|
+
pass_: Annotated[
|
|
74
|
+
list[Pass | artifact.Artifact] | None,
|
|
75
|
+
Field(alias='pass', description='Content that passes the standards'),
|
|
76
|
+
] = None
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
class UpdateContentStandardsRequest(AdCPBaseModel):
|
|
80
|
+
model_config = ConfigDict(
|
|
81
|
+
extra='allow',
|
|
82
|
+
)
|
|
83
|
+
calibration_exemplars: Annotated[
|
|
84
|
+
CalibrationExemplars | None,
|
|
85
|
+
Field(
|
|
86
|
+
description='Updated training/test set to calibrate policy interpretation. Use URL references for pages to be fetched and analyzed, or full artifacts for pre-extracted content.'
|
|
87
|
+
),
|
|
88
|
+
] = None
|
|
89
|
+
context: context_1.ContextObject | None = None
|
|
90
|
+
ext: ext_1.ExtensionObject | None = None
|
|
91
|
+
policy: Annotated[
|
|
92
|
+
str | None,
|
|
93
|
+
Field(
|
|
94
|
+
description='Updated natural language policy describing acceptable and unacceptable content contexts.'
|
|
95
|
+
),
|
|
96
|
+
] = None
|
|
97
|
+
scope: Annotated[
|
|
98
|
+
Scope | None,
|
|
99
|
+
Field(description='Updated scope for where this standards configuration applies'),
|
|
100
|
+
] = None
|
|
101
|
+
standards_id: Annotated[str, Field(description='ID of the standards configuration to update')]
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: content_standards/update_content_standards_response.json
|
|
3
|
+
# timestamp: 2026-01-26T11:40:01+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 ..core import context as context_1
|
|
13
|
+
from ..core import error
|
|
14
|
+
from ..core import ext as ext_1
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class UpdateContentStandardsResponse(AdCPBaseModel):
|
|
18
|
+
model_config = ConfigDict(
|
|
19
|
+
extra='allow',
|
|
20
|
+
)
|
|
21
|
+
conflicting_standards_id: Annotated[
|
|
22
|
+
str | None,
|
|
23
|
+
Field(
|
|
24
|
+
description='If scope change conflicts with another configuration, the ID of the conflicting standards'
|
|
25
|
+
),
|
|
26
|
+
] = None
|
|
27
|
+
context: context_1.ContextObject | None = None
|
|
28
|
+
errors: Annotated[
|
|
29
|
+
list[error.Error] | None, Field(description='Errors that occurred during the update')
|
|
30
|
+
] = None
|
|
31
|
+
ext: ext_1.ExtensionObject | None = None
|
|
32
|
+
standards_id: Annotated[
|
|
33
|
+
str | None, Field(description='ID of the updated standards configuration')
|
|
34
|
+
] = None
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: content_standards/validate_content_delivery_request.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 AwareDatetime, Field
|
|
11
|
+
|
|
12
|
+
from ..core import context as context_1
|
|
13
|
+
from ..core import ext as ext_1
|
|
14
|
+
from . import artifact as artifact_1
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class BrandContext(AdCPBaseModel):
|
|
18
|
+
brand_id: Annotated[str | None, Field(description='Brand identifier')] = None
|
|
19
|
+
sku_id: Annotated[str | None, Field(description='Product/SKU identifier if applicable')] = None
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class Record(AdCPBaseModel):
|
|
23
|
+
artifact: Annotated[artifact_1.Artifact, Field(description='Artifact where ad was delivered')]
|
|
24
|
+
brand_context: Annotated[
|
|
25
|
+
BrandContext | None,
|
|
26
|
+
Field(
|
|
27
|
+
description='Brand information for policy evaluation. Schema TBD - placeholder for brand identifiers.'
|
|
28
|
+
),
|
|
29
|
+
] = None
|
|
30
|
+
channel: Annotated[
|
|
31
|
+
str | None, Field(description='Channel type (e.g., display, video, audio, social)')
|
|
32
|
+
] = None
|
|
33
|
+
country: Annotated[
|
|
34
|
+
str | None, Field(description='ISO 3166-1 alpha-2 country code where delivery occurred')
|
|
35
|
+
] = None
|
|
36
|
+
media_buy_id: Annotated[
|
|
37
|
+
str | None,
|
|
38
|
+
Field(description='Media buy this record belongs to (when batching across multiple buys)'),
|
|
39
|
+
] = None
|
|
40
|
+
record_id: Annotated[str, Field(description='Unique identifier for this delivery record')]
|
|
41
|
+
timestamp: Annotated[AwareDatetime | None, Field(description='When the delivery occurred')] = (
|
|
42
|
+
None
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class ValidateContentDeliveryRequest(AdCPBaseModel):
|
|
47
|
+
context: context_1.ContextObject | None = None
|
|
48
|
+
ext: ext_1.ExtensionObject | None = None
|
|
49
|
+
feature_ids: Annotated[
|
|
50
|
+
list[str] | None, Field(description='Specific features to evaluate (defaults to all)')
|
|
51
|
+
] = None
|
|
52
|
+
include_passed: Annotated[
|
|
53
|
+
bool | None, Field(description='Include passed records in results')
|
|
54
|
+
] = True
|
|
55
|
+
records: Annotated[
|
|
56
|
+
list[Record],
|
|
57
|
+
Field(description='Delivery records to validate (max 10,000)', max_length=10000),
|
|
58
|
+
]
|
|
59
|
+
standards_id: Annotated[str, Field(description='Standards configuration to validate against')]
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: content_standards/validate_content_delivery_response.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import Enum
|
|
8
|
+
from typing import Annotated, Any
|
|
9
|
+
|
|
10
|
+
from adcp.types.base import AdCPBaseModel
|
|
11
|
+
from pydantic import Field, RootModel
|
|
12
|
+
|
|
13
|
+
from ..core import context as context_1
|
|
14
|
+
from ..core import error
|
|
15
|
+
from ..core import ext as ext_1
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class Status(Enum):
|
|
19
|
+
passed = 'passed'
|
|
20
|
+
failed = 'failed'
|
|
21
|
+
warning = 'warning'
|
|
22
|
+
unevaluated = 'unevaluated'
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class Feature(AdCPBaseModel):
|
|
26
|
+
feature_id: str
|
|
27
|
+
message: str | None = None
|
|
28
|
+
rule_id: Annotated[
|
|
29
|
+
str | None,
|
|
30
|
+
Field(
|
|
31
|
+
description='Which rule triggered this result (e.g., GARM category, Scope3 standard)'
|
|
32
|
+
),
|
|
33
|
+
] = None
|
|
34
|
+
status: Status
|
|
35
|
+
value: Any | None = None
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class Verdict(Enum):
|
|
39
|
+
pass_ = 'pass'
|
|
40
|
+
fail = 'fail'
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class Result(AdCPBaseModel):
|
|
44
|
+
features: Annotated[
|
|
45
|
+
list[Feature] | None, Field(description='Optional feature-level breakdown')
|
|
46
|
+
] = None
|
|
47
|
+
record_id: Annotated[str, Field(description='Which delivery record was evaluated')]
|
|
48
|
+
verdict: Annotated[Verdict, Field(description='Overall pass/fail verdict for this record')]
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class Summary(AdCPBaseModel):
|
|
52
|
+
failed_records: int
|
|
53
|
+
passed_records: int
|
|
54
|
+
total_records: int
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class ValidateContentDeliveryResponse1(AdCPBaseModel):
|
|
58
|
+
context: context_1.ContextObject | None = None
|
|
59
|
+
errors: Annotated[
|
|
60
|
+
Any | None, Field(description='Field must not be present in success response')
|
|
61
|
+
] = None
|
|
62
|
+
ext: ext_1.ExtensionObject | None = None
|
|
63
|
+
results: Annotated[list[Result], Field(description='Per-record evaluation results')]
|
|
64
|
+
summary: Annotated[Summary, Field(description='Summary counts across all records')]
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
class ValidateContentDeliveryResponse2(AdCPBaseModel):
|
|
68
|
+
context: context_1.ContextObject | None = None
|
|
69
|
+
errors: list[error.Error]
|
|
70
|
+
ext: ext_1.ExtensionObject | None = None
|
|
71
|
+
summary: Annotated[
|
|
72
|
+
Any | None, Field(description='Field must not be present in error response')
|
|
73
|
+
] = None
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class ValidateContentDeliveryResponse(
|
|
77
|
+
RootModel[ValidateContentDeliveryResponse1 | ValidateContentDeliveryResponse2]
|
|
78
|
+
):
|
|
79
|
+
root: Annotated[
|
|
80
|
+
ValidateContentDeliveryResponse1 | ValidateContentDeliveryResponse2,
|
|
81
|
+
Field(
|
|
82
|
+
description='Response payload with per-record verdicts and optional feature breakdown',
|
|
83
|
+
title='Validate Content Delivery Response',
|
|
84
|
+
),
|
|
85
|
+
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: core/activation_key.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -12,22 +12,22 @@ from pydantic import ConfigDict, Field, RootModel
|
|
|
12
12
|
|
|
13
13
|
class ActivationKey1(AdCPBaseModel):
|
|
14
14
|
model_config = ConfigDict(
|
|
15
|
-
extra=
|
|
15
|
+
extra='allow',
|
|
16
16
|
)
|
|
17
17
|
segment_id: Annotated[
|
|
18
18
|
str,
|
|
19
|
-
Field(description=
|
|
19
|
+
Field(description='The platform-specific segment identifier to use in campaign targeting'),
|
|
20
20
|
]
|
|
21
|
-
type: Annotated[Literal[
|
|
21
|
+
type: Annotated[Literal['segment_id'], Field(description='Segment ID based targeting')]
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
class ActivationKey2(AdCPBaseModel):
|
|
25
25
|
model_config = ConfigDict(
|
|
26
|
-
extra=
|
|
26
|
+
extra='allow',
|
|
27
27
|
)
|
|
28
|
-
key: Annotated[str, Field(description=
|
|
29
|
-
type: Annotated[Literal[
|
|
30
|
-
value: Annotated[str, Field(description=
|
|
28
|
+
key: Annotated[str, Field(description='The targeting parameter key')]
|
|
29
|
+
type: Annotated[Literal['key_value'], Field(description='Key-value pair based targeting')]
|
|
30
|
+
value: Annotated[str, Field(description='The targeting parameter value')]
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
class ActivationKey(RootModel[ActivationKey1 | ActivationKey2]):
|
|
@@ -35,6 +35,6 @@ class ActivationKey(RootModel[ActivationKey1 | ActivationKey2]):
|
|
|
35
35
|
ActivationKey1 | ActivationKey2,
|
|
36
36
|
Field(
|
|
37
37
|
description="Universal identifier for using a signal on a destination platform. Can be either a segment ID or a key-value pair depending on the platform's targeting mechanism.",
|
|
38
|
-
title=
|
|
38
|
+
title='Activation Key',
|
|
39
39
|
),
|
|
40
40
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: core/assets/audio_asset.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -12,15 +12,15 @@ from pydantic import AnyUrl, ConfigDict, Field
|
|
|
12
12
|
|
|
13
13
|
class AudioAsset(AdCPBaseModel):
|
|
14
14
|
model_config = ConfigDict(
|
|
15
|
-
extra=
|
|
15
|
+
extra='allow',
|
|
16
16
|
)
|
|
17
17
|
bitrate_kbps: Annotated[
|
|
18
|
-
int | None, Field(description=
|
|
18
|
+
int | None, Field(description='Audio bitrate in kilobits per second', ge=1)
|
|
19
19
|
] = None
|
|
20
20
|
duration_ms: Annotated[
|
|
21
|
-
int | None, Field(description=
|
|
21
|
+
int | None, Field(description='Audio duration in milliseconds', ge=0)
|
|
22
22
|
] = None
|
|
23
|
-
format: Annotated[str | None, Field(description=
|
|
23
|
+
format: Annotated[str | None, Field(description='Audio file format (mp3, wav, aac, etc.)')] = (
|
|
24
24
|
None
|
|
25
25
|
)
|
|
26
|
-
url: Annotated[AnyUrl, Field(description=
|
|
26
|
+
url: Annotated[AnyUrl, Field(description='URL to the audio asset')]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: core/assets/css_asset.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -12,9 +12,9 @@ from pydantic import ConfigDict, Field
|
|
|
12
12
|
|
|
13
13
|
class CssAsset(AdCPBaseModel):
|
|
14
14
|
model_config = ConfigDict(
|
|
15
|
-
extra=
|
|
15
|
+
extra='allow',
|
|
16
16
|
)
|
|
17
|
-
content: Annotated[str, Field(description=
|
|
17
|
+
content: Annotated[str, Field(description='CSS content')]
|
|
18
18
|
media: Annotated[
|
|
19
19
|
str | None, Field(description="CSS media query context (e.g., 'screen', 'print')")
|
|
20
20
|
] = None
|