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
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: performance-feedback.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,12 +10,8 @@ from typing import Annotated
10
10
  from adcp.types.base import AdCPBaseModel
11
11
  from pydantic import AwareDatetime, ConfigDict, Field
12
12
 
13
-
14
- class FeedbackSource(Enum):
15
- buyer_attribution = 'buyer_attribution'
16
- third_party_measurement = 'third_party_measurement'
17
- platform_analytics = 'platform_analytics'
18
- verification_partner = 'verification_partner'
13
+ from . import feedback_source as feedback_source_1
14
+ from . import metric_type as metric_type_1
19
15
 
20
16
 
21
17
  class MeasurementPeriod(AdCPBaseModel):
@@ -30,17 +26,6 @@ class MeasurementPeriod(AdCPBaseModel):
30
26
  ]
31
27
 
32
28
 
33
- class MetricType(Enum):
34
- overall_performance = 'overall_performance'
35
- conversion_rate = 'conversion_rate'
36
- brand_lift = 'brand_lift'
37
- click_through_rate = 'click_through_rate'
38
- completion_rate = 'completion_rate'
39
- viewability = 'viewability'
40
- brand_safety = 'brand_safety'
41
- cost_efficiency = 'cost_efficiency'
42
-
43
-
44
29
  class Status(Enum):
45
30
  accepted = 'accepted'
46
31
  queued = 'queued'
@@ -64,12 +49,16 @@ class PerformanceFeedback(AdCPBaseModel):
64
49
  feedback_id: Annotated[
65
50
  str, Field(description='Unique identifier for this performance feedback submission')
66
51
  ]
67
- feedback_source: Annotated[FeedbackSource, Field(description='Source of the performance data')]
52
+ feedback_source: Annotated[
53
+ feedback_source_1.FeedbackSource, Field(description='Source of the performance data')
54
+ ]
68
55
  measurement_period: Annotated[
69
56
  MeasurementPeriod, Field(description='Time period for performance measurement')
70
57
  ]
71
58
  media_buy_id: Annotated[str, Field(description="Publisher's media buy identifier")]
72
- metric_type: Annotated[MetricType, Field(description='The business metric being measured')]
59
+ metric_type: Annotated[
60
+ metric_type_1.MetricType, Field(description='The business metric being measured')
61
+ ]
73
62
  package_id: Annotated[
74
63
  str | None,
75
64
  Field(
@@ -1,10 +1,9 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: preview-creative-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, Literal
9
8
 
10
9
  from adcp.types.base import AdCPBaseModel
@@ -12,6 +11,7 @@ from pydantic import ConfigDict, Field, RootModel
12
11
 
13
12
  from . import creative_manifest as creative_manifest_1
14
13
  from . import format_id as format_id_1
14
+ from . import preview_output_format
15
15
 
16
16
 
17
17
  class Input(AdCPBaseModel):
@@ -38,11 +38,6 @@ class Input(AdCPBaseModel):
38
38
  ]
39
39
 
40
40
 
41
- class OutputFormat(Enum):
42
- url = 'url'
43
- html = 'html'
44
-
45
-
46
41
  class Input2(AdCPBaseModel):
47
42
  model_config = ConfigDict(
48
43
  extra='forbid',
@@ -83,11 +78,11 @@ class PreviewCreativeRequest1(AdCPBaseModel):
83
78
  ),
84
79
  ] = None
85
80
  output_format: Annotated[
86
- OutputFormat | None,
81
+ preview_output_format.PreviewOutputFormat | None,
87
82
  Field(
88
83
  description="Output format for previews. 'url' returns preview_url (iframe-embeddable URL), 'html' returns preview_html (raw HTML for direct embedding). Default: 'url' for backward compatibility."
89
84
  ),
90
- ] = OutputFormat.url
85
+ ] = preview_output_format.PreviewOutputFormat.url
91
86
  request_type: Annotated[
92
87
  Literal['single'],
93
88
  Field(description='Discriminator indicating this is a single preview request'),
@@ -113,11 +108,11 @@ class Request(AdCPBaseModel):
113
108
  Field(description='Array of input sets for generating multiple preview variants'),
114
109
  ] = None
115
110
  output_format: Annotated[
116
- OutputFormat | None,
111
+ preview_output_format.PreviewOutputFormat | None,
117
112
  Field(
118
113
  description="Output format for this preview. 'url' returns preview_url, 'html' returns preview_html."
119
114
  ),
120
- ] = OutputFormat.url
115
+ ] = preview_output_format.PreviewOutputFormat.url
121
116
  template_id: Annotated[
122
117
  str | None, Field(description='Specific template ID for custom format rendering')
123
118
  ] = None
@@ -134,11 +129,11 @@ class PreviewCreativeRequest2(AdCPBaseModel):
134
129
  ),
135
130
  ] = None
136
131
  output_format: Annotated[
137
- OutputFormat | None,
132
+ preview_output_format.PreviewOutputFormat | None,
138
133
  Field(
139
134
  description="Default output format for all requests in this batch. Individual requests can override this. 'url' returns preview_url (iframe-embeddable URL), 'html' returns preview_html (raw HTML for direct embedding)."
140
135
  ),
141
- ] = OutputFormat.url
136
+ ] = preview_output_format.PreviewOutputFormat.url
142
137
  request_type: Annotated[
143
138
  Literal['batch'],
144
139
  Field(description='Discriminator indicating this is a batch preview request'),
@@ -0,0 +1,12 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: preview-output-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 PreviewOutputFormat(Enum):
11
+ url = 'url'
12
+ html = 'html'
@@ -0,0 +1,36 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: product-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 delivery_type as delivery_type_1
13
+ from . import format_category, format_id
14
+
15
+
16
+ class ProductFilters(AdCPBaseModel):
17
+ model_config = ConfigDict(
18
+ extra='forbid',
19
+ )
20
+ delivery_type: delivery_type_1.DeliveryType | None = None
21
+ format_ids: Annotated[
22
+ list[format_id.FormatId] | None, Field(description='Filter by specific format IDs')
23
+ ] = None
24
+ format_types: Annotated[
25
+ list[format_category.FormatCategory] | None, Field(description='Filter by format types')
26
+ ] = None
27
+ is_fixed_price: Annotated[
28
+ bool | None, Field(description='Filter for fixed price vs auction products')
29
+ ] = None
30
+ min_exposures: Annotated[
31
+ int | None,
32
+ Field(description='Minimum exposures/impressions needed for measurement validity', ge=1),
33
+ ] = None
34
+ standard_formats_only: Annotated[
35
+ bool | None, Field(description='Only return products accepting IAB standard formats')
36
+ ] = None
@@ -1,16 +1,16 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: property.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, RootModel
12
11
 
13
12
  from . import identifier_types
13
+ from . import property_type as property_type_1
14
14
 
15
15
 
16
16
  class Identifier(AdCPBaseModel):
@@ -29,16 +29,6 @@ class Identifier(AdCPBaseModel):
29
29
  ]
30
30
 
31
31
 
32
- class PropertyType(Enum):
33
- website = 'website'
34
- mobile_app = 'mobile_app'
35
- ctv_app = 'ctv_app'
36
- dooh = 'dooh'
37
- podcast = 'podcast'
38
- radio = 'radio'
39
- streaming_audio = 'streaming_audio'
40
-
41
-
42
32
  class Tag(RootModel[str]):
43
33
  root: Annotated[
44
34
  str,
@@ -64,7 +54,9 @@ class Property(AdCPBaseModel):
64
54
  pattern='^[a-z0-9_]+$',
65
55
  ),
66
56
  ] = None
67
- property_type: Annotated[PropertyType, Field(description='Type of advertising property')]
57
+ property_type: Annotated[
58
+ property_type_1.PropertyType, Field(description='Type of advertising property')
59
+ ]
68
60
  publisher_domain: Annotated[
69
61
  str | None,
70
62
  Field(
@@ -0,0 +1,17 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: property-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 PropertyType(Enum):
11
+ website = 'website'
12
+ mobile_app = 'mobile_app'
13
+ ctv_app = 'ctv_app'
14
+ dooh = 'dooh'
15
+ podcast = 'podcast'
16
+ radio = 'radio'
17
+ streaming_audio = 'streaming_audio'
@@ -1,21 +1,16 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: provide-performance-feedback-request.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
3
+ # timestamp: 2025-11-21T15:57:17+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
- from pydantic import AwareDatetime, ConfigDict, Field
10
+ from pydantic import AwareDatetime, ConfigDict, Field, RootModel
12
11
 
13
-
14
- class FeedbackSource(Enum):
15
- buyer_attribution = 'buyer_attribution'
16
- third_party_measurement = 'third_party_measurement'
17
- platform_analytics = 'platform_analytics'
18
- verification_partner = 'verification_partner'
12
+ from . import feedback_source as feedback_source_1
13
+ from . import metric_type as metric_type_1
19
14
 
20
15
 
21
16
  class MeasurementPeriod(AdCPBaseModel):
@@ -30,21 +25,13 @@ class MeasurementPeriod(AdCPBaseModel):
30
25
  ]
31
26
 
32
27
 
33
- class MetricType(Enum):
34
- overall_performance = 'overall_performance'
35
- conversion_rate = 'conversion_rate'
36
- brand_lift = 'brand_lift'
37
- click_through_rate = 'click_through_rate'
38
- completion_rate = 'completion_rate'
39
- viewability = 'viewability'
40
- brand_safety = 'brand_safety'
41
- cost_efficiency = 'cost_efficiency'
42
-
43
-
44
- class ProvidePerformanceFeedbackRequest(AdCPBaseModel):
28
+ class ProvidePerformanceFeedbackRequest1(AdCPBaseModel):
45
29
  model_config = ConfigDict(
46
30
  extra='forbid',
47
31
  )
32
+ buyer_ref: Annotated[
33
+ str | None, Field(description="Buyer's reference for the media buy", min_length=1)
34
+ ] = None
48
35
  context: Annotated[
49
36
  dict[str, Any] | None,
50
37
  Field(
@@ -58,8 +45,8 @@ class ProvidePerformanceFeedbackRequest(AdCPBaseModel):
58
45
  ),
59
46
  ] = None
60
47
  feedback_source: Annotated[
61
- FeedbackSource | None, Field(description='Source of the performance data')
62
- ] = FeedbackSource.buyer_attribution
48
+ feedback_source_1.FeedbackSource | None, Field(description='Source of the performance data')
49
+ ] = feedback_source_1.FeedbackSource.buyer_attribution
63
50
  measurement_period: Annotated[
64
51
  MeasurementPeriod, Field(description='Time period for performance measurement')
65
52
  ]
@@ -67,8 +54,55 @@ class ProvidePerformanceFeedbackRequest(AdCPBaseModel):
67
54
  str, Field(description="Publisher's media buy identifier", min_length=1)
68
55
  ]
69
56
  metric_type: Annotated[
70
- MetricType | None, Field(description='The business metric being measured')
71
- ] = MetricType.overall_performance
57
+ metric_type_1.MetricType | None, Field(description='The business metric being measured')
58
+ ] = metric_type_1.MetricType.overall_performance
59
+ package_id: Annotated[
60
+ str | None,
61
+ Field(
62
+ description='Specific package within the media buy (if feedback is package-specific)',
63
+ min_length=1,
64
+ ),
65
+ ] = None
66
+ performance_index: Annotated[
67
+ float,
68
+ Field(
69
+ description='Normalized performance score (0.0 = no value, 1.0 = expected, >1.0 = above expected)',
70
+ ge=0.0,
71
+ ),
72
+ ]
73
+
74
+
75
+ class ProvidePerformanceFeedbackRequest2(AdCPBaseModel):
76
+ model_config = ConfigDict(
77
+ extra='forbid',
78
+ )
79
+ buyer_ref: Annotated[
80
+ str, Field(description="Buyer's reference for the media buy", min_length=1)
81
+ ]
82
+ context: Annotated[
83
+ dict[str, Any] | None,
84
+ Field(
85
+ 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.'
86
+ ),
87
+ ] = None
88
+ creative_id: Annotated[
89
+ str | None,
90
+ Field(
91
+ description='Specific creative asset (if feedback is creative-specific)', min_length=1
92
+ ),
93
+ ] = None
94
+ feedback_source: Annotated[
95
+ feedback_source_1.FeedbackSource | None, Field(description='Source of the performance data')
96
+ ] = feedback_source_1.FeedbackSource.buyer_attribution
97
+ measurement_period: Annotated[
98
+ MeasurementPeriod, Field(description='Time period for performance measurement')
99
+ ]
100
+ media_buy_id: Annotated[
101
+ str | None, Field(description="Publisher's media buy identifier", min_length=1)
102
+ ] = None
103
+ metric_type: Annotated[
104
+ metric_type_1.MetricType | None, Field(description='The business metric being measured')
105
+ ] = metric_type_1.MetricType.overall_performance
72
106
  package_id: Annotated[
73
107
  str | None,
74
108
  Field(
@@ -83,3 +117,15 @@ class ProvidePerformanceFeedbackRequest(AdCPBaseModel):
83
117
  ge=0.0,
84
118
  ),
85
119
  ]
120
+
121
+
122
+ class ProvidePerformanceFeedbackRequest(
123
+ RootModel[ProvidePerformanceFeedbackRequest1 | ProvidePerformanceFeedbackRequest2]
124
+ ):
125
+ root: Annotated[
126
+ ProvidePerformanceFeedbackRequest1 | ProvidePerformanceFeedbackRequest2,
127
+ Field(
128
+ description='Request payload for provide_performance_feedback task',
129
+ title='Provide Performance Feedback Request',
130
+ ),
131
+ ]
@@ -1,19 +1,15 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: push-notification-config.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 Scheme(Enum):
15
- Bearer = 'Bearer'
16
- HMAC_SHA256 = 'HMAC-SHA256'
12
+ from . import auth_scheme
17
13
 
18
14
 
19
15
  class Authentication(AdCPBaseModel):
@@ -28,7 +24,7 @@ class Authentication(AdCPBaseModel):
28
24
  ),
29
25
  ]
30
26
  schemes: Annotated[
31
- list[Scheme],
27
+ list[auth_scheme.AuthenticationScheme],
32
28
  Field(
33
29
  description="Array of authentication schemes. Supported: ['Bearer'] for simple token auth, ['HMAC-SHA256'] for signature verification (recommended for production)",
34
30
  max_length=1,
@@ -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