adcp 2.18.0__py3-none-any.whl → 2.19.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/__init__.py +1 -1
- adcp/protocols/mcp.py +3 -1
- adcp/types/_ergonomic.py +0 -4
- adcp/types/_generated.py +85 -4
- adcp/types/generated_poc/adagents.py +239 -149
- adcp/types/generated_poc/core/activation_key.py +8 -8
- adcp/types/generated_poc/core/assets/audio_asset.py +5 -5
- 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 +7 -7
- 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 +55 -55
- 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 +13 -13
- adcp/types/generated_poc/core/creative_assignment.py +3 -3
- adcp/types/generated_poc/core/creative_filters.py +19 -19
- adcp/types/generated_poc/core/creative_manifest.py +2 -2
- 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 +67 -66
- 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 +27 -0
- 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 +7 -7
- 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 +2 -2
- adcp/types/generated_poc/core/product.py +20 -20
- adcp/types/generated_poc/core/product_filters.py +18 -18
- adcp/types/generated_poc/core/promoted_offerings.py +20 -20
- adcp/types/generated_poc/core/promoted_products.py +2 -2
- adcp/types/generated_poc/core/property.py +9 -9
- adcp/types/generated_poc/core/property_id.py +4 -4
- adcp/types/generated_poc/core/property_list_ref.py +26 -0
- adcp/types/generated_poc/core/property_tag.py +4 -4
- 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/response.py +4 -4
- adcp/types/generated_poc/core/signal_filters.py +5 -5
- adcp/types/generated_poc/core/start_timing.py +5 -5
- adcp/types/generated_poc/core/sub_asset.py +14 -14
- adcp/types/generated_poc/core/targeting.py +8 -8
- 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 +31 -30
- adcp/types/generated_poc/creative/preview_render.py +25 -25
- adcp/types/generated_poc/enums/adcp_domain.py +5 -3
- 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 +9 -9
- 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 +4 -4
- 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/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/notification_type.py +4 -4
- adcp/types/generated_poc/enums/pacing.py +3 -3
- 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 +7 -7
- 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/standard_format_ids.py +35 -35
- adcp/types/generated_poc/enums/task_status.py +9 -9
- adcp/types/generated_poc/enums/task_type.py +12 -6
- 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/__init__.py +3 -0
- adcp/types/generated_poc/extensions/extension_meta.py +50 -0
- 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 +25 -25
- adcp/types/generated_poc/media_buy/create_media_buy_response.py +7 -7
- 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 +10 -4
- adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +3 -3
- adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +7 -7
- 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 +24 -24
- adcp/types/generated_poc/media_buy/list_creatives_response.py +52 -52
- adcp/types/generated_poc/media_buy/package_request.py +16 -7
- 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 +7 -7
- adcp/types/generated_poc/media_buy/sync_creatives_response.py +15 -15
- 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 +37 -29
- adcp/types/generated_poc/media_buy/update_media_buy_response.py +7 -7
- adcp/types/generated_poc/pricing_options/cpc_option.py +8 -8
- adcp/types/generated_poc/pricing_options/cpcv_option.py +8 -8
- adcp/types/generated_poc/pricing_options/cpm_auction_option.py +13 -13
- adcp/types/generated_poc/pricing_options/cpm_fixed_option.py +8 -8
- adcp/types/generated_poc/pricing_options/cpp_option.py +13 -13
- adcp/types/generated_poc/pricing_options/cpv_option.py +12 -12
- adcp/types/generated_poc/pricing_options/flat_rate_option.py +15 -15
- adcp/types/generated_poc/pricing_options/vcpm_auction_option.py +13 -13
- adcp/types/generated_poc/pricing_options/vcpm_fixed_option.py +8 -8
- 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_features_request.py +25 -0
- adcp/types/generated_poc/property/list_property_features_response.py +24 -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/protocols/adcp_extension.py +26 -10
- 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-2.18.0.dist-info → adcp-2.19.0.dist-info}/METADATA +1 -1
- adcp-2.19.0.dist-info/RECORD +220 -0
- adcp-2.18.0.dist-info/RECORD +0 -195
- {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/WHEEL +0 -0
- {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/entry_points.txt +0 -0
- {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/licenses/LICENSE +0 -0
- {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: property/property_error.json
|
|
3
|
+
# timestamp: 2026-01-14T17:08:13+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-14T17:08:13+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-14T17:08:13+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-14T17:08:13+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-14T17:08:13+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-14T17:08:13+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.AdvertisingChannels],
|
|
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-14T17:08:13+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-14T17:08:13+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")]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: protocols/adcp_extension.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-14T17:08:13+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -8,30 +8,46 @@ from enum import Enum
|
|
|
8
8
|
from typing import Annotated
|
|
9
9
|
|
|
10
10
|
from adcp.types.base import AdCPBaseModel
|
|
11
|
-
from pydantic import ConfigDict, Field
|
|
11
|
+
from pydantic import ConfigDict, Field, RootModel
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class ExtensionsSupportedItem(RootModel[str]):
|
|
15
|
+
root: Annotated[
|
|
16
|
+
str,
|
|
17
|
+
Field(
|
|
18
|
+
description="Extension namespace (e.g., 'sustainability'). Must be lowercase alphanumeric with underscores.",
|
|
19
|
+
pattern="^[a-z][a-z0-9_]*$",
|
|
20
|
+
),
|
|
21
|
+
]
|
|
12
22
|
|
|
13
23
|
|
|
14
24
|
class ProtocolsSupportedEnum(Enum):
|
|
15
|
-
media_buy =
|
|
16
|
-
creative =
|
|
17
|
-
signals =
|
|
25
|
+
media_buy = "media_buy"
|
|
26
|
+
creative = "creative"
|
|
27
|
+
signals = "signals"
|
|
18
28
|
|
|
19
29
|
|
|
20
|
-
class
|
|
30
|
+
class AdcpAgentCardExtensionParams(AdCPBaseModel):
|
|
21
31
|
model_config = ConfigDict(
|
|
22
|
-
extra=
|
|
32
|
+
extra="allow",
|
|
23
33
|
)
|
|
24
34
|
adcp_version: Annotated[
|
|
25
35
|
str,
|
|
26
36
|
Field(
|
|
27
|
-
description="Semantic version of the AdCP specification this agent implements (e.g., '2.
|
|
28
|
-
pattern=
|
|
37
|
+
description="Semantic version of the AdCP specification this agent implements (e.g., '2.5.0'). Extension schemas are versioned along with the AdCP spec.",
|
|
38
|
+
pattern="^\\d+\\.\\d+\\.\\d+$",
|
|
29
39
|
),
|
|
30
40
|
]
|
|
41
|
+
extensions_supported: Annotated[
|
|
42
|
+
list[ExtensionsSupportedItem] | None,
|
|
43
|
+
Field(
|
|
44
|
+
description="Typed extensions this agent supports. Each extension has a formal schema in /schemas/extensions/. Extension version is determined by adcp_version."
|
|
45
|
+
),
|
|
46
|
+
] = None
|
|
31
47
|
protocols_supported: Annotated[
|
|
32
48
|
list[ProtocolsSupportedEnum],
|
|
33
49
|
Field(
|
|
34
|
-
description=
|
|
50
|
+
description="AdCP protocol domains supported by this agent. At least one must be specified.",
|
|
35
51
|
min_length=1,
|
|
36
52
|
),
|
|
37
53
|
]
|
|
@@ -16,17 +16,17 @@ from ..core import ext as ext_1
|
|
|
16
16
|
|
|
17
17
|
class ActivateSignalRequest(AdCPBaseModel):
|
|
18
18
|
model_config = ConfigDict(
|
|
19
|
-
extra=
|
|
19
|
+
extra="allow",
|
|
20
20
|
)
|
|
21
21
|
context: context_1.ContextObject | None = None
|
|
22
22
|
deployments: Annotated[
|
|
23
23
|
list[destination.Destination],
|
|
24
24
|
Field(
|
|
25
|
-
description=
|
|
25
|
+
description="Target deployment(s) for activation. If the authenticated caller matches one of these deployment targets, activation keys will be included in the response.",
|
|
26
26
|
min_length=1,
|
|
27
27
|
),
|
|
28
28
|
]
|
|
29
29
|
ext: ext_1.ExtensionObject | None = None
|
|
30
30
|
signal_agent_segment_id: Annotated[
|
|
31
|
-
str, Field(description=
|
|
31
|
+
str, Field(description="The universal identifier for the signal to activate")
|
|
32
32
|
]
|
|
@@ -16,25 +16,25 @@ from ..core import ext as ext_1
|
|
|
16
16
|
|
|
17
17
|
class ActivateSignalResponse1(AdCPBaseModel):
|
|
18
18
|
model_config = ConfigDict(
|
|
19
|
-
extra=
|
|
19
|
+
extra="allow",
|
|
20
20
|
)
|
|
21
21
|
context: context_1.ContextObject | None = None
|
|
22
22
|
deployments: Annotated[
|
|
23
23
|
list[deployment.Deployment],
|
|
24
|
-
Field(description=
|
|
24
|
+
Field(description="Array of deployment results for each deployment target"),
|
|
25
25
|
]
|
|
26
26
|
ext: ext_1.ExtensionObject | None = None
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
class ActivateSignalResponse2(AdCPBaseModel):
|
|
30
30
|
model_config = ConfigDict(
|
|
31
|
-
extra=
|
|
31
|
+
extra="allow",
|
|
32
32
|
)
|
|
33
33
|
context: context_1.ContextObject | None = None
|
|
34
34
|
errors: Annotated[
|
|
35
35
|
list[error.Error],
|
|
36
36
|
Field(
|
|
37
|
-
description=
|
|
37
|
+
description="Array of errors explaining why activation failed (e.g., platform connectivity issues, signal definition problems, authentication failures)",
|
|
38
38
|
min_length=1,
|
|
39
39
|
),
|
|
40
40
|
]
|
|
@@ -45,7 +45,7 @@ class ActivateSignalResponse(RootModel[ActivateSignalResponse1 | ActivateSignalR
|
|
|
45
45
|
root: Annotated[
|
|
46
46
|
ActivateSignalResponse1 | ActivateSignalResponse2,
|
|
47
47
|
Field(
|
|
48
|
-
description=
|
|
49
|
-
title=
|
|
48
|
+
description="Response payload for activate_signal task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - the signal is either fully activated or not activated at all.",
|
|
49
|
+
title="Activate Signal Response",
|
|
50
50
|
),
|
|
51
51
|
]
|
|
@@ -16,20 +16,20 @@ from ..core import signal_filters
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
class Country(RootModel[str]):
|
|
19
|
-
root: Annotated[str, Field(pattern=
|
|
19
|
+
root: Annotated[str, Field(pattern="^[A-Z]{2}$")]
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
class DeliverTo(AdCPBaseModel):
|
|
23
23
|
model_config = ConfigDict(
|
|
24
|
-
extra=
|
|
24
|
+
extra="allow",
|
|
25
25
|
)
|
|
26
26
|
countries: Annotated[
|
|
27
|
-
list[Country], Field(description=
|
|
27
|
+
list[Country], Field(description="Countries where signals will be used (ISO codes)")
|
|
28
28
|
]
|
|
29
29
|
deployments: Annotated[
|
|
30
30
|
list[destination.Destination],
|
|
31
31
|
Field(
|
|
32
|
-
description=
|
|
32
|
+
description="List of deployment targets (DSPs, sales agents, etc.). If the authenticated caller matches one of these deployment targets, activation keys will be included in the response.",
|
|
33
33
|
min_length=1,
|
|
34
34
|
),
|
|
35
35
|
]
|
|
@@ -37,17 +37,17 @@ class DeliverTo(AdCPBaseModel):
|
|
|
37
37
|
|
|
38
38
|
class GetSignalsRequest(AdCPBaseModel):
|
|
39
39
|
model_config = ConfigDict(
|
|
40
|
-
extra=
|
|
40
|
+
extra="allow",
|
|
41
41
|
)
|
|
42
42
|
context: context_1.ContextObject | None = None
|
|
43
43
|
deliver_to: Annotated[
|
|
44
|
-
DeliverTo, Field(description=
|
|
44
|
+
DeliverTo, Field(description="Deployment targets where signals need to be activated")
|
|
45
45
|
]
|
|
46
46
|
ext: ext_1.ExtensionObject | None = None
|
|
47
47
|
filters: signal_filters.SignalFilters | None = None
|
|
48
48
|
max_results: Annotated[
|
|
49
|
-
int | None, Field(description=
|
|
49
|
+
int | None, Field(description="Maximum number of results to return", ge=1)
|
|
50
50
|
] = None
|
|
51
51
|
signal_spec: Annotated[
|
|
52
|
-
str, Field(description=
|
|
52
|
+
str, Field(description="Natural language description of the desired signals")
|
|
53
53
|
]
|
|
@@ -17,42 +17,42 @@ from ..enums import signal_catalog_type
|
|
|
17
17
|
|
|
18
18
|
class Pricing(AdCPBaseModel):
|
|
19
19
|
model_config = ConfigDict(
|
|
20
|
-
extra=
|
|
20
|
+
extra="allow",
|
|
21
21
|
)
|
|
22
|
-
cpm: Annotated[float, Field(description=
|
|
23
|
-
currency: Annotated[str, Field(description=
|
|
22
|
+
cpm: Annotated[float, Field(description="Cost per thousand impressions", ge=0.0)]
|
|
23
|
+
currency: Annotated[str, Field(description="Currency code", pattern="^[A-Z]{3}$")]
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
class Signal(AdCPBaseModel):
|
|
27
27
|
model_config = ConfigDict(
|
|
28
|
-
extra=
|
|
28
|
+
extra="allow",
|
|
29
29
|
)
|
|
30
30
|
coverage_percentage: Annotated[
|
|
31
|
-
float, Field(description=
|
|
31
|
+
float, Field(description="Percentage of audience coverage", ge=0.0, le=100.0)
|
|
32
32
|
]
|
|
33
|
-
data_provider: Annotated[str, Field(description=
|
|
33
|
+
data_provider: Annotated[str, Field(description="Name of the data provider")]
|
|
34
34
|
deployments: Annotated[
|
|
35
|
-
list[deployment.Deployment], Field(description=
|
|
35
|
+
list[deployment.Deployment], Field(description="Array of deployment targets")
|
|
36
36
|
]
|
|
37
|
-
description: Annotated[str, Field(description=
|
|
38
|
-
name: Annotated[str, Field(description=
|
|
39
|
-
pricing: Annotated[Pricing, Field(description=
|
|
40
|
-
signal_agent_segment_id: Annotated[str, Field(description=
|
|
37
|
+
description: Annotated[str, Field(description="Detailed signal description")]
|
|
38
|
+
name: Annotated[str, Field(description="Human-readable signal name")]
|
|
39
|
+
pricing: Annotated[Pricing, Field(description="Pricing information")]
|
|
40
|
+
signal_agent_segment_id: Annotated[str, Field(description="Unique identifier for the signal")]
|
|
41
41
|
signal_type: Annotated[
|
|
42
|
-
signal_catalog_type.SignalCatalogType, Field(description=
|
|
42
|
+
signal_catalog_type.SignalCatalogType, Field(description="Type of signal")
|
|
43
43
|
]
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
class GetSignalsResponse(AdCPBaseModel):
|
|
47
47
|
model_config = ConfigDict(
|
|
48
|
-
extra=
|
|
48
|
+
extra="allow",
|
|
49
49
|
)
|
|
50
50
|
context: context_1.ContextObject | None = None
|
|
51
51
|
errors: Annotated[
|
|
52
52
|
list[error.Error] | None,
|
|
53
53
|
Field(
|
|
54
|
-
description=
|
|
54
|
+
description="Task-specific errors and warnings (e.g., signal discovery or pricing issues)"
|
|
55
55
|
),
|
|
56
56
|
] = None
|
|
57
57
|
ext: ext_1.ExtensionObject | None = None
|
|
58
|
-
signals: Annotated[list[Signal], Field(description=
|
|
58
|
+
signals: Annotated[list[Signal], Field(description="Array of matching signals")]
|