adcp 2.5.0__py3-none-any.whl → 2.7.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 CHANGED
@@ -56,51 +56,12 @@ from adcp.testing import (
56
56
  from adcp.types import _generated as generated
57
57
  from adcp.types import aliases
58
58
 
59
- # Re-export commonly-used request/response types for convenience
60
- # Users should import from main package (e.g., `from adcp import GetProductsRequest`)
61
- # rather than internal modules for better API stability
62
- from adcp.types._generated import (
63
- # Audience & Targeting
64
- ActivateSignalRequest,
65
- ActivateSignalResponse,
66
- # Creative Operations
67
- BuildCreativeRequest,
68
- BuildCreativeResponse,
69
- # Media Buy Operations
70
- CreateMediaBuyRequest,
71
- CreateMediaBuyResponse,
72
- # Common data types
73
- Error,
74
- Format,
75
- GetMediaBuyDeliveryRequest,
76
- GetMediaBuyDeliveryResponse,
77
- GetProductsRequest,
78
- GetProductsResponse,
79
- GetSignalsRequest,
80
- GetSignalsResponse,
81
- ListAuthorizedPropertiesRequest,
82
- ListAuthorizedPropertiesResponse,
83
- ListCreativeFormatsRequest,
84
- ListCreativeFormatsResponse,
85
- ListCreativesRequest,
86
- ListCreativesResponse,
87
- PreviewCreativeRequest,
88
- PreviewCreativeResponse,
89
- Product,
90
- Property,
91
- ProvidePerformanceFeedbackRequest,
92
- ProvidePerformanceFeedbackResponse,
93
- SyncCreativesRequest,
94
- SyncCreativesResponse,
95
- UpdateMediaBuyRequest,
96
- UpdateMediaBuyResponse,
97
- )
98
- from adcp.types._generated import TaskStatus as GeneratedTaskStatus
99
-
100
59
  # Re-export semantic type aliases for better ergonomics
101
60
  from adcp.types.aliases import (
102
61
  ActivateSignalErrorResponse,
103
62
  ActivateSignalSuccessResponse,
63
+ AgentDeployment,
64
+ AgentDestination,
104
65
  BothPreviewRender,
105
66
  BuildCreativeErrorResponse,
106
67
  BuildCreativeSuccessResponse,
@@ -111,14 +72,21 @@ from adcp.types.aliases import (
111
72
  InlineDaastAsset,
112
73
  InlineVastAsset,
113
74
  MediaSubAsset,
75
+ PlatformDeployment,
76
+ PlatformDestination,
114
77
  PreviewCreativeFormatRequest,
115
78
  PreviewCreativeInteractiveResponse,
116
79
  PreviewCreativeManifestRequest,
117
80
  PreviewCreativeStaticResponse,
81
+ PropertyId,
118
82
  PropertyIdActivationKey,
83
+ PropertyTag,
119
84
  PropertyTagActivationKey,
120
85
  ProvidePerformanceFeedbackErrorResponse,
121
86
  ProvidePerformanceFeedbackSuccessResponse,
87
+ PublisherPropertiesAll,
88
+ PublisherPropertiesById,
89
+ PublisherPropertiesByTag,
122
90
  SyncCreativesErrorResponse,
123
91
  SyncCreativesSuccessResponse,
124
92
  TextSubAsset,
@@ -132,11 +100,20 @@ from adcp.types.aliases import (
132
100
  )
133
101
  from adcp.types.core import AgentConfig, Protocol, TaskResult, TaskStatus, WebhookMetadata
134
102
 
103
+ # Re-export commonly-used request/response types for convenience
104
+ # Users should import from main package (e.g., `from adcp import GetProductsRequest`)
105
+ # rather than internal modules for better API stability
135
106
  # Re-export core domain types and pricing options from stable API
136
107
  # These are commonly used in typical workflows
137
108
  from adcp.types.stable import (
109
+ # Audience & Targeting
110
+ ActivateSignalRequest,
111
+ ActivateSignalResponse,
138
112
  # Core domain types
139
113
  BrandManifest,
114
+ # Creative Operations
115
+ BuildCreativeRequest,
116
+ BuildCreativeResponse,
140
117
  # Pricing options (all 9 types for product creation)
141
118
  CpcPricingOption,
142
119
  CpcvPricingOption,
@@ -144,19 +121,54 @@ from adcp.types.stable import (
144
121
  CpmFixedRatePricingOption,
145
122
  CppPricingOption,
146
123
  CpvPricingOption,
124
+ # Media Buy Operations
125
+ CreateMediaBuyRequest,
126
+ CreateMediaBuyResponse,
147
127
  Creative,
148
128
  CreativeManifest,
149
129
  # Status enums (for control flow)
150
130
  CreativeStatus,
131
+ # Common data types
132
+ Error,
151
133
  FlatRatePricingOption,
134
+ Format,
135
+ FormatId,
136
+ GetMediaBuyDeliveryRequest,
137
+ GetMediaBuyDeliveryResponse,
138
+ GetProductsRequest,
139
+ GetProductsResponse,
140
+ GetSignalsRequest,
141
+ GetSignalsResponse,
142
+ ListAuthorizedPropertiesRequest,
143
+ ListAuthorizedPropertiesResponse,
144
+ ListCreativeFormatsRequest,
145
+ ListCreativeFormatsResponse,
146
+ ListCreativesRequest,
147
+ ListCreativesResponse,
152
148
  MediaBuy,
153
149
  MediaBuyStatus,
154
150
  Package,
151
+ PackageRequest,
155
152
  PackageStatus,
153
+ PreviewCreativeRequest,
154
+ PreviewCreativeResponse,
155
+ PriceGuidance,
156
156
  PricingModel,
157
+ Product,
158
+ Property,
159
+ ProvidePerformanceFeedbackRequest,
160
+ ProvidePerformanceFeedbackResponse,
161
+ PushNotificationConfig,
162
+ SyncCreativesRequest,
163
+ SyncCreativesResponse,
164
+ UpdateMediaBuyRequest,
165
+ UpdateMediaBuyResponse,
157
166
  VcpmAuctionPricingOption,
158
167
  VcpmFixedRatePricingOption,
159
168
  )
169
+ from adcp.types.stable import (
170
+ TaskStatus as GeneratedTaskStatus,
171
+ )
160
172
  from adcp.validation import (
161
173
  ValidationError,
162
174
  validate_adagents,
@@ -165,7 +177,7 @@ from adcp.validation import (
165
177
  validate_publisher_properties_item,
166
178
  )
167
179
 
168
- __version__ = "2.5.0"
180
+ __version__ = "2.7.0"
169
181
 
170
182
  __all__ = [
171
183
  # Client classes
@@ -206,6 +218,7 @@ __all__ = [
206
218
  "ProvidePerformanceFeedbackResponse",
207
219
  "Error",
208
220
  "Format",
221
+ "FormatId",
209
222
  "Product",
210
223
  "Property",
211
224
  # Core domain types (from stable API)
@@ -214,6 +227,7 @@ __all__ = [
214
227
  "CreativeManifest",
215
228
  "MediaBuy",
216
229
  "Package",
230
+ "PackageRequest",
217
231
  # Package type aliases
218
232
  "CreatedPackageReference",
219
233
  # Status enums (for control flow)
@@ -221,7 +235,7 @@ __all__ = [
221
235
  "MediaBuyStatus",
222
236
  "PackageStatus",
223
237
  "PricingModel",
224
- # Pricing options (all 9 types)
238
+ # Pricing-related types
225
239
  "CpcPricingOption",
226
240
  "CpcvPricingOption",
227
241
  "CpmAuctionPricingOption",
@@ -229,8 +243,11 @@ __all__ = [
229
243
  "CppPricingOption",
230
244
  "CpvPricingOption",
231
245
  "FlatRatePricingOption",
246
+ "PriceGuidance",
232
247
  "VcpmAuctionPricingOption",
233
248
  "VcpmFixedRatePricingOption",
249
+ # Configuration types
250
+ "PushNotificationConfig",
234
251
  # Adagents validation
235
252
  "AuthorizationContext",
236
253
  "fetch_adagents",
@@ -281,6 +298,8 @@ __all__ = [
281
298
  # Semantic type aliases (for better API ergonomics)
282
299
  "ActivateSignalSuccessResponse",
283
300
  "ActivateSignalErrorResponse",
301
+ "AgentDeployment",
302
+ "AgentDestination",
284
303
  "BothPreviewRender",
285
304
  "BuildCreativeSuccessResponse",
286
305
  "BuildCreativeErrorResponse",
@@ -290,14 +309,21 @@ __all__ = [
290
309
  "InlineDaastAsset",
291
310
  "InlineVastAsset",
292
311
  "MediaSubAsset",
312
+ "PlatformDeployment",
313
+ "PlatformDestination",
293
314
  "PreviewCreativeFormatRequest",
294
315
  "PreviewCreativeManifestRequest",
295
316
  "PreviewCreativeStaticResponse",
296
317
  "PreviewCreativeInteractiveResponse",
318
+ "PropertyId",
297
319
  "PropertyIdActivationKey",
320
+ "PropertyTag",
298
321
  "PropertyTagActivationKey",
299
322
  "ProvidePerformanceFeedbackSuccessResponse",
300
323
  "ProvidePerformanceFeedbackErrorResponse",
324
+ "PublisherPropertiesAll",
325
+ "PublisherPropertiesById",
326
+ "PublisherPropertiesByTag",
301
327
  "SyncCreativesSuccessResponse",
302
328
  "SyncCreativesErrorResponse",
303
329
  "TextSubAsset",
adcp/client.py CHANGED
@@ -17,7 +17,15 @@ from adcp.exceptions import ADCPWebhookSignatureError
17
17
  from adcp.protocols.a2a import A2AAdapter
18
18
  from adcp.protocols.base import ProtocolAdapter
19
19
  from adcp.protocols.mcp import MCPAdapter
20
- from adcp.types._generated import (
20
+ from adcp.types.core import (
21
+ Activity,
22
+ ActivityType,
23
+ AgentConfig,
24
+ Protocol,
25
+ TaskResult,
26
+ TaskStatus,
27
+ )
28
+ from adcp.types.stable import (
21
29
  ActivateSignalRequest,
22
30
  ActivateSignalResponse,
23
31
  GetMediaBuyDeliveryRequest,
@@ -40,15 +48,9 @@ from adcp.types._generated import (
40
48
  SyncCreativesResponse,
41
49
  WebhookPayload,
42
50
  )
43
- from adcp.types.core import (
44
- Activity,
45
- ActivityType,
46
- AgentConfig,
47
- Protocol,
48
- TaskResult,
49
- TaskStatus,
51
+ from adcp.types.stable import (
52
+ TaskStatus as GeneratedTaskStatus,
50
53
  )
51
- from adcp.types.generated_poc.task_status import TaskStatus as GeneratedTaskStatus
52
54
  from adcp.utils.operation_id import create_operation_id
53
55
 
54
56
  logger = logging.getLogger(__name__)
adcp/simple.py CHANGED
@@ -23,7 +23,7 @@ from __future__ import annotations
23
23
  from typing import TYPE_CHECKING, Any
24
24
 
25
25
  from adcp.exceptions import ADCPSimpleAPIError
26
- from adcp.types._generated import (
26
+ from adcp.types.stable import (
27
27
  ActivateSignalRequest,
28
28
  ActivateSignalResponse,
29
29
  GetMediaBuyDeliveryRequest,
adcp/types/__init__.py CHANGED
@@ -17,6 +17,11 @@ from adcp.types.aliases import (
17
17
  InlineDaastAsset,
18
18
  InlineVastAsset,
19
19
  MediaSubAsset,
20
+ PropertyId,
21
+ PropertyTag,
22
+ PublisherPropertiesAll,
23
+ PublisherPropertiesById,
24
+ PublisherPropertiesByTag,
20
25
  TextSubAsset,
21
26
  UrlDaastAsset,
22
27
  UrlPreviewRender,
@@ -89,6 +94,13 @@ __all__ = [
89
94
  "UrlVastAsset",
90
95
  # Package type aliases
91
96
  "CreatedPackageReference",
97
+ # Publisher properties types
98
+ "PropertyId",
99
+ "PropertyTag",
100
+ # Publisher properties aliases
101
+ "PublisherPropertiesAll",
102
+ "PublisherPropertiesById",
103
+ "PublisherPropertiesByTag",
92
104
  # Stable API types (commonly used)
93
105
  "BrandManifest",
94
106
  "Creative",
adcp/types/_generated.py CHANGED
@@ -10,7 +10,7 @@ Auto-generated by datamodel-code-generator from JSON schemas.
10
10
  DO NOT EDIT MANUALLY.
11
11
 
12
12
  Generated from: https://github.com/adcontextprotocol/adcp/tree/main/schemas
13
- Generation date: 2025-11-18 12:52:17 UTC
13
+ Generation date: 2025-11-19 02:03:09 UTC
14
14
  """
15
15
  # ruff: noqa: E501, I001
16
16
  from __future__ import annotations
@@ -19,7 +19,7 @@ from __future__ import annotations
19
19
  from adcp.types.generated_poc.activate_signal_request import ActivateSignalRequest
20
20
  from adcp.types.generated_poc.activate_signal_response import ActivateSignalResponse, ActivateSignalResponse1, ActivateSignalResponse2
21
21
  from adcp.types.generated_poc.activation_key import ActivationKey1, ActivationKey2
22
- from adcp.types.generated_poc.adagents import AuthorizedAgents, AuthorizedAgents1, AuthorizedAgents2, AuthorizedAgents3, AuthorizedSalesAgents, Contact, PropertyId, PropertyTag, PublisherProperties, PublisherProperties1, Tags
22
+ from adcp.types.generated_poc.adagents import AuthorizedAgents, AuthorizedAgents1, AuthorizedAgents2, AuthorizedAgents3, AuthorizedSalesAgents, Contact, PropertyId, PropertyTag, Tags
23
23
  from adcp.types.generated_poc.asset_type import AssetTypeSchema, ContentLength, Dimensions, Duration, FileSize, Quality, Requirements, Type
24
24
  from adcp.types.generated_poc.audio_asset import AudioAsset
25
25
  from adcp.types.generated_poc.brand_manifest import Asset, AssetType, BrandManifest, Colors, Disclaimer, FeedFormat, Fonts, Logo, Metadata, ProductCatalog, UpdateFrequency
@@ -33,7 +33,7 @@ from adcp.types.generated_poc.cpm_fixed_option import CpmFixedRatePricingOption
33
33
  from adcp.types.generated_poc.cpp_option import CppPricingOption, Parameters
34
34
  from adcp.types.generated_poc.cpv_option import CpvPricingOption, ViewThreshold, ViewThreshold1
35
35
  from adcp.types.generated_poc.create_media_buy_request import CreateMediaBuyRequest, ReportingFrequency, ReportingWebhook, RequestedMetric
36
- from adcp.types.generated_poc.create_media_buy_response import CreateMediaBuyResponse, CreateMediaBuyResponse1, CreateMediaBuyResponse2, Package
36
+ from adcp.types.generated_poc.create_media_buy_response import CreateMediaBuyResponse, CreateMediaBuyResponse1, CreateMediaBuyResponse2
37
37
  from adcp.types.generated_poc.creative_asset import CreativeAsset, Input
38
38
  from adcp.types.generated_poc.creative_assignment import CreativeAssignment
39
39
  from adcp.types.generated_poc.creative_manifest import CreativeManifest
@@ -80,7 +80,7 @@ from adcp.types.generated_poc.preview_creative_request import Input2, OutputForm
80
80
  from adcp.types.generated_poc.preview_creative_response import Input4, Preview, Preview1, Preview2, PreviewCreativeResponse, PreviewCreativeResponse1, PreviewCreativeResponse2, Response, Response1, Results, Results1
81
81
  from adcp.types.generated_poc.preview_render import Embedding, PreviewRender, PreviewRender1, PreviewRender2, PreviewRender3
82
82
  from adcp.types.generated_poc.pricing_model import PricingModel
83
- from adcp.types.generated_poc.product import DeliveryMeasurement, Product, ProductCard, ProductCardDetailed, PublisherProperties4, PublisherProperties5
83
+ from adcp.types.generated_poc.product import DeliveryMeasurement, Product, ProductCard, ProductCardDetailed
84
84
  from adcp.types.generated_poc.promoted_offerings import AssetSelectors, Offering, PromotedOfferings
85
85
  from adcp.types.generated_poc.promoted_products import PromotedProducts
86
86
  from adcp.types.generated_poc.property import Identifier, Property, PropertyType, Tag
@@ -88,6 +88,7 @@ from adcp.types.generated_poc.protocol_envelope import ProtocolEnvelope
88
88
  from adcp.types.generated_poc.provide_performance_feedback_request import ProvidePerformanceFeedbackRequest
89
89
  from adcp.types.generated_poc.provide_performance_feedback_response import ProvidePerformanceFeedbackResponse, ProvidePerformanceFeedbackResponse1, ProvidePerformanceFeedbackResponse2
90
90
  from adcp.types.generated_poc.publisher_identifier_types import PublisherIdentifierTypes
91
+ from adcp.types.generated_poc.publisher_property_selector import PublisherPropertySelector1, PublisherPropertySelector2, PublisherPropertySelector3
91
92
  from adcp.types.generated_poc.push_notification_config import Authentication, PushNotificationConfig, Scheme
92
93
  from adcp.types.generated_poc.reporting_capabilities import AvailableMetric, AvailableReportingFrequency, ReportingCapabilities
93
94
  from adcp.types.generated_poc.response import ProtocolResponse
@@ -113,6 +114,10 @@ from adcp.types.generated_poc.video_asset import VideoAsset
113
114
  from adcp.types.generated_poc.webhook_asset import Method, Method1, ResponseType, Security, WebhookAsset
114
115
  from adcp.types.generated_poc.webhook_payload import WebhookPayload
115
116
 
117
+ # Special imports for name collisions (qualified names for types defined in multiple modules)
118
+ from adcp.types.generated_poc.create_media_buy_response import Package as _PackageFromCreateMediaBuyResponse
119
+ from adcp.types.generated_poc.package import Package as _PackageFromPackage
120
+
116
121
  # Backward compatibility aliases for renamed types
117
122
  Channels = AdvertisingChannels
118
123
 
@@ -146,9 +151,9 @@ __all__ = [
146
151
  "ListCreativesResponse", "Logo", "MarkdownAsset", "MarkdownFlavor", "Measurement",
147
152
  "MeasurementPeriod", "MediaBuy", "MediaBuyDelivery", "MediaBuyStatus", "Metadata", "Method",
148
153
  "Method1", "MetricType", "ModuleType", "NotificationType", "Offering", "OutputFormat",
149
- "Pacing", "Package", "PackageRequest", "PackageStatus", "Packages", "Packages1", "Packages2",
150
- "Packages3", "Pagination", "Parameters", "Performance", "PerformanceFeedback", "Placement",
151
- "Preview", "Preview1", "Preview2", "PreviewCreativeRequest", "PreviewCreativeRequest1",
154
+ "Pacing", "PackageRequest", "PackageStatus", "Packages", "Packages1", "Packages2", "Packages3",
155
+ "Pagination", "Parameters", "Performance", "PerformanceFeedback", "Placement", "Preview",
156
+ "Preview1", "Preview2", "PreviewCreativeRequest", "PreviewCreativeRequest1",
152
157
  "PreviewCreativeRequest2", "PreviewCreativeResponse", "PreviewCreativeResponse1",
153
158
  "PreviewCreativeResponse2", "PreviewRender", "PreviewRender1", "PreviewRender2",
154
159
  "PreviewRender3", "PriceGuidance", "Pricing", "PricingModel", "PrimaryCountry", "Product",
@@ -157,7 +162,7 @@ __all__ = [
157
162
  "PropertyType", "ProtocolEnvelope", "ProtocolResponse", "ProvidePerformanceFeedbackRequest",
158
163
  "ProvidePerformanceFeedbackResponse", "ProvidePerformanceFeedbackResponse1",
159
164
  "ProvidePerformanceFeedbackResponse2", "PublisherDomain", "PublisherIdentifierTypes",
160
- "PublisherProperties", "PublisherProperties1", "PublisherProperties4", "PublisherProperties5",
165
+ "PublisherPropertySelector1", "PublisherPropertySelector2", "PublisherPropertySelector3",
161
166
  "PushNotificationConfig", "Quality", "QuartileData", "QuerySummary", "Render",
162
167
  "ReportingCapabilities", "ReportingFrequency", "ReportingPeriod", "ReportingWebhook",
163
168
  "Request", "RequestedMetric", "Requirements", "Response", "Response1", "ResponseType",
@@ -171,5 +176,6 @@ __all__ = [
171
176
  "UpdateMediaBuyResponse", "UpdateMediaBuyResponse1", "UpdateMediaBuyResponse2", "UrlAsset",
172
177
  "UrlType", "ValidationMode", "VastAsset1", "VastAsset2", "VastVersion",
173
178
  "VcpmAuctionPricingOption", "VcpmFixedRatePricingOption", "VenueBreakdownItem", "VideoAsset",
174
- "ViewThreshold", "ViewThreshold1", "WebhookAsset", "WebhookPayload"
179
+ "ViewThreshold", "ViewThreshold1", "WebhookAsset", "WebhookPayload",
180
+ "_PackageFromCreateMediaBuyResponse", "_PackageFromPackage"
175
181
  ]
adcp/types/aliases.py CHANGED
@@ -31,7 +31,6 @@ immediately rather than at runtime when users try to use the aliases.
31
31
 
32
32
  from __future__ import annotations
33
33
 
34
- # Import all generated types that need semantic aliases
35
34
  from adcp.types._generated import (
36
35
  # Activation responses
37
36
  ActivateSignalResponse1,
@@ -48,6 +47,12 @@ from adcp.types._generated import (
48
47
  # DAAST assets
49
48
  DaastAsset1,
50
49
  DaastAsset2,
50
+ # Deployment types
51
+ Deployment1,
52
+ Deployment2,
53
+ # Destination types
54
+ Destination1,
55
+ Destination2,
51
56
  # Preview creative requests
52
57
  PreviewCreativeRequest1,
53
58
  PreviewCreativeRequest2,
@@ -58,6 +63,9 @@ from adcp.types._generated import (
58
63
  PreviewRender1,
59
64
  PreviewRender2,
60
65
  PreviewRender3,
66
+ # Publisher properties types
67
+ PropertyId,
68
+ PropertyTag,
61
69
  # Performance feedback responses
62
70
  ProvidePerformanceFeedbackResponse1,
63
71
  ProvidePerformanceFeedbackResponse2,
@@ -77,12 +85,24 @@ from adcp.types._generated import (
77
85
  VastAsset1,
78
86
  VastAsset2,
79
87
  )
88
+ from adcp.types._generated import (
89
+ PublisherPropertySelector1 as PublisherPropertiesInternal,
90
+ )
91
+ from adcp.types._generated import (
92
+ PublisherPropertySelector2 as PublisherPropertiesByIdInternal,
93
+ )
94
+ from adcp.types._generated import (
95
+ PublisherPropertySelector3 as PublisherPropertiesByTagInternal,
96
+ )
80
97
 
81
- # Import Package types directly from their modules to avoid collision issues
82
- from adcp.types.generated_poc.create_media_buy_response import (
83
- Package as CreatedPackageInternal,
98
+ # Import all generated types that need semantic aliases
99
+ from adcp.types._generated import (
100
+ # Package types (from name collision resolution)
101
+ _PackageFromCreateMediaBuyResponse as CreatedPackageInternal,
102
+ )
103
+ from adcp.types._generated import (
104
+ _PackageFromPackage as FullPackageInternal,
84
105
  )
85
- from adcp.types.generated_poc.package import Package as FullPackageInternal
86
106
 
87
107
  # ============================================================================
88
108
  # RESPONSE TYPE ALIASES - Success/Error Discriminated Unions
@@ -252,6 +272,213 @@ Used in:
252
272
  Fields: buyer_ref, package_id only
253
273
  """
254
274
 
275
+ # ============================================================================
276
+ # PUBLISHER PROPERTIES ALIASES - Selection Type Discriminated Unions
277
+ # ============================================================================
278
+ # The AdCP schemas define PublisherProperties as a discriminated union with
279
+ # three variants based on the `selection_type` field:
280
+ #
281
+ # 1. All Properties (selection_type='all'):
282
+ # - Includes all properties from the publisher
283
+ # - Only requires publisher_domain
284
+ #
285
+ # 2. By ID (selection_type='by_id'):
286
+ # - Specific properties selected by property_id
287
+ # - Requires publisher_domain + property_ids array
288
+ #
289
+ # 3. By Tag (selection_type='by_tag'):
290
+ # - Properties selected by tags
291
+ # - Requires publisher_domain + property_tags array
292
+ #
293
+ # These semantic aliases match the discriminator values and make code more
294
+ # readable when constructing or pattern-matching publisher properties.
295
+
296
+ PublisherPropertiesAll = PublisherPropertiesInternal
297
+ """Publisher properties covering all properties from the publisher.
298
+
299
+ This variant uses selection_type='all' and includes all properties listed
300
+ in the publisher's adagents.json file.
301
+
302
+ Fields:
303
+ - publisher_domain: Domain where adagents.json is hosted
304
+ - selection_type: Literal['all']
305
+
306
+ Example:
307
+ ```python
308
+ from adcp import PublisherPropertiesAll
309
+
310
+ props = PublisherPropertiesAll(
311
+ publisher_domain="example.com",
312
+ selection_type="all"
313
+ )
314
+ ```
315
+ """
316
+
317
+ PublisherPropertiesById = PublisherPropertiesByIdInternal
318
+ """Publisher properties selected by specific property IDs.
319
+
320
+ This variant uses selection_type='by_id' and specifies an explicit list
321
+ of property IDs from the publisher's adagents.json file.
322
+
323
+ Fields:
324
+ - publisher_domain: Domain where adagents.json is hosted
325
+ - selection_type: Literal['by_id']
326
+ - property_ids: List of PropertyId (non-empty)
327
+
328
+ Example:
329
+ ```python
330
+ from adcp import PublisherPropertiesById, PropertyId
331
+
332
+ props = PublisherPropertiesById(
333
+ publisher_domain="example.com",
334
+ selection_type="by_id",
335
+ property_ids=[PropertyId("homepage"), PropertyId("sports_section")]
336
+ )
337
+ ```
338
+ """
339
+
340
+ PublisherPropertiesByTag = PublisherPropertiesByTagInternal
341
+ """Publisher properties selected by tags.
342
+
343
+ This variant uses selection_type='by_tag' and specifies property tags.
344
+ The product covers all properties in the publisher's adagents.json that
345
+ have these tags.
346
+
347
+ Fields:
348
+ - publisher_domain: Domain where adagents.json is hosted
349
+ - selection_type: Literal['by_tag']
350
+ - property_tags: List of PropertyTag (non-empty)
351
+
352
+ Example:
353
+ ```python
354
+ from adcp import PublisherPropertiesByTag, PropertyTag
355
+
356
+ props = PublisherPropertiesByTag(
357
+ publisher_domain="example.com",
358
+ selection_type="by_tag",
359
+ property_tags=[PropertyTag("premium"), PropertyTag("video")]
360
+ )
361
+ ```
362
+ """
363
+
364
+ # ============================================================================
365
+ # DEPLOYMENT & DESTINATION ALIASES - Signal Deployment Type Discriminated Unions
366
+ # ============================================================================
367
+ # The AdCP schemas define Deployment and Destination as discriminated unions
368
+ # with two variants based on the `type` field:
369
+ #
370
+ # Deployment (where a signal is activated):
371
+ # - Platform (type='platform'): DSP platform with platform ID
372
+ # - Agent (type='agent'): Sales agent with agent URL
373
+ #
374
+ # Destination (where a signal can be activated):
375
+ # - Platform (type='platform'): Target DSP platform
376
+ # - Agent (type='agent'): Target sales agent
377
+ #
378
+ # These are used in GetSignalsResponse to describe signal availability and
379
+ # activation status across different advertising platforms and agents.
380
+
381
+ PlatformDeployment = Deployment1
382
+ """Signal deployment to a DSP platform.
383
+
384
+ This variant uses type='platform' for platform-based signal deployments
385
+ like The Trade Desk, Amazon DSP, etc.
386
+
387
+ Fields:
388
+ - type: Literal['platform']
389
+ - platform: Platform identifier (e.g., 'the-trade-desk')
390
+ - account: Optional account identifier
391
+ - is_live: Whether signal is currently active
392
+ - deployed_at: Activation timestamp if live
393
+ - activation_key: Targeting key if live and accessible
394
+ - estimated_activation_duration_minutes: Time to complete activation
395
+
396
+ Example:
397
+ ```python
398
+ from adcp import PlatformDeployment
399
+
400
+ deployment = PlatformDeployment(
401
+ type="platform",
402
+ platform="the-trade-desk",
403
+ account="advertiser-123",
404
+ is_live=True,
405
+ deployed_at=datetime.now(timezone.utc)
406
+ )
407
+ ```
408
+ """
409
+
410
+ AgentDeployment = Deployment2
411
+ """Signal deployment to a sales agent.
412
+
413
+ This variant uses type='agent' for agent-based signal deployments
414
+ using agent URLs.
415
+
416
+ Fields:
417
+ - type: Literal['agent']
418
+ - agent_url: URL identifying the destination agent
419
+ - account: Optional account identifier
420
+ - is_live: Whether signal is currently active
421
+ - deployed_at: Activation timestamp if live
422
+ - activation_key: Targeting key if live and accessible
423
+ - estimated_activation_duration_minutes: Time to complete activation
424
+
425
+ Example:
426
+ ```python
427
+ from adcp import AgentDeployment
428
+
429
+ deployment = AgentDeployment(
430
+ type="agent",
431
+ agent_url="https://agent.example.com",
432
+ is_live=False,
433
+ estimated_activation_duration_minutes=30.0
434
+ )
435
+ ```
436
+ """
437
+
438
+ PlatformDestination = Destination1
439
+ """Available signal destination on a DSP platform.
440
+
441
+ This variant uses type='platform' for platform-based signal destinations.
442
+
443
+ Fields:
444
+ - type: Literal['platform']
445
+ - platform: Platform identifier (e.g., 'the-trade-desk', 'amazon-dsp')
446
+ - account: Optional account identifier on the platform
447
+
448
+ Example:
449
+ ```python
450
+ from adcp import PlatformDestination
451
+
452
+ destination = PlatformDestination(
453
+ type="platform",
454
+ platform="the-trade-desk",
455
+ account="advertiser-123"
456
+ )
457
+ ```
458
+ """
459
+
460
+ AgentDestination = Destination2
461
+ """Available signal destination via a sales agent.
462
+
463
+ This variant uses type='agent' for agent-based signal destinations.
464
+
465
+ Fields:
466
+ - type: Literal['agent']
467
+ - agent_url: URL identifying the destination agent
468
+ - account: Optional account identifier on the agent
469
+
470
+ Example:
471
+ ```python
472
+ from adcp import AgentDestination
473
+
474
+ destination = AgentDestination(
475
+ type="agent",
476
+ agent_url="https://agent.example.com",
477
+ account="partner-456"
478
+ )
479
+ ```
480
+ """
481
+
255
482
  # ============================================================================
256
483
  # EXPORTS
257
484
  # ============================================================================
@@ -300,4 +527,17 @@ __all__ = [
300
527
  # Package type aliases
301
528
  "CreatedPackageReference",
302
529
  "Package",
530
+ # Publisher properties types
531
+ "PropertyId",
532
+ "PropertyTag",
533
+ # Publisher properties aliases
534
+ "PublisherPropertiesAll",
535
+ "PublisherPropertiesById",
536
+ "PublisherPropertiesByTag",
537
+ # Deployment aliases
538
+ "PlatformDeployment",
539
+ "AgentDeployment",
540
+ # Destination aliases
541
+ "PlatformDestination",
542
+ "AgentDestination",
303
543
  ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: adagents.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
3
+ # timestamp: 2025-11-19T02:02:39+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -9,7 +9,7 @@ from typing import Annotated, Literal
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import AnyUrl, AwareDatetime, ConfigDict, EmailStr, Field, RootModel
11
11
 
12
- from . import property
12
+ from . import property, publisher_property_selector
13
13
 
14
14
 
15
15
  class PropertyId(RootModel[str]):
@@ -72,81 +72,6 @@ class AuthorizedAgents1(AdCPBaseModel):
72
72
  url: Annotated[AnyUrl, Field(description="The authorized agent's API endpoint URL")]
73
73
 
74
74
 
75
- class PublisherProperties(AdCPBaseModel):
76
- model_config = ConfigDict(
77
- extra='forbid',
78
- )
79
- property_ids: Annotated[
80
- list[PropertyId],
81
- Field(
82
- description="Specific property IDs from the publisher's adagents.json properties array",
83
- min_length=1,
84
- ),
85
- ]
86
- publisher_domain: Annotated[
87
- str,
88
- Field(
89
- description="Domain where the publisher's adagents.json is hosted (e.g., 'cnn.com')",
90
- pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$',
91
- ),
92
- ]
93
- selection_type: Annotated[
94
- Literal['by_id'],
95
- Field(description='Discriminator indicating selection by specific property IDs'),
96
- ]
97
-
98
-
99
- class PublisherProperties1(AdCPBaseModel):
100
- model_config = ConfigDict(
101
- extra='forbid',
102
- )
103
- property_tags: Annotated[
104
- list[PropertyTag],
105
- Field(
106
- description="Property tags from the publisher's adagents.json tags. Agent is authorized for all properties with these tags",
107
- min_length=1,
108
- ),
109
- ]
110
- publisher_domain: Annotated[
111
- str,
112
- Field(
113
- description="Domain where the publisher's adagents.json is hosted (e.g., 'cnn.com')",
114
- pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$',
115
- ),
116
- ]
117
- selection_type: Annotated[
118
- Literal['by_tag'], Field(description='Discriminator indicating selection by property tags')
119
- ]
120
-
121
-
122
- class AuthorizedAgents3(AdCPBaseModel):
123
- model_config = ConfigDict(
124
- extra='forbid',
125
- )
126
- authorization_type: Annotated[
127
- Literal['publisher_properties'],
128
- Field(
129
- description='Discriminator indicating authorization for properties from other publisher domains'
130
- ),
131
- ]
132
- authorized_for: Annotated[
133
- str,
134
- Field(
135
- description='Human-readable description of what this agent is authorized to sell',
136
- max_length=500,
137
- min_length=1,
138
- ),
139
- ]
140
- publisher_properties: Annotated[
141
- list[PublisherProperties | PublisherProperties1],
142
- Field(
143
- 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',
144
- min_length=1,
145
- ),
146
- ]
147
- url: Annotated[AnyUrl, Field(description="The authorized agent's API endpoint URL")]
148
-
149
-
150
75
  class Contact(AdCPBaseModel):
151
76
  model_config = ConfigDict(
152
77
  extra='forbid',
@@ -226,6 +151,38 @@ class AuthorizedAgents2(AdCPBaseModel):
226
151
  url: Annotated[AnyUrl, Field(description="The authorized agent's API endpoint URL")]
227
152
 
228
153
 
154
+ class AuthorizedAgents3(AdCPBaseModel):
155
+ model_config = ConfigDict(
156
+ extra='forbid',
157
+ )
158
+ authorization_type: Annotated[
159
+ Literal['publisher_properties'],
160
+ Field(
161
+ description='Discriminator indicating authorization for properties from other publisher domains'
162
+ ),
163
+ ]
164
+ authorized_for: Annotated[
165
+ str,
166
+ Field(
167
+ description='Human-readable description of what this agent is authorized to sell',
168
+ max_length=500,
169
+ min_length=1,
170
+ ),
171
+ ]
172
+ publisher_properties: Annotated[
173
+ list[
174
+ publisher_property_selector.PublisherPropertySelector1
175
+ | publisher_property_selector.PublisherPropertySelector2
176
+ | publisher_property_selector.PublisherPropertySelector3
177
+ ],
178
+ Field(
179
+ 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',
180
+ min_length=1,
181
+ ),
182
+ ]
183
+ url: Annotated[AnyUrl, Field(description="The authorized agent's API endpoint URL")]
184
+
185
+
229
186
  class AuthorizedSalesAgents(AdCPBaseModel):
230
187
  model_config = ConfigDict(
231
188
  extra='forbid',
@@ -1,13 +1,13 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: product.json
3
- # timestamp: 2025-11-18T05:05:53+00:00
3
+ # timestamp: 2025-11-19T02:02:39+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- from typing import Annotated, Any, Literal
7
+ from typing import Annotated, Any
8
8
 
9
9
  from adcp.types.base import AdCPBaseModel
10
- from pydantic import AwareDatetime, ConfigDict, Field, RootModel
10
+ from pydantic import AwareDatetime, ConfigDict, Field
11
11
 
12
12
  from . import cpc_option, cpcv_option, cpm_auction_option, cpm_fixed_option, cpp_option, cpv_option
13
13
  from . import creative_policy as creative_policy_1
@@ -15,7 +15,7 @@ from . import delivery_type as delivery_type_1
15
15
  from . import flat_rate_option
16
16
  from . import format_id as format_id_1
17
17
  from . import measurement as measurement_1
18
- from . import placement
18
+ from . import placement, publisher_property_selector
19
19
  from . import reporting_capabilities as reporting_capabilities_1
20
20
  from . import vcpm_auction_option, vcpm_fixed_option
21
21
 
@@ -69,77 +69,6 @@ class ProductCardDetailed(AdCPBaseModel):
69
69
  ]
70
70
 
71
71
 
72
- class PublisherProperties(AdCPBaseModel):
73
- model_config = ConfigDict(
74
- extra='forbid',
75
- )
76
- publisher_domain: Annotated[
77
- str,
78
- Field(
79
- description="Domain where publisher's adagents.json is hosted (e.g., 'cnn.com')",
80
- pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$',
81
- ),
82
- ]
83
- selection_type: Annotated[
84
- Literal['all'],
85
- Field(
86
- description='Discriminator indicating all properties from this publisher are included'
87
- ),
88
- ]
89
-
90
-
91
- class PropertyId(RootModel[str]):
92
- root: Annotated[str, Field(pattern='^[a-z0-9_]+$')]
93
-
94
-
95
- class PublisherProperties4(AdCPBaseModel):
96
- model_config = ConfigDict(
97
- extra='forbid',
98
- )
99
- property_ids: Annotated[
100
- list[PropertyId],
101
- Field(description="Specific property IDs from the publisher's adagents.json", min_length=1),
102
- ]
103
- publisher_domain: Annotated[
104
- str,
105
- Field(
106
- description="Domain where publisher's adagents.json is hosted (e.g., 'cnn.com')",
107
- pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$',
108
- ),
109
- ]
110
- selection_type: Annotated[
111
- Literal['by_id'],
112
- Field(description='Discriminator indicating selection by specific property IDs'),
113
- ]
114
-
115
-
116
- class PropertyTag(PropertyId):
117
- pass
118
-
119
-
120
- class PublisherProperties5(AdCPBaseModel):
121
- model_config = ConfigDict(
122
- extra='forbid',
123
- )
124
- property_tags: Annotated[
125
- list[PropertyTag],
126
- Field(
127
- description="Property tags from the publisher's adagents.json. Product covers all properties with these tags",
128
- min_length=1,
129
- ),
130
- ]
131
- publisher_domain: Annotated[
132
- str,
133
- Field(
134
- description="Domain where publisher's adagents.json is hosted (e.g., 'cnn.com')",
135
- pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$',
136
- ),
137
- ]
138
- selection_type: Annotated[
139
- Literal['by_tag'], Field(description='Discriminator indicating selection by property tags')
140
- ]
141
-
142
-
143
72
  class Product(AdCPBaseModel):
144
73
  model_config = ConfigDict(
145
74
  extra='forbid',
@@ -212,7 +141,11 @@ class Product(AdCPBaseModel):
212
141
  ] = None
213
142
  product_id: Annotated[str, Field(description='Unique identifier for the product')]
214
143
  publisher_properties: Annotated[
215
- list[PublisherProperties | PublisherProperties4 | PublisherProperties5],
144
+ list[
145
+ publisher_property_selector.PublisherPropertySelector1
146
+ | publisher_property_selector.PublisherPropertySelector2
147
+ | publisher_property_selector.PublisherPropertySelector3
148
+ ],
216
149
  Field(
217
150
  description="Publisher properties covered by this product. Buyers fetch actual property definitions from each publisher's adagents.json and validate agent authorization. Selection patterns mirror the authorization patterns in adagents.json for consistency.",
218
151
  min_length=1,
@@ -0,0 +1,81 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: publisher-property-selector.json
3
+ # timestamp: 2025-11-19T02:02:39+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 ConfigDict, Field, RootModel
11
+
12
+
13
+ class PublisherPropertySelector1(AdCPBaseModel):
14
+ model_config = ConfigDict(
15
+ extra='forbid',
16
+ )
17
+ publisher_domain: Annotated[
18
+ str,
19
+ Field(
20
+ description="Domain where publisher's adagents.json is hosted (e.g., 'cnn.com')",
21
+ pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$',
22
+ ),
23
+ ]
24
+ selection_type: Annotated[
25
+ Literal['all'],
26
+ Field(
27
+ description='Discriminator indicating all properties from this publisher are included'
28
+ ),
29
+ ]
30
+
31
+
32
+ class PropertyId(RootModel[str]):
33
+ root: Annotated[str, Field(pattern='^[a-z0-9_]+$')]
34
+
35
+
36
+ class PublisherPropertySelector2(AdCPBaseModel):
37
+ model_config = ConfigDict(
38
+ extra='forbid',
39
+ )
40
+ property_ids: Annotated[
41
+ list[PropertyId],
42
+ Field(description="Specific property IDs from the publisher's adagents.json", min_length=1),
43
+ ]
44
+ publisher_domain: Annotated[
45
+ str,
46
+ Field(
47
+ description="Domain where publisher's adagents.json is hosted (e.g., 'cnn.com')",
48
+ pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$',
49
+ ),
50
+ ]
51
+ selection_type: Annotated[
52
+ Literal['by_id'],
53
+ Field(description='Discriminator indicating selection by specific property IDs'),
54
+ ]
55
+
56
+
57
+ class PropertyTag(PropertyId):
58
+ pass
59
+
60
+
61
+ class PublisherPropertySelector3(AdCPBaseModel):
62
+ model_config = ConfigDict(
63
+ extra='forbid',
64
+ )
65
+ property_tags: Annotated[
66
+ list[PropertyTag],
67
+ Field(
68
+ description="Property tags from the publisher's adagents.json. Selector covers all properties with these tags",
69
+ min_length=1,
70
+ ),
71
+ ]
72
+ publisher_domain: Annotated[
73
+ str,
74
+ Field(
75
+ description="Domain where publisher's adagents.json is hosted (e.g., 'cnn.com')",
76
+ pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$',
77
+ ),
78
+ ]
79
+ selection_type: Annotated[
80
+ Literal['by_tag'], Field(description='Discriminator indicating selection by property tags')
81
+ ]
adcp/types/stable.py CHANGED
@@ -48,6 +48,7 @@ from adcp.types._generated import (
48
48
  Error,
49
49
  FlatRatePricingOption,
50
50
  Format,
51
+ FormatId,
51
52
  GetMediaBuyDeliveryRequest,
52
53
  GetMediaBuyDeliveryResponse,
53
54
  GetProductsRequest,
@@ -66,14 +67,17 @@ from adcp.types._generated import (
66
67
  MarkdownAsset,
67
68
  MediaBuy,
68
69
  MediaBuyStatus,
70
+ PackageRequest,
69
71
  PackageStatus,
70
72
  PreviewCreativeRequest,
71
73
  PreviewCreativeResponse,
74
+ PriceGuidance,
72
75
  PricingModel,
73
76
  Product,
74
77
  Property,
75
78
  ProvidePerformanceFeedbackRequest,
76
79
  ProvidePerformanceFeedbackResponse,
80
+ PushNotificationConfig,
77
81
  SyncCreativesRequest,
78
82
  SyncCreativesResponse,
79
83
  TasksGetRequest,
@@ -90,11 +94,12 @@ from adcp.types._generated import (
90
94
  VcpmFixedRatePricingOption,
91
95
  VideoAsset,
92
96
  WebhookAsset,
97
+ WebhookPayload,
93
98
  )
94
99
 
95
100
  # Import all generated types from internal consolidated module
96
- # Import Package directly from its module to avoid collision with Response Package
97
- from adcp.types.generated_poc.package import Package
101
+ # Import Package from _generated (uses qualified name to avoid collision)
102
+ from adcp.types._generated import _PackageFromPackage as Package
98
103
 
99
104
  # Note: BrandManifest is currently split into BrandManifest1/2 due to upstream schema
100
105
  # using anyOf incorrectly. This will be fixed upstream to create a single BrandManifest type.
@@ -142,11 +147,13 @@ __all__ = [
142
147
  "CreativeManifest",
143
148
  "Error",
144
149
  "Format",
150
+ "FormatId",
145
151
  "MediaBuy",
146
152
  "Package",
153
+ "PackageRequest",
147
154
  "Product",
148
155
  "Property",
149
- # Pricing options
156
+ # Pricing-related types
150
157
  "CpcPricingOption",
151
158
  "CpcvPricingOption",
152
159
  "CpmAuctionPricingOption",
@@ -154,6 +161,7 @@ __all__ = [
154
161
  "CppPricingOption",
155
162
  "CpvPricingOption",
156
163
  "FlatRatePricingOption",
164
+ "PriceGuidance",
157
165
  "VcpmAuctionPricingOption",
158
166
  "VcpmFixedRatePricingOption",
159
167
  # Status enums
@@ -163,6 +171,8 @@ __all__ = [
163
171
  "PricingModel",
164
172
  "TaskStatus",
165
173
  "TaskType",
174
+ # Configuration types
175
+ "PushNotificationConfig",
166
176
  # Assets
167
177
  "AudioAsset",
168
178
  "CssAsset",
@@ -174,4 +184,5 @@ __all__ = [
174
184
  "UrlAsset",
175
185
  "VideoAsset",
176
186
  "WebhookAsset",
187
+ "WebhookPayload",
177
188
  ]
@@ -10,7 +10,7 @@ from typing import TYPE_CHECKING, Any
10
10
 
11
11
  if TYPE_CHECKING:
12
12
  from adcp.client import ADCPClient
13
- from adcp.types._generated import CreativeManifest, Format, FormatId, Product
13
+ from adcp.types.stable import CreativeManifest, Format, FormatId, Product
14
14
 
15
15
  logger = logging.getLogger(__name__)
16
16
 
@@ -67,7 +67,7 @@ class PreviewURLGenerator:
67
67
  Returns:
68
68
  Preview data with preview_url and metadata, or None if generation fails
69
69
  """
70
- from adcp.types._generated import PreviewCreativeRequest1
70
+ from adcp.types.aliases import PreviewCreativeFormatRequest
71
71
 
72
72
  cache_key = _make_manifest_cache_key(format_id, manifest.model_dump(exclude_none=True))
73
73
 
@@ -75,7 +75,7 @@ class PreviewURLGenerator:
75
75
  return self._preview_cache[cache_key]
76
76
 
77
77
  try:
78
- request = PreviewCreativeRequest1(
78
+ request = PreviewCreativeFormatRequest(
79
79
  request_type="single",
80
80
  format_id=format_id,
81
81
  creative_manifest=manifest,
@@ -123,7 +123,7 @@ class PreviewURLGenerator:
123
123
  Returns:
124
124
  List of preview data dicts (or None for failures), in same order as requests
125
125
  """
126
- from adcp.types._generated import PreviewCreativeRequest
126
+ from adcp.types.stable import PreviewCreativeRequest
127
127
 
128
128
  if not requests:
129
129
  return []
@@ -396,7 +396,7 @@ def _create_sample_manifest_for_format(fmt: Format) -> CreativeManifest | None:
396
396
  Returns:
397
397
  Sample CreativeManifest, or None if unable to create one
398
398
  """
399
- from adcp.types._generated import CreativeManifest
399
+ from adcp.types.stable import CreativeManifest
400
400
 
401
401
  if not fmt.assets_required:
402
402
  return None
@@ -436,7 +436,7 @@ def _create_sample_manifest_for_format_id(
436
436
  Returns:
437
437
  Sample CreativeManifest with placeholder assets
438
438
  """
439
- from adcp.types._generated import CreativeManifest, ImageAsset, UrlAsset
439
+ from adcp.types.stable import CreativeManifest, ImageAsset, UrlAsset
440
440
 
441
441
  assets = {
442
442
  "primary_asset": ImageAsset(url="https://example.com/sample-image.jpg"),
@@ -456,7 +456,7 @@ def _create_sample_asset(asset_type: str | None) -> Any:
456
456
  Returns:
457
457
  Sample asset object (Pydantic model)
458
458
  """
459
- from adcp.types._generated import (
459
+ from adcp.types.stable import (
460
460
  HtmlAsset,
461
461
  ImageAsset,
462
462
  TextAsset,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: adcp
3
- Version: 2.5.0
3
+ Version: 2.7.0
4
4
  Summary: Official Python client for the Ad Context Protocol (AdCP)
5
5
  Author-email: AdCP Community <maintainers@adcontextprotocol.org>
6
6
  License: Apache-2.0
@@ -1,11 +1,11 @@
1
- adcp/__init__.py,sha256=09hCpp_u_UXT672Lo8HbPTu_RNiWWzQf-UGBVIqFjds,8592
1
+ adcp/__init__.py,sha256=yoj3l_T1DPfbYUIWSMWMXOsxTqhIyhbeuvlAtU-HAGg,9188
2
2
  adcp/__main__.py,sha256=YF2GUXF1LICW1TPxNQiGIfSp5cpAsejoEG2fuOgbzrc,12839
3
3
  adcp/adagents.py,sha256=o-vTBmdZvu9aER-TAlLLL3s-WGYY8N67jnrAH24lST8,22333
4
- adcp/client.py,sha256=Z70D0bHcLNmr0NBGXbFUvW8dBdzHkcv8CmFcYo3pIjw,28803
4
+ adcp/client.py,sha256=EzHS5Aysau3liwkGp_clYkYxTHACeqP4zNT8jSLz0hs,28789
5
5
  adcp/config.py,sha256=Vsy7ZPOI8G3fB_i5Nk-CHbC7wdasCUWuKlos0fwA0kY,2017
6
6
  adcp/exceptions.py,sha256=1aZEWpaM92OxD2jl9yKsqJp5ReSWaj0S0DFhxChhLlA,6732
7
7
  adcp/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- adcp/simple.py,sha256=A3Ly_GadbXNodi-LCjbP1uYAkFl0bAtz9hCpTGwCDPE,10441
8
+ adcp/simple.py,sha256=OYoAF9MBK4dkvYQz3eMOVNEC-OZUNRkCgLDxmKSNZZY,10437
9
9
  adcp/validation.py,sha256=NsTwTQbLmd1Z1bMcztR1llJB21ai1xuw5aVrca7LoE8,6793
10
10
  adcp/protocols/__init__.py,sha256=6UFwACQ0QadBUzy17wUROHqsJDp8ztPW2jzyl53Zh_g,262
11
11
  adcp/protocols/a2a.py,sha256=FHgc6G_eU2qD0vH7_RyS1eZvUFSb2j3-EsceoHPi384,12467
@@ -13,17 +13,17 @@ adcp/protocols/base.py,sha256=vBHD23Fzl_CCk_Gy9nvSbBYopcJlYkYyzoz-rhI8wHg,5214
13
13
  adcp/protocols/mcp.py,sha256=d9uSpGd0BKvQ0JxztkfDvHwoDrDYhuiw5oivpYOAbmM,16647
14
14
  adcp/testing/__init__.py,sha256=ZWp_floWjVZfy8RBG5v_FUXQ8YbN7xjXvVcX-_zl_HU,1416
15
15
  adcp/testing/test_helpers.py,sha256=-UKuxxyKQald5EvXxguQH34b3J0JdsxKH_nRT6GTjkQ,10029
16
- adcp/types/__init__.py,sha256=CXlUUpMRWyM20focXgl8pEz3WMqvpjAW9PzmyHXKRzA,2608
17
- adcp/types/_generated.py,sha256=p4U_P3BROGjCnS0Cd2o9ZJ_bShQLffB3D9_0D29JB0g,14926
18
- adcp/types/aliases.py,sha256=FGb7zYy6V2gKtzWWc2c_vx3NLwXYpEsyjts9peyOixQ,11244
16
+ adcp/types/__init__.py,sha256=V_Tme95-OoTGZkrMTQwNP76cN5QelO-Q-9sRTg-EBIA,2926
17
+ adcp/types/_generated.py,sha256=XYYu3xvuZ0ivIOHt5pViD8FBXehTv3OlAQcxQsd2TzA,15307
18
+ adcp/types/aliases.py,sha256=cTQa2SKWA4dzJEClWe0nkdZ0Z2G_6bbORqnfwHyyWmE,18325
19
19
  adcp/types/base.py,sha256=QoEuVfI4yzefup0dc2KN11AcJTbcGxRep7xOw5hXfs8,837
20
20
  adcp/types/core.py,sha256=RXkKCWCXS9BVJTNpe3Opm5O1I_LaQPMUuVwa-ipvS1Q,4839
21
- adcp/types/stable.py,sha256=Q_rxnpLuUGfqGusiJcMuPADIGLQgs2uLp98S4YnAksw,4997
21
+ adcp/types/stable.py,sha256=m0HUdlkwQPGFPSGBrkEHp7fuCjKHhw9_E5WQuQsIn50,5244
22
22
  adcp/types/generated_poc/__init__.py,sha256=bgFFvPK1-e04eOnyw0qmtVMzoA2V7GeAMPDVrx-VIwA,103
23
23
  adcp/types/generated_poc/activate_signal_request.py,sha256=mI1MskO30yEcbQQ7ueEExMF7FhfARQj0_kbz5CAdSzQ,1188
24
24
  adcp/types/generated_poc/activate_signal_response.py,sha256=ltt5yDsocK3VfELeRuMjUiNMmUZe__VP5az6fsMCOuc,2015
25
25
  adcp/types/generated_poc/activation_key.py,sha256=FFUHvn-q0zKMdImOv-VHKS_78U8FVikUE8M-IOuiamg,952
26
- adcp/types/generated_poc/adagents.py,sha256=5HqvEckcnEZkrGDbZxa7zBR0xeLaj7WGii-dZDjvFbY,8490
26
+ adcp/types/generated_poc/adagents.py,sha256=tuMLnT5RRwVFCe8otpHugkz33a3IS3naLUCHUgxvk9c,7192
27
27
  adcp/types/generated_poc/asset_type.py,sha256=mNeAkjoEACZbj7lvqjAHcQ6vSNW8dt1qFNxp0fON-Qw,3169
28
28
  adcp/types/generated_poc/audio_asset.py,sha256=gu1HQI0310qmY27OzHzBD_gPTPYJv7GzCDgrEymZJ-k,795
29
29
  adcp/types/generated_poc/brand_manifest.py,sha256=jJYmM81eTMqVoBFHvoUJEaCrlKcsS_WQa8aJfUcAv3Y,7501
@@ -85,7 +85,7 @@ adcp/types/generated_poc/preview_creative_request.py,sha256=ul7gJhSQPR9EnPXfjoD5
85
85
  adcp/types/generated_poc/preview_creative_response.py,sha256=d2OGyfRATgOlLv9B7ow04fzwMyUCmLYbm9s1cg4MRlU,6140
86
86
  adcp/types/generated_poc/preview_render.py,sha256=zLlG5IaZsyxZOPzHqjBiyyl7MU3aqVJtZonySAj2ZBk,5076
87
87
  adcp/types/generated_poc/pricing_model.py,sha256=8HPxHhLHcOA8vvkqyj5Uem8dWxRgsnbx73l2WAWm-Zg,324
88
- adcp/types/generated_poc/product.py,sha256=nxKXK6jsnHsanB1K3jkws19yW0cd1VOFmdjM2XAYN4Y,7993
88
+ adcp/types/generated_poc/product.py,sha256=QRgqTw0ABkDSrMy_IpNfawY2xBDH57zGniteBwZx_6o,6038
89
89
  adcp/types/generated_poc/promoted_offerings.py,sha256=R5a551tIy43kZ2BUk-Lktu0t5hXLJfcNZWLHNDBgXp0,3223
90
90
  adcp/types/generated_poc/promoted_products.py,sha256=kdPVuzMgOCsHjQiW6YIg9AYriLAFqTFYd-4oDEmEexM,1252
91
91
  adcp/types/generated_poc/property.py,sha256=r6km5T5-Sd7tf6w7XmINWyAetlExq1TDNEee8hexaVE,2563
@@ -93,6 +93,7 @@ adcp/types/generated_poc/protocol_envelope.py,sha256=4XAHgtypta00roZnzsAhfVu1n_h
93
93
  adcp/types/generated_poc/provide_performance_feedback_request.py,sha256=nuhQuva-W4rQMCfK-0rmeX2lwVA9UcbGP4InKFDRm2Q,2820
94
94
  adcp/types/generated_poc/provide_performance_feedback_response.py,sha256=6eVf1r8O_8PPBOXdB1w_7JdZUPkPvip7WVIMsANqoGI,1973
95
95
  adcp/types/generated_poc/publisher_identifier_types.py,sha256=CctG8XQRfR1wtxo9bCCuU4oGZ8UoTa87FE0R-kPxYy0,321
96
+ adcp/types/generated_poc/publisher_property_selector.py,sha256=QgxN9jiS9dExTYzLKYsdndDVFXfbLONxcz5Q6xbJhtM,2424
96
97
  adcp/types/generated_poc/push_notification_config.py,sha256=s69T-mz9dSiKPJj-U1icEvqYn0T_Lwl4eygKiM0KhCM,1732
97
98
  adcp/types/generated_poc/reporting_capabilities.py,sha256=Q-Bdl-Vyqky6q3doorGXcvDCb6Kl3go3qnaptp6RJgY,2107
98
99
  adcp/types/generated_poc/response.py,sha256=BrWU9po0mAyIs8htcKgqsO8hehXo0pekqC7hyZNCwrA,707
@@ -119,11 +120,11 @@ adcp/types/generated_poc/webhook_asset.py,sha256=iSSikTEiBBZl0nVEx7tTMHHb1Tknv7l
119
120
  adcp/types/generated_poc/webhook_payload.py,sha256=59d5lN932v_WQC3gHwf_QV4SxKlfsqJmjmtp5ZtziWM,3563
120
121
  adcp/utils/__init__.py,sha256=uetvSJB19CjQbtwEYZiTnumJG11GsafQmXm5eR3hL7E,153
121
122
  adcp/utils/operation_id.py,sha256=wQX9Bb5epXzRq23xoeYPTqzu5yLuhshg7lKJZihcM2k,294
122
- adcp/utils/preview_cache.py,sha256=oc1AUkPrHHmUqfZa5920OCKY7qrDDR86XO6oi1PEHTA,18504
123
+ adcp/utils/preview_cache.py,sha256=PH9bSDOPQzLKqkC_o0a9Xn2i4cNC2oy76dkJdS3j7ck,18491
123
124
  adcp/utils/response_parser.py,sha256=uPk2vIH-RYZmq7y3i8lC4HTMQ3FfKdlgXKTjgJ1955M,6253
124
- adcp-2.5.0.dist-info/licenses/LICENSE,sha256=PF39NR3Ae8PLgBhg3Uxw6ju7iGVIf8hfv9LRWQdii_U,629
125
- adcp-2.5.0.dist-info/METADATA,sha256=FckzUUiNpYqMSnMYPC810uZJL8il646fzXbR_-ooPXI,25810
126
- adcp-2.5.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
127
- adcp-2.5.0.dist-info/entry_points.txt,sha256=DQKpcGsJX8DtVI_SGApQ7tNvqUB4zkTLaTAEpFgmi3U,44
128
- adcp-2.5.0.dist-info/top_level.txt,sha256=T1_NF0GefncFU9v_k56oDwKSJREyCqIM8lAwNZf0EOs,5
129
- adcp-2.5.0.dist-info/RECORD,,
125
+ adcp-2.7.0.dist-info/licenses/LICENSE,sha256=PF39NR3Ae8PLgBhg3Uxw6ju7iGVIf8hfv9LRWQdii_U,629
126
+ adcp-2.7.0.dist-info/METADATA,sha256=SXCp0-h2nmhbbaRPPH4wO4C6pqWqdqYLbQRr7uon4rE,25810
127
+ adcp-2.7.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
128
+ adcp-2.7.0.dist-info/entry_points.txt,sha256=DQKpcGsJX8DtVI_SGApQ7tNvqUB4zkTLaTAEpFgmi3U,44
129
+ adcp-2.7.0.dist-info/top_level.txt,sha256=T1_NF0GefncFU9v_k56oDwKSJREyCqIM8lAwNZf0EOs,5
130
+ adcp-2.7.0.dist-info/RECORD,,
File without changes