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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: adagents.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-26T13:22:19+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
|
),
|
|
@@ -59,10 +59,16 @@ class Contact(AdCPBaseModel):
|
|
|
59
59
|
min_length=1,
|
|
60
60
|
),
|
|
61
61
|
]
|
|
62
|
+
privacy_policy_url: Annotated[
|
|
63
|
+
AnyUrl | None,
|
|
64
|
+
Field(
|
|
65
|
+
description="URL to the entity's privacy policy. Used for consumer consent flows when interacting with this sales agent."
|
|
66
|
+
),
|
|
67
|
+
] = None
|
|
62
68
|
seller_id: Annotated[
|
|
63
69
|
str | None,
|
|
64
70
|
Field(
|
|
65
|
-
description=
|
|
71
|
+
description='Seller ID from IAB Tech Lab sellers.json (if applicable)',
|
|
66
72
|
max_length=255,
|
|
67
73
|
min_length=1,
|
|
68
74
|
),
|
|
@@ -70,7 +76,7 @@ class Contact(AdCPBaseModel):
|
|
|
70
76
|
tag_id: Annotated[
|
|
71
77
|
str | None,
|
|
72
78
|
Field(
|
|
73
|
-
description=
|
|
79
|
+
description='TAG Certified Against Fraud ID for verification (if applicable)',
|
|
74
80
|
max_length=100,
|
|
75
81
|
min_length=1,
|
|
76
82
|
),
|
|
@@ -79,7 +85,7 @@ class Contact(AdCPBaseModel):
|
|
|
79
85
|
|
|
80
86
|
class PropertyFeature(AdCPBaseModel):
|
|
81
87
|
model_config = ConfigDict(
|
|
82
|
-
extra=
|
|
88
|
+
extra='allow',
|
|
83
89
|
)
|
|
84
90
|
features: Annotated[
|
|
85
91
|
list[str],
|
|
@@ -95,7 +101,7 @@ class PropertyFeature(AdCPBaseModel):
|
|
|
95
101
|
),
|
|
96
102
|
]
|
|
97
103
|
publisher_id: Annotated[
|
|
98
|
-
str | None, Field(description=
|
|
104
|
+
str | None, Field(description='Optional publisher identifier at this agent (for lookup)')
|
|
99
105
|
] = None
|
|
100
106
|
url: Annotated[
|
|
101
107
|
AnyUrl,
|
|
@@ -105,24 +111,24 @@ class PropertyFeature(AdCPBaseModel):
|
|
|
105
111
|
|
|
106
112
|
class Tags(AdCPBaseModel):
|
|
107
113
|
model_config = ConfigDict(
|
|
108
|
-
extra=
|
|
114
|
+
extra='allow',
|
|
109
115
|
)
|
|
110
|
-
description: Annotated[str, Field(description=
|
|
111
|
-
name: Annotated[str, Field(description=
|
|
116
|
+
description: Annotated[str, Field(description='Description of what this tag represents')]
|
|
117
|
+
name: Annotated[str, Field(description='Human-readable name for this tag')]
|
|
112
118
|
|
|
113
119
|
|
|
114
120
|
class AuthorizedAgents(AdCPBaseModel):
|
|
115
121
|
model_config = ConfigDict(
|
|
116
|
-
extra=
|
|
122
|
+
extra='allow',
|
|
117
123
|
)
|
|
118
124
|
authorization_type: Annotated[
|
|
119
|
-
Literal[
|
|
120
|
-
Field(description=
|
|
125
|
+
Literal['property_ids'],
|
|
126
|
+
Field(description='Discriminator indicating authorization by specific property IDs'),
|
|
121
127
|
]
|
|
122
128
|
authorized_for: Annotated[
|
|
123
129
|
str,
|
|
124
130
|
Field(
|
|
125
|
-
description=
|
|
131
|
+
description='Human-readable description of what this agent is authorized to sell',
|
|
126
132
|
max_length=500,
|
|
127
133
|
min_length=1,
|
|
128
134
|
),
|
|
@@ -130,7 +136,7 @@ class AuthorizedAgents(AdCPBaseModel):
|
|
|
130
136
|
property_ids: Annotated[
|
|
131
137
|
list[property_id.PropertyId],
|
|
132
138
|
Field(
|
|
133
|
-
description=
|
|
139
|
+
description='Property IDs this agent is authorized for. Resolved against the top-level properties array in this file',
|
|
134
140
|
min_length=1,
|
|
135
141
|
),
|
|
136
142
|
]
|
|
@@ -139,16 +145,16 @@ class AuthorizedAgents(AdCPBaseModel):
|
|
|
139
145
|
|
|
140
146
|
class AuthorizedAgents1(AdCPBaseModel):
|
|
141
147
|
model_config = ConfigDict(
|
|
142
|
-
extra=
|
|
148
|
+
extra='allow',
|
|
143
149
|
)
|
|
144
150
|
authorization_type: Annotated[
|
|
145
|
-
Literal[
|
|
146
|
-
Field(description=
|
|
151
|
+
Literal['property_tags'],
|
|
152
|
+
Field(description='Discriminator indicating authorization by property tags'),
|
|
147
153
|
]
|
|
148
154
|
authorized_for: Annotated[
|
|
149
155
|
str,
|
|
150
156
|
Field(
|
|
151
|
-
description=
|
|
157
|
+
description='Human-readable description of what this agent is authorized to sell',
|
|
152
158
|
max_length=500,
|
|
153
159
|
min_length=1,
|
|
154
160
|
),
|
|
@@ -156,7 +162,7 @@ class AuthorizedAgents1(AdCPBaseModel):
|
|
|
156
162
|
property_tags: Annotated[
|
|
157
163
|
list[property_tag.PropertyTag],
|
|
158
164
|
Field(
|
|
159
|
-
description=
|
|
165
|
+
description='Tags identifying which properties this agent is authorized for. Resolved against the top-level properties array in this file using tag matching',
|
|
160
166
|
min_length=1,
|
|
161
167
|
),
|
|
162
168
|
]
|
|
@@ -165,18 +171,18 @@ class AuthorizedAgents1(AdCPBaseModel):
|
|
|
165
171
|
|
|
166
172
|
class AuthorizedAgents3(AdCPBaseModel):
|
|
167
173
|
model_config = ConfigDict(
|
|
168
|
-
extra=
|
|
174
|
+
extra='allow',
|
|
169
175
|
)
|
|
170
176
|
authorization_type: Annotated[
|
|
171
|
-
Literal[
|
|
177
|
+
Literal['publisher_properties'],
|
|
172
178
|
Field(
|
|
173
|
-
description=
|
|
179
|
+
description='Discriminator indicating authorization for properties from other publisher domains'
|
|
174
180
|
),
|
|
175
181
|
]
|
|
176
182
|
authorized_for: Annotated[
|
|
177
183
|
str,
|
|
178
184
|
Field(
|
|
179
|
-
description=
|
|
185
|
+
description='Human-readable description of what this agent is authorized to sell',
|
|
180
186
|
max_length=500,
|
|
181
187
|
min_length=1,
|
|
182
188
|
),
|
|
@@ -184,7 +190,7 @@ class AuthorizedAgents3(AdCPBaseModel):
|
|
|
184
190
|
publisher_properties: Annotated[
|
|
185
191
|
list[publisher_property_selector.PublisherPropertySelector],
|
|
186
192
|
Field(
|
|
187
|
-
description=
|
|
193
|
+
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',
|
|
188
194
|
min_length=1,
|
|
189
195
|
),
|
|
190
196
|
]
|
|
@@ -193,16 +199,16 @@ class AuthorizedAgents3(AdCPBaseModel):
|
|
|
193
199
|
|
|
194
200
|
class AuthorizedAgents2(AdCPBaseModel):
|
|
195
201
|
model_config = ConfigDict(
|
|
196
|
-
extra=
|
|
202
|
+
extra='allow',
|
|
197
203
|
)
|
|
198
204
|
authorization_type: Annotated[
|
|
199
|
-
Literal[
|
|
200
|
-
Field(description=
|
|
205
|
+
Literal['inline_properties'],
|
|
206
|
+
Field(description='Discriminator indicating authorization by inline property definitions'),
|
|
201
207
|
]
|
|
202
208
|
authorized_for: Annotated[
|
|
203
209
|
str,
|
|
204
210
|
Field(
|
|
205
|
-
description=
|
|
211
|
+
description='Human-readable description of what this agent is authorized to sell',
|
|
206
212
|
max_length=500,
|
|
207
213
|
min_length=1,
|
|
208
214
|
),
|
|
@@ -210,7 +216,7 @@ class AuthorizedAgents2(AdCPBaseModel):
|
|
|
210
216
|
properties: Annotated[
|
|
211
217
|
list[property.Property],
|
|
212
218
|
Field(
|
|
213
|
-
description=
|
|
219
|
+
description='Specific properties this agent is authorized for (alternative to property_ids/property_tags)',
|
|
214
220
|
min_length=1,
|
|
215
221
|
),
|
|
216
222
|
]
|
|
@@ -219,33 +225,33 @@ class AuthorizedAgents2(AdCPBaseModel):
|
|
|
219
225
|
|
|
220
226
|
class AuthorizedSalesAgents2(AdCPBaseModel):
|
|
221
227
|
model_config = ConfigDict(
|
|
222
|
-
extra=
|
|
228
|
+
extra='allow',
|
|
223
229
|
)
|
|
224
230
|
field_schema: Annotated[
|
|
225
231
|
str | None,
|
|
226
|
-
Field(alias=
|
|
232
|
+
Field(alias='$schema', description='JSON Schema identifier for this adagents.json file'),
|
|
227
233
|
] = None
|
|
228
234
|
authorized_agents: Annotated[
|
|
229
235
|
list[AuthorizedAgents | AuthorizedAgents1 | AuthorizedAgents2 | AuthorizedAgents3],
|
|
230
236
|
Field(
|
|
231
|
-
description=
|
|
237
|
+
description='Array of sales agents authorized to sell inventory for properties in this file',
|
|
232
238
|
min_length=1,
|
|
233
239
|
),
|
|
234
240
|
]
|
|
235
241
|
contact: Annotated[
|
|
236
242
|
Contact | None,
|
|
237
243
|
Field(
|
|
238
|
-
description=
|
|
244
|
+
description='Contact information for the entity managing this adagents.json file (may be publisher or third-party operator)'
|
|
239
245
|
),
|
|
240
246
|
] = None
|
|
241
247
|
last_updated: Annotated[
|
|
242
248
|
AwareDatetime | None,
|
|
243
|
-
Field(description=
|
|
249
|
+
Field(description='ISO 8601 timestamp indicating when this file was last updated'),
|
|
244
250
|
] = None
|
|
245
251
|
properties: Annotated[
|
|
246
252
|
list[property.Property] | None,
|
|
247
253
|
Field(
|
|
248
|
-
description=
|
|
254
|
+
description='Array of all properties covered by this adagents.json file. Defines the canonical property list that authorized agents reference.',
|
|
249
255
|
min_length=1,
|
|
250
256
|
),
|
|
251
257
|
] = None
|
|
@@ -258,7 +264,7 @@ class AuthorizedSalesAgents2(AdCPBaseModel):
|
|
|
258
264
|
tags: Annotated[
|
|
259
265
|
dict[str, Tags] | None,
|
|
260
266
|
Field(
|
|
261
|
-
description=
|
|
267
|
+
description='Metadata for each tag referenced by properties. Provides human-readable context for property tag values.'
|
|
262
268
|
),
|
|
263
269
|
] = None
|
|
264
270
|
|
|
@@ -267,231 +273,232 @@ class AuthorizedSalesAgents(RootModel[AuthorizedSalesAgents1 | AuthorizedSalesAg
|
|
|
267
273
|
root: Annotated[
|
|
268
274
|
AuthorizedSalesAgents1 | AuthorizedSalesAgents2,
|
|
269
275
|
Field(
|
|
270
|
-
description=
|
|
276
|
+
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.',
|
|
271
277
|
examples=[
|
|
272
278
|
{
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
279
|
+
'$schema': '/schemas/3.0.0-beta.1/adagents.json',
|
|
280
|
+
'authoritative_location': 'https://cdn.example.com/adagents/v2/adagents.json',
|
|
281
|
+
'last_updated': '2025-01-15T10:00:00Z',
|
|
276
282
|
},
|
|
277
283
|
{
|
|
278
|
-
|
|
279
|
-
|
|
284
|
+
'$schema': '/schemas/3.0.0-beta.1/adagents.json',
|
|
285
|
+
'authorized_agents': [
|
|
280
286
|
{
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
287
|
+
'authorization_type': 'property_tags',
|
|
288
|
+
'authorized_for': 'Official sales agent',
|
|
289
|
+
'property_tags': ['all'],
|
|
290
|
+
'url': 'https://agent.example.com',
|
|
285
291
|
}
|
|
286
292
|
],
|
|
287
|
-
|
|
288
|
-
|
|
293
|
+
'last_updated': '2025-01-10T12:00:00Z',
|
|
294
|
+
'properties': [
|
|
289
295
|
{
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
296
|
+
'identifiers': [{'type': 'domain', 'value': 'example.com'}],
|
|
297
|
+
'name': 'Example Site',
|
|
298
|
+
'property_type': 'website',
|
|
299
|
+
'publisher_domain': 'example.com',
|
|
294
300
|
}
|
|
295
301
|
],
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
302
|
+
'tags': {
|
|
303
|
+
'all': {
|
|
304
|
+
'description': 'All properties in this file',
|
|
305
|
+
'name': 'All Properties',
|
|
300
306
|
}
|
|
301
307
|
},
|
|
302
308
|
},
|
|
303
309
|
{
|
|
304
|
-
|
|
305
|
-
|
|
310
|
+
'$schema': '/schemas/3.0.0-beta.1/adagents.json',
|
|
311
|
+
'authorized_agents': [
|
|
306
312
|
{
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
313
|
+
'authorization_type': 'property_tags',
|
|
314
|
+
'authorized_for': 'All Meta properties',
|
|
315
|
+
'property_tags': ['meta_network'],
|
|
316
|
+
'url': 'https://meta-ads.com',
|
|
311
317
|
}
|
|
312
318
|
],
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
+
'contact': {
|
|
320
|
+
'domain': 'meta.com',
|
|
321
|
+
'email': 'adops@meta.com',
|
|
322
|
+
'name': 'Meta Advertising Operations',
|
|
323
|
+
'privacy_policy_url': 'https://www.meta.com/privacy/policy',
|
|
324
|
+
'seller_id': 'pub-meta-12345',
|
|
325
|
+
'tag_id': '12345',
|
|
319
326
|
},
|
|
320
|
-
|
|
321
|
-
|
|
327
|
+
'last_updated': '2025-01-10T15:30:00Z',
|
|
328
|
+
'properties': [
|
|
322
329
|
{
|
|
323
|
-
|
|
324
|
-
{
|
|
325
|
-
{
|
|
330
|
+
'identifiers': [
|
|
331
|
+
{'type': 'ios_bundle', 'value': 'com.burbn.instagram'},
|
|
332
|
+
{'type': 'android_package', 'value': 'com.instagram.android'},
|
|
326
333
|
],
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
334
|
+
'name': 'Instagram',
|
|
335
|
+
'property_type': 'mobile_app',
|
|
336
|
+
'publisher_domain': 'instagram.com',
|
|
337
|
+
'tags': ['meta_network', 'social_media'],
|
|
331
338
|
},
|
|
332
339
|
{
|
|
333
|
-
|
|
334
|
-
{
|
|
335
|
-
{
|
|
340
|
+
'identifiers': [
|
|
341
|
+
{'type': 'ios_bundle', 'value': 'com.facebook.Facebook'},
|
|
342
|
+
{'type': 'android_package', 'value': 'com.facebook.katana'},
|
|
336
343
|
],
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
344
|
+
'name': 'Facebook',
|
|
345
|
+
'property_type': 'mobile_app',
|
|
346
|
+
'publisher_domain': 'facebook.com',
|
|
347
|
+
'tags': ['meta_network', 'social_media'],
|
|
341
348
|
},
|
|
342
349
|
{
|
|
343
|
-
|
|
344
|
-
{
|
|
345
|
-
{
|
|
350
|
+
'identifiers': [
|
|
351
|
+
{'type': 'ios_bundle', 'value': 'net.whatsapp.WhatsApp'},
|
|
352
|
+
{'type': 'android_package', 'value': 'com.whatsapp'},
|
|
346
353
|
],
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
354
|
+
'name': 'WhatsApp',
|
|
355
|
+
'property_type': 'mobile_app',
|
|
356
|
+
'publisher_domain': 'whatsapp.com',
|
|
357
|
+
'tags': ['meta_network', 'messaging'],
|
|
351
358
|
},
|
|
352
359
|
],
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
360
|
+
'tags': {
|
|
361
|
+
'messaging': {
|
|
362
|
+
'description': 'Messaging and communication apps',
|
|
363
|
+
'name': 'Messaging Apps',
|
|
357
364
|
},
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
365
|
+
'meta_network': {
|
|
366
|
+
'description': 'All Meta-owned properties',
|
|
367
|
+
'name': 'Meta Network',
|
|
361
368
|
},
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
369
|
+
'social_media': {
|
|
370
|
+
'description': 'Social networking applications',
|
|
371
|
+
'name': 'Social Media Apps',
|
|
365
372
|
},
|
|
366
373
|
},
|
|
367
374
|
},
|
|
368
375
|
{
|
|
369
|
-
|
|
370
|
-
|
|
376
|
+
'$schema': '/schemas/3.0.0-beta.1/adagents.json',
|
|
377
|
+
'authorized_agents': [
|
|
371
378
|
{
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
379
|
+
'authorization_type': 'property_tags',
|
|
380
|
+
'authorized_for': 'Tumblr corporate properties only',
|
|
381
|
+
'property_tags': ['corporate'],
|
|
382
|
+
'url': 'https://tumblr-sales.com',
|
|
376
383
|
}
|
|
377
384
|
],
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
385
|
+
'contact': {'name': 'Tumblr Advertising'},
|
|
386
|
+
'last_updated': '2025-01-10T16:00:00Z',
|
|
387
|
+
'properties': [
|
|
381
388
|
{
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
389
|
+
'identifiers': [{'type': 'domain', 'value': 'tumblr.com'}],
|
|
390
|
+
'name': 'Tumblr Corporate',
|
|
391
|
+
'property_type': 'website',
|
|
392
|
+
'publisher_domain': 'tumblr.com',
|
|
393
|
+
'tags': ['corporate'],
|
|
387
394
|
}
|
|
388
395
|
],
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
396
|
+
'tags': {
|
|
397
|
+
'corporate': {
|
|
398
|
+
'description': 'Tumblr-owned corporate properties (not user blogs)',
|
|
399
|
+
'name': 'Corporate Properties',
|
|
393
400
|
}
|
|
394
401
|
},
|
|
395
402
|
},
|
|
396
403
|
{
|
|
397
|
-
|
|
398
|
-
|
|
404
|
+
'$schema': '/schemas/3.0.0-beta.1/adagents.json',
|
|
405
|
+
'authorized_agents': [
|
|
399
406
|
{
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
407
|
+
'authorization_type': 'publisher_properties',
|
|
408
|
+
'authorized_for': 'CNN CTV properties via publisher authorization',
|
|
409
|
+
'publisher_properties': [
|
|
403
410
|
{
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
411
|
+
'property_ids': ['cnn_ctv_app'],
|
|
412
|
+
'publisher_domain': 'cnn.com',
|
|
413
|
+
'selection_type': 'by_id',
|
|
407
414
|
}
|
|
408
415
|
],
|
|
409
|
-
|
|
416
|
+
'url': 'https://agent.example/api',
|
|
410
417
|
},
|
|
411
418
|
{
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
419
|
+
'authorization_type': 'publisher_properties',
|
|
420
|
+
'authorized_for': 'All CTV properties from multiple publishers',
|
|
421
|
+
'publisher_properties': [
|
|
415
422
|
{
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
423
|
+
'property_tags': ['ctv'],
|
|
424
|
+
'publisher_domain': 'cnn.com',
|
|
425
|
+
'selection_type': 'by_tag',
|
|
419
426
|
},
|
|
420
427
|
{
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
428
|
+
'property_tags': ['ctv'],
|
|
429
|
+
'publisher_domain': 'espn.com',
|
|
430
|
+
'selection_type': 'by_tag',
|
|
424
431
|
},
|
|
425
432
|
],
|
|
426
|
-
|
|
433
|
+
'url': 'https://agent.example/api',
|
|
427
434
|
},
|
|
428
435
|
],
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
436
|
+
'contact': {
|
|
437
|
+
'domain': 'agent.example',
|
|
438
|
+
'email': 'sales@agent.example',
|
|
439
|
+
'name': 'Example Third-Party Sales Agent',
|
|
433
440
|
},
|
|
434
|
-
|
|
441
|
+
'last_updated': '2025-01-10T17:00:00Z',
|
|
435
442
|
},
|
|
436
443
|
{
|
|
437
|
-
|
|
438
|
-
|
|
444
|
+
'$schema': '/schemas/3.0.0-beta.1/adagents.json',
|
|
445
|
+
'authorized_agents': [
|
|
439
446
|
{
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
447
|
+
'authorization_type': 'property_tags',
|
|
448
|
+
'authorized_for': 'All news properties',
|
|
449
|
+
'property_tags': ['news'],
|
|
450
|
+
'url': 'https://sales.news.example.com',
|
|
444
451
|
}
|
|
445
452
|
],
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
453
|
+
'contact': {
|
|
454
|
+
'domain': 'news.example.com',
|
|
455
|
+
'email': 'adops@news.example.com',
|
|
456
|
+
'name': 'Premium News Publisher',
|
|
450
457
|
},
|
|
451
|
-
|
|
452
|
-
|
|
458
|
+
'last_updated': '2025-01-10T18:00:00Z',
|
|
459
|
+
'properties': [
|
|
453
460
|
{
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
461
|
+
'identifiers': [{'type': 'domain', 'value': 'news.example.com'}],
|
|
462
|
+
'name': 'News Example',
|
|
463
|
+
'property_type': 'website',
|
|
464
|
+
'publisher_domain': 'news.example.com',
|
|
465
|
+
'tags': ['premium', 'news'],
|
|
459
466
|
}
|
|
460
467
|
],
|
|
461
|
-
|
|
468
|
+
'property_features': [
|
|
462
469
|
{
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
470
|
+
'features': ['carbon_score', 'sustainability_grade'],
|
|
471
|
+
'name': 'Scope3',
|
|
472
|
+
'publisher_id': 'pub_news_12345',
|
|
473
|
+
'url': 'https://api.scope3.com',
|
|
467
474
|
},
|
|
468
475
|
{
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
476
|
+
'features': [
|
|
477
|
+
'tag_certified_against_fraud',
|
|
478
|
+
'tag_brand_safety_certified',
|
|
472
479
|
],
|
|
473
|
-
|
|
474
|
-
|
|
480
|
+
'name': 'TAG',
|
|
481
|
+
'url': 'https://api.tagtoday.net',
|
|
475
482
|
},
|
|
476
483
|
{
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
484
|
+
'features': ['gdpr_compliant', 'tcf_registered', 'ccpa_compliant'],
|
|
485
|
+
'name': 'OneTrust',
|
|
486
|
+
'publisher_id': 'ot_news_67890',
|
|
487
|
+
'url': 'https://api.onetrust.com',
|
|
481
488
|
},
|
|
482
489
|
],
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
490
|
+
'tags': {
|
|
491
|
+
'news': {
|
|
492
|
+
'description': 'News and journalism content',
|
|
493
|
+
'name': 'News Properties',
|
|
487
494
|
},
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
495
|
+
'premium': {
|
|
496
|
+
'description': 'High-quality, brand-safe properties',
|
|
497
|
+
'name': 'Premium Properties',
|
|
491
498
|
},
|
|
492
499
|
},
|
|
493
500
|
},
|
|
494
501
|
],
|
|
495
|
-
title=
|
|
502
|
+
title='Authorized Sales Agents',
|
|
496
503
|
),
|
|
497
504
|
]
|