adcp 3.1.0__py3-none-any.whl → 3.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- adcp/ADCP_VERSION +1 -1
- adcp/__init__.py +5 -5
- adcp/__main__.py +4 -4
- adcp/adagents.py +5 -9
- adcp/client.py +14 -12
- adcp/protocols/a2a.py +3 -3
- adcp/protocols/base.py +2 -2
- adcp/protocols/mcp.py +3 -3
- adcp/server/base.py +6 -10
- adcp/server/content_standards.py +17 -49
- adcp/server/governance.py +20 -59
- adcp/server/mcp_tools.py +8 -4
- adcp/server/proposal.py +1 -3
- adcp/server/sponsored_intelligence.py +10 -28
- adcp/simple.py +10 -10
- adcp/types/__init__.py +10 -6
- adcp/types/_generated.py +44 -27
- adcp/types/base.py +7 -7
- adcp/types/generated_poc/{protocols → a2ui}/__init__.py +1 -1
- adcp/types/generated_poc/a2ui/component.py +24 -0
- adcp/types/generated_poc/a2ui/surface.py +33 -0
- adcp/types/generated_poc/account/__init__.py +3 -0
- adcp/types/generated_poc/account/list_accounts_request.py +30 -0
- adcp/types/generated_poc/account/list_accounts_response.py +30 -0
- adcp/types/generated_poc/adagents.py +192 -195
- adcp/types/generated_poc/content_standards/artifact.py +69 -69
- adcp/types/generated_poc/content_standards/artifact_webhook_payload.py +13 -13
- adcp/types/generated_poc/content_standards/calibrate_content_request.py +2 -2
- adcp/types/generated_poc/content_standards/calibrate_content_response.py +17 -17
- adcp/types/generated_poc/content_standards/content_standards.py +8 -8
- adcp/types/generated_poc/content_standards/create_content_standards_request.py +13 -13
- adcp/types/generated_poc/content_standards/create_content_standards_response.py +6 -6
- adcp/types/generated_poc/content_standards/get_content_standards_request.py +1 -1
- adcp/types/generated_poc/content_standards/get_content_standards_response.py +4 -4
- adcp/types/generated_poc/content_standards/get_media_buy_artifacts_request.py +14 -14
- adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py +30 -30
- adcp/types/generated_poc/content_standards/list_content_standards_request.py +4 -4
- adcp/types/generated_poc/content_standards/list_content_standards_response.py +5 -5
- adcp/types/generated_poc/content_standards/update_content_standards_request.py +14 -14
- adcp/types/generated_poc/content_standards/update_content_standards_response.py +4 -4
- adcp/types/generated_poc/content_standards/validate_content_delivery_request.py +13 -13
- adcp/types/generated_poc/content_standards/validate_content_delivery_response.py +16 -16
- adcp/types/generated_poc/core/account.py +54 -0
- adcp/types/generated_poc/core/activation_key.py +8 -8
- adcp/types/generated_poc/core/assets/audio_asset.py +37 -8
- adcp/types/generated_poc/core/assets/css_asset.py +2 -2
- adcp/types/generated_poc/core/assets/daast_asset.py +18 -18
- adcp/types/generated_poc/core/assets/html_asset.py +2 -2
- adcp/types/generated_poc/core/assets/image_asset.py +6 -6
- adcp/types/generated_poc/core/assets/javascript_asset.py +3 -3
- adcp/types/generated_poc/core/assets/text_asset.py +2 -2
- adcp/types/generated_poc/core/assets/url_asset.py +3 -3
- adcp/types/generated_poc/core/assets/vast_asset.py +18 -18
- adcp/types/generated_poc/core/assets/video_asset.py +126 -10
- adcp/types/generated_poc/core/assets/webhook_asset.py +9 -9
- adcp/types/generated_poc/core/async_response_data.py +2 -2
- adcp/types/generated_poc/core/brand_manifest.py +66 -66
- adcp/types/generated_poc/core/brand_manifest_ref.py +9 -9
- adcp/types/generated_poc/core/context.py +1 -1
- adcp/types/generated_poc/core/creative_asset.py +12 -12
- adcp/types/generated_poc/core/creative_assignment.py +3 -3
- adcp/types/generated_poc/core/creative_filters.py +23 -17
- adcp/types/generated_poc/core/creative_manifest.py +4 -4
- adcp/types/generated_poc/core/creative_policy.py +4 -4
- adcp/types/generated_poc/core/delivery_metrics.py +32 -32
- adcp/types/generated_poc/core/deployment.py +20 -20
- adcp/types/generated_poc/core/destination.py +11 -11
- adcp/types/generated_poc/core/error.py +6 -6
- adcp/types/generated_poc/core/ext.py +1 -1
- adcp/types/generated_poc/core/format.py +49 -124
- adcp/types/generated_poc/core/format_id.py +5 -5
- adcp/types/generated_poc/core/frequency_cap.py +2 -2
- adcp/types/generated_poc/core/identifier.py +2 -2
- adcp/types/generated_poc/core/mcp_webhook_payload.py +10 -10
- adcp/types/generated_poc/core/measurement.py +8 -8
- adcp/types/generated_poc/core/media_buy.py +12 -8
- adcp/types/generated_poc/core/media_buy_features.py +3 -3
- adcp/types/generated_poc/core/offering.py +9 -9
- adcp/types/generated_poc/core/package.py +8 -8
- adcp/types/generated_poc/core/performance_feedback.py +18 -18
- adcp/types/generated_poc/core/placement.py +4 -4
- adcp/types/generated_poc/core/pricing_option.py +1 -1
- adcp/types/generated_poc/core/product.py +27 -21
- adcp/types/generated_poc/core/product_allocation.py +5 -5
- adcp/types/generated_poc/core/product_filters.py +27 -27
- adcp/types/generated_poc/core/promoted_offerings.py +18 -18
- adcp/types/generated_poc/core/promoted_products.py +2 -2
- adcp/types/generated_poc/core/property.py +10 -10
- adcp/types/generated_poc/core/property_id.py +4 -4
- adcp/types/generated_poc/core/property_list_ref.py +4 -4
- adcp/types/generated_poc/core/property_tag.py +4 -4
- adcp/types/generated_poc/core/proposal.py +13 -13
- adcp/types/generated_poc/core/protocol_envelope.py +8 -8
- adcp/types/generated_poc/core/publisher_property_selector.py +13 -13
- adcp/types/generated_poc/core/push_notification_config.py +5 -5
- adcp/types/generated_poc/core/reporting_capabilities.py +8 -8
- adcp/types/generated_poc/core/reporting_webhook.py +10 -10
- adcp/types/generated_poc/core/response.py +4 -4
- adcp/types/generated_poc/core/signal_filters.py +5 -5
- adcp/types/generated_poc/core/start_timing.py +3 -3
- adcp/types/generated_poc/core/sub_asset.py +14 -14
- adcp/types/generated_poc/core/targeting.py +17 -10
- adcp/types/generated_poc/creative/list_creative_formats_request.py +20 -20
- adcp/types/generated_poc/creative/list_creative_formats_response.py +5 -5
- adcp/types/generated_poc/creative/preview_creative_request.py +24 -24
- adcp/types/generated_poc/creative/preview_creative_response.py +28 -28
- adcp/types/generated_poc/creative/preview_render.py +25 -25
- adcp/types/generated_poc/enums/adcp_domain.py +4 -4
- adcp/types/generated_poc/enums/asset_content_type.py +13 -13
- adcp/types/generated_poc/enums/auth_scheme.py +2 -2
- adcp/types/generated_poc/enums/available_metric.py +9 -9
- adcp/types/generated_poc/enums/channels.py +19 -19
- adcp/types/generated_poc/enums/co_branding_requirement.py +3 -3
- adcp/types/generated_poc/enums/creative_action.py +5 -5
- adcp/types/generated_poc/enums/creative_agent_capability.py +4 -4
- adcp/types/generated_poc/enums/creative_sort_field.py +6 -6
- adcp/types/generated_poc/enums/creative_status.py +5 -5
- adcp/types/generated_poc/enums/daast_tracking_event.py +11 -11
- adcp/types/generated_poc/enums/daast_version.py +2 -2
- adcp/types/generated_poc/enums/delivery_type.py +2 -2
- adcp/types/generated_poc/enums/dimension_unit.py +4 -4
- adcp/types/generated_poc/enums/feed_format.py +3 -3
- adcp/types/generated_poc/enums/feedback_source.py +4 -4
- adcp/types/generated_poc/enums/format_category.py +7 -7
- adcp/types/generated_poc/enums/format_id_parameter.py +2 -2
- adcp/types/generated_poc/enums/frequency_cap_scope.py +3 -3
- adcp/types/generated_poc/enums/geo_level.py +4 -4
- adcp/types/generated_poc/enums/history_entry_type.py +2 -2
- adcp/types/generated_poc/enums/http_method.py +2 -2
- adcp/types/generated_poc/enums/identifier_types.py +19 -19
- adcp/types/generated_poc/enums/javascript_module_type.py +3 -3
- adcp/types/generated_poc/enums/landing_page_requirement.py +3 -3
- adcp/types/generated_poc/enums/markdown_flavor.py +2 -2
- adcp/types/generated_poc/enums/media_buy_status.py +4 -4
- adcp/types/generated_poc/enums/metric_type.py +8 -8
- adcp/types/generated_poc/enums/metro_system.py +5 -5
- adcp/types/generated_poc/enums/notification_type.py +4 -4
- adcp/types/generated_poc/enums/pacing.py +3 -3
- adcp/types/generated_poc/enums/postal_system.py +9 -9
- adcp/types/generated_poc/enums/preview_output_format.py +2 -2
- adcp/types/generated_poc/enums/pricing_model.py +7 -7
- adcp/types/generated_poc/enums/property_type.py +8 -8
- adcp/types/generated_poc/enums/publisher_identifier_types.py +5 -5
- adcp/types/generated_poc/enums/reporting_frequency.py +3 -3
- adcp/types/generated_poc/enums/signal_catalog_type.py +3 -3
- adcp/types/generated_poc/enums/sort_direction.py +2 -2
- adcp/types/generated_poc/enums/task_status.py +9 -9
- adcp/types/generated_poc/enums/task_type.py +11 -12
- adcp/types/generated_poc/enums/update_frequency.py +4 -4
- adcp/types/generated_poc/enums/url_asset_type.py +3 -3
- adcp/types/generated_poc/enums/validation_mode.py +2 -2
- adcp/types/generated_poc/enums/vast_tracking_event.py +16 -16
- adcp/types/generated_poc/enums/vast_version.py +5 -5
- adcp/types/generated_poc/enums/webhook_response_type.py +4 -4
- adcp/types/generated_poc/enums/webhook_security_method.py +3 -3
- adcp/types/generated_poc/extensions/extension_meta.py +14 -14
- adcp/types/generated_poc/media_buy/build_creative_request.py +4 -4
- adcp/types/generated_poc/media_buy/build_creative_response.py +6 -6
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +5 -5
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +1 -1
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +5 -5
- adcp/types/generated_poc/media_buy/create_media_buy_request.py +27 -21
- adcp/types/generated_poc/media_buy/create_media_buy_response.py +15 -8
- adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +8 -8
- adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +51 -51
- adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +6 -6
- adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +2 -2
- adcp/types/generated_poc/media_buy/get_products_async_response_working.py +4 -4
- adcp/types/generated_poc/media_buy/get_products_request.py +11 -5
- adcp/types/generated_poc/media_buy/get_products_response.py +5 -5
- adcp/types/generated_poc/media_buy/list_creative_formats_request.py +9 -9
- adcp/types/generated_poc/media_buy/list_creative_formats_response.py +5 -5
- adcp/types/generated_poc/media_buy/list_creatives_request.py +23 -23
- adcp/types/generated_poc/media_buy/list_creatives_response.py +53 -49
- adcp/types/generated_poc/media_buy/package_request.py +8 -8
- adcp/types/generated_poc/media_buy/package_update.py +16 -16
- adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +19 -19
- adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +6 -6
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +5 -5
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +1 -1
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +7 -7
- adcp/types/generated_poc/media_buy/sync_creatives_request.py +14 -8
- adcp/types/generated_poc/media_buy/sync_creatives_response.py +33 -29
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +4 -4
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +1 -1
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +5 -5
- adcp/types/generated_poc/media_buy/update_media_buy_request.py +14 -14
- adcp/types/generated_poc/media_buy/update_media_buy_response.py +7 -7
- adcp/types/generated_poc/pricing_options/cpc_option.py +13 -26
- adcp/types/generated_poc/pricing_options/cpcv_option.py +13 -26
- adcp/types/generated_poc/pricing_options/cpm_option.py +13 -20
- adcp/types/generated_poc/pricing_options/cpp_option.py +19 -32
- adcp/types/generated_poc/pricing_options/cpv_option.py +19 -32
- adcp/types/generated_poc/pricing_options/flat_rate_option.py +23 -36
- adcp/types/generated_poc/pricing_options/price_guidance.py +26 -0
- adcp/types/generated_poc/pricing_options/vcpm_option.py +13 -26
- adcp/types/generated_poc/property/base_property_source.py +15 -15
- adcp/types/generated_poc/property/create_property_list_request.py +4 -4
- adcp/types/generated_poc/property/create_property_list_response.py +3 -3
- adcp/types/generated_poc/property/delete_property_list_request.py +2 -2
- adcp/types/generated_poc/property/delete_property_list_response.py +3 -3
- adcp/types/generated_poc/property/feature_requirement.py +8 -8
- adcp/types/generated_poc/property/get_property_list_request.py +5 -5
- adcp/types/generated_poc/property/get_property_list_response.py +11 -11
- adcp/types/generated_poc/property/list_property_lists_request.py +5 -5
- adcp/types/generated_poc/property/list_property_lists_response.py +8 -8
- adcp/types/generated_poc/property/property_error.py +10 -10
- adcp/types/generated_poc/property/property_feature.py +4 -4
- adcp/types/generated_poc/property/property_feature_definition.py +18 -18
- adcp/types/generated_poc/property/property_list.py +11 -11
- adcp/types/generated_poc/property/property_list_changed_webhook.py +11 -11
- adcp/types/generated_poc/property/property_list_filters.py +7 -7
- adcp/types/generated_poc/property/update_property_list_request.py +8 -8
- adcp/types/generated_poc/property/update_property_list_response.py +2 -2
- adcp/types/generated_poc/protocol/get_adcp_capabilities_request.py +8 -6
- adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py +59 -58
- adcp/types/generated_poc/signals/activate_signal_request.py +3 -3
- adcp/types/generated_poc/signals/activate_signal_response.py +6 -6
- adcp/types/generated_poc/signals/get_signals_request.py +8 -8
- adcp/types/generated_poc/signals/get_signals_response.py +15 -15
- adcp/types/generated_poc/sponsored_intelligence/si_capabilities.py +45 -30
- adcp/types/generated_poc/sponsored_intelligence/si_get_offering_request.py +4 -4
- adcp/types/generated_poc/sponsored_intelligence/si_get_offering_response.py +23 -23
- adcp/types/generated_poc/sponsored_intelligence/si_identity.py +16 -16
- adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_request.py +5 -5
- adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_response.py +7 -7
- adcp/types/generated_poc/sponsored_intelligence/si_send_message_request.py +11 -11
- adcp/types/generated_poc/sponsored_intelligence/si_send_message_response.py +37 -23
- adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_request.py +17 -17
- adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_response.py +15 -15
- adcp/types/generated_poc/sponsored_intelligence/si_ui_element.py +11 -11
- adcp/utils/format_assets.py +32 -32
- {adcp-3.1.0.dist-info → adcp-3.2.0.dist-info}/METADATA +10 -5
- adcp-3.2.0.dist-info/RECORD +268 -0
- adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +0 -38
- adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +0 -84
- adcp/types/generated_poc/protocols/adcp_extension.py +0 -50
- adcp-3.1.0.dist-info/RECORD +0 -264
- {adcp-3.1.0.dist-info → adcp-3.2.0.dist-info}/WHEEL +0 -0
- {adcp-3.1.0.dist-info → adcp-3.2.0.dist-info}/entry_points.txt +0 -0
- {adcp-3.1.0.dist-info → adcp-3.2.0.dist-info}/licenses/LICENSE +0 -0
- {adcp-3.1.0.dist-info → adcp-3.2.0.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: adagents.json
|
|
3
|
-
# timestamp: 2026-
|
|
3
|
+
# timestamp: 2026-02-02T17:45:21+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -14,39 +14,39 @@ from .core import property, property_id, property_tag, publisher_property_select
|
|
|
14
14
|
|
|
15
15
|
class AuthorizedSalesAgents1(AdCPBaseModel):
|
|
16
16
|
model_config = ConfigDict(
|
|
17
|
-
extra=
|
|
17
|
+
extra="allow",
|
|
18
18
|
)
|
|
19
19
|
field_schema: Annotated[
|
|
20
20
|
str | None,
|
|
21
|
-
Field(alias=
|
|
21
|
+
Field(alias="$schema", description="JSON Schema identifier for this adagents.json file"),
|
|
22
22
|
] = None
|
|
23
23
|
authoritative_location: Annotated[
|
|
24
24
|
AnyUrl,
|
|
25
25
|
Field(
|
|
26
|
-
description=
|
|
26
|
+
description="HTTPS URL of the authoritative adagents.json file. When present, this file is a reference and the authoritative location contains the actual agent authorization data."
|
|
27
27
|
),
|
|
28
28
|
]
|
|
29
29
|
last_updated: Annotated[
|
|
30
30
|
AwareDatetime | None,
|
|
31
|
-
Field(description=
|
|
31
|
+
Field(description="ISO 8601 timestamp indicating when this reference was last updated"),
|
|
32
32
|
] = None
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
class Contact(AdCPBaseModel):
|
|
36
36
|
model_config = ConfigDict(
|
|
37
|
-
extra=
|
|
37
|
+
extra="allow",
|
|
38
38
|
)
|
|
39
39
|
domain: Annotated[
|
|
40
40
|
str | None,
|
|
41
41
|
Field(
|
|
42
|
-
description=
|
|
43
|
-
pattern=
|
|
42
|
+
description="Primary domain of the entity managing this file",
|
|
43
|
+
pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$",
|
|
44
44
|
),
|
|
45
45
|
] = None
|
|
46
46
|
email: Annotated[
|
|
47
47
|
EmailStr | None,
|
|
48
48
|
Field(
|
|
49
|
-
description=
|
|
49
|
+
description="Contact email for questions or issues with this authorization file",
|
|
50
50
|
max_length=255,
|
|
51
51
|
min_length=1,
|
|
52
52
|
),
|
|
@@ -68,7 +68,7 @@ class Contact(AdCPBaseModel):
|
|
|
68
68
|
seller_id: Annotated[
|
|
69
69
|
str | None,
|
|
70
70
|
Field(
|
|
71
|
-
description=
|
|
71
|
+
description="Seller ID from IAB Tech Lab sellers.json (if applicable)",
|
|
72
72
|
max_length=255,
|
|
73
73
|
min_length=1,
|
|
74
74
|
),
|
|
@@ -76,7 +76,7 @@ class Contact(AdCPBaseModel):
|
|
|
76
76
|
tag_id: Annotated[
|
|
77
77
|
str | None,
|
|
78
78
|
Field(
|
|
79
|
-
description=
|
|
79
|
+
description="TAG Certified Against Fraud ID for verification (if applicable)",
|
|
80
80
|
max_length=100,
|
|
81
81
|
min_length=1,
|
|
82
82
|
),
|
|
@@ -85,12 +85,12 @@ class Contact(AdCPBaseModel):
|
|
|
85
85
|
|
|
86
86
|
class PropertyFeature(AdCPBaseModel):
|
|
87
87
|
model_config = ConfigDict(
|
|
88
|
-
extra=
|
|
88
|
+
extra="allow",
|
|
89
89
|
)
|
|
90
90
|
features: Annotated[
|
|
91
91
|
list[str],
|
|
92
92
|
Field(
|
|
93
|
-
description="Feature IDs this agent provides (e.g., 'carbon_score', 'tag_certified_against_fraud'). Use
|
|
93
|
+
description="Feature IDs this agent provides (e.g., 'carbon_score', 'tag_certified_against_fraud'). Use get_adcp_capabilities on the agent for full definitions.",
|
|
94
94
|
min_length=1,
|
|
95
95
|
),
|
|
96
96
|
]
|
|
@@ -101,34 +101,31 @@ class PropertyFeature(AdCPBaseModel):
|
|
|
101
101
|
),
|
|
102
102
|
]
|
|
103
103
|
publisher_id: Annotated[
|
|
104
|
-
str | None, Field(description=
|
|
104
|
+
str | None, Field(description="Optional publisher identifier at this agent (for lookup)")
|
|
105
105
|
] = None
|
|
106
|
-
url: Annotated[
|
|
107
|
-
AnyUrl,
|
|
108
|
-
Field(description="The agent's API endpoint URL (must implement get_property_features)"),
|
|
109
|
-
]
|
|
106
|
+
url: Annotated[AnyUrl, Field(description="The agent's API endpoint URL")]
|
|
110
107
|
|
|
111
108
|
|
|
112
109
|
class Tags(AdCPBaseModel):
|
|
113
110
|
model_config = ConfigDict(
|
|
114
|
-
extra=
|
|
111
|
+
extra="allow",
|
|
115
112
|
)
|
|
116
|
-
description: Annotated[str, Field(description=
|
|
117
|
-
name: Annotated[str, Field(description=
|
|
113
|
+
description: Annotated[str, Field(description="Description of what this tag represents")]
|
|
114
|
+
name: Annotated[str, Field(description="Human-readable name for this tag")]
|
|
118
115
|
|
|
119
116
|
|
|
120
117
|
class AuthorizedAgents(AdCPBaseModel):
|
|
121
118
|
model_config = ConfigDict(
|
|
122
|
-
extra=
|
|
119
|
+
extra="allow",
|
|
123
120
|
)
|
|
124
121
|
authorization_type: Annotated[
|
|
125
|
-
Literal[
|
|
126
|
-
Field(description=
|
|
122
|
+
Literal["property_ids"],
|
|
123
|
+
Field(description="Discriminator indicating authorization by specific property IDs"),
|
|
127
124
|
]
|
|
128
125
|
authorized_for: Annotated[
|
|
129
126
|
str,
|
|
130
127
|
Field(
|
|
131
|
-
description=
|
|
128
|
+
description="Human-readable description of what this agent is authorized to sell",
|
|
132
129
|
max_length=500,
|
|
133
130
|
min_length=1,
|
|
134
131
|
),
|
|
@@ -136,7 +133,7 @@ class AuthorizedAgents(AdCPBaseModel):
|
|
|
136
133
|
property_ids: Annotated[
|
|
137
134
|
list[property_id.PropertyId],
|
|
138
135
|
Field(
|
|
139
|
-
description=
|
|
136
|
+
description="Property IDs this agent is authorized for. Resolved against the top-level properties array in this file",
|
|
140
137
|
min_length=1,
|
|
141
138
|
),
|
|
142
139
|
]
|
|
@@ -145,16 +142,16 @@ class AuthorizedAgents(AdCPBaseModel):
|
|
|
145
142
|
|
|
146
143
|
class AuthorizedAgents1(AdCPBaseModel):
|
|
147
144
|
model_config = ConfigDict(
|
|
148
|
-
extra=
|
|
145
|
+
extra="allow",
|
|
149
146
|
)
|
|
150
147
|
authorization_type: Annotated[
|
|
151
|
-
Literal[
|
|
152
|
-
Field(description=
|
|
148
|
+
Literal["property_tags"],
|
|
149
|
+
Field(description="Discriminator indicating authorization by property tags"),
|
|
153
150
|
]
|
|
154
151
|
authorized_for: Annotated[
|
|
155
152
|
str,
|
|
156
153
|
Field(
|
|
157
|
-
description=
|
|
154
|
+
description="Human-readable description of what this agent is authorized to sell",
|
|
158
155
|
max_length=500,
|
|
159
156
|
min_length=1,
|
|
160
157
|
),
|
|
@@ -162,7 +159,7 @@ class AuthorizedAgents1(AdCPBaseModel):
|
|
|
162
159
|
property_tags: Annotated[
|
|
163
160
|
list[property_tag.PropertyTag],
|
|
164
161
|
Field(
|
|
165
|
-
description=
|
|
162
|
+
description="Tags identifying which properties this agent is authorized for. Resolved against the top-level properties array in this file using tag matching",
|
|
166
163
|
min_length=1,
|
|
167
164
|
),
|
|
168
165
|
]
|
|
@@ -171,18 +168,18 @@ class AuthorizedAgents1(AdCPBaseModel):
|
|
|
171
168
|
|
|
172
169
|
class AuthorizedAgents3(AdCPBaseModel):
|
|
173
170
|
model_config = ConfigDict(
|
|
174
|
-
extra=
|
|
171
|
+
extra="allow",
|
|
175
172
|
)
|
|
176
173
|
authorization_type: Annotated[
|
|
177
|
-
Literal[
|
|
174
|
+
Literal["publisher_properties"],
|
|
178
175
|
Field(
|
|
179
|
-
description=
|
|
176
|
+
description="Discriminator indicating authorization for properties from other publisher domains"
|
|
180
177
|
),
|
|
181
178
|
]
|
|
182
179
|
authorized_for: Annotated[
|
|
183
180
|
str,
|
|
184
181
|
Field(
|
|
185
|
-
description=
|
|
182
|
+
description="Human-readable description of what this agent is authorized to sell",
|
|
186
183
|
max_length=500,
|
|
187
184
|
min_length=1,
|
|
188
185
|
),
|
|
@@ -190,7 +187,7 @@ class AuthorizedAgents3(AdCPBaseModel):
|
|
|
190
187
|
publisher_properties: Annotated[
|
|
191
188
|
list[publisher_property_selector.PublisherPropertySelector],
|
|
192
189
|
Field(
|
|
193
|
-
description=
|
|
190
|
+
description="Properties from other publisher domains this agent is authorized for. Each entry specifies a publisher domain and which of their properties this agent can sell",
|
|
194
191
|
min_length=1,
|
|
195
192
|
),
|
|
196
193
|
]
|
|
@@ -199,16 +196,16 @@ class AuthorizedAgents3(AdCPBaseModel):
|
|
|
199
196
|
|
|
200
197
|
class AuthorizedAgents2(AdCPBaseModel):
|
|
201
198
|
model_config = ConfigDict(
|
|
202
|
-
extra=
|
|
199
|
+
extra="allow",
|
|
203
200
|
)
|
|
204
201
|
authorization_type: Annotated[
|
|
205
|
-
Literal[
|
|
206
|
-
Field(description=
|
|
202
|
+
Literal["inline_properties"],
|
|
203
|
+
Field(description="Discriminator indicating authorization by inline property definitions"),
|
|
207
204
|
]
|
|
208
205
|
authorized_for: Annotated[
|
|
209
206
|
str,
|
|
210
207
|
Field(
|
|
211
|
-
description=
|
|
208
|
+
description="Human-readable description of what this agent is authorized to sell",
|
|
212
209
|
max_length=500,
|
|
213
210
|
min_length=1,
|
|
214
211
|
),
|
|
@@ -216,7 +213,7 @@ class AuthorizedAgents2(AdCPBaseModel):
|
|
|
216
213
|
properties: Annotated[
|
|
217
214
|
list[property.Property],
|
|
218
215
|
Field(
|
|
219
|
-
description=
|
|
216
|
+
description="Specific properties this agent is authorized for (alternative to property_ids/property_tags)",
|
|
220
217
|
min_length=1,
|
|
221
218
|
),
|
|
222
219
|
]
|
|
@@ -225,33 +222,33 @@ class AuthorizedAgents2(AdCPBaseModel):
|
|
|
225
222
|
|
|
226
223
|
class AuthorizedSalesAgents2(AdCPBaseModel):
|
|
227
224
|
model_config = ConfigDict(
|
|
228
|
-
extra=
|
|
225
|
+
extra="allow",
|
|
229
226
|
)
|
|
230
227
|
field_schema: Annotated[
|
|
231
228
|
str | None,
|
|
232
|
-
Field(alias=
|
|
229
|
+
Field(alias="$schema", description="JSON Schema identifier for this adagents.json file"),
|
|
233
230
|
] = None
|
|
234
231
|
authorized_agents: Annotated[
|
|
235
232
|
list[AuthorizedAgents | AuthorizedAgents1 | AuthorizedAgents2 | AuthorizedAgents3],
|
|
236
233
|
Field(
|
|
237
|
-
description=
|
|
234
|
+
description="Array of sales agents authorized to sell inventory for properties in this file",
|
|
238
235
|
min_length=1,
|
|
239
236
|
),
|
|
240
237
|
]
|
|
241
238
|
contact: Annotated[
|
|
242
239
|
Contact | None,
|
|
243
240
|
Field(
|
|
244
|
-
description=
|
|
241
|
+
description="Contact information for the entity managing this adagents.json file (may be publisher or third-party operator)"
|
|
245
242
|
),
|
|
246
243
|
] = None
|
|
247
244
|
last_updated: Annotated[
|
|
248
245
|
AwareDatetime | None,
|
|
249
|
-
Field(description=
|
|
246
|
+
Field(description="ISO 8601 timestamp indicating when this file was last updated"),
|
|
250
247
|
] = None
|
|
251
248
|
properties: Annotated[
|
|
252
249
|
list[property.Property] | None,
|
|
253
250
|
Field(
|
|
254
|
-
description=
|
|
251
|
+
description="Array of all properties covered by this adagents.json file. Defines the canonical property list that authorized agents reference.",
|
|
255
252
|
min_length=1,
|
|
256
253
|
),
|
|
257
254
|
] = None
|
|
@@ -264,7 +261,7 @@ class AuthorizedSalesAgents2(AdCPBaseModel):
|
|
|
264
261
|
tags: Annotated[
|
|
265
262
|
dict[str, Tags] | None,
|
|
266
263
|
Field(
|
|
267
|
-
description=
|
|
264
|
+
description="Metadata for each tag referenced by properties. Provides human-readable context for property tag values."
|
|
268
265
|
),
|
|
269
266
|
] = None
|
|
270
267
|
|
|
@@ -273,232 +270,232 @@ class AuthorizedSalesAgents(RootModel[AuthorizedSalesAgents1 | AuthorizedSalesAg
|
|
|
273
270
|
root: Annotated[
|
|
274
271
|
AuthorizedSalesAgents1 | AuthorizedSalesAgents2,
|
|
275
272
|
Field(
|
|
276
|
-
description=
|
|
273
|
+
description="Declaration of authorized sales agents for advertising inventory. Hosted at /.well-known/adagents.json on publisher domains. Can either contain the full structure inline or reference an authoritative URL.",
|
|
277
274
|
examples=[
|
|
278
275
|
{
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
276
|
+
"$schema": "/schemas/3.0.0-beta.2/adagents.json",
|
|
277
|
+
"authoritative_location": "https://cdn.example.com/adagents/v2/adagents.json",
|
|
278
|
+
"last_updated": "2025-01-15T10:00:00Z",
|
|
282
279
|
},
|
|
283
280
|
{
|
|
284
|
-
|
|
285
|
-
|
|
281
|
+
"$schema": "/schemas/3.0.0-beta.2/adagents.json",
|
|
282
|
+
"authorized_agents": [
|
|
286
283
|
{
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
284
|
+
"authorization_type": "property_tags",
|
|
285
|
+
"authorized_for": "Official sales agent",
|
|
286
|
+
"property_tags": ["all"],
|
|
287
|
+
"url": "https://agent.example.com",
|
|
291
288
|
}
|
|
292
289
|
],
|
|
293
|
-
|
|
294
|
-
|
|
290
|
+
"last_updated": "2025-01-10T12:00:00Z",
|
|
291
|
+
"properties": [
|
|
295
292
|
{
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
293
|
+
"identifiers": [{"type": "domain", "value": "example.com"}],
|
|
294
|
+
"name": "Example Site",
|
|
295
|
+
"property_type": "website",
|
|
296
|
+
"publisher_domain": "example.com",
|
|
300
297
|
}
|
|
301
298
|
],
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
299
|
+
"tags": {
|
|
300
|
+
"all": {
|
|
301
|
+
"description": "All properties in this file",
|
|
302
|
+
"name": "All Properties",
|
|
306
303
|
}
|
|
307
304
|
},
|
|
308
305
|
},
|
|
309
306
|
{
|
|
310
|
-
|
|
311
|
-
|
|
307
|
+
"$schema": "/schemas/3.0.0-beta.2/adagents.json",
|
|
308
|
+
"authorized_agents": [
|
|
312
309
|
{
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
310
|
+
"authorization_type": "property_tags",
|
|
311
|
+
"authorized_for": "All Meta properties",
|
|
312
|
+
"property_tags": ["meta_network"],
|
|
313
|
+
"url": "https://meta-ads.com",
|
|
317
314
|
}
|
|
318
315
|
],
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
316
|
+
"contact": {
|
|
317
|
+
"domain": "meta.com",
|
|
318
|
+
"email": "adops@meta.com",
|
|
319
|
+
"name": "Meta Advertising Operations",
|
|
320
|
+
"privacy_policy_url": "https://www.meta.com/privacy/policy",
|
|
321
|
+
"seller_id": "pub-meta-12345",
|
|
322
|
+
"tag_id": "12345",
|
|
326
323
|
},
|
|
327
|
-
|
|
328
|
-
|
|
324
|
+
"last_updated": "2025-01-10T15:30:00Z",
|
|
325
|
+
"properties": [
|
|
329
326
|
{
|
|
330
|
-
|
|
331
|
-
{
|
|
332
|
-
{
|
|
327
|
+
"identifiers": [
|
|
328
|
+
{"type": "ios_bundle", "value": "com.burbn.instagram"},
|
|
329
|
+
{"type": "android_package", "value": "com.instagram.android"},
|
|
333
330
|
],
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
331
|
+
"name": "Instagram",
|
|
332
|
+
"property_type": "mobile_app",
|
|
333
|
+
"publisher_domain": "instagram.com",
|
|
334
|
+
"tags": ["meta_network", "social_media"],
|
|
338
335
|
},
|
|
339
336
|
{
|
|
340
|
-
|
|
341
|
-
{
|
|
342
|
-
{
|
|
337
|
+
"identifiers": [
|
|
338
|
+
{"type": "ios_bundle", "value": "com.facebook.Facebook"},
|
|
339
|
+
{"type": "android_package", "value": "com.facebook.katana"},
|
|
343
340
|
],
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
341
|
+
"name": "Facebook",
|
|
342
|
+
"property_type": "mobile_app",
|
|
343
|
+
"publisher_domain": "facebook.com",
|
|
344
|
+
"tags": ["meta_network", "social_media"],
|
|
348
345
|
},
|
|
349
346
|
{
|
|
350
|
-
|
|
351
|
-
{
|
|
352
|
-
{
|
|
347
|
+
"identifiers": [
|
|
348
|
+
{"type": "ios_bundle", "value": "net.whatsapp.WhatsApp"},
|
|
349
|
+
{"type": "android_package", "value": "com.whatsapp"},
|
|
353
350
|
],
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
351
|
+
"name": "WhatsApp",
|
|
352
|
+
"property_type": "mobile_app",
|
|
353
|
+
"publisher_domain": "whatsapp.com",
|
|
354
|
+
"tags": ["meta_network", "messaging"],
|
|
358
355
|
},
|
|
359
356
|
],
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
357
|
+
"tags": {
|
|
358
|
+
"messaging": {
|
|
359
|
+
"description": "Messaging and communication apps",
|
|
360
|
+
"name": "Messaging Apps",
|
|
364
361
|
},
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
362
|
+
"meta_network": {
|
|
363
|
+
"description": "All Meta-owned properties",
|
|
364
|
+
"name": "Meta Network",
|
|
368
365
|
},
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
366
|
+
"social_media": {
|
|
367
|
+
"description": "Social networking applications",
|
|
368
|
+
"name": "Social Media Apps",
|
|
372
369
|
},
|
|
373
370
|
},
|
|
374
371
|
},
|
|
375
372
|
{
|
|
376
|
-
|
|
377
|
-
|
|
373
|
+
"$schema": "/schemas/3.0.0-beta.2/adagents.json",
|
|
374
|
+
"authorized_agents": [
|
|
378
375
|
{
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
376
|
+
"authorization_type": "property_tags",
|
|
377
|
+
"authorized_for": "Tumblr corporate properties only",
|
|
378
|
+
"property_tags": ["corporate"],
|
|
379
|
+
"url": "https://tumblr-sales.com",
|
|
383
380
|
}
|
|
384
381
|
],
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
382
|
+
"contact": {"name": "Tumblr Advertising"},
|
|
383
|
+
"last_updated": "2025-01-10T16:00:00Z",
|
|
384
|
+
"properties": [
|
|
388
385
|
{
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
386
|
+
"identifiers": [{"type": "domain", "value": "tumblr.com"}],
|
|
387
|
+
"name": "Tumblr Corporate",
|
|
388
|
+
"property_type": "website",
|
|
389
|
+
"publisher_domain": "tumblr.com",
|
|
390
|
+
"tags": ["corporate"],
|
|
394
391
|
}
|
|
395
392
|
],
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
393
|
+
"tags": {
|
|
394
|
+
"corporate": {
|
|
395
|
+
"description": "Tumblr-owned corporate properties (not user blogs)",
|
|
396
|
+
"name": "Corporate Properties",
|
|
400
397
|
}
|
|
401
398
|
},
|
|
402
399
|
},
|
|
403
400
|
{
|
|
404
|
-
|
|
405
|
-
|
|
401
|
+
"$schema": "/schemas/3.0.0-beta.2/adagents.json",
|
|
402
|
+
"authorized_agents": [
|
|
406
403
|
{
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
404
|
+
"authorization_type": "publisher_properties",
|
|
405
|
+
"authorized_for": "CNN CTV properties via publisher authorization",
|
|
406
|
+
"publisher_properties": [
|
|
410
407
|
{
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
408
|
+
"property_ids": ["cnn_ctv_app"],
|
|
409
|
+
"publisher_domain": "cnn.com",
|
|
410
|
+
"selection_type": "by_id",
|
|
414
411
|
}
|
|
415
412
|
],
|
|
416
|
-
|
|
413
|
+
"url": "https://agent.example/api",
|
|
417
414
|
},
|
|
418
415
|
{
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
416
|
+
"authorization_type": "publisher_properties",
|
|
417
|
+
"authorized_for": "All CTV properties from multiple publishers",
|
|
418
|
+
"publisher_properties": [
|
|
422
419
|
{
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
420
|
+
"property_tags": ["ctv"],
|
|
421
|
+
"publisher_domain": "cnn.com",
|
|
422
|
+
"selection_type": "by_tag",
|
|
426
423
|
},
|
|
427
424
|
{
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
425
|
+
"property_tags": ["ctv"],
|
|
426
|
+
"publisher_domain": "espn.com",
|
|
427
|
+
"selection_type": "by_tag",
|
|
431
428
|
},
|
|
432
429
|
],
|
|
433
|
-
|
|
430
|
+
"url": "https://agent.example/api",
|
|
434
431
|
},
|
|
435
432
|
],
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
433
|
+
"contact": {
|
|
434
|
+
"domain": "agent.example",
|
|
435
|
+
"email": "sales@agent.example",
|
|
436
|
+
"name": "Example Third-Party Sales Agent",
|
|
440
437
|
},
|
|
441
|
-
|
|
438
|
+
"last_updated": "2025-01-10T17:00:00Z",
|
|
442
439
|
},
|
|
443
440
|
{
|
|
444
|
-
|
|
445
|
-
|
|
441
|
+
"$schema": "/schemas/3.0.0-beta.2/adagents.json",
|
|
442
|
+
"authorized_agents": [
|
|
446
443
|
{
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
444
|
+
"authorization_type": "property_tags",
|
|
445
|
+
"authorized_for": "All news properties",
|
|
446
|
+
"property_tags": ["news"],
|
|
447
|
+
"url": "https://sales.news.example.com",
|
|
451
448
|
}
|
|
452
449
|
],
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
450
|
+
"contact": {
|
|
451
|
+
"domain": "news.example.com",
|
|
452
|
+
"email": "adops@news.example.com",
|
|
453
|
+
"name": "Premium News Publisher",
|
|
457
454
|
},
|
|
458
|
-
|
|
459
|
-
|
|
455
|
+
"last_updated": "2025-01-10T18:00:00Z",
|
|
456
|
+
"properties": [
|
|
460
457
|
{
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
458
|
+
"identifiers": [{"type": "domain", "value": "news.example.com"}],
|
|
459
|
+
"name": "News Example",
|
|
460
|
+
"property_type": "website",
|
|
461
|
+
"publisher_domain": "news.example.com",
|
|
462
|
+
"tags": ["premium", "news"],
|
|
466
463
|
}
|
|
467
464
|
],
|
|
468
|
-
|
|
465
|
+
"property_features": [
|
|
469
466
|
{
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
467
|
+
"features": ["carbon_score", "sustainability_grade"],
|
|
468
|
+
"name": "Scope3",
|
|
469
|
+
"publisher_id": "pub_news_12345",
|
|
470
|
+
"url": "https://api.scope3.com",
|
|
474
471
|
},
|
|
475
472
|
{
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
473
|
+
"features": [
|
|
474
|
+
"tag_certified_against_fraud",
|
|
475
|
+
"tag_brand_safety_certified",
|
|
479
476
|
],
|
|
480
|
-
|
|
481
|
-
|
|
477
|
+
"name": "TAG",
|
|
478
|
+
"url": "https://api.tagtoday.net",
|
|
482
479
|
},
|
|
483
480
|
{
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
481
|
+
"features": ["gdpr_compliant", "tcf_registered", "ccpa_compliant"],
|
|
482
|
+
"name": "OneTrust",
|
|
483
|
+
"publisher_id": "ot_news_67890",
|
|
484
|
+
"url": "https://api.onetrust.com",
|
|
488
485
|
},
|
|
489
486
|
],
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
487
|
+
"tags": {
|
|
488
|
+
"news": {
|
|
489
|
+
"description": "News and journalism content",
|
|
490
|
+
"name": "News Properties",
|
|
494
491
|
},
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
492
|
+
"premium": {
|
|
493
|
+
"description": "High-quality, brand-safe properties",
|
|
494
|
+
"name": "Premium Properties",
|
|
498
495
|
},
|
|
499
496
|
},
|
|
500
497
|
},
|
|
501
498
|
],
|
|
502
|
-
title=
|
|
499
|
+
title="Authorized Sales Agents",
|
|
503
500
|
),
|
|
504
501
|
]
|