adcp 2.18.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 +87 -1
- 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 -18
- adcp/types/_generated.py +419 -44
- adcp/types/aliases.py +13 -20
- adcp/types/base.py +1 -1
- adcp/types/generated_poc/adagents.py +103 -6
- 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 +1 -1
- adcp/types/generated_poc/core/assets/audio_asset.py +1 -1
- adcp/types/generated_poc/core/assets/css_asset.py +1 -1
- adcp/types/generated_poc/core/assets/daast_asset.py +1 -1
- adcp/types/generated_poc/core/assets/html_asset.py +1 -1
- adcp/types/generated_poc/core/assets/image_asset.py +1 -1
- adcp/types/generated_poc/core/assets/javascript_asset.py +1 -1
- adcp/types/generated_poc/core/assets/text_asset.py +1 -1
- adcp/types/generated_poc/core/assets/url_asset.py +1 -1
- adcp/types/generated_poc/core/assets/vast_asset.py +1 -1
- adcp/types/generated_poc/core/assets/video_asset.py +1 -1
- adcp/types/generated_poc/core/assets/webhook_asset.py +1 -1
- adcp/types/generated_poc/core/async_response_data.py +1 -1
- adcp/types/generated_poc/core/brand_manifest.py +68 -5
- adcp/types/generated_poc/core/brand_manifest_ref.py +1 -1
- adcp/types/generated_poc/core/context.py +1 -1
- adcp/types/generated_poc/core/creative_asset.py +8 -7
- adcp/types/generated_poc/core/creative_assignment.py +1 -1
- adcp/types/generated_poc/core/creative_filters.py +4 -14
- adcp/types/generated_poc/core/creative_manifest.py +1 -1
- adcp/types/generated_poc/core/creative_policy.py +1 -1
- adcp/types/generated_poc/core/delivery_metrics.py +1 -1
- adcp/types/generated_poc/core/deployment.py +1 -1
- adcp/types/generated_poc/core/destination.py +1 -1
- adcp/types/generated_poc/core/error.py +1 -1
- adcp/types/generated_poc/core/ext.py +1 -1
- adcp/types/generated_poc/core/format.py +6 -5
- adcp/types/generated_poc/core/format_id.py +1 -1
- adcp/types/generated_poc/core/frequency_cap.py +1 -1
- adcp/types/generated_poc/core/identifier.py +27 -0
- adcp/types/generated_poc/core/mcp_webhook_payload.py +1 -1
- adcp/types/generated_poc/core/measurement.py +1 -1
- adcp/types/generated_poc/core/media_buy.py +1 -1
- 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 +1 -1
- adcp/types/generated_poc/core/performance_feedback.py +1 -1
- adcp/types/generated_poc/core/placement.py +1 -1
- adcp/types/generated_poc/core/pricing_option.py +8 -14
- adcp/types/generated_poc/core/product.py +1 -1
- adcp/types/generated_poc/core/product_allocation.py +48 -0
- adcp/types/generated_poc/core/product_filters.py +72 -7
- adcp/types/generated_poc/core/promoted_offerings.py +12 -21
- adcp/types/generated_poc/core/promoted_products.py +1 -1
- adcp/types/generated_poc/core/property.py +1 -1
- adcp/types/generated_poc/core/property_id.py +1 -1
- adcp/types/generated_poc/core/property_list_ref.py +26 -0
- adcp/types/generated_poc/core/property_tag.py +1 -1
- adcp/types/generated_poc/core/proposal.py +64 -0
- adcp/types/generated_poc/core/protocol_envelope.py +1 -1
- adcp/types/generated_poc/core/publisher_property_selector.py +1 -1
- adcp/types/generated_poc/core/push_notification_config.py +1 -1
- adcp/types/generated_poc/core/reporting_capabilities.py +1 -1
- adcp/types/generated_poc/core/reporting_webhook.py +70 -0
- adcp/types/generated_poc/core/response.py +1 -1
- adcp/types/generated_poc/core/signal_filters.py +1 -1
- adcp/types/generated_poc/core/start_timing.py +4 -4
- adcp/types/generated_poc/core/sub_asset.py +1 -1
- adcp/types/generated_poc/core/targeting.py +55 -14
- adcp/types/generated_poc/creative/list_creative_formats_request.py +1 -1
- adcp/types/generated_poc/creative/list_creative_formats_response.py +1 -1
- adcp/types/generated_poc/creative/preview_creative_request.py +1 -1
- adcp/types/generated_poc/creative/preview_creative_response.py +3 -2
- adcp/types/generated_poc/creative/preview_render.py +1 -1
- adcp/types/generated_poc/enums/adcp_domain.py +3 -1
- adcp/types/generated_poc/enums/asset_content_type.py +1 -1
- adcp/types/generated_poc/enums/auth_scheme.py +1 -1
- adcp/types/generated_poc/enums/available_metric.py +1 -1
- adcp/types/generated_poc/enums/channels.py +18 -8
- adcp/types/generated_poc/enums/co_branding_requirement.py +1 -1
- adcp/types/generated_poc/enums/creative_action.py +1 -1
- adcp/types/generated_poc/enums/creative_agent_capability.py +1 -1
- adcp/types/generated_poc/enums/creative_sort_field.py +1 -1
- adcp/types/generated_poc/enums/creative_status.py +2 -1
- adcp/types/generated_poc/enums/daast_tracking_event.py +1 -1
- adcp/types/generated_poc/enums/daast_version.py +1 -1
- adcp/types/generated_poc/enums/delivery_type.py +1 -1
- adcp/types/generated_poc/enums/dimension_unit.py +1 -1
- adcp/types/generated_poc/enums/feed_format.py +1 -1
- adcp/types/generated_poc/enums/feedback_source.py +1 -1
- adcp/types/generated_poc/enums/format_category.py +1 -1
- adcp/types/generated_poc/enums/format_id_parameter.py +1 -1
- adcp/types/generated_poc/enums/frequency_cap_scope.py +1 -1
- adcp/types/generated_poc/enums/geo_level.py +14 -0
- adcp/types/generated_poc/enums/history_entry_type.py +1 -1
- adcp/types/generated_poc/enums/http_method.py +1 -1
- adcp/types/generated_poc/enums/identifier_types.py +1 -1
- adcp/types/generated_poc/enums/javascript_module_type.py +1 -1
- adcp/types/generated_poc/enums/landing_page_requirement.py +1 -1
- adcp/types/generated_poc/enums/markdown_flavor.py +1 -1
- adcp/types/generated_poc/enums/media_buy_status.py +1 -1
- adcp/types/generated_poc/enums/metric_type.py +1 -1
- adcp/types/generated_poc/enums/metro_system.py +15 -0
- adcp/types/generated_poc/enums/notification_type.py +1 -1
- adcp/types/generated_poc/enums/pacing.py +1 -1
- adcp/types/generated_poc/enums/postal_system.py +19 -0
- adcp/types/generated_poc/enums/preview_output_format.py +1 -1
- adcp/types/generated_poc/enums/pricing_model.py +1 -1
- adcp/types/generated_poc/enums/property_type.py +2 -1
- adcp/types/generated_poc/enums/publisher_identifier_types.py +1 -1
- adcp/types/generated_poc/enums/reporting_frequency.py +1 -1
- adcp/types/generated_poc/enums/signal_catalog_type.py +1 -1
- adcp/types/generated_poc/enums/sort_direction.py +1 -1
- adcp/types/generated_poc/enums/task_status.py +1 -1
- adcp/types/generated_poc/enums/task_type.py +7 -1
- adcp/types/generated_poc/enums/update_frequency.py +1 -1
- adcp/types/generated_poc/enums/url_asset_type.py +1 -1
- adcp/types/generated_poc/enums/validation_mode.py +1 -1
- adcp/types/generated_poc/enums/vast_tracking_event.py +1 -1
- adcp/types/generated_poc/enums/vast_version.py +1 -1
- adcp/types/generated_poc/enums/webhook_response_type.py +1 -1
- adcp/types/generated_poc/enums/webhook_security_method.py +1 -1
- adcp/types/generated_poc/extensions/__init__.py +3 -0
- adcp/types/generated_poc/extensions/extension_meta.py +58 -0
- adcp/types/generated_poc/media_buy/build_creative_request.py +1 -1
- adcp/types/generated_poc/media_buy/build_creative_response.py +1 -1
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +1 -1
- 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 +1 -1
- adcp/types/generated_poc/media_buy/create_media_buy_request.py +54 -26
- adcp/types/generated_poc/media_buy/create_media_buy_response.py +1 -1
- adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +1 -1
- adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +1 -1
- adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +1 -1
- adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +1 -1
- adcp/types/generated_poc/media_buy/get_products_async_response_working.py +1 -1
- adcp/types/generated_poc/media_buy/get_products_request.py +18 -3
- adcp/types/generated_poc/media_buy/get_products_response.py +14 -2
- adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +1 -1
- adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +2 -2
- adcp/types/generated_poc/media_buy/list_creative_formats_request.py +1 -1
- adcp/types/generated_poc/media_buy/list_creative_formats_response.py +1 -1
- adcp/types/generated_poc/media_buy/list_creatives_request.py +2 -2
- adcp/types/generated_poc/media_buy/list_creatives_response.py +7 -10
- adcp/types/generated_poc/media_buy/package_request.py +15 -6
- adcp/types/generated_poc/media_buy/package_update.py +119 -0
- adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +1 -1
- adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +1 -1
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +1 -1
- 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 +1 -1
- adcp/types/generated_poc/media_buy/sync_creatives_request.py +1 -1
- adcp/types/generated_poc/media_buy/sync_creatives_response.py +1 -1
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +1 -1
- 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 +1 -1
- adcp/types/generated_poc/media_buy/update_media_buy_request.py +20 -108
- adcp/types/generated_poc/media_buy/update_media_buy_response.py +1 -1
- adcp/types/generated_poc/pricing_options/cpc_option.py +35 -10
- adcp/types/generated_poc/pricing_options/cpcv_option.py +35 -10
- adcp/types/generated_poc/pricing_options/{cpm_auction_option.py → cpm_option.py} +23 -19
- adcp/types/generated_poc/pricing_options/cpp_option.py +39 -16
- adcp/types/generated_poc/pricing_options/cpv_option.py +37 -18
- adcp/types/generated_poc/pricing_options/flat_rate_option.py +45 -39
- adcp/types/generated_poc/pricing_options/{vcpm_auction_option.py → vcpm_option.py} +23 -14
- adcp/types/generated_poc/property/__init__.py +3 -0
- adcp/types/generated_poc/property/base_property_source.py +86 -0
- adcp/types/generated_poc/property/create_property_list_request.py +43 -0
- adcp/types/generated_poc/property/create_property_list_response.py +27 -0
- adcp/types/generated_poc/property/delete_property_list_request.py +22 -0
- adcp/types/generated_poc/property/delete_property_list_response.py +21 -0
- adcp/types/generated_poc/property/feature_requirement.py +42 -0
- adcp/types/generated_poc/property/get_property_list_request.py +34 -0
- adcp/types/generated_poc/property/get_property_list_response.py +61 -0
- adcp/types/generated_poc/property/list_property_lists_request.py +29 -0
- adcp/types/generated_poc/property/list_property_lists_response.py +39 -0
- adcp/types/generated_poc/property/property_error.py +33 -0
- adcp/types/generated_poc/property/property_feature.py +22 -0
- adcp/types/generated_poc/property/property_feature_definition.py +80 -0
- adcp/types/generated_poc/property/property_list.py +62 -0
- adcp/types/generated_poc/property/property_list_changed_webhook.py +51 -0
- adcp/types/generated_poc/property/property_list_filters.py +47 -0
- adcp/types/generated_poc/property/update_property_list_request.py +46 -0
- adcp/types/generated_poc/property/update_property_list_response.py +21 -0
- 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 +18 -5
- adcp/types/generated_poc/signals/activate_signal_request.py +1 -1
- adcp/types/generated_poc/signals/activate_signal_response.py +1 -1
- adcp/types/generated_poc/signals/get_signals_request.py +1 -1
- adcp/types/generated_poc/signals/get_signals_response.py +1 -1
- 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.18.0.dist-info → adcp-3.0.0.dist-info}/METADATA +1 -1
- adcp-3.0.0.dist-info/RECORD +264 -0
- {adcp-2.18.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_fixed_option.py +0 -43
- adcp/types/generated_poc/pricing_options/vcpm_fixed_option.py +0 -47
- adcp-2.18.0.dist-info/RECORD +0 -195
- {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/entry_points.txt +0 -0
- {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/licenses/LICENSE +0 -0
- {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: property/get_property_list_response.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 ..core import identifier
|
|
14
|
+
from . import property_list
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class Pagination(AdCPBaseModel):
|
|
18
|
+
model_config = ConfigDict(
|
|
19
|
+
extra='forbid',
|
|
20
|
+
)
|
|
21
|
+
cursor: Annotated[str | None, Field(description='Cursor for next page')] = None
|
|
22
|
+
has_more: Annotated[bool | None, Field(description='Whether more results are available')] = None
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class GetPropertyListResponse(AdCPBaseModel):
|
|
26
|
+
model_config = ConfigDict(
|
|
27
|
+
extra='forbid',
|
|
28
|
+
)
|
|
29
|
+
cache_valid_until: Annotated[
|
|
30
|
+
AwareDatetime | None,
|
|
31
|
+
Field(
|
|
32
|
+
description='Cache expiration timestamp. Re-fetch the list after this time to get updated identifiers.'
|
|
33
|
+
),
|
|
34
|
+
] = None
|
|
35
|
+
coverage_gaps: Annotated[
|
|
36
|
+
dict[str, list[identifier.Identifier]] | None,
|
|
37
|
+
Field(
|
|
38
|
+
description="Properties included in the list despite missing feature data. Only present when a feature_requirement has if_not_covered='include'. Maps feature_id to list of identifiers not covered for that feature."
|
|
39
|
+
),
|
|
40
|
+
] = None
|
|
41
|
+
ext: ext_1.ExtensionObject | None = None
|
|
42
|
+
identifiers: Annotated[
|
|
43
|
+
list[identifier.Identifier] | None,
|
|
44
|
+
Field(
|
|
45
|
+
description='Resolved identifiers that passed filters (if resolve=true). Cache these locally for real-time use.'
|
|
46
|
+
),
|
|
47
|
+
] = None
|
|
48
|
+
list: Annotated[
|
|
49
|
+
property_list.PropertyList,
|
|
50
|
+
Field(description='The property list metadata (always returned)'),
|
|
51
|
+
]
|
|
52
|
+
pagination: Annotated[Pagination | None, Field(description='Pagination information')] = None
|
|
53
|
+
resolved_at: Annotated[
|
|
54
|
+
AwareDatetime | None, Field(description='When the list was resolved')
|
|
55
|
+
] = None
|
|
56
|
+
returned_count: Annotated[
|
|
57
|
+
int | None, Field(description='Number of identifiers returned in this response')
|
|
58
|
+
] = None
|
|
59
|
+
total_count: Annotated[
|
|
60
|
+
int | None, Field(description='Total number of identifiers in resolved list')
|
|
61
|
+
] = None
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: property/list_property_lists_request.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated
|
|
8
|
+
|
|
9
|
+
from adcp.types.base import AdCPBaseModel
|
|
10
|
+
from pydantic import ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
from ..core import context as context_1
|
|
13
|
+
from ..core import ext as ext_1
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class ListPropertyListsRequest(AdCPBaseModel):
|
|
17
|
+
model_config = ConfigDict(
|
|
18
|
+
extra='forbid',
|
|
19
|
+
)
|
|
20
|
+
context: context_1.ContextObject | None = None
|
|
21
|
+
cursor: Annotated[str | None, Field(description='Pagination cursor')] = None
|
|
22
|
+
ext: ext_1.ExtensionObject | None = None
|
|
23
|
+
max_results: Annotated[int | None, Field(description='Maximum lists to return', ge=1)] = 100
|
|
24
|
+
name_contains: Annotated[
|
|
25
|
+
str | None, Field(description='Filter to lists whose name contains this string')
|
|
26
|
+
] = None
|
|
27
|
+
principal: Annotated[
|
|
28
|
+
str | None, Field(description='Filter to lists owned by this principal')
|
|
29
|
+
] = None
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: property/list_property_lists_response.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated
|
|
8
|
+
|
|
9
|
+
from adcp.types.base import AdCPBaseModel
|
|
10
|
+
from pydantic import ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
from ..core import ext as ext_1
|
|
13
|
+
from . import property_list
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class Pagination(AdCPBaseModel):
|
|
17
|
+
model_config = ConfigDict(
|
|
18
|
+
extra='forbid',
|
|
19
|
+
)
|
|
20
|
+
cursor: Annotated[str | None, Field(description='Cursor for next page')] = None
|
|
21
|
+
has_more: Annotated[bool | None, Field(description='Whether more results are available')] = None
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class ListPropertyListsResponse(AdCPBaseModel):
|
|
25
|
+
model_config = ConfigDict(
|
|
26
|
+
extra='forbid',
|
|
27
|
+
)
|
|
28
|
+
ext: ext_1.ExtensionObject | None = None
|
|
29
|
+
lists: Annotated[
|
|
30
|
+
list[property_list.PropertyList],
|
|
31
|
+
Field(description='Array of property lists (metadata only, not resolved properties)'),
|
|
32
|
+
]
|
|
33
|
+
pagination: Annotated[Pagination | None, Field(description='Pagination information')] = None
|
|
34
|
+
returned_count: Annotated[
|
|
35
|
+
int | None, Field(description='Number of lists returned in this response')
|
|
36
|
+
] = None
|
|
37
|
+
total_count: Annotated[
|
|
38
|
+
int | None, Field(description='Total number of lists matching criteria')
|
|
39
|
+
] = None
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: property/property_error.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import Enum
|
|
8
|
+
from typing import Annotated
|
|
9
|
+
|
|
10
|
+
from adcp.types.base import AdCPBaseModel
|
|
11
|
+
from pydantic import ConfigDict, Field
|
|
12
|
+
|
|
13
|
+
from ..core import property as property_1
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class Code(Enum):
|
|
17
|
+
PROPERTY_NOT_FOUND = 'PROPERTY_NOT_FOUND'
|
|
18
|
+
PROPERTY_NOT_MONITORED = 'PROPERTY_NOT_MONITORED'
|
|
19
|
+
LIST_NOT_FOUND = 'LIST_NOT_FOUND'
|
|
20
|
+
LIST_ACCESS_DENIED = 'LIST_ACCESS_DENIED'
|
|
21
|
+
METHODOLOGY_NOT_SUPPORTED = 'METHODOLOGY_NOT_SUPPORTED'
|
|
22
|
+
JURISDICTION_NOT_SUPPORTED = 'JURISDICTION_NOT_SUPPORTED'
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class PropertyError(AdCPBaseModel):
|
|
26
|
+
model_config = ConfigDict(
|
|
27
|
+
extra='forbid',
|
|
28
|
+
)
|
|
29
|
+
code: Annotated[Code, Field(description='Error code')]
|
|
30
|
+
message: Annotated[str, Field(description='Human-readable error message')]
|
|
31
|
+
property: Annotated[
|
|
32
|
+
property_1.Property | None, Field(description='The property that caused the error')
|
|
33
|
+
] = None
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: property/property_feature.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated
|
|
8
|
+
|
|
9
|
+
from adcp.types.base import AdCPBaseModel
|
|
10
|
+
from pydantic import ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class PropertyFeature(AdCPBaseModel):
|
|
14
|
+
model_config = ConfigDict(
|
|
15
|
+
extra='forbid',
|
|
16
|
+
)
|
|
17
|
+
feature_id: Annotated[str, Field(description='Identifier for the feature being assessed')]
|
|
18
|
+
source: Annotated[
|
|
19
|
+
str | None,
|
|
20
|
+
Field(description='Source of the feature data (e.g., app_store_privacy_label, tcf_string)'),
|
|
21
|
+
] = None
|
|
22
|
+
value: Annotated[str, Field(description='The feature value')]
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: property/property_feature_definition.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import Enum
|
|
8
|
+
from typing import Annotated
|
|
9
|
+
|
|
10
|
+
from adcp.types.base import AdCPBaseModel
|
|
11
|
+
from pydantic import AnyUrl, ConfigDict, Field
|
|
12
|
+
|
|
13
|
+
from ..core import ext as ext_1
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class Coverage(AdCPBaseModel):
|
|
17
|
+
model_config = ConfigDict(
|
|
18
|
+
extra='forbid',
|
|
19
|
+
)
|
|
20
|
+
countries: Annotated[
|
|
21
|
+
list[str] | None, Field(description='Countries where this feature is available')
|
|
22
|
+
] = None
|
|
23
|
+
property_types: Annotated[
|
|
24
|
+
list[str] | None, Field(description='Property types this feature applies to')
|
|
25
|
+
] = None
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class Range(AdCPBaseModel):
|
|
29
|
+
model_config = ConfigDict(
|
|
30
|
+
extra='forbid',
|
|
31
|
+
)
|
|
32
|
+
max: Annotated[float, Field(description='Maximum value')]
|
|
33
|
+
min: Annotated[float, Field(description='Minimum value')]
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class Type(Enum):
|
|
37
|
+
binary = 'binary'
|
|
38
|
+
quantitative = 'quantitative'
|
|
39
|
+
categorical = 'categorical'
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class PropertyFeatureDefinition(AdCPBaseModel):
|
|
43
|
+
model_config = ConfigDict(
|
|
44
|
+
extra='forbid',
|
|
45
|
+
)
|
|
46
|
+
allowed_values: Annotated[
|
|
47
|
+
list[str] | None, Field(description='For categorical features, the set of valid values')
|
|
48
|
+
] = None
|
|
49
|
+
coverage: Annotated[
|
|
50
|
+
Coverage | None, Field(description='What this feature covers (empty arrays = all)')
|
|
51
|
+
] = None
|
|
52
|
+
description: Annotated[
|
|
53
|
+
str | None, Field(description='Description of what this feature measures or represents')
|
|
54
|
+
] = None
|
|
55
|
+
ext: ext_1.ExtensionObject | None = None
|
|
56
|
+
feature_id: Annotated[
|
|
57
|
+
str,
|
|
58
|
+
Field(
|
|
59
|
+
description="Unique identifier for this feature (e.g., 'consent_quality', 'carbon_score', 'coppa_certified')"
|
|
60
|
+
),
|
|
61
|
+
]
|
|
62
|
+
methodology_url: Annotated[
|
|
63
|
+
AnyUrl,
|
|
64
|
+
Field(
|
|
65
|
+
description='URL to documentation explaining how this feature is calculated/measured'
|
|
66
|
+
),
|
|
67
|
+
]
|
|
68
|
+
methodology_version: Annotated[
|
|
69
|
+
str | None, Field(description='Version identifier for the methodology (for audit trails)')
|
|
70
|
+
] = None
|
|
71
|
+
name: Annotated[str, Field(description='Human-readable name for the feature')]
|
|
72
|
+
range: Annotated[
|
|
73
|
+
Range | None, Field(description='For quantitative features, the valid range of values')
|
|
74
|
+
] = None
|
|
75
|
+
type: Annotated[
|
|
76
|
+
Type,
|
|
77
|
+
Field(
|
|
78
|
+
description='The type of values this feature produces: binary (true/false), quantitative (numeric range), categorical (enumerated values)'
|
|
79
|
+
),
|
|
80
|
+
]
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: property/property_list.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 AnyUrl, AwareDatetime, ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
from ..core import brand_manifest as brand_manifest_1
|
|
13
|
+
from . import base_property_source, property_list_filters
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class PropertyList(AdCPBaseModel):
|
|
17
|
+
model_config = ConfigDict(
|
|
18
|
+
extra='forbid',
|
|
19
|
+
)
|
|
20
|
+
base_properties: Annotated[
|
|
21
|
+
list[base_property_source.BasePropertySource] | None,
|
|
22
|
+
Field(
|
|
23
|
+
description="Array of property sources to evaluate. Each entry is a discriminated union: publisher_tags (publisher_domain + tags), publisher_ids (publisher_domain + property_ids), or identifiers (direct identifiers). If omitted, queries the agent's entire property database."
|
|
24
|
+
),
|
|
25
|
+
] = None
|
|
26
|
+
brand_manifest: Annotated[
|
|
27
|
+
brand_manifest_1.BrandManifest | None,
|
|
28
|
+
Field(description='Brand identity used to automatically apply appropriate rules'),
|
|
29
|
+
] = None
|
|
30
|
+
cache_duration_hours: Annotated[
|
|
31
|
+
int | None,
|
|
32
|
+
Field(
|
|
33
|
+
description='Recommended cache duration for resolved list. Consumers should re-fetch after this period.',
|
|
34
|
+
ge=1,
|
|
35
|
+
),
|
|
36
|
+
] = 24
|
|
37
|
+
created_at: Annotated[AwareDatetime | None, Field(description='When the list was created')] = (
|
|
38
|
+
None
|
|
39
|
+
)
|
|
40
|
+
description: Annotated[str | None, Field(description="Description of the list's purpose")] = (
|
|
41
|
+
None
|
|
42
|
+
)
|
|
43
|
+
filters: Annotated[
|
|
44
|
+
property_list_filters.PropertyListFilters | None,
|
|
45
|
+
Field(description='Dynamic filters applied when resolving the list'),
|
|
46
|
+
] = None
|
|
47
|
+
list_id: Annotated[str, Field(description='Unique identifier for this property list')]
|
|
48
|
+
name: Annotated[str, Field(description='Human-readable name for the list')]
|
|
49
|
+
principal: Annotated[
|
|
50
|
+
str | None, Field(description='Principal identity that owns this list')
|
|
51
|
+
] = None
|
|
52
|
+
property_count: Annotated[
|
|
53
|
+
int | None,
|
|
54
|
+
Field(description='Number of properties in the resolved list (at time of last resolution)'),
|
|
55
|
+
] = None
|
|
56
|
+
updated_at: Annotated[
|
|
57
|
+
AwareDatetime | None, Field(description='When the list was last modified')
|
|
58
|
+
] = None
|
|
59
|
+
webhook_url: Annotated[
|
|
60
|
+
AnyUrl | None,
|
|
61
|
+
Field(description='URL to receive notifications when the resolved list changes'),
|
|
62
|
+
] = None
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: property/property_list_changed_webhook.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 AwareDatetime, ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
from ..core import ext as ext_1
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class ChangeSummary(AdCPBaseModel):
|
|
16
|
+
model_config = ConfigDict(
|
|
17
|
+
extra='forbid',
|
|
18
|
+
)
|
|
19
|
+
properties_added: Annotated[
|
|
20
|
+
int | None, Field(description='Number of properties added since last resolution')
|
|
21
|
+
] = None
|
|
22
|
+
properties_removed: Annotated[
|
|
23
|
+
int | None, Field(description='Number of properties removed since last resolution')
|
|
24
|
+
] = None
|
|
25
|
+
total_properties: Annotated[
|
|
26
|
+
int | None, Field(description='Total properties in the resolved list')
|
|
27
|
+
] = None
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class PropertyListChangedWebhook(AdCPBaseModel):
|
|
31
|
+
model_config = ConfigDict(
|
|
32
|
+
extra='forbid',
|
|
33
|
+
)
|
|
34
|
+
cache_valid_until: Annotated[
|
|
35
|
+
AwareDatetime | None,
|
|
36
|
+
Field(description='When the consumer should refresh from the governance agent'),
|
|
37
|
+
] = None
|
|
38
|
+
change_summary: Annotated[
|
|
39
|
+
ChangeSummary | None, Field(description='Summary of changes to the resolved list')
|
|
40
|
+
] = None
|
|
41
|
+
event: Annotated[Literal['property_list_changed'], Field(description='The event type')]
|
|
42
|
+
ext: ext_1.ExtensionObject | None = None
|
|
43
|
+
list_id: Annotated[str, Field(description='ID of the property list that changed')]
|
|
44
|
+
list_name: Annotated[str | None, Field(description='Name of the property list')] = None
|
|
45
|
+
resolved_at: Annotated[AwareDatetime, Field(description='When the list was re-resolved')]
|
|
46
|
+
signature: Annotated[
|
|
47
|
+
str,
|
|
48
|
+
Field(
|
|
49
|
+
description="Cryptographic signature of the webhook payload, signed with the agent's private key. Recipients MUST verify this signature."
|
|
50
|
+
),
|
|
51
|
+
]
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: property/property_list_filters.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated
|
|
8
|
+
|
|
9
|
+
from adcp.types.base import AdCPBaseModel
|
|
10
|
+
from pydantic import ConfigDict, Field, RootModel
|
|
11
|
+
|
|
12
|
+
from ..core import identifier
|
|
13
|
+
from ..enums import channels, property_type
|
|
14
|
+
from . import feature_requirement
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class CountriesAllItem(RootModel[str]):
|
|
18
|
+
root: Annotated[str, Field(pattern='^[A-Z]{2}$')]
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class PropertyListFilters(AdCPBaseModel):
|
|
22
|
+
model_config = ConfigDict(
|
|
23
|
+
extra='forbid',
|
|
24
|
+
)
|
|
25
|
+
channels_any: Annotated[
|
|
26
|
+
list[channels.MediaChannel],
|
|
27
|
+
Field(description='Property must support ANY of the listed channels. Required.'),
|
|
28
|
+
]
|
|
29
|
+
countries_all: Annotated[
|
|
30
|
+
list[CountriesAllItem],
|
|
31
|
+
Field(
|
|
32
|
+
description='Property must have feature data for ALL listed countries (ISO codes). Required.'
|
|
33
|
+
),
|
|
34
|
+
]
|
|
35
|
+
exclude_identifiers: Annotated[
|
|
36
|
+
list[identifier.Identifier] | None,
|
|
37
|
+
Field(description='Identifiers to always exclude from results'),
|
|
38
|
+
] = None
|
|
39
|
+
feature_requirements: Annotated[
|
|
40
|
+
list[feature_requirement.FeatureRequirement] | None,
|
|
41
|
+
Field(
|
|
42
|
+
description='Feature-based requirements. Property must pass ALL requirements (AND logic).'
|
|
43
|
+
),
|
|
44
|
+
] = None
|
|
45
|
+
property_types: Annotated[
|
|
46
|
+
list[property_type.PropertyType] | None, Field(description='Filter to these property types')
|
|
47
|
+
] = None
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: property/update_property_list_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 AnyUrl, ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
from ..core import brand_manifest as brand_manifest_1
|
|
13
|
+
from ..core import context as context_1
|
|
14
|
+
from ..core import ext as ext_1
|
|
15
|
+
from . import base_property_source, property_list_filters
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class UpdatePropertyListRequest(AdCPBaseModel):
|
|
19
|
+
model_config = ConfigDict(
|
|
20
|
+
extra='forbid',
|
|
21
|
+
)
|
|
22
|
+
base_properties: Annotated[
|
|
23
|
+
list[base_property_source.BasePropertySource] | None,
|
|
24
|
+
Field(
|
|
25
|
+
description='Complete replacement for the base properties list (not a patch). Each entry is a discriminated union: publisher_tags (publisher_domain + tags), publisher_ids (publisher_domain + property_ids), or identifiers (direct identifiers).'
|
|
26
|
+
),
|
|
27
|
+
] = None
|
|
28
|
+
brand_manifest: Annotated[
|
|
29
|
+
brand_manifest_1.BrandManifest | None,
|
|
30
|
+
Field(description='Update brand identity and requirements'),
|
|
31
|
+
] = None
|
|
32
|
+
context: context_1.ContextObject | None = None
|
|
33
|
+
description: Annotated[str | None, Field(description='New description')] = None
|
|
34
|
+
ext: ext_1.ExtensionObject | None = None
|
|
35
|
+
filters: Annotated[
|
|
36
|
+
property_list_filters.PropertyListFilters | None,
|
|
37
|
+
Field(description='Complete replacement for the filters (not a patch)'),
|
|
38
|
+
] = None
|
|
39
|
+
list_id: Annotated[str, Field(description='ID of the property list to update')]
|
|
40
|
+
name: Annotated[str | None, Field(description='New name for the list')] = None
|
|
41
|
+
webhook_url: Annotated[
|
|
42
|
+
AnyUrl | None,
|
|
43
|
+
Field(
|
|
44
|
+
description='Update the webhook URL for list change notifications (set to empty string to remove)'
|
|
45
|
+
),
|
|
46
|
+
] = None
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: property/update_property_list_response.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated
|
|
8
|
+
|
|
9
|
+
from adcp.types.base import AdCPBaseModel
|
|
10
|
+
from pydantic import ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
from ..core import ext as ext_1
|
|
13
|
+
from . import property_list
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class UpdatePropertyListResponse(AdCPBaseModel):
|
|
17
|
+
model_config = ConfigDict(
|
|
18
|
+
extra='forbid',
|
|
19
|
+
)
|
|
20
|
+
ext: ext_1.ExtensionObject | None = None
|
|
21
|
+
list: Annotated[property_list.PropertyList, Field(description='The updated property list')]
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: protocol/get_adcp_capabilities_request.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import Enum
|
|
8
|
+
from typing import Annotated
|
|
9
|
+
|
|
10
|
+
from adcp.types.base import AdCPBaseModel
|
|
11
|
+
from pydantic import ConfigDict, Field
|
|
12
|
+
|
|
13
|
+
from ..core import context as context_1
|
|
14
|
+
from ..core import ext as ext_1
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class Protocol(Enum):
|
|
18
|
+
media_buy = 'media_buy'
|
|
19
|
+
signals = 'signals'
|
|
20
|
+
sponsored_intelligence = 'sponsored_intelligence'
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class GetAdcpCapabilitiesRequest(AdCPBaseModel):
|
|
24
|
+
model_config = ConfigDict(
|
|
25
|
+
extra='allow',
|
|
26
|
+
)
|
|
27
|
+
context: context_1.ContextObject | None = None
|
|
28
|
+
ext: ext_1.ExtensionObject | None = None
|
|
29
|
+
protocols: Annotated[
|
|
30
|
+
list[Protocol] | None,
|
|
31
|
+
Field(
|
|
32
|
+
description='Specific protocols to query capabilities for. If omitted, returns capabilities for all supported protocols.'
|
|
33
|
+
),
|
|
34
|
+
] = None
|