adcp 2.11.1__py3-none-any.whl → 2.12.1__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.
Files changed (170) hide show
  1. adcp/ADCP_VERSION +1 -0
  2. adcp/__init__.py +24 -3
  3. adcp/__main__.py +31 -3
  4. adcp/client.py +16 -0
  5. adcp/protocols/a2a.py +178 -25
  6. adcp/protocols/base.py +23 -4
  7. adcp/protocols/mcp.py +44 -0
  8. adcp/types/__init__.py +2 -26
  9. adcp/types/_generated.py +179 -158
  10. adcp/types/generated_poc/adagents.py +221 -25
  11. adcp/types/generated_poc/core/__init__.py +3 -0
  12. adcp/types/generated_poc/{activation_key.py → core/activation_key.py} +2 -2
  13. adcp/types/generated_poc/core/assets/__init__.py +3 -0
  14. adcp/types/generated_poc/{audio_asset.py → core/assets/audio_asset.py} +2 -2
  15. adcp/types/generated_poc/{css_asset.py → core/assets/css_asset.py} +2 -2
  16. adcp/types/generated_poc/{daast_asset.py → core/assets/daast_asset.py} +4 -4
  17. adcp/types/generated_poc/{html_asset.py → core/assets/html_asset.py} +2 -2
  18. adcp/types/generated_poc/core/assets/image_asset.py +19 -0
  19. adcp/types/generated_poc/{javascript_asset.py → core/assets/javascript_asset.py} +3 -3
  20. adcp/types/generated_poc/{text_asset.py → core/assets/text_asset.py} +2 -2
  21. adcp/types/generated_poc/{url_asset.py → core/assets/url_asset.py} +3 -3
  22. adcp/types/generated_poc/{vast_asset.py → core/assets/vast_asset.py} +4 -4
  23. adcp/types/generated_poc/{video_asset.py → core/assets/video_asset.py} +7 -11
  24. adcp/types/generated_poc/{webhook_asset.py → core/assets/webhook_asset.py} +3 -3
  25. adcp/types/generated_poc/{brand_manifest.py → core/brand_manifest.py} +3 -3
  26. adcp/types/generated_poc/core/context.py +15 -0
  27. adcp/types/generated_poc/{creative_asset.py → core/creative_asset.py} +25 -6
  28. adcp/types/generated_poc/{creative_assignment.py → core/creative_assignment.py} +2 -2
  29. adcp/types/generated_poc/{creative_filters.py → core/creative_filters.py} +12 -3
  30. adcp/types/generated_poc/{creative_manifest.py → core/creative_manifest.py} +13 -6
  31. adcp/types/generated_poc/{creative_policy.py → core/creative_policy.py} +3 -3
  32. adcp/types/generated_poc/{delivery_metrics.py → core/delivery_metrics.py} +2 -2
  33. adcp/types/generated_poc/{deployment.py → core/deployment.py} +2 -2
  34. adcp/types/generated_poc/{destination.py → core/destination.py} +2 -2
  35. adcp/types/generated_poc/core/dimensions.py +18 -0
  36. adcp/types/generated_poc/{error.py → core/error.py} +2 -2
  37. adcp/types/generated_poc/core/ext.py +15 -0
  38. adcp/types/generated_poc/{format.py → core/format.py} +85 -54
  39. adcp/types/generated_poc/core/format_id.py +50 -0
  40. adcp/types/generated_poc/{frequency_cap.py → core/frequency_cap.py} +2 -2
  41. adcp/types/generated_poc/{measurement.py → core/measurement.py} +2 -2
  42. adcp/types/generated_poc/{media_buy.py → core/media_buy.py} +6 -3
  43. adcp/types/generated_poc/{package.py → core/package.py} +13 -6
  44. adcp/types/generated_poc/{performance_feedback.py → core/performance_feedback.py} +4 -4
  45. adcp/types/generated_poc/{placement.py → core/placement.py} +3 -3
  46. adcp/types/generated_poc/{product.py → core/product.py} +16 -6
  47. adcp/types/generated_poc/core/product_filters.py +97 -0
  48. adcp/types/generated_poc/{promoted_offerings.py → core/promoted_offerings.py} +2 -2
  49. adcp/types/generated_poc/{promoted_products.py → core/promoted_products.py} +2 -2
  50. adcp/types/generated_poc/{property.py → core/property.py} +5 -4
  51. adcp/types/generated_poc/{property_id.py → core/property_id.py} +2 -2
  52. adcp/types/generated_poc/{property_tag.py → core/property_tag.py} +2 -2
  53. adcp/types/generated_poc/{protocol_envelope.py → core/protocol_envelope.py} +3 -3
  54. adcp/types/generated_poc/{publisher_property_selector.py → core/publisher_property_selector.py} +2 -2
  55. adcp/types/generated_poc/{push_notification_config.py → core/push_notification_config.py} +3 -3
  56. adcp/types/generated_poc/{reporting_capabilities.py → core/reporting_capabilities.py} +3 -3
  57. adcp/types/generated_poc/{response.py → core/response.py} +2 -2
  58. adcp/types/generated_poc/{signal_filters.py → core/signal_filters.py} +3 -3
  59. adcp/types/generated_poc/{sub_asset.py → core/sub_asset.py} +2 -2
  60. adcp/types/generated_poc/{targeting.py → core/targeting.py} +2 -2
  61. adcp/types/generated_poc/{webhook_payload.py → core/webhook_payload.py} +4 -4
  62. adcp/types/generated_poc/creative/__init__.py +3 -0
  63. adcp/types/generated_poc/creative/list_creative_formats_request.py +88 -0
  64. adcp/types/generated_poc/creative/list_creative_formats_response.py +55 -0
  65. adcp/types/generated_poc/{preview_creative_request.py → creative/preview_creative_request.py} +13 -18
  66. adcp/types/generated_poc/{preview_creative_response.py → creative/preview_creative_response.py} +8 -14
  67. adcp/types/generated_poc/{preview_render.py → creative/preview_render.py} +2 -2
  68. adcp/types/generated_poc/enums/__init__.py +3 -0
  69. adcp/types/generated_poc/{adcp_domain.py → enums/adcp_domain.py} +2 -2
  70. adcp/types/generated_poc/{asset_content_type.py → enums/asset_content_type.py} +2 -2
  71. adcp/types/generated_poc/{auth_scheme.py → enums/auth_scheme.py} +2 -2
  72. adcp/types/generated_poc/{available_metric.py → enums/available_metric.py} +2 -2
  73. adcp/types/generated_poc/{channels.py → enums/channels.py} +2 -2
  74. adcp/types/generated_poc/{co_branding_requirement.py → enums/co_branding_requirement.py} +2 -2
  75. adcp/types/generated_poc/{creative_action.py → enums/creative_action.py} +2 -2
  76. adcp/types/generated_poc/{creative_agent_capability.py → enums/creative_agent_capability.py} +2 -2
  77. adcp/types/generated_poc/{creative_sort_field.py → enums/creative_sort_field.py} +2 -2
  78. adcp/types/generated_poc/{creative_status.py → enums/creative_status.py} +2 -2
  79. adcp/types/generated_poc/{daast_tracking_event.py → enums/daast_tracking_event.py} +2 -2
  80. adcp/types/generated_poc/{daast_version.py → enums/daast_version.py} +2 -2
  81. adcp/types/generated_poc/{delivery_type.py → enums/delivery_type.py} +2 -2
  82. adcp/types/generated_poc/{dimension_unit.py → enums/dimension_unit.py} +2 -2
  83. adcp/types/generated_poc/{feed_format.py → enums/feed_format.py} +2 -2
  84. adcp/types/generated_poc/{feedback_source.py → enums/feedback_source.py} +2 -2
  85. adcp/types/generated_poc/{format_category.py → enums/format_category.py} +2 -2
  86. adcp/types/generated_poc/enums/format_id_parameter.py +12 -0
  87. adcp/types/generated_poc/{frequency_cap_scope.py → enums/frequency_cap_scope.py} +2 -2
  88. adcp/types/generated_poc/{history_entry_type.py → enums/history_entry_type.py} +2 -2
  89. adcp/types/generated_poc/{http_method.py → enums/http_method.py} +2 -2
  90. adcp/types/generated_poc/{identifier_types.py → enums/identifier_types.py} +2 -2
  91. adcp/types/generated_poc/{javascript_module_type.py → enums/javascript_module_type.py} +2 -2
  92. adcp/types/generated_poc/{landing_page_requirement.py → enums/landing_page_requirement.py} +2 -2
  93. adcp/types/generated_poc/{markdown_flavor.py → enums/markdown_flavor.py} +2 -2
  94. adcp/types/generated_poc/{media_buy_status.py → enums/media_buy_status.py} +2 -2
  95. adcp/types/generated_poc/{metric_type.py → enums/metric_type.py} +2 -2
  96. adcp/types/generated_poc/{notification_type.py → enums/notification_type.py} +2 -2
  97. adcp/types/generated_poc/{pacing.py → enums/pacing.py} +2 -2
  98. adcp/types/generated_poc/{preview_output_format.py → enums/preview_output_format.py} +2 -2
  99. adcp/types/generated_poc/{pricing_model.py → enums/pricing_model.py} +2 -2
  100. adcp/types/generated_poc/{property_type.py → enums/property_type.py} +2 -2
  101. adcp/types/generated_poc/{publisher_identifier_types.py → enums/publisher_identifier_types.py} +2 -2
  102. adcp/types/generated_poc/{reporting_frequency.py → enums/reporting_frequency.py} +2 -2
  103. adcp/types/generated_poc/{signal_catalog_type.py → enums/signal_catalog_type.py} +2 -2
  104. adcp/types/generated_poc/{sort_direction.py → enums/sort_direction.py} +2 -2
  105. adcp/types/generated_poc/{standard_format_ids.py → enums/standard_format_ids.py} +2 -2
  106. adcp/types/generated_poc/{task_status.py → enums/task_status.py} +2 -2
  107. adcp/types/generated_poc/{task_type.py → enums/task_type.py} +2 -2
  108. adcp/types/generated_poc/{update_frequency.py → enums/update_frequency.py} +2 -2
  109. adcp/types/generated_poc/{url_asset_type.py → enums/url_asset_type.py} +2 -2
  110. adcp/types/generated_poc/{validation_mode.py → enums/validation_mode.py} +2 -2
  111. adcp/types/generated_poc/{vast_tracking_event.py → enums/vast_tracking_event.py} +2 -2
  112. adcp/types/generated_poc/{vast_version.py → enums/vast_version.py} +2 -2
  113. adcp/types/generated_poc/{webhook_response_type.py → enums/webhook_response_type.py} +2 -2
  114. adcp/types/generated_poc/{webhook_security_method.py → enums/webhook_security_method.py} +2 -2
  115. adcp/types/generated_poc/media_buy/__init__.py +3 -0
  116. adcp/types/generated_poc/{build_creative_request.py → media_buy/build_creative_request.py} +9 -11
  117. adcp/types/generated_poc/{build_creative_response.py → media_buy/build_creative_response.py} +11 -17
  118. adcp/types/generated_poc/{create_media_buy_request.py → media_buy/create_media_buy_request.py} +9 -11
  119. adcp/types/generated_poc/{create_media_buy_response.py → media_buy/create_media_buy_response.py} +11 -16
  120. adcp/types/generated_poc/{get_media_buy_delivery_request.py → media_buy/get_media_buy_delivery_request.py} +8 -10
  121. adcp/types/generated_poc/{get_media_buy_delivery_response.py → media_buy/get_media_buy_delivery_response.py} +27 -12
  122. adcp/types/generated_poc/{get_products_request.py → media_buy/get_products_request.py} +9 -11
  123. adcp/types/generated_poc/{get_products_response.py → media_buy/get_products_response.py} +9 -10
  124. adcp/types/generated_poc/{list_authorized_properties_request.py → media_buy/list_authorized_properties_request.py} +8 -9
  125. adcp/types/generated_poc/{list_authorized_properties_response.py → media_buy/list_authorized_properties_response.py} +9 -10
  126. adcp/types/generated_poc/{list_creative_formats_request.py → media_buy/list_creative_formats_request.py} +9 -10
  127. adcp/types/generated_poc/{list_creative_formats_response.py → media_buy/list_creative_formats_response.py} +10 -10
  128. adcp/types/generated_poc/{list_creatives_request.py → media_buy/list_creatives_request.py} +9 -10
  129. adcp/types/generated_poc/{list_creatives_response.py → media_buy/list_creatives_response.py} +14 -15
  130. adcp/types/generated_poc/{package_request.py → media_buy/package_request.py} +7 -5
  131. adcp/types/generated_poc/{provide_performance_feedback_request.py → media_buy/provide_performance_feedback_request.py} +11 -17
  132. adcp/types/generated_poc/{provide_performance_feedback_response.py → media_buy/provide_performance_feedback_response.py} +10 -16
  133. adcp/types/generated_poc/{sync_creatives_request.py → media_buy/sync_creatives_request.py} +14 -15
  134. adcp/types/generated_poc/{sync_creatives_response.py → media_buy/sync_creatives_response.py} +11 -16
  135. adcp/types/generated_poc/{update_media_buy_request.py → media_buy/update_media_buy_request.py} +63 -28
  136. adcp/types/generated_poc/{update_media_buy_response.py → media_buy/update_media_buy_response.py} +11 -16
  137. adcp/types/generated_poc/pricing_options/__init__.py +3 -0
  138. adcp/types/generated_poc/{cpc_option.py → pricing_options/cpc_option.py} +2 -2
  139. adcp/types/generated_poc/{cpcv_option.py → pricing_options/cpcv_option.py} +2 -2
  140. adcp/types/generated_poc/{cpm_auction_option.py → pricing_options/cpm_auction_option.py} +2 -2
  141. adcp/types/generated_poc/{cpm_fixed_option.py → pricing_options/cpm_fixed_option.py} +2 -2
  142. adcp/types/generated_poc/{cpp_option.py → pricing_options/cpp_option.py} +2 -2
  143. adcp/types/generated_poc/{cpv_option.py → pricing_options/cpv_option.py} +2 -2
  144. adcp/types/generated_poc/{flat_rate_option.py → pricing_options/flat_rate_option.py} +2 -2
  145. adcp/types/generated_poc/{vcpm_auction_option.py → pricing_options/vcpm_auction_option.py} +2 -2
  146. adcp/types/generated_poc/{vcpm_fixed_option.py → pricing_options/vcpm_fixed_option.py} +2 -2
  147. adcp/types/generated_poc/protocols/__init__.py +3 -0
  148. adcp/types/generated_poc/protocols/adcp_extension.py +37 -0
  149. adcp/types/generated_poc/signals/__init__.py +3 -0
  150. adcp/types/generated_poc/{activate_signal_request.py → signals/activate_signal_request.py} +8 -10
  151. adcp/types/generated_poc/{activate_signal_response.py → signals/activate_signal_response.py} +10 -16
  152. adcp/types/generated_poc/{get_signals_request.py → signals/get_signals_request.py} +9 -10
  153. adcp/types/generated_poc/{get_signals_response.py → signals/get_signals_response.py} +9 -10
  154. adcp/utils/preview_cache.py +15 -3
  155. {adcp-2.11.1.dist-info → adcp-2.12.1.dist-info}/METADATA +1 -1
  156. adcp-2.12.1.dist-info/RECORD +176 -0
  157. adcp/types/generated_poc/format_id.py +0 -29
  158. adcp/types/generated_poc/image_asset.py +0 -23
  159. adcp/types/generated_poc/markdown_asset.py +0 -39
  160. adcp/types/generated_poc/package_status.py +0 -14
  161. adcp/types/generated_poc/product_filters.py +0 -36
  162. adcp/types/generated_poc/tasks_get_request.py +0 -29
  163. adcp/types/generated_poc/tasks_get_response.py +0 -112
  164. adcp/types/generated_poc/tasks_list_request.py +0 -115
  165. adcp/types/generated_poc/tasks_list_response.py +0 -122
  166. adcp-2.11.1.dist-info/RECORD +0 -166
  167. {adcp-2.11.1.dist-info → adcp-2.12.1.dist-info}/WHEEL +0 -0
  168. {adcp-2.11.1.dist-info → adcp-2.12.1.dist-info}/entry_points.txt +0 -0
  169. {adcp-2.11.1.dist-info → adcp-2.12.1.dist-info}/licenses/LICENSE +0 -0
  170. {adcp-2.11.1.dist-info → adcp-2.12.1.dist-info}/top_level.txt +0 -0
@@ -1,17 +1,19 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: sync-creatives-request.json
3
- # timestamp: 2025-11-21T12:49:05+00:00
2
+ # filename: media_buy/sync_creatives_request.json
3
+ # timestamp: 2025-11-22T16:02:47+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- from typing import Annotated, Any
7
+ from typing import Annotated
8
8
 
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import ConfigDict, Field
11
11
 
12
- from . import creative_asset
13
- from . import push_notification_config as push_notification_config_1
14
- from . import validation_mode as validation_mode_1
12
+ from ..core import context as context_1
13
+ from ..core import creative_asset
14
+ from ..core import ext as ext_1
15
+ from ..core import push_notification_config as push_notification_config_1
16
+ from ..enums import validation_mode as validation_mode_1
15
17
 
16
18
 
17
19
  class SyncCreativesRequest(AdCPBaseModel):
@@ -22,10 +24,12 @@ class SyncCreativesRequest(AdCPBaseModel):
22
24
  dict[str, list[str]] | None,
23
25
  Field(description='Optional bulk assignment of creatives to packages'),
24
26
  ] = None
25
- context: Annotated[
26
- dict[str, Any] | None,
27
+ context: context_1.ContextObject | None = None
28
+ creative_ids: Annotated[
29
+ list[str] | None,
27
30
  Field(
28
- description='Initiator-provided context included in the request payload. Agents must echo this value back unchanged in responses and webhooks. Use for UI/session hints, correlation tokens, or tracking metadata.'
31
+ description='Optional filter to limit sync scope to specific creative IDs. When provided, only these creatives will be created/updated. Other creatives in the library are unaffected. Useful for partial updates and error recovery.',
32
+ max_length=100,
29
33
  ),
30
34
  ] = None
31
35
  creatives: Annotated[
@@ -44,12 +48,7 @@ class SyncCreativesRequest(AdCPBaseModel):
44
48
  description='When true, preview changes without applying them. Returns what would be created/updated/deleted.'
45
49
  ),
46
50
  ] = False
47
- patch: Annotated[
48
- bool | None,
49
- Field(
50
- description='When true, only provided fields are updated (partial update). When false, entire creative is replaced (full upsert).'
51
- ),
52
- ] = False
51
+ ext: ext_1.ExtensionObject | None = None
53
52
  push_notification_config: Annotated[
54
53
  push_notification_config_1.PushNotificationConfig | None,
55
54
  Field(
@@ -1,15 +1,18 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: sync-creatives-response.json
3
- # timestamp: 2025-11-21T12:49:05+00:00
2
+ # filename: media_buy/sync_creatives_response.json
3
+ # timestamp: 2025-11-22T19:16:02+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- from typing import Annotated, Any
7
+ from typing import Annotated
8
8
 
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import AnyUrl, AwareDatetime, ConfigDict, Field, RootModel
11
11
 
12
- from . import creative_action, error
12
+ from ..core import context as context_1
13
+ from ..core import error
14
+ from ..core import ext as ext_1
15
+ from ..enums import creative_action
13
16
 
14
17
 
15
18
  class Creative(AdCPBaseModel):
@@ -64,12 +67,7 @@ class SyncCreativesResponse1(AdCPBaseModel):
64
67
  model_config = ConfigDict(
65
68
  extra='forbid',
66
69
  )
67
- context: Annotated[
68
- dict[str, Any] | None,
69
- Field(
70
- description='Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.'
71
- ),
72
- ] = None
70
+ context: context_1.ContextObject | None = None
73
71
  creatives: Annotated[
74
72
  list[Creative],
75
73
  Field(
@@ -79,18 +77,14 @@ class SyncCreativesResponse1(AdCPBaseModel):
79
77
  dry_run: Annotated[
80
78
  bool | None, Field(description='Whether this was a dry run (no actual changes made)')
81
79
  ] = None
80
+ ext: ext_1.ExtensionObject | None = None
82
81
 
83
82
 
84
83
  class SyncCreativesResponse2(AdCPBaseModel):
85
84
  model_config = ConfigDict(
86
85
  extra='forbid',
87
86
  )
88
- context: Annotated[
89
- dict[str, Any] | None,
90
- Field(
91
- description='Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.'
92
- ),
93
- ] = None
87
+ context: context_1.ContextObject | None = None
94
88
  errors: Annotated[
95
89
  list[error.Error],
96
90
  Field(
@@ -98,6 +92,7 @@ class SyncCreativesResponse2(AdCPBaseModel):
98
92
  min_length=1,
99
93
  ),
100
94
  ]
95
+ ext: ext_1.ExtensionObject | None = None
101
96
 
102
97
 
103
98
  class SyncCreativesResponse(RootModel[SyncCreativesResponse1 | SyncCreativesResponse2]):
@@ -1,24 +1,26 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: update-media-buy-request.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
2
+ # filename: media_buy/update_media_buy_request.json
3
+ # timestamp: 2025-11-22T16:02:47+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- from typing import Annotated, Any
7
+ from typing import Annotated
8
8
 
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import AwareDatetime, ConfigDict, Field, RootModel
11
11
 
12
- from . import pacing as pacing_1
13
- from . import push_notification_config as push_notification_config_1
14
- from . import targeting
12
+ from ..core import context as context_1
13
+ from ..core import creative_asset, creative_assignment
14
+ from ..core import ext as ext_1
15
+ from ..core import push_notification_config as push_notification_config_1
16
+ from ..core import targeting
17
+ from ..enums import pacing as pacing_1
15
18
 
16
19
 
17
20
  class Packages(AdCPBaseModel):
18
21
  model_config = ConfigDict(
19
22
  extra='forbid',
20
23
  )
21
- active: Annotated[bool | None, Field(description='Pause/resume specific package')] = None
22
24
  bid_price: Annotated[
23
25
  float | None,
24
26
  Field(
@@ -36,11 +38,29 @@ class Packages(AdCPBaseModel):
36
38
  buyer_ref: Annotated[
37
39
  str | None, Field(description="Buyer's reference for the package to update")
38
40
  ] = None
39
- creative_ids: Annotated[list[str] | None, Field(description='Update creative assignments')] = (
40
- None
41
- )
41
+ creative_assignments: Annotated[
42
+ list[creative_assignment.CreativeAssignment] | None,
43
+ Field(
44
+ description='Full creative assignment objects with weights and placement targeting (alternative to creative_ids - provides granular control over weights and placement targeting). Uses replacement semantics like creative_ids.'
45
+ ),
46
+ ] = None
47
+ creative_ids: Annotated[
48
+ list[str] | None,
49
+ Field(description='Update creative assignments (references existing library creatives)'),
50
+ ] = None
51
+ creatives: Annotated[
52
+ list[creative_asset.CreativeAsset] | None,
53
+ Field(
54
+ description='Full creative objects to upload and assign to this package (alternative to creative_ids - creatives will be added to library). Supports both static and generative creatives.',
55
+ max_length=100,
56
+ ),
57
+ ] = None
42
58
  pacing: pacing_1.Pacing | None = None
43
59
  package_id: Annotated[str, Field(description="Publisher's ID of package to update")]
60
+ paused: Annotated[
61
+ bool | None,
62
+ Field(description='Pause/resume specific package (true = paused, false = active)'),
63
+ ] = None
44
64
  targeting_overlay: targeting.TargetingOverlay | None = None
45
65
 
46
66
 
@@ -48,7 +68,6 @@ class Packages1(AdCPBaseModel):
48
68
  model_config = ConfigDict(
49
69
  extra='forbid',
50
70
  )
51
- active: Annotated[bool | None, Field(description='Pause/resume specific package')] = None
52
71
  bid_price: Annotated[
53
72
  float | None,
54
73
  Field(
@@ -64,13 +83,31 @@ class Packages1(AdCPBaseModel):
64
83
  ),
65
84
  ] = None
66
85
  buyer_ref: Annotated[str, Field(description="Buyer's reference for the package to update")]
67
- creative_ids: Annotated[list[str] | None, Field(description='Update creative assignments')] = (
68
- None
69
- )
86
+ creative_assignments: Annotated[
87
+ list[creative_assignment.CreativeAssignment] | None,
88
+ Field(
89
+ description='Full creative assignment objects with weights and placement targeting (alternative to creative_ids - provides granular control over weights and placement targeting). Uses replacement semantics like creative_ids.'
90
+ ),
91
+ ] = None
92
+ creative_ids: Annotated[
93
+ list[str] | None,
94
+ Field(description='Update creative assignments (references existing library creatives)'),
95
+ ] = None
96
+ creatives: Annotated[
97
+ list[creative_asset.CreativeAsset] | None,
98
+ Field(
99
+ description='Full creative objects to upload and assign to this package (alternative to creative_ids - creatives will be added to library). Supports both static and generative creatives.',
100
+ max_length=100,
101
+ ),
102
+ ] = None
70
103
  pacing: pacing_1.Pacing | None = None
71
104
  package_id: Annotated[str | None, Field(description="Publisher's ID of package to update")] = (
72
105
  None
73
106
  )
107
+ paused: Annotated[
108
+ bool | None,
109
+ Field(description='Pause/resume specific package (true = paused, false = active)'),
110
+ ] = None
74
111
  targeting_overlay: targeting.TargetingOverlay | None = None
75
112
 
76
113
 
@@ -78,23 +115,22 @@ class UpdateMediaBuyRequest1(AdCPBaseModel):
78
115
  model_config = ConfigDict(
79
116
  extra='forbid',
80
117
  )
81
- active: Annotated[bool | None, Field(description='Pause/resume the entire media buy')] = None
82
118
  buyer_ref: Annotated[
83
119
  str | None, Field(description="Buyer's reference for the media buy to update")
84
120
  ] = None
85
- context: Annotated[
86
- dict[str, Any] | None,
87
- Field(
88
- description='Initiator-provided context included in the request payload. Agents must echo this value back unchanged in responses and webhooks. Use for UI/session hints, correlation tokens, or tracking metadata.'
89
- ),
90
- ] = None
121
+ context: context_1.ContextObject | None = None
91
122
  end_time: Annotated[
92
123
  AwareDatetime | None, Field(description='New end date/time in ISO 8601 format')
93
124
  ] = None
125
+ ext: ext_1.ExtensionObject | None = None
94
126
  media_buy_id: Annotated[str, Field(description="Publisher's ID of the media buy to update")]
95
127
  packages: Annotated[
96
128
  list[Packages | Packages1] | None, Field(description='Package-specific updates')
97
129
  ] = None
130
+ paused: Annotated[
131
+ bool | None,
132
+ Field(description='Pause/resume the entire media buy (true = paused, false = active)'),
133
+ ] = None
98
134
  push_notification_config: Annotated[
99
135
  push_notification_config_1.PushNotificationConfig | None,
100
136
  Field(
@@ -119,23 +155,22 @@ class UpdateMediaBuyRequest2(AdCPBaseModel):
119
155
  model_config = ConfigDict(
120
156
  extra='forbid',
121
157
  )
122
- active: Annotated[bool | None, Field(description='Pause/resume the entire media buy')] = None
123
158
  buyer_ref: Annotated[str, Field(description="Buyer's reference for the media buy to update")]
124
- context: Annotated[
125
- dict[str, Any] | None,
126
- Field(
127
- description='Initiator-provided context included in the request payload. Agents must echo this value back unchanged in responses and webhooks. Use for UI/session hints, correlation tokens, or tracking metadata.'
128
- ),
129
- ] = None
159
+ context: context_1.ContextObject | None = None
130
160
  end_time: Annotated[
131
161
  AwareDatetime | None, Field(description='New end date/time in ISO 8601 format')
132
162
  ] = None
163
+ ext: ext_1.ExtensionObject | None = None
133
164
  media_buy_id: Annotated[
134
165
  str | None, Field(description="Publisher's ID of the media buy to update")
135
166
  ] = None
136
167
  packages: Annotated[
137
168
  list[Packages2 | Packages3] | None, Field(description='Package-specific updates')
138
169
  ] = None
170
+ paused: Annotated[
171
+ bool | None,
172
+ Field(description='Pause/resume the entire media buy (true = paused, false = active)'),
173
+ ] = None
139
174
  push_notification_config: Annotated[
140
175
  push_notification_config_1.PushNotificationConfig | None,
141
176
  Field(
@@ -1,31 +1,30 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: update-media-buy-response.json
3
- # timestamp: 2025-11-20T11:58:34+00:00
2
+ # filename: media_buy/update_media_buy_response.json
3
+ # timestamp: 2025-11-22T19:16:02+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- from typing import Annotated, Any
7
+ from typing import Annotated
8
8
 
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import AwareDatetime, ConfigDict, Field, RootModel
11
11
 
12
- from . import error, package
12
+ from ..core import context as context_1
13
+ from ..core import error
14
+ from ..core import ext as ext_1
15
+ from ..core import package
13
16
 
14
17
 
15
18
  class UpdateMediaBuyResponse2(AdCPBaseModel):
16
19
  model_config = ConfigDict(
17
20
  extra='forbid',
18
21
  )
19
- context: Annotated[
20
- dict[str, Any] | None,
21
- Field(
22
- description='Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.'
23
- ),
24
- ] = None
22
+ context: context_1.ContextObject | None = None
25
23
  errors: Annotated[
26
24
  list[error.Error],
27
25
  Field(description='Array of errors explaining why the operation failed', min_length=1),
28
26
  ]
27
+ ext: ext_1.ExtensionObject | None = None
29
28
 
30
29
 
31
30
  class UpdateMediaBuyResponse1(AdCPBaseModel):
@@ -37,12 +36,8 @@ class UpdateMediaBuyResponse1(AdCPBaseModel):
37
36
  Field(description='Array of packages that were modified with complete state information'),
38
37
  ] = None
39
38
  buyer_ref: Annotated[str, Field(description="Buyer's reference identifier for the media buy")]
40
- context: Annotated[
41
- dict[str, Any] | None,
42
- Field(
43
- description='Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.'
44
- ),
45
- ] = None
39
+ context: context_1.ContextObject | None = None
40
+ ext: ext_1.ExtensionObject | None = None
46
41
  implementation_date: Annotated[
47
42
  AwareDatetime | None,
48
43
  Field(description='ISO 8601 timestamp when changes take effect (null if pending approval)'),
@@ -0,0 +1,3 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: .schema_temp
3
+ # timestamp: 2025-11-22T15:23:24+00:00
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: cpc-option.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
2
+ # filename: pricing_options/cpc_option.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: cpcv-option.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
2
+ # filename: pricing_options/cpcv_option.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: cpm-auction-option.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
2
+ # filename: pricing_options/cpm_auction_option.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: cpm-fixed-option.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
2
+ # filename: pricing_options/cpm_fixed_option.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: cpp-option.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
2
+ # filename: pricing_options/cpp_option.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: cpv-option.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
2
+ # filename: pricing_options/cpv_option.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: flat-rate-option.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
2
+ # filename: pricing_options/flat_rate_option.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: vcpm-auction-option.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
2
+ # filename: pricing_options/vcpm_auction_option.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: vcpm-fixed-option.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
2
+ # filename: pricing_options/vcpm_fixed_option.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -0,0 +1,3 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: .schema_temp
3
+ # timestamp: 2025-11-22T16:02:47+00:00
@@ -0,0 +1,37 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: protocols/adcp_extension.json
3
+ # timestamp: 2025-11-22T16:02:47+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
+
14
+ class ProtocolsSupportedEnum(Enum):
15
+ media_buy = 'media_buy'
16
+ creative = 'creative'
17
+ signals = 'signals'
18
+
19
+
20
+ class AdcpAgentCardExtension(AdCPBaseModel):
21
+ model_config = ConfigDict(
22
+ extra='forbid',
23
+ )
24
+ adcp_version: Annotated[
25
+ str,
26
+ Field(
27
+ description="Semantic version of the AdCP specification this agent implements (e.g., '2.4.0')",
28
+ pattern='^\\d+\\.\\d+\\.\\d+$',
29
+ ),
30
+ ]
31
+ protocols_supported: Annotated[
32
+ list[ProtocolsSupportedEnum],
33
+ Field(
34
+ description='AdCP protocol domains supported by this agent. At least one must be specified.',
35
+ min_length=1,
36
+ ),
37
+ ]
@@ -0,0 +1,3 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: .schema_temp
3
+ # timestamp: 2025-11-22T15:23:24+00:00
@@ -1,27 +1,24 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: activate-signal-request.json
3
- # timestamp: 2025-11-20T20:44:40+00:00
2
+ # filename: signals/activate_signal_request.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- from typing import Annotated, Any
7
+ from typing import Annotated
8
8
 
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import ConfigDict, Field
11
11
 
12
- from . import destination
12
+ from ..core import context as context_1
13
+ from ..core import destination
14
+ from ..core import ext as ext_1
13
15
 
14
16
 
15
17
  class ActivateSignalRequest(AdCPBaseModel):
16
18
  model_config = ConfigDict(
17
19
  extra='forbid',
18
20
  )
19
- context: Annotated[
20
- dict[str, Any] | None,
21
- Field(
22
- description='Initiator-provided context included in the request payload. Agents must echo this value back unchanged in responses and webhooks. Use for UI/session hints, correlation tokens, or tracking metadata.'
23
- ),
24
- ] = None
21
+ context: context_1.ContextObject | None = None
25
22
  deployments: Annotated[
26
23
  list[destination.Destination1 | destination.Destination2],
27
24
  Field(
@@ -29,6 +26,7 @@ class ActivateSignalRequest(AdCPBaseModel):
29
26
  min_length=1,
30
27
  ),
31
28
  ]
29
+ ext: ext_1.ExtensionObject | None = None
32
30
  signal_agent_segment_id: Annotated[
33
31
  str, Field(description='The universal identifier for the signal to activate')
34
32
  ]
@@ -1,43 +1,36 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: activate-signal-response.json
3
- # timestamp: 2025-11-20T20:44:40+00:00
2
+ # filename: signals/activate_signal_response.json
3
+ # timestamp: 2025-11-22T19:16:02+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- from typing import Annotated, Any
7
+ from typing import Annotated
8
8
 
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import ConfigDict, Field, RootModel
11
11
 
12
- from . import deployment, error
12
+ from ..core import context as context_1
13
+ from ..core import deployment, error
14
+ from ..core import ext as ext_1
13
15
 
14
16
 
15
17
  class ActivateSignalResponse1(AdCPBaseModel):
16
18
  model_config = ConfigDict(
17
19
  extra='forbid',
18
20
  )
19
- context: Annotated[
20
- dict[str, Any] | None,
21
- Field(
22
- description='Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.'
23
- ),
24
- ] = None
21
+ context: context_1.ContextObject | None = None
25
22
  deployments: Annotated[
26
23
  list[deployment.Deployment1 | deployment.Deployment2],
27
24
  Field(description='Array of deployment results for each deployment target'),
28
25
  ]
26
+ ext: ext_1.ExtensionObject | None = None
29
27
 
30
28
 
31
29
  class ActivateSignalResponse2(AdCPBaseModel):
32
30
  model_config = ConfigDict(
33
31
  extra='forbid',
34
32
  )
35
- context: Annotated[
36
- dict[str, Any] | None,
37
- Field(
38
- description='Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.'
39
- ),
40
- ] = None
33
+ context: context_1.ContextObject | None = None
41
34
  errors: Annotated[
42
35
  list[error.Error],
43
36
  Field(
@@ -45,6 +38,7 @@ class ActivateSignalResponse2(AdCPBaseModel):
45
38
  min_length=1,
46
39
  ),
47
40
  ]
41
+ ext: ext_1.ExtensionObject | None = None
48
42
 
49
43
 
50
44
  class ActivateSignalResponse(RootModel[ActivateSignalResponse1 | ActivateSignalResponse2]):
@@ -1,15 +1,18 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: get-signals-request.json
3
- # timestamp: 2025-11-21T12:49:05+00:00
2
+ # filename: signals/get_signals_request.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- from typing import Annotated, Any
7
+ from typing import Annotated
8
8
 
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import ConfigDict, Field, RootModel
11
11
 
12
- from . import destination, signal_filters
12
+ from ..core import context as context_1
13
+ from ..core import destination
14
+ from ..core import ext as ext_1
15
+ from ..core import signal_filters
13
16
 
14
17
 
15
18
  class Country(RootModel[str]):
@@ -36,15 +39,11 @@ class GetSignalsRequest(AdCPBaseModel):
36
39
  model_config = ConfigDict(
37
40
  extra='forbid',
38
41
  )
39
- context: Annotated[
40
- dict[str, Any] | None,
41
- Field(
42
- description='Initiator-provided context included in the request payload. Agents must echo this value back unchanged in responses and webhooks. Use for UI/session hints, correlation tokens, or tracking metadata.'
43
- ),
44
- ] = None
42
+ context: context_1.ContextObject | None = None
45
43
  deliver_to: Annotated[
46
44
  DeliverTo, Field(description='Deployment targets where signals need to be activated')
47
45
  ]
46
+ ext: ext_1.ExtensionObject | None = None
48
47
  filters: signal_filters.SignalFilters | None = None
49
48
  max_results: Annotated[
50
49
  int | None, Field(description='Maximum number of results to return', ge=1)