adcp 2.19.0__py3-none-any.whl → 3.1.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 +14 -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 +115 -23
- adcp/types/_ergonomic.py +35 -14
- adcp/types/_generated.py +346 -52
- adcp/types/aliases.py +68 -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.1.0.dist-info}/METADATA +1 -1
- adcp-3.1.0.dist-info/RECORD +264 -0
- {adcp-2.19.0.dist-info → adcp-3.1.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.1.0.dist-info}/entry_points.txt +0 -0
- {adcp-2.19.0.dist-info → adcp-3.1.0.dist-info}/licenses/LICENSE +0 -0
- {adcp-2.19.0.dist-info → adcp-3.1.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: content_standards/artifact.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, Literal
|
|
9
|
+
|
|
10
|
+
from adcp.types.base import AdCPBaseModel
|
|
11
|
+
from pydantic import AnyUrl, AwareDatetime, ConfigDict, Field, RootModel
|
|
12
|
+
|
|
13
|
+
from ..core import format_id as format_id_1
|
|
14
|
+
from ..core import identifier
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class Role(Enum):
|
|
18
|
+
title_ = 'title'
|
|
19
|
+
paragraph = 'paragraph'
|
|
20
|
+
heading = 'heading'
|
|
21
|
+
caption = 'caption'
|
|
22
|
+
quote = 'quote'
|
|
23
|
+
list_item = 'list_item'
|
|
24
|
+
description = 'description'
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class Assets(AdCPBaseModel):
|
|
28
|
+
content: Annotated[str, Field(description='Text content')]
|
|
29
|
+
heading_level: Annotated[
|
|
30
|
+
int | None, Field(description='Heading level (1-6), only for role=heading', ge=1, le=6)
|
|
31
|
+
] = None
|
|
32
|
+
language: Annotated[
|
|
33
|
+
str | None,
|
|
34
|
+
Field(
|
|
35
|
+
description="BCP 47 language tag for this text (e.g., 'en', 'es-MX'). Useful when artifact contains mixed-language content."
|
|
36
|
+
),
|
|
37
|
+
] = None
|
|
38
|
+
role: Annotated[
|
|
39
|
+
Role | None,
|
|
40
|
+
Field(
|
|
41
|
+
description="Role of this text in the document. Use 'title' for the main artifact title, 'description' for summaries."
|
|
42
|
+
),
|
|
43
|
+
] = None
|
|
44
|
+
type: Literal['text']
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class TranscriptSource(Enum):
|
|
48
|
+
original_script = 'original_script'
|
|
49
|
+
subtitles = 'subtitles'
|
|
50
|
+
closed_captions = 'closed_captions'
|
|
51
|
+
dub = 'dub'
|
|
52
|
+
generated = 'generated'
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class TranscriptSource1(Enum):
|
|
56
|
+
original_script = 'original_script'
|
|
57
|
+
closed_captions = 'closed_captions'
|
|
58
|
+
generated = 'generated'
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class Identifiers(AdCPBaseModel):
|
|
62
|
+
model_config = ConfigDict(
|
|
63
|
+
extra='allow',
|
|
64
|
+
)
|
|
65
|
+
apple_podcast_id: Annotated[str | None, Field(description='Apple Podcasts ID')] = None
|
|
66
|
+
podcast_guid: Annotated[str | None, Field(description='Podcast GUID (from RSS feed)')] = None
|
|
67
|
+
rss_url: Annotated[AnyUrl | None, Field(description='RSS feed URL')] = None
|
|
68
|
+
spotify_show_id: Annotated[str | None, Field(description='Spotify show ID')] = None
|
|
69
|
+
youtube_video_id: Annotated[str | None, Field(description='YouTube video ID')] = None
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class Metadata(AdCPBaseModel):
|
|
73
|
+
model_config = ConfigDict(
|
|
74
|
+
extra='allow',
|
|
75
|
+
)
|
|
76
|
+
author: Annotated[str | None, Field(description='Artifact author name')] = None
|
|
77
|
+
canonical: Annotated[AnyUrl | None, Field(description='Canonical URL')] = None
|
|
78
|
+
json_ld: Annotated[
|
|
79
|
+
list[dict[str, Any]] | None, Field(description='JSON-LD structured data (schema.org)')
|
|
80
|
+
] = None
|
|
81
|
+
keywords: Annotated[str | None, Field(description='Artifact keywords')] = None
|
|
82
|
+
open_graph: Annotated[
|
|
83
|
+
dict[str, Any] | None, Field(description='Open Graph protocol metadata')
|
|
84
|
+
] = None
|
|
85
|
+
twitter_card: Annotated[dict[str, Any] | None, Field(description='Twitter Card metadata')] = (
|
|
86
|
+
None
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
class AssetAccess1(AdCPBaseModel):
|
|
91
|
+
method: Literal['bearer_token']
|
|
92
|
+
token: Annotated[str, Field(description='OAuth2 bearer token for Authorization header')]
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
class Provider(Enum):
|
|
96
|
+
gcp = 'gcp'
|
|
97
|
+
aws = 'aws'
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
class AssetAccess2(AdCPBaseModel):
|
|
101
|
+
credentials: Annotated[
|
|
102
|
+
dict[str, Any] | None, Field(description='Service account credentials')
|
|
103
|
+
] = None
|
|
104
|
+
method: Literal['service_account']
|
|
105
|
+
provider: Annotated[Provider, Field(description='Cloud provider')]
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
class AssetAccess3(AdCPBaseModel):
|
|
109
|
+
method: Literal['signed_url']
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
class AssetAccess(RootModel[AssetAccess1 | AssetAccess2 | AssetAccess3]):
|
|
113
|
+
root: Annotated[
|
|
114
|
+
AssetAccess1 | AssetAccess2 | AssetAccess3,
|
|
115
|
+
Field(description='Authentication for accessing secured asset URLs'),
|
|
116
|
+
]
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
class Assets1(AdCPBaseModel):
|
|
120
|
+
access: Annotated[AssetAccess | None, Field(description='Authentication for secured URLs')] = (
|
|
121
|
+
None
|
|
122
|
+
)
|
|
123
|
+
alt_text: Annotated[str | None, Field(description='Alt text or image description')] = None
|
|
124
|
+
caption: Annotated[str | None, Field(description='Image caption')] = None
|
|
125
|
+
height: Annotated[int | None, Field(description='Image height in pixels')] = None
|
|
126
|
+
type: Literal['image']
|
|
127
|
+
url: Annotated[AnyUrl, Field(description='Image URL')]
|
|
128
|
+
width: Annotated[int | None, Field(description='Image width in pixels')] = None
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
class Assets2(AdCPBaseModel):
|
|
132
|
+
access: Annotated[AssetAccess | None, Field(description='Authentication for secured URLs')] = (
|
|
133
|
+
None
|
|
134
|
+
)
|
|
135
|
+
duration_ms: Annotated[int | None, Field(description='Video duration in milliseconds')] = None
|
|
136
|
+
thumbnail_url: Annotated[AnyUrl | None, Field(description='Video thumbnail URL')] = None
|
|
137
|
+
transcript: Annotated[str | None, Field(description='Video transcript')] = None
|
|
138
|
+
transcript_source: Annotated[
|
|
139
|
+
TranscriptSource | None, Field(description='How the transcript was generated')
|
|
140
|
+
] = None
|
|
141
|
+
type: Literal['video']
|
|
142
|
+
url: Annotated[AnyUrl, Field(description='Video URL')]
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
class Assets3(AdCPBaseModel):
|
|
146
|
+
access: Annotated[AssetAccess | None, Field(description='Authentication for secured URLs')] = (
|
|
147
|
+
None
|
|
148
|
+
)
|
|
149
|
+
duration_ms: Annotated[int | None, Field(description='Audio duration in milliseconds')] = None
|
|
150
|
+
transcript: Annotated[str | None, Field(description='Audio transcript')] = None
|
|
151
|
+
transcript_source: Annotated[
|
|
152
|
+
TranscriptSource1 | None, Field(description='How the transcript was generated')
|
|
153
|
+
] = None
|
|
154
|
+
type: Literal['audio']
|
|
155
|
+
url: Annotated[AnyUrl, Field(description='Audio URL')]
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
class Artifact(AdCPBaseModel):
|
|
159
|
+
model_config = ConfigDict(
|
|
160
|
+
extra='allow',
|
|
161
|
+
)
|
|
162
|
+
artifact_id: Annotated[
|
|
163
|
+
str,
|
|
164
|
+
Field(
|
|
165
|
+
description="Identifier for this artifact within the property. The property owner defines the scheme (e.g., 'article_12345', 'episode_42_segment_3', 'post_abc123')."
|
|
166
|
+
),
|
|
167
|
+
]
|
|
168
|
+
assets: Annotated[
|
|
169
|
+
list[Assets | Assets1 | Assets2 | Assets3],
|
|
170
|
+
Field(
|
|
171
|
+
description='Artifact assets in document flow order - text blocks, images, video, audio'
|
|
172
|
+
),
|
|
173
|
+
]
|
|
174
|
+
format_id: Annotated[
|
|
175
|
+
format_id_1.FormatId | None,
|
|
176
|
+
Field(
|
|
177
|
+
description='Optional reference to a format definition. Uses the same format registry as creative formats.'
|
|
178
|
+
),
|
|
179
|
+
] = None
|
|
180
|
+
identifiers: Annotated[
|
|
181
|
+
Identifiers | None, Field(description='Platform-specific identifiers for this artifact')
|
|
182
|
+
] = None
|
|
183
|
+
last_update_time: Annotated[
|
|
184
|
+
AwareDatetime | None,
|
|
185
|
+
Field(description='When the artifact was last modified (ISO 8601 format)'),
|
|
186
|
+
] = None
|
|
187
|
+
metadata: Annotated[
|
|
188
|
+
Metadata | None, Field(description='Rich metadata extracted from the artifact')
|
|
189
|
+
] = None
|
|
190
|
+
property_id: Annotated[
|
|
191
|
+
identifier.Identifier,
|
|
192
|
+
Field(description='Identifier for the property where this artifact appears'),
|
|
193
|
+
]
|
|
194
|
+
published_time: Annotated[
|
|
195
|
+
AwareDatetime | None, Field(description='When the artifact was published (ISO 8601 format)')
|
|
196
|
+
] = None
|
|
197
|
+
url: Annotated[
|
|
198
|
+
AnyUrl | None,
|
|
199
|
+
Field(
|
|
200
|
+
description='Optional URL for this artifact (web page, podcast feed, video page). Not all artifacts have URLs (e.g., Instagram content, podcast segments, TV scenes).'
|
|
201
|
+
),
|
|
202
|
+
] = None
|
|
203
|
+
variant_id: Annotated[
|
|
204
|
+
str | None,
|
|
205
|
+
Field(
|
|
206
|
+
description="Identifies a specific variant of this artifact. Use for A/B tests, translations, or temporal versions. Examples: 'en', 'es-MX', 'v2', 'headline_test_b'. The combination of artifact_id + variant_id must be unique."
|
|
207
|
+
),
|
|
208
|
+
] = None
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: content_standards/artifact_webhook_payload.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, ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
from ..core import ext as ext_1
|
|
13
|
+
from . import artifact as artifact_1
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class Pagination(AdCPBaseModel):
|
|
17
|
+
batch_number: Annotated[int | None, Field(description='Current batch number (1-indexed)')] = (
|
|
18
|
+
None
|
|
19
|
+
)
|
|
20
|
+
total_artifacts: Annotated[
|
|
21
|
+
int | None, Field(description='Total artifacts in the delivery period')
|
|
22
|
+
] = None
|
|
23
|
+
total_batches: Annotated[
|
|
24
|
+
int | None, Field(description='Total batches for this delivery period')
|
|
25
|
+
] = None
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class Artifact(AdCPBaseModel):
|
|
29
|
+
artifact: Annotated[artifact_1.Artifact, Field(description='The content artifact')]
|
|
30
|
+
delivered_at: Annotated[
|
|
31
|
+
AwareDatetime, Field(description='When the impression was delivered (ISO 8601)')
|
|
32
|
+
]
|
|
33
|
+
impression_id: Annotated[
|
|
34
|
+
str | None,
|
|
35
|
+
Field(description='Optional impression identifier for correlation with delivery reports'),
|
|
36
|
+
] = None
|
|
37
|
+
package_id: Annotated[
|
|
38
|
+
str | None, Field(description='Package within the media buy this artifact relates to')
|
|
39
|
+
] = None
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class ArtifactWebhookPayload(AdCPBaseModel):
|
|
43
|
+
model_config = ConfigDict(
|
|
44
|
+
extra='allow',
|
|
45
|
+
)
|
|
46
|
+
artifacts: Annotated[
|
|
47
|
+
list[Artifact], Field(description='Content artifacts from delivered impressions')
|
|
48
|
+
]
|
|
49
|
+
batch_id: Annotated[
|
|
50
|
+
str,
|
|
51
|
+
Field(
|
|
52
|
+
description='Unique identifier for this batch of artifacts. Use for deduplication and acknowledgment.'
|
|
53
|
+
),
|
|
54
|
+
]
|
|
55
|
+
ext: ext_1.ExtensionObject | None = None
|
|
56
|
+
media_buy_id: Annotated[
|
|
57
|
+
str, Field(description='Media buy identifier these artifacts belong to')
|
|
58
|
+
]
|
|
59
|
+
pagination: Annotated[
|
|
60
|
+
Pagination | None, Field(description='Pagination info when batching large artifact sets')
|
|
61
|
+
] = None
|
|
62
|
+
timestamp: Annotated[
|
|
63
|
+
AwareDatetime, Field(description='When this batch was generated (ISO 8601)')
|
|
64
|
+
]
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: content_standards/calibrate_content_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 Field
|
|
11
|
+
|
|
12
|
+
from . import artifact as artifact_1
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class CalibrateContentRequest(AdCPBaseModel):
|
|
16
|
+
artifact: Annotated[artifact_1.Artifact, Field(description='Artifact to evaluate')]
|
|
17
|
+
standards_id: Annotated[str, Field(description='Standards configuration to calibrate against')]
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: content_standards/calibrate_content_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 error
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class Status(Enum):
|
|
17
|
+
passed = 'passed'
|
|
18
|
+
failed = 'failed'
|
|
19
|
+
warning = 'warning'
|
|
20
|
+
unevaluated = 'unevaluated'
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class Feature(AdCPBaseModel):
|
|
24
|
+
explanation: Annotated[
|
|
25
|
+
str | None,
|
|
26
|
+
Field(description='Human-readable explanation of why this feature passed or failed'),
|
|
27
|
+
] = None
|
|
28
|
+
feature_id: Annotated[
|
|
29
|
+
str,
|
|
30
|
+
Field(
|
|
31
|
+
description='Which feature was evaluated (e.g., brand_safety, brand_suitability, competitor_adjacency)'
|
|
32
|
+
),
|
|
33
|
+
]
|
|
34
|
+
status: Annotated[Status, Field(description='Evaluation status for this feature')]
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class Verdict(Enum):
|
|
38
|
+
pass_ = 'pass'
|
|
39
|
+
fail = 'fail'
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class CalibrateContentResponse1(AdCPBaseModel):
|
|
43
|
+
confidence: Annotated[
|
|
44
|
+
float | None, Field(description='Model confidence in the verdict (0-1)', ge=0.0, le=1.0)
|
|
45
|
+
] = None
|
|
46
|
+
errors: Annotated[
|
|
47
|
+
Any | None, Field(description='Field must not be present in success response')
|
|
48
|
+
] = None
|
|
49
|
+
explanation: Annotated[
|
|
50
|
+
str | None, Field(description='Detailed natural language explanation of the decision')
|
|
51
|
+
] = None
|
|
52
|
+
features: Annotated[
|
|
53
|
+
list[Feature] | None, Field(description='Per-feature breakdown with explanations')
|
|
54
|
+
] = None
|
|
55
|
+
verdict: Annotated[
|
|
56
|
+
Verdict, Field(description='Overall pass/fail verdict for the content evaluation')
|
|
57
|
+
]
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
class CalibrateContentResponse2(AdCPBaseModel):
|
|
61
|
+
errors: list[error.Error]
|
|
62
|
+
verdict: Annotated[
|
|
63
|
+
Any | None, Field(description='Field must not be present in error response')
|
|
64
|
+
] = None
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
class CalibrateContentResponse(RootModel[CalibrateContentResponse1 | CalibrateContentResponse2]):
|
|
68
|
+
root: Annotated[
|
|
69
|
+
CalibrateContentResponse1 | CalibrateContentResponse2,
|
|
70
|
+
Field(
|
|
71
|
+
description='Response payload with verdict and detailed explanations for collaborative calibration',
|
|
72
|
+
title='Calibrate Content Response',
|
|
73
|
+
),
|
|
74
|
+
]
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: content_standards/content_standards.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
|
+
from ..core import ext as ext_1
|
|
13
|
+
from ..enums import channels
|
|
14
|
+
from . import artifact
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class CalibrationExemplars(AdCPBaseModel):
|
|
18
|
+
fail: Annotated[
|
|
19
|
+
list[artifact.Artifact] | None,
|
|
20
|
+
Field(description='Artifacts that fail the content standards'),
|
|
21
|
+
] = None
|
|
22
|
+
pass_: Annotated[
|
|
23
|
+
list[artifact.Artifact] | None,
|
|
24
|
+
Field(alias='pass', description='Artifacts that pass the content standards'),
|
|
25
|
+
] = None
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class ContentStandards(AdCPBaseModel):
|
|
29
|
+
calibration_exemplars: Annotated[
|
|
30
|
+
CalibrationExemplars | None,
|
|
31
|
+
Field(
|
|
32
|
+
description='Training/test set to calibrate policy interpretation. Provides concrete examples of pass/fail decisions.'
|
|
33
|
+
),
|
|
34
|
+
] = None
|
|
35
|
+
channels_any: Annotated[
|
|
36
|
+
list[channels.MediaChannel] | None,
|
|
37
|
+
Field(
|
|
38
|
+
description='Advertising channels. Standards apply to ANY of the listed channels (OR logic).'
|
|
39
|
+
),
|
|
40
|
+
] = None
|
|
41
|
+
countries_all: Annotated[
|
|
42
|
+
list[str] | None,
|
|
43
|
+
Field(
|
|
44
|
+
description='ISO 3166-1 alpha-2 country codes. Standards apply in ALL listed countries (AND logic).'
|
|
45
|
+
),
|
|
46
|
+
] = None
|
|
47
|
+
ext: ext_1.ExtensionObject | None = None
|
|
48
|
+
languages_any: Annotated[
|
|
49
|
+
list[str] | None,
|
|
50
|
+
Field(
|
|
51
|
+
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.",
|
|
52
|
+
min_length=1,
|
|
53
|
+
),
|
|
54
|
+
] = None
|
|
55
|
+
name: Annotated[
|
|
56
|
+
str | None, Field(description='Human-readable name for this standards configuration')
|
|
57
|
+
] = None
|
|
58
|
+
policy: Annotated[
|
|
59
|
+
str | None,
|
|
60
|
+
Field(
|
|
61
|
+
description='Natural language policy describing acceptable and unacceptable content contexts. Used by LLMs and human reviewers to make judgments.'
|
|
62
|
+
),
|
|
63
|
+
] = None
|
|
64
|
+
standards_id: Annotated[
|
|
65
|
+
str, Field(description='Unique identifier for this standards configuration')
|
|
66
|
+
]
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: content_standards/create_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],
|
|
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
|
+
]
|
|
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 CreateContentStandardsRequest(AdCPBaseModel):
|
|
80
|
+
model_config = ConfigDict(
|
|
81
|
+
extra='allow',
|
|
82
|
+
)
|
|
83
|
+
calibration_exemplars: Annotated[
|
|
84
|
+
CalibrationExemplars | None,
|
|
85
|
+
Field(
|
|
86
|
+
description='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,
|
|
93
|
+
Field(
|
|
94
|
+
description='Natural language policy describing acceptable and unacceptable content contexts. Used by LLMs and human reviewers to make judgments.'
|
|
95
|
+
),
|
|
96
|
+
]
|
|
97
|
+
scope: Annotated[Scope, Field(description='Where this standards configuration applies')]
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: content_standards/create_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
|
+
|
|
16
|
+
|
|
17
|
+
class CreateContentStandardsResponse1(AdCPBaseModel):
|
|
18
|
+
context: context_1.ContextObject | None = None
|
|
19
|
+
errors: Annotated[
|
|
20
|
+
Any | None, Field(description='Field must not be present in success response')
|
|
21
|
+
] = None
|
|
22
|
+
ext: ext_1.ExtensionObject | None = None
|
|
23
|
+
standards_id: Annotated[
|
|
24
|
+
str, Field(description='Unique identifier for the created standards configuration')
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class CreateContentStandardsResponse2(AdCPBaseModel):
|
|
29
|
+
conflicting_standards_id: Annotated[
|
|
30
|
+
str | None,
|
|
31
|
+
Field(
|
|
32
|
+
description='If the error is a scope conflict, the ID of the existing standards that conflict'
|
|
33
|
+
),
|
|
34
|
+
] = None
|
|
35
|
+
context: context_1.ContextObject | None = None
|
|
36
|
+
errors: list[error.Error]
|
|
37
|
+
ext: ext_1.ExtensionObject | None = None
|
|
38
|
+
standards_id: Annotated[
|
|
39
|
+
Any | None, Field(description='Field must not be present in error response')
|
|
40
|
+
] = None
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class CreateContentStandardsResponse(
|
|
44
|
+
RootModel[CreateContentStandardsResponse1 | CreateContentStandardsResponse2]
|
|
45
|
+
):
|
|
46
|
+
root: Annotated[
|
|
47
|
+
CreateContentStandardsResponse1 | CreateContentStandardsResponse2,
|
|
48
|
+
Field(
|
|
49
|
+
description='Response payload for creating a content standards configuration',
|
|
50
|
+
title='Create Content Standards Response',
|
|
51
|
+
),
|
|
52
|
+
]
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: content_standards/get_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 Field
|
|
11
|
+
|
|
12
|
+
from ..core import context as context_1
|
|
13
|
+
from ..core import ext as ext_1
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class GetContentStandardsRequest(AdCPBaseModel):
|
|
17
|
+
context: context_1.ContextObject | None = None
|
|
18
|
+
ext: ext_1.ExtensionObject | None = None
|
|
19
|
+
standards_id: Annotated[
|
|
20
|
+
str, Field(description='Identifier for the standards configuration to retrieve')
|
|
21
|
+
]
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: content_standards/get_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 .content_standards import ContentStandards
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class GetContentStandardsResponse2(AdCPBaseModel):
|
|
19
|
+
context: context_1.ContextObject | None = None
|
|
20
|
+
errors: list[error.Error]
|
|
21
|
+
ext: ext_1.ExtensionObject | None = None
|
|
22
|
+
standards_id: Annotated[
|
|
23
|
+
Any | None, Field(description='Field must not be present in error response')
|
|
24
|
+
] = None
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class GetContentStandardsResponse1(ContentStandards):
|
|
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
|
+
|
|
33
|
+
|
|
34
|
+
class GetContentStandardsResponse(
|
|
35
|
+
RootModel[GetContentStandardsResponse1 | GetContentStandardsResponse2]
|
|
36
|
+
):
|
|
37
|
+
root: Annotated[
|
|
38
|
+
GetContentStandardsResponse1 | GetContentStandardsResponse2,
|
|
39
|
+
Field(
|
|
40
|
+
description='Response payload with content safety policies',
|
|
41
|
+
title='Get Content Standards Response',
|
|
42
|
+
),
|
|
43
|
+
]
|