adcp 2.10.0__py3-none-any.whl → 2.11.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 (76) hide show
  1. adcp/__init__.py +57 -53
  2. adcp/client.py +9 -11
  3. adcp/simple.py +1 -1
  4. adcp/types/__init__.py +329 -301
  5. adcp/types/_generated.py +103 -67
  6. adcp/types/generated_poc/adagents.py +55 -63
  7. adcp/types/generated_poc/adcp_domain.py +12 -0
  8. adcp/types/generated_poc/auth_scheme.py +12 -0
  9. adcp/types/generated_poc/available_metric.py +19 -0
  10. adcp/types/generated_poc/co_branding_requirement.py +13 -0
  11. adcp/types/generated_poc/creative_action.py +15 -0
  12. adcp/types/generated_poc/creative_agent_capability.py +14 -0
  13. adcp/types/generated_poc/creative_filters.py +77 -0
  14. adcp/types/generated_poc/creative_policy.py +9 -15
  15. adcp/types/generated_poc/creative_sort_field.py +16 -0
  16. adcp/types/generated_poc/daast_asset.py +9 -24
  17. adcp/types/generated_poc/daast_tracking_event.py +21 -0
  18. adcp/types/generated_poc/daast_version.py +12 -0
  19. adcp/types/generated_poc/dimension_unit.py +14 -0
  20. adcp/types/generated_poc/feed_format.py +13 -0
  21. adcp/types/generated_poc/feedback_source.py +14 -0
  22. adcp/types/generated_poc/format.py +5 -11
  23. adcp/types/generated_poc/get_media_buy_delivery_request.py +3 -19
  24. adcp/types/generated_poc/get_products_request.py +3 -36
  25. adcp/types/generated_poc/get_signals_request.py +3 -26
  26. adcp/types/generated_poc/get_signals_response.py +5 -10
  27. adcp/types/generated_poc/history_entry_type.py +12 -0
  28. adcp/types/generated_poc/http_method.py +12 -0
  29. adcp/types/generated_poc/javascript_asset.py +6 -8
  30. adcp/types/generated_poc/javascript_module_type.py +13 -0
  31. adcp/types/generated_poc/landing_page_requirement.py +13 -0
  32. adcp/types/generated_poc/list_creative_formats_response.py +4 -11
  33. adcp/types/generated_poc/list_creatives_request.py +10 -87
  34. adcp/types/generated_poc/list_creatives_response.py +13 -17
  35. adcp/types/generated_poc/markdown_asset.py +4 -8
  36. adcp/types/generated_poc/markdown_flavor.py +12 -0
  37. adcp/types/generated_poc/metric_type.py +18 -0
  38. adcp/types/generated_poc/notification_type.py +14 -0
  39. adcp/types/generated_poc/performance_feedback.py +9 -20
  40. adcp/types/generated_poc/preview_creative_request.py +8 -13
  41. adcp/types/generated_poc/preview_output_format.py +12 -0
  42. adcp/types/generated_poc/product_filters.py +36 -0
  43. adcp/types/generated_poc/property.py +11 -27
  44. adcp/types/generated_poc/property_id.py +21 -0
  45. adcp/types/generated_poc/property_tag.py +21 -0
  46. adcp/types/generated_poc/property_type.py +17 -0
  47. adcp/types/generated_poc/provide_performance_feedback_request.py +71 -25
  48. adcp/types/generated_poc/publisher_property_selector.py +6 -12
  49. adcp/types/generated_poc/push_notification_config.py +3 -7
  50. adcp/types/generated_poc/reporting_capabilities.py +4 -21
  51. adcp/types/generated_poc/reporting_frequency.py +13 -0
  52. adcp/types/generated_poc/signal_catalog_type.py +13 -0
  53. adcp/types/generated_poc/signal_filters.py +29 -0
  54. adcp/types/generated_poc/sort_direction.py +12 -0
  55. adcp/types/generated_poc/sync_creatives_request.py +4 -9
  56. adcp/types/generated_poc/sync_creatives_response.py +5 -12
  57. adcp/types/generated_poc/tasks_list_request.py +9 -15
  58. adcp/types/generated_poc/update_frequency.py +14 -0
  59. adcp/types/generated_poc/url_asset.py +3 -8
  60. adcp/types/generated_poc/url_asset_type.py +13 -0
  61. adcp/types/generated_poc/validation_mode.py +12 -0
  62. adcp/types/generated_poc/vast_asset.py +13 -36
  63. adcp/types/generated_poc/vast_tracking_event.py +26 -0
  64. adcp/types/generated_poc/vast_version.py +15 -0
  65. adcp/types/generated_poc/webhook_asset.py +10 -22
  66. adcp/types/generated_poc/webhook_payload.py +3 -9
  67. adcp/types/generated_poc/webhook_response_type.py +14 -0
  68. adcp/types/generated_poc/webhook_security_method.py +13 -0
  69. adcp/utils/preview_cache.py +5 -5
  70. {adcp-2.10.0.dist-info → adcp-2.11.1.dist-info}/METADATA +1 -1
  71. {adcp-2.10.0.dist-info → adcp-2.11.1.dist-info}/RECORD +75 -40
  72. adcp/types/stable.py +0 -449
  73. {adcp-2.10.0.dist-info → adcp-2.11.1.dist-info}/WHEEL +0 -0
  74. {adcp-2.10.0.dist-info → adcp-2.11.1.dist-info}/entry_points.txt +0 -0
  75. {adcp-2.10.0.dist-info → adcp-2.11.1.dist-info}/licenses/LICENSE +0 -0
  76. {adcp-2.10.0.dist-info → adcp-2.11.1.dist-info}/top_level.txt +0 -0
@@ -1,32 +1,15 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: reporting-capabilities.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
3
+ # timestamp: 2025-11-21T12:49:05+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- from enum import Enum
8
7
  from typing import Annotated
9
8
 
10
9
  from adcp.types.base import AdCPBaseModel
11
10
  from pydantic import ConfigDict, Field
12
11
 
13
-
14
- class AvailableMetric(Enum):
15
- impressions = 'impressions'
16
- spend = 'spend'
17
- clicks = 'clicks'
18
- ctr = 'ctr'
19
- video_completions = 'video_completions'
20
- completion_rate = 'completion_rate'
21
- conversions = 'conversions'
22
- viewability = 'viewability'
23
- engagement_rate = 'engagement_rate'
24
-
25
-
26
- class AvailableReportingFrequency(Enum):
27
- hourly = 'hourly'
28
- daily = 'daily'
29
- monthly = 'monthly'
12
+ from . import available_metric, reporting_frequency
30
13
 
31
14
 
32
15
  class ReportingCapabilities(AdCPBaseModel):
@@ -34,7 +17,7 @@ class ReportingCapabilities(AdCPBaseModel):
34
17
  extra='forbid',
35
18
  )
36
19
  available_metrics: Annotated[
37
- list[AvailableMetric],
20
+ list[available_metric.AvailableMetric],
38
21
  Field(
39
22
  description='Metrics available in reporting. Impressions and spend are always implicitly included.',
40
23
  examples=[
@@ -44,7 +27,7 @@ class ReportingCapabilities(AdCPBaseModel):
44
27
  ),
45
28
  ]
46
29
  available_reporting_frequencies: Annotated[
47
- list[AvailableReportingFrequency],
30
+ list[reporting_frequency.ReportingFrequency],
48
31
  Field(description='Supported reporting frequency options', min_length=1),
49
32
  ]
50
33
  expected_delay_minutes: Annotated[
@@ -0,0 +1,13 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: reporting-frequency.json
3
+ # timestamp: 2025-11-21T12:49:05+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class ReportingFrequency(Enum):
11
+ hourly = 'hourly'
12
+ daily = 'daily'
13
+ monthly = 'monthly'
@@ -0,0 +1,13 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: signal-catalog-type.json
3
+ # timestamp: 2025-11-21T12:49:05+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class SignalCatalogType(Enum):
11
+ marketplace = 'marketplace'
12
+ custom = 'custom'
13
+ owned = 'owned'
@@ -0,0 +1,29 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: signal-filters.json
3
+ # timestamp: 2025-11-21T12:49:05+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 . import signal_catalog_type
13
+
14
+
15
+ class SignalFilters(AdCPBaseModel):
16
+ model_config = ConfigDict(
17
+ extra='forbid',
18
+ )
19
+ catalog_types: Annotated[
20
+ list[signal_catalog_type.SignalCatalogType] | None,
21
+ Field(description='Filter by catalog type'),
22
+ ] = None
23
+ data_providers: Annotated[
24
+ list[str] | None, Field(description='Filter by specific data providers')
25
+ ] = None
26
+ max_cpm: Annotated[float | None, Field(description='Maximum CPM price filter', ge=0.0)] = None
27
+ min_coverage_percentage: Annotated[
28
+ float | None, Field(description='Minimum coverage requirement', ge=0.0, le=100.0)
29
+ ] = None
@@ -0,0 +1,12 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: sort-direction.json
3
+ # timestamp: 2025-11-21T12:49:05+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class SortDirection(Enum):
11
+ asc = 'asc'
12
+ desc = 'desc'
@@ -1,10 +1,9 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: sync-creatives-request.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
3
+ # timestamp: 2025-11-21T12:49:05+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- from enum import Enum
8
7
  from typing import Annotated, Any
9
8
 
10
9
  from adcp.types.base import AdCPBaseModel
@@ -12,11 +11,7 @@ from pydantic import ConfigDict, Field
12
11
 
13
12
  from . import creative_asset
14
13
  from . import push_notification_config as push_notification_config_1
15
-
16
-
17
- class ValidationMode(Enum):
18
- strict = 'strict'
19
- lenient = 'lenient'
14
+ from . import validation_mode as validation_mode_1
20
15
 
21
16
 
22
17
  class SyncCreativesRequest(AdCPBaseModel):
@@ -62,8 +57,8 @@ class SyncCreativesRequest(AdCPBaseModel):
62
57
  ),
63
58
  ] = None
64
59
  validation_mode: Annotated[
65
- ValidationMode | None,
60
+ validation_mode_1.ValidationMode | None,
66
61
  Field(
67
62
  description="Validation strictness. 'strict' fails entire sync on any validation error. 'lenient' processes valid creatives and reports errors."
68
63
  ),
69
- ] = ValidationMode.strict
64
+ ] = validation_mode_1.ValidationMode.strict
@@ -1,31 +1,24 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: sync-creatives-response.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
3
+ # timestamp: 2025-11-21T12:49:05+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- from enum import Enum
8
7
  from typing import Annotated, Any
9
8
 
10
9
  from adcp.types.base import AdCPBaseModel
11
10
  from pydantic import AnyUrl, AwareDatetime, ConfigDict, Field, RootModel
12
11
 
13
- from . import error
14
-
15
-
16
- class Action(Enum):
17
- created = 'created'
18
- updated = 'updated'
19
- unchanged = 'unchanged'
20
- failed = 'failed'
21
- deleted = 'deleted'
12
+ from . import creative_action, error
22
13
 
23
14
 
24
15
  class Creative(AdCPBaseModel):
25
16
  model_config = ConfigDict(
26
17
  extra='forbid',
27
18
  )
28
- action: Annotated[Action, Field(description='Action taken for this creative')]
19
+ action: Annotated[
20
+ creative_action.CreativeAction, Field(description='Action taken for this creative')
21
+ ]
29
22
  assigned_to: Annotated[
30
23
  list[str] | None,
31
24
  Field(
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: tasks-list-request.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
3
+ # timestamp: 2025-11-21T12:49:05+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -10,15 +10,10 @@ from typing import Annotated, Any
10
10
  from adcp.types.base import AdCPBaseModel
11
11
  from pydantic import AwareDatetime, ConfigDict, Field
12
12
 
13
- from . import task_status
13
+ from . import adcp_domain, sort_direction, task_status
14
14
  from . import task_type as task_type_1
15
15
 
16
16
 
17
- class Domain(Enum):
18
- media_buy = 'media-buy'
19
- signals = 'signals'
20
-
21
-
22
17
  class Filters(AdCPBaseModel):
23
18
  model_config = ConfigDict(
24
19
  extra='forbid',
@@ -35,9 +30,11 @@ class Filters(AdCPBaseModel):
35
30
  created_before: Annotated[
36
31
  AwareDatetime | None, Field(description='Filter tasks created before this date (ISO 8601)')
37
32
  ] = None
38
- domain: Annotated[Domain | None, Field(description='Filter by single AdCP domain')] = None
33
+ domain: Annotated[
34
+ adcp_domain.AdcpDomain | None, Field(description='Filter by single AdCP domain')
35
+ ] = None
39
36
  domains: Annotated[
40
- list[Domain] | None, Field(description='Filter by multiple AdCP domains')
37
+ list[adcp_domain.AdcpDomain] | None, Field(description='Filter by multiple AdCP domains')
41
38
  ] = None
42
39
  has_webhook: Annotated[
43
40
  bool | None, Field(description='Filter tasks that have webhook configuration when true')
@@ -77,11 +74,6 @@ class Pagination(AdCPBaseModel):
77
74
  offset: Annotated[int | None, Field(description='Number of tasks to skip', ge=0)] = 0
78
75
 
79
76
 
80
- class Direction(Enum):
81
- asc = 'asc'
82
- desc = 'desc'
83
-
84
-
85
77
  class Field1(Enum):
86
78
  created_at = 'created_at'
87
79
  updated_at = 'updated_at'
@@ -94,7 +86,9 @@ class Sort(AdCPBaseModel):
94
86
  model_config = ConfigDict(
95
87
  extra='forbid',
96
88
  )
97
- direction: Annotated[Direction | None, Field(description='Sort direction')] = Direction.desc
89
+ direction: Annotated[
90
+ sort_direction.SortDirection | None, Field(description='Sort direction')
91
+ ] = sort_direction.SortDirection.desc
98
92
  field: Annotated[Field1 | None, Field(description='Field to sort by')] = Field1.created_at
99
93
 
100
94
 
@@ -0,0 +1,14 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: update-frequency.json
3
+ # timestamp: 2025-11-21T12:49:05+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class UpdateFrequency(Enum):
11
+ realtime = 'realtime'
12
+ hourly = 'hourly'
13
+ daily = 'daily'
14
+ weekly = 'weekly'
@@ -1,20 +1,15 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: url-asset.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
3
+ # timestamp: 2025-11-21T12:49:05+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- from enum import Enum
8
7
  from typing import Annotated
9
8
 
10
9
  from adcp.types.base import AdCPBaseModel
11
10
  from pydantic import AnyUrl, ConfigDict, Field
12
11
 
13
-
14
- class UrlType(Enum):
15
- clickthrough = 'clickthrough'
16
- tracker_pixel = 'tracker_pixel'
17
- tracker_script = 'tracker_script'
12
+ from . import url_asset_type
18
13
 
19
14
 
20
15
  class UrlAsset(AdCPBaseModel):
@@ -26,7 +21,7 @@ class UrlAsset(AdCPBaseModel):
26
21
  ] = None
27
22
  url: Annotated[AnyUrl, Field(description='URL reference')]
28
23
  url_type: Annotated[
29
- UrlType | None,
24
+ url_asset_type.UrlAssetType | None,
30
25
  Field(
31
26
  description="Type of URL asset: 'clickthrough' for user click destination (landing page), 'tracker_pixel' for impression/event tracking via HTTP request (fires GET, expects pixel/204 response), 'tracker_script' for measurement SDKs that must load as <script> tag (OMID verification, native event trackers using method:2)"
32
27
  ),
@@ -0,0 +1,13 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: url-asset-type.json
3
+ # timestamp: 2025-11-21T12:49:05+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class UrlAssetType(Enum):
11
+ clickthrough = 'clickthrough'
12
+ tracker_pixel = 'tracker_pixel'
13
+ tracker_script = 'tracker_script'
@@ -0,0 +1,12 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: validation-mode.json
3
+ # timestamp: 2025-11-21T12:49:05+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class ValidationMode(Enum):
11
+ strict = 'strict'
12
+ lenient = 'lenient'
@@ -1,41 +1,16 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: vast-asset.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
3
+ # timestamp: 2025-11-21T12:49:05+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- from enum import Enum
8
7
  from typing import Annotated, Literal
9
8
 
10
9
  from adcp.types.base import AdCPBaseModel
11
10
  from pydantic import AnyUrl, ConfigDict, Field
12
11
 
13
-
14
- class TrackingEvent(Enum):
15
- start = 'start'
16
- firstQuartile = 'firstQuartile'
17
- midpoint = 'midpoint'
18
- thirdQuartile = 'thirdQuartile'
19
- complete = 'complete'
20
- impression = 'impression'
21
- click = 'click'
22
- pause = 'pause'
23
- resume = 'resume'
24
- skip = 'skip'
25
- mute = 'mute'
26
- unmute = 'unmute'
27
- fullscreen = 'fullscreen'
28
- exitFullscreen = 'exitFullscreen'
29
- playerExpand = 'playerExpand'
30
- playerCollapse = 'playerCollapse'
31
-
32
-
33
- class VastVersion(Enum):
34
- field_2_0 = '2.0'
35
- field_3_0 = '3.0'
36
- field_4_0 = '4.0'
37
- field_4_1 = '4.1'
38
- field_4_2 = '4.2'
12
+ from . import vast_tracking_event
13
+ from . import vast_version as vast_version_1
39
14
 
40
15
 
41
16
  class VastAsset1(AdCPBaseModel):
@@ -50,12 +25,13 @@ class VastAsset1(AdCPBaseModel):
50
25
  int | None, Field(description='Expected video duration in milliseconds (if known)', ge=0)
51
26
  ] = None
52
27
  tracking_events: Annotated[
53
- list[TrackingEvent] | None, Field(description='Tracking events supported by this VAST tag')
28
+ list[vast_tracking_event.VastTrackingEvent] | None,
29
+ Field(description='Tracking events supported by this VAST tag'),
54
30
  ] = None
55
31
  url: Annotated[AnyUrl, Field(description='URL endpoint that returns VAST XML')]
56
- vast_version: Annotated[VastVersion | None, Field(description='VAST specification version')] = (
57
- None
58
- )
32
+ vast_version: Annotated[
33
+ vast_version_1.VastVersion | None, Field(description='VAST specification version')
34
+ ] = None
59
35
  vpaid_enabled: Annotated[
60
36
  bool | None,
61
37
  Field(description='Whether VPAID (Video Player-Ad Interface Definition) is supported'),
@@ -75,11 +51,12 @@ class VastAsset2(AdCPBaseModel):
75
51
  int | None, Field(description='Expected video duration in milliseconds (if known)', ge=0)
76
52
  ] = None
77
53
  tracking_events: Annotated[
78
- list[TrackingEvent] | None, Field(description='Tracking events supported by this VAST tag')
54
+ list[vast_tracking_event.VastTrackingEvent] | None,
55
+ Field(description='Tracking events supported by this VAST tag'),
56
+ ] = None
57
+ vast_version: Annotated[
58
+ vast_version_1.VastVersion | None, Field(description='VAST specification version')
79
59
  ] = None
80
- vast_version: Annotated[VastVersion | None, Field(description='VAST specification version')] = (
81
- None
82
- )
83
60
  vpaid_enabled: Annotated[
84
61
  bool | None,
85
62
  Field(description='Whether VPAID (Video Player-Ad Interface Definition) is supported'),
@@ -0,0 +1,26 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: vast-tracking-event.json
3
+ # timestamp: 2025-11-21T12:49:05+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class VastTrackingEvent(Enum):
11
+ start = 'start'
12
+ firstQuartile = 'firstQuartile'
13
+ midpoint = 'midpoint'
14
+ thirdQuartile = 'thirdQuartile'
15
+ complete = 'complete'
16
+ impression = 'impression'
17
+ click = 'click'
18
+ pause = 'pause'
19
+ resume = 'resume'
20
+ skip = 'skip'
21
+ mute = 'mute'
22
+ unmute = 'unmute'
23
+ fullscreen = 'fullscreen'
24
+ exitFullscreen = 'exitFullscreen'
25
+ playerExpand = 'playerExpand'
26
+ playerCollapse = 'playerCollapse'
@@ -0,0 +1,15 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: vast-version.json
3
+ # timestamp: 2025-11-21T12:49:05+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class VastVersion(Enum):
11
+ field_2_0 = '2.0'
12
+ field_3_0 = '3.0'
13
+ field_4_0 = '4.0'
14
+ field_4_1 = '4.1'
15
+ field_4_2 = '4.2'
@@ -1,32 +1,15 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: webhook-asset.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
3
+ # timestamp: 2025-11-21T12:49:05+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- from enum import Enum
8
7
  from typing import Annotated
9
8
 
10
9
  from adcp.types.base import AdCPBaseModel
11
10
  from pydantic import AnyUrl, ConfigDict, Field
12
11
 
13
-
14
- class Method(Enum):
15
- GET = 'GET'
16
- POST = 'POST'
17
-
18
-
19
- class ResponseType(Enum):
20
- html = 'html'
21
- json = 'json'
22
- xml = 'xml'
23
- javascript = 'javascript'
24
-
25
-
26
- class Method1(Enum):
27
- hmac_sha256 = 'hmac_sha256'
28
- api_key = 'api_key'
29
- none = 'none'
12
+ from . import http_method, webhook_response_type, webhook_security_method
30
13
 
31
14
 
32
15
  class Security(AdCPBaseModel):
@@ -36,20 +19,25 @@ class Security(AdCPBaseModel):
36
19
  hmac_header: Annotated[
37
20
  str | None, Field(description="Header name for HMAC signature (e.g., 'X-Signature')")
38
21
  ] = None
39
- method: Annotated[Method1, Field(description='Authentication method')]
22
+ method: Annotated[
23
+ webhook_security_method.WebhookSecurityMethod, Field(description='Authentication method')
24
+ ]
40
25
 
41
26
 
42
27
  class WebhookAsset(AdCPBaseModel):
43
28
  model_config = ConfigDict(
44
29
  extra='forbid',
45
30
  )
46
- method: Annotated[Method | None, Field(description='HTTP method')] = Method.POST
31
+ method: Annotated[http_method.HttpMethod | None, Field(description='HTTP method')] = (
32
+ http_method.HttpMethod.POST
33
+ )
47
34
  required_macros: Annotated[
48
35
  list[str] | None,
49
36
  Field(description='Universal macros that must be provided for webhook to function'),
50
37
  ] = None
51
38
  response_type: Annotated[
52
- ResponseType, Field(description='Expected content type of webhook response')
39
+ webhook_response_type.WebhookResponseType,
40
+ Field(description='Expected content type of webhook response'),
53
41
  ]
54
42
  security: Annotated[Security, Field(description='Security configuration for webhook calls')]
55
43
  supported_macros: Annotated[
@@ -1,24 +1,18 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: webhook-payload.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
3
+ # timestamp: 2025-11-21T12:49:05+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- from enum import Enum
8
7
  from typing import Annotated, Any
9
8
 
10
9
  from adcp.types.base import AdCPBaseModel
11
10
  from pydantic import AwareDatetime, ConfigDict, Field
12
11
 
13
- from . import task_status
12
+ from . import adcp_domain, task_status
14
13
  from . import task_type as task_type_1
15
14
 
16
15
 
17
- class Domain(Enum):
18
- media_buy = 'media-buy'
19
- signals = 'signals'
20
-
21
-
22
16
  class Progress(AdCPBaseModel):
23
17
  model_config = ConfigDict(
24
18
  extra='forbid',
@@ -46,7 +40,7 @@ class WebhookPayload(AdCPBaseModel):
46
40
  ),
47
41
  ] = None
48
42
  domain: Annotated[
49
- Domain | None,
43
+ adcp_domain.AdcpDomain | None,
50
44
  Field(
51
45
  description='AdCP domain this task belongs to. Helps classify the operation type at a high level.'
52
46
  ),
@@ -0,0 +1,14 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: webhook-response-type.json
3
+ # timestamp: 2025-11-21T12:49:05+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class WebhookResponseType(Enum):
11
+ html = 'html'
12
+ json = 'json'
13
+ xml = 'xml'
14
+ javascript = 'javascript'
@@ -0,0 +1,13 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: webhook-security-method.json
3
+ # timestamp: 2025-11-21T12:49:05+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class WebhookSecurityMethod(Enum):
11
+ hmac_sha256 = 'hmac_sha256'
12
+ api_key = 'api_key'
13
+ none = 'none'
@@ -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.stable import CreativeManifest, Format, FormatId, Product
13
+ from adcp.types import CreativeManifest, Format, FormatId, Product
14
14
 
15
15
  logger = logging.getLogger(__name__)
16
16
 
@@ -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.stable import PreviewCreativeRequest
126
+ from adcp.types 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.stable import CreativeManifest
399
+ from adcp.types 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.stable import CreativeManifest, ImageAsset, UrlAsset
439
+ from adcp.types 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.stable import (
459
+ from adcp.types 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.10.0
3
+ Version: 2.11.1
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