adcp 2.9.0__py3-none-any.whl → 2.11.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.
Files changed (72) hide show
  1. adcp/__init__.py +57 -53
  2. adcp/client.py +9 -11
  3. adcp/simple.py +105 -1
  4. adcp/types/__init__.py +330 -300
  5. adcp/types/_generated.py +99 -65
  6. adcp/types/generated_poc/adcp_domain.py +12 -0
  7. adcp/types/generated_poc/auth_scheme.py +12 -0
  8. adcp/types/generated_poc/available_metric.py +19 -0
  9. adcp/types/generated_poc/co_branding_requirement.py +13 -0
  10. adcp/types/generated_poc/creative_action.py +15 -0
  11. adcp/types/generated_poc/creative_agent_capability.py +14 -0
  12. adcp/types/generated_poc/creative_filters.py +77 -0
  13. adcp/types/generated_poc/creative_policy.py +9 -15
  14. adcp/types/generated_poc/creative_sort_field.py +16 -0
  15. adcp/types/generated_poc/daast_asset.py +9 -24
  16. adcp/types/generated_poc/daast_tracking_event.py +21 -0
  17. adcp/types/generated_poc/daast_version.py +12 -0
  18. adcp/types/generated_poc/dimension_unit.py +14 -0
  19. adcp/types/generated_poc/feed_format.py +13 -0
  20. adcp/types/generated_poc/feedback_source.py +14 -0
  21. adcp/types/generated_poc/format.py +5 -11
  22. adcp/types/generated_poc/get_media_buy_delivery_request.py +3 -19
  23. adcp/types/generated_poc/get_products_request.py +3 -36
  24. adcp/types/generated_poc/get_signals_request.py +3 -26
  25. adcp/types/generated_poc/get_signals_response.py +5 -10
  26. adcp/types/generated_poc/history_entry_type.py +12 -0
  27. adcp/types/generated_poc/http_method.py +12 -0
  28. adcp/types/generated_poc/javascript_asset.py +6 -8
  29. adcp/types/generated_poc/javascript_module_type.py +13 -0
  30. adcp/types/generated_poc/landing_page_requirement.py +13 -0
  31. adcp/types/generated_poc/list_creative_formats_response.py +4 -11
  32. adcp/types/generated_poc/list_creatives_request.py +10 -87
  33. adcp/types/generated_poc/list_creatives_response.py +13 -17
  34. adcp/types/generated_poc/markdown_asset.py +4 -8
  35. adcp/types/generated_poc/markdown_flavor.py +12 -0
  36. adcp/types/generated_poc/metric_type.py +18 -0
  37. adcp/types/generated_poc/notification_type.py +14 -0
  38. adcp/types/generated_poc/performance_feedback.py +9 -20
  39. adcp/types/generated_poc/preview_creative_request.py +8 -13
  40. adcp/types/generated_poc/preview_output_format.py +12 -0
  41. adcp/types/generated_poc/product_filters.py +36 -0
  42. adcp/types/generated_poc/property.py +5 -13
  43. adcp/types/generated_poc/property_type.py +17 -0
  44. adcp/types/generated_poc/provide_performance_feedback_request.py +71 -25
  45. adcp/types/generated_poc/push_notification_config.py +3 -7
  46. adcp/types/generated_poc/reporting_capabilities.py +4 -21
  47. adcp/types/generated_poc/reporting_frequency.py +13 -0
  48. adcp/types/generated_poc/signal_catalog_type.py +13 -0
  49. adcp/types/generated_poc/signal_filters.py +29 -0
  50. adcp/types/generated_poc/sort_direction.py +12 -0
  51. adcp/types/generated_poc/sync_creatives_request.py +4 -9
  52. adcp/types/generated_poc/sync_creatives_response.py +5 -12
  53. adcp/types/generated_poc/tasks_list_request.py +9 -15
  54. adcp/types/generated_poc/update_frequency.py +14 -0
  55. adcp/types/generated_poc/url_asset.py +3 -8
  56. adcp/types/generated_poc/url_asset_type.py +13 -0
  57. adcp/types/generated_poc/validation_mode.py +12 -0
  58. adcp/types/generated_poc/vast_asset.py +13 -36
  59. adcp/types/generated_poc/vast_tracking_event.py +26 -0
  60. adcp/types/generated_poc/vast_version.py +15 -0
  61. adcp/types/generated_poc/webhook_asset.py +10 -22
  62. adcp/types/generated_poc/webhook_payload.py +3 -9
  63. adcp/types/generated_poc/webhook_response_type.py +14 -0
  64. adcp/types/generated_poc/webhook_security_method.py +13 -0
  65. adcp/utils/preview_cache.py +5 -5
  66. {adcp-2.9.0.dist-info → adcp-2.11.0.dist-info}/METADATA +1 -1
  67. {adcp-2.9.0.dist-info → adcp-2.11.0.dist-info}/RECORD +71 -38
  68. adcp/types/stable.py +0 -449
  69. {adcp-2.9.0.dist-info → adcp-2.11.0.dist-info}/WHEEL +0 -0
  70. {adcp-2.9.0.dist-info → adcp-2.11.0.dist-info}/entry_points.txt +0 -0
  71. {adcp-2.9.0.dist-info → adcp-2.11.0.dist-info}/licenses/LICENSE +0 -0
  72. {adcp-2.9.0.dist-info → adcp-2.11.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,13 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: feed-format.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 FeedFormat(Enum):
11
+ google_merchant_center = 'google_merchant_center'
12
+ facebook_catalog = 'facebook_catalog'
13
+ custom = 'custom'
@@ -0,0 +1,14 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: feedback-source.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 FeedbackSource(Enum):
11
+ buyer_attribution = 'buyer_attribution'
12
+ third_party_measurement = 'third_party_measurement'
13
+ platform_analytics = 'platform_analytics'
14
+ verification_partner = 'verification_partner'
@@ -1,16 +1,15 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: format.json
3
- # timestamp: 2025-11-20T11:58:34+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, Literal
9
8
 
10
9
  from adcp.types.base import AdCPBaseModel
11
10
  from pydantic import AnyUrl, ConfigDict, Field
12
11
 
13
- from . import asset_content_type, format_category
12
+ from . import asset_content_type, dimension_unit, format_category
14
13
  from . import format_id as format_id_1
15
14
 
16
15
 
@@ -110,13 +109,6 @@ class Responsive(AdCPBaseModel):
110
109
  width: bool
111
110
 
112
111
 
113
- class Unit(Enum):
114
- px = 'px'
115
- dp = 'dp'
116
- inches = 'inches'
117
- cm = 'cm'
118
-
119
-
120
112
  class Dimensions(AdCPBaseModel):
121
113
  aspect_ratio: Annotated[
122
114
  str | None,
@@ -143,7 +135,9 @@ class Dimensions(AdCPBaseModel):
143
135
  responsive: Annotated[
144
136
  Responsive | None, Field(description='Indicates which dimensions are responsive/fluid')
145
137
  ] = None
146
- unit: Annotated[Unit, Field(description='Unit of measurement for dimensions')]
138
+ unit: Annotated[
139
+ dimension_unit.DimensionUnit, Field(description='Unit of measurement for dimensions')
140
+ ]
147
141
  width: Annotated[float | None, Field(description='Fixed width in specified units', ge=0.0)] = (
148
142
  None
149
143
  )
@@ -1,31 +1,15 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: get-media-buy-delivery-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
11
10
  from pydantic import ConfigDict, Field
12
11
 
13
-
14
- class StatusFilter(Enum):
15
- active = 'active'
16
- pending = 'pending'
17
- paused = 'paused'
18
- completed = 'completed'
19
- failed = 'failed'
20
- all = 'all'
21
-
22
-
23
- class StatusFilterEnum(Enum):
24
- active = 'active'
25
- pending = 'pending'
26
- paused = 'paused'
27
- completed = 'completed'
28
- failed = 'failed'
12
+ from . import media_buy_status
29
13
 
30
14
 
31
15
  class GetMediaBuyDeliveryRequest(AdCPBaseModel):
@@ -60,6 +44,6 @@ class GetMediaBuyDeliveryRequest(AdCPBaseModel):
60
44
  ),
61
45
  ] = None
62
46
  status_filter: Annotated[
63
- StatusFilter | list[StatusFilterEnum] | None,
47
+ media_buy_status.MediaBuyStatus | list[media_buy_status.MediaBuyStatus] | None,
64
48
  Field(description='Filter by status. Can be a single status or array of statuses'),
65
49
  ] = None
@@ -1,47 +1,16 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: get-products-request.json
3
- # timestamp: 2025-11-18T04:34:42+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, ConfigDict, Field
12
11
 
13
12
  from . import brand_manifest as brand_manifest_1
14
- from . import delivery_type as delivery_type_1
15
- from . import format_id
16
-
17
-
18
- class FormatType(Enum):
19
- video = 'video'
20
- display = 'display'
21
- audio = 'audio'
22
-
23
-
24
- class Filters(AdCPBaseModel):
25
- model_config = ConfigDict(
26
- extra='forbid',
27
- )
28
- delivery_type: delivery_type_1.DeliveryType | None = None
29
- format_ids: Annotated[
30
- list[format_id.FormatId] | None, Field(description='Filter by specific format IDs')
31
- ] = None
32
- format_types: Annotated[
33
- list[FormatType] | None, Field(description='Filter by format types')
34
- ] = None
35
- is_fixed_price: Annotated[
36
- bool | None, Field(description='Filter for fixed price vs auction products')
37
- ] = None
38
- min_exposures: Annotated[
39
- int | None,
40
- Field(description='Minimum exposures/impressions needed for measurement validity', ge=1),
41
- ] = None
42
- standard_formats_only: Annotated[
43
- bool | None, Field(description='Only return products accepting IAB standard formats')
44
- ] = None
13
+ from . import product_filters
45
14
 
46
15
 
47
16
  class GetProductsRequest(AdCPBaseModel):
@@ -78,6 +47,4 @@ class GetProductsRequest(AdCPBaseModel):
78
47
  description='Initiator-provided context included in the request payload. Agentsmust echo this value back unchanged in responses and webhooks. Use for UI/session hints, correlation tokens, or tracking metadata.'
79
48
  ),
80
49
  ] = None
81
- filters: Annotated[
82
- Filters | None, Field(description='Structured filters for product discovery')
83
- ] = None
50
+ filters: product_filters.ProductFilters | None = None
@@ -1,16 +1,15 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: get-signals-request.json
3
- # timestamp: 2025-11-20T20:44:40+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 ConfigDict, Field, RootModel
12
11
 
13
- from . import destination
12
+ from . import destination, signal_filters
14
13
 
15
14
 
16
15
  class Country(RootModel[str]):
@@ -33,28 +32,6 @@ class DeliverTo(AdCPBaseModel):
33
32
  ]
34
33
 
35
34
 
36
- class CatalogType(Enum):
37
- marketplace = 'marketplace'
38
- custom = 'custom'
39
- owned = 'owned'
40
-
41
-
42
- class Filters(AdCPBaseModel):
43
- model_config = ConfigDict(
44
- extra='forbid',
45
- )
46
- catalog_types: Annotated[
47
- list[CatalogType] | None, Field(description='Filter by catalog type')
48
- ] = None
49
- data_providers: Annotated[
50
- list[str] | None, Field(description='Filter by specific data providers')
51
- ] = None
52
- max_cpm: Annotated[float | None, Field(description='Maximum CPM price filter', ge=0.0)] = None
53
- min_coverage_percentage: Annotated[
54
- float | None, Field(description='Minimum coverage requirement', ge=0.0, le=100.0)
55
- ] = None
56
-
57
-
58
35
  class GetSignalsRequest(AdCPBaseModel):
59
36
  model_config = ConfigDict(
60
37
  extra='forbid',
@@ -68,7 +45,7 @@ class GetSignalsRequest(AdCPBaseModel):
68
45
  deliver_to: Annotated[
69
46
  DeliverTo, Field(description='Deployment targets where signals need to be activated')
70
47
  ]
71
- filters: Annotated[Filters | None, Field(description='Filters to refine results')] = None
48
+ filters: signal_filters.SignalFilters | None = None
72
49
  max_results: Annotated[
73
50
  int | None, Field(description='Maximum number of results to return', ge=1)
74
51
  ] = None
@@ -1,16 +1,15 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: get-signals-response.json
3
- # timestamp: 2025-11-20T20:44:40+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 ConfigDict, Field
12
11
 
13
- from . import deployment, error
12
+ from . import deployment, error, signal_catalog_type
14
13
 
15
14
 
16
15
  class Pricing(AdCPBaseModel):
@@ -21,12 +20,6 @@ class Pricing(AdCPBaseModel):
21
20
  currency: Annotated[str, Field(description='Currency code', pattern='^[A-Z]{3}$')]
22
21
 
23
22
 
24
- class SignalType(Enum):
25
- marketplace = 'marketplace'
26
- custom = 'custom'
27
- owned = 'owned'
28
-
29
-
30
23
  class Signal(AdCPBaseModel):
31
24
  model_config = ConfigDict(
32
25
  extra='forbid',
@@ -43,7 +36,9 @@ class Signal(AdCPBaseModel):
43
36
  name: Annotated[str, Field(description='Human-readable signal name')]
44
37
  pricing: Annotated[Pricing, Field(description='Pricing information')]
45
38
  signal_agent_segment_id: Annotated[str, Field(description='Unique identifier for the signal')]
46
- signal_type: Annotated[SignalType, Field(description='Type of signal')]
39
+ signal_type: Annotated[
40
+ signal_catalog_type.SignalCatalogType, Field(description='Type of signal')
41
+ ]
47
42
 
48
43
 
49
44
  class GetSignalsResponse(AdCPBaseModel):
@@ -0,0 +1,12 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: history-entry-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 HistoryEntryType(Enum):
11
+ request = 'request'
12
+ response = 'response'
@@ -0,0 +1,12 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: http-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 HttpMethod(Enum):
11
+ GET = 'GET'
12
+ POST = 'POST'
@@ -1,20 +1,15 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: javascript-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 ConfigDict, Field
12
11
 
13
-
14
- class ModuleType(Enum):
15
- esm = 'esm'
16
- commonjs = 'commonjs'
17
- script = 'script'
12
+ from . import javascript_module_type
18
13
 
19
14
 
20
15
  class JavascriptAsset(AdCPBaseModel):
@@ -22,4 +17,7 @@ class JavascriptAsset(AdCPBaseModel):
22
17
  extra='forbid',
23
18
  )
24
19
  content: Annotated[str, Field(description='JavaScript content')]
25
- module_type: Annotated[ModuleType | None, Field(description='JavaScript module type')] = None
20
+ module_type: Annotated[
21
+ javascript_module_type.JavascriptModuleType | None,
22
+ Field(description='JavaScript module type'),
23
+ ] = None
@@ -0,0 +1,13 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: javascript-module-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 JavascriptModuleType(Enum):
11
+ esm = 'esm'
12
+ commonjs = 'commonjs'
13
+ script = 'script'
@@ -0,0 +1,13 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: landing-page-requirement.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 LandingPageRequirement(Enum):
11
+ any = 'any'
12
+ retailer_site_only = 'retailer_site_only'
13
+ must_include_retailer = 'must_include_retailer'
@@ -1,23 +1,15 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: list-creative-formats-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, ConfigDict, Field
12
11
 
13
- from . import error, format
14
-
15
-
16
- class Capability(Enum):
17
- validation = 'validation'
18
- assembly = 'assembly'
19
- generation = 'generation'
20
- preview = 'preview'
12
+ from . import creative_agent_capability, error, format
21
13
 
22
14
 
23
15
  class CreativeAgent(AdCPBaseModel):
@@ -31,7 +23,8 @@ class CreativeAgent(AdCPBaseModel):
31
23
  ),
32
24
  ]
33
25
  capabilities: Annotated[
34
- list[Capability] | None, Field(description='Capabilities this creative agent provides')
26
+ list[creative_agent_capability.CreativeAgentCapability] | None,
27
+ Field(description='Capabilities this creative agent provides'),
35
28
  ] = None
36
29
 
37
30
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: list-creatives-request.json
3
- # timestamp: 2025-11-18T12:11:55+00:00
3
+ # timestamp: 2025-11-21T12:49:05+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -8,9 +8,9 @@ from enum import Enum
8
8
  from typing import Annotated, Any
9
9
 
10
10
  from adcp.types.base import AdCPBaseModel
11
- from pydantic import AwareDatetime, ConfigDict, Field
11
+ from pydantic import ConfigDict, Field
12
12
 
13
- from . import creative_status
13
+ from . import creative_filters, creative_sort_field, sort_direction
14
14
 
15
15
 
16
16
  class FieldModel(Enum):
@@ -26,71 +26,6 @@ class FieldModel(Enum):
26
26
  sub_assets = 'sub_assets'
27
27
 
28
28
 
29
- class Filters(AdCPBaseModel):
30
- model_config = ConfigDict(
31
- extra='forbid',
32
- )
33
- assigned_to_package: Annotated[
34
- str | None, Field(description='Filter creatives assigned to this specific package')
35
- ] = None
36
- assigned_to_packages: Annotated[
37
- list[str] | None, Field(description='Filter creatives assigned to any of these packages')
38
- ] = None
39
- created_after: Annotated[
40
- AwareDatetime | None,
41
- Field(description='Filter creatives created after this date (ISO 8601)'),
42
- ] = None
43
- created_before: Annotated[
44
- AwareDatetime | None,
45
- Field(description='Filter creatives created before this date (ISO 8601)'),
46
- ] = None
47
- creative_ids: Annotated[
48
- list[str] | None, Field(description='Filter by specific creative IDs', max_length=100)
49
- ] = None
50
- format: Annotated[
51
- str | None,
52
- Field(description='Filter by creative format type (e.g., video, audio, display)'),
53
- ] = None
54
- formats: Annotated[
55
- list[str] | None, Field(description='Filter by multiple creative format types')
56
- ] = None
57
- has_performance_data: Annotated[
58
- bool | None, Field(description='Filter creatives that have performance data when true')
59
- ] = None
60
- name_contains: Annotated[
61
- str | None,
62
- Field(description='Filter by creative names containing this text (case-insensitive)'),
63
- ] = None
64
- status: Annotated[
65
- creative_status.CreativeStatus | None,
66
- Field(description='Filter by creative approval status'),
67
- ] = None
68
- statuses: Annotated[
69
- list[creative_status.CreativeStatus] | None,
70
- Field(description='Filter by multiple creative statuses'),
71
- ] = None
72
- tags: Annotated[
73
- list[str] | None, Field(description='Filter by creative tags (all tags must match)')
74
- ] = None
75
- tags_any: Annotated[
76
- list[str] | None, Field(description='Filter by creative tags (any tag must match)')
77
- ] = None
78
- unassigned: Annotated[
79
- bool | None,
80
- Field(
81
- description='Filter for unassigned creatives when true, assigned creatives when false'
82
- ),
83
- ] = None
84
- updated_after: Annotated[
85
- AwareDatetime | None,
86
- Field(description='Filter creatives last updated after this date (ISO 8601)'),
87
- ] = None
88
- updated_before: Annotated[
89
- AwareDatetime | None,
90
- Field(description='Filter creatives last updated before this date (ISO 8601)'),
91
- ] = None
92
-
93
-
94
29
  class Pagination(AdCPBaseModel):
95
30
  model_config = ConfigDict(
96
31
  extra='forbid',
@@ -101,26 +36,16 @@ class Pagination(AdCPBaseModel):
101
36
  offset: Annotated[int | None, Field(description='Number of creatives to skip', ge=0)] = 0
102
37
 
103
38
 
104
- class Direction(Enum):
105
- asc = 'asc'
106
- desc = 'desc'
107
-
108
-
109
- class Field1(Enum):
110
- created_date = 'created_date'
111
- updated_date = 'updated_date'
112
- name = 'name'
113
- status = 'status'
114
- assignment_count = 'assignment_count'
115
- performance_score = 'performance_score'
116
-
117
-
118
39
  class Sort(AdCPBaseModel):
119
40
  model_config = ConfigDict(
120
41
  extra='forbid',
121
42
  )
122
- direction: Annotated[Direction | None, Field(description='Sort direction')] = Direction.desc
123
- field: Annotated[Field1 | None, Field(description='Field to sort by')] = Field1.created_date
43
+ direction: Annotated[
44
+ sort_direction.SortDirection | None, Field(description='Sort direction')
45
+ ] = sort_direction.SortDirection.desc
46
+ field: Annotated[
47
+ creative_sort_field.CreativeSortField | None, Field(description='Field to sort by')
48
+ ] = creative_sort_field.CreativeSortField.created_date
124
49
 
125
50
 
126
51
  class ListCreativesRequest(AdCPBaseModel):
@@ -137,9 +62,7 @@ class ListCreativesRequest(AdCPBaseModel):
137
62
  list[FieldModel] | None,
138
63
  Field(description='Specific fields to include in response (omit for all fields)'),
139
64
  ] = None
140
- filters: Annotated[
141
- Filters | None, Field(description='Filter criteria for querying creatives')
142
- ] = None
65
+ filters: creative_filters.CreativeFilters | None = None
143
66
  include_assignments: Annotated[
144
67
  bool | None, Field(description='Include package assignment information in response')
145
68
  ] = True
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: list-creatives-response.json
3
- # timestamp: 2025-11-18T04:34:42+00:00
3
+ # timestamp: 2025-11-21T12:49:05+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -17,6 +17,7 @@ from . import (
17
17
  image_asset,
18
18
  javascript_asset,
19
19
  promoted_offerings,
20
+ sort_direction,
20
21
  sub_asset,
21
22
  text_asset,
22
23
  url_asset,
@@ -93,13 +94,20 @@ class Pagination(AdCPBaseModel):
93
94
  ] = None
94
95
 
95
96
 
96
- class Direction(Enum):
97
- asc = 'asc'
98
- desc = 'desc'
97
+ class StatusSummary(AdCPBaseModel):
98
+ model_config = ConfigDict(
99
+ extra='forbid',
100
+ )
101
+ approved: Annotated[int | None, Field(description='Number of approved creatives', ge=0)] = None
102
+ archived: Annotated[int | None, Field(description='Number of archived creatives', ge=0)] = None
103
+ pending_review: Annotated[
104
+ int | None, Field(description='Number of creatives pending review', ge=0)
105
+ ] = None
106
+ rejected: Annotated[int | None, Field(description='Number of rejected creatives', ge=0)] = None
99
107
 
100
108
 
101
109
  class SortApplied(AdCPBaseModel):
102
- direction: Direction | None = None
110
+ direction: sort_direction.SortDirection | None = None
103
111
  field: str | None = None
104
112
 
105
113
 
@@ -122,18 +130,6 @@ class QuerySummary(AdCPBaseModel):
122
130
  ]
123
131
 
124
132
 
125
- class StatusSummary(AdCPBaseModel):
126
- model_config = ConfigDict(
127
- extra='forbid',
128
- )
129
- approved: Annotated[int | None, Field(description='Number of approved creatives', ge=0)] = None
130
- archived: Annotated[int | None, Field(description='Number of archived creatives', ge=0)] = None
131
- pending_review: Annotated[
132
- int | None, Field(description='Number of creatives pending review', ge=0)
133
- ] = None
134
- rejected: Annotated[int | None, Field(description='Number of rejected creatives', ge=0)] = None
135
-
136
-
137
133
  class Creative(AdCPBaseModel):
138
134
  model_config = ConfigDict(
139
135
  extra='forbid',
@@ -1,19 +1,15 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: markdown-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 ConfigDict, Field
12
11
 
13
-
14
- class MarkdownFlavor(Enum):
15
- commonmark = 'commonmark'
16
- gfm = 'gfm'
12
+ from . import markdown_flavor as markdown_flavor_1
17
13
 
18
14
 
19
15
  class MarkdownAsset(AdCPBaseModel):
@@ -36,8 +32,8 @@ class MarkdownAsset(AdCPBaseModel):
36
32
  None
37
33
  )
38
34
  markdown_flavor: Annotated[
39
- MarkdownFlavor | None,
35
+ markdown_flavor_1.MarkdownFlavor | None,
40
36
  Field(
41
37
  description='Markdown flavor used. CommonMark for strict compatibility, GFM for tables/task lists/strikethrough.'
42
38
  ),
43
- ] = MarkdownFlavor.commonmark
39
+ ] = markdown_flavor_1.MarkdownFlavor.commonmark
@@ -0,0 +1,12 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: markdown-flavor.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 MarkdownFlavor(Enum):
11
+ commonmark = 'commonmark'
12
+ gfm = 'gfm'
@@ -0,0 +1,18 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: metric-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 MetricType(Enum):
11
+ overall_performance = 'overall_performance'
12
+ conversion_rate = 'conversion_rate'
13
+ brand_lift = 'brand_lift'
14
+ click_through_rate = 'click_through_rate'
15
+ completion_rate = 'completion_rate'
16
+ viewability = 'viewability'
17
+ brand_safety = 'brand_safety'
18
+ cost_efficiency = 'cost_efficiency'
@@ -0,0 +1,14 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: notification-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 NotificationType(Enum):
11
+ scheduled = 'scheduled'
12
+ final = 'final'
13
+ delayed = 'delayed'
14
+ adjusted = 'adjusted'