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,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'
@@ -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-21T20:45:16+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
- from pydantic import ConfigDict, Field, RootModel
10
+ from pydantic import ConfigDict, Field
12
11
 
13
- from . import identifier_types
12
+ from . import identifier_types, property_tag
13
+ from . import property_type as property_type_1
14
14
 
15
15
 
16
16
  class Identifier(AdCPBaseModel):
@@ -29,26 +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
- class Tag(RootModel[str]):
43
- root: Annotated[
44
- str,
45
- Field(
46
- description="Lowercase tag with underscores (e.g., 'conde_nast_network', 'premium_content')",
47
- pattern='^[a-z0-9_]+$',
48
- ),
49
- ]
50
-
51
-
52
32
  class Property(AdCPBaseModel):
53
33
  model_config = ConfigDict(
54
34
  extra='forbid',
@@ -60,11 +40,15 @@ class Property(AdCPBaseModel):
60
40
  property_id: Annotated[
61
41
  str | None,
62
42
  Field(
63
- description="Unique identifier for this property (optional). Enables referencing properties by ID instead of repeating full objects. Recommended format: lowercase with underscores (e.g., 'cnn_ctv_app', 'instagram_mobile')",
43
+ description='Unique identifier for this property (optional). Enables referencing properties by ID instead of repeating full objects.',
44
+ examples=['cnn_ctv_app', 'homepage', 'mobile_ios', 'instagram'],
64
45
  pattern='^[a-z0-9_]+$',
46
+ title='Property ID',
65
47
  ),
66
48
  ] = None
67
- property_type: Annotated[PropertyType, Field(description='Type of advertising property')]
49
+ property_type: Annotated[
50
+ property_type_1.PropertyType, Field(description='Type of advertising property')
51
+ ]
68
52
  publisher_domain: Annotated[
69
53
  str | None,
70
54
  Field(
@@ -72,7 +56,7 @@ class Property(AdCPBaseModel):
72
56
  ),
73
57
  ] = None
74
58
  tags: Annotated[
75
- list[Tag] | None,
59
+ list[property_tag.PropertyTag] | None,
76
60
  Field(
77
61
  description='Tags for categorization and grouping (e.g., network membership, content categories)'
78
62
  ),
@@ -0,0 +1,21 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: property-id.json
3
+ # timestamp: 2025-11-21T20:45:16+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Annotated
8
+
9
+ from pydantic import Field, RootModel
10
+
11
+
12
+ class PropertyId(RootModel[str]):
13
+ root: Annotated[
14
+ str,
15
+ Field(
16
+ description='Identifier for a publisher property. Must be lowercase alphanumeric with underscores only.',
17
+ examples=['cnn_ctv_app', 'homepage', 'mobile_ios', 'instagram'],
18
+ pattern='^[a-z0-9_]+$',
19
+ title='Property ID',
20
+ ),
21
+ ]
@@ -0,0 +1,21 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: property-tag.json
3
+ # timestamp: 2025-11-21T20:45:16+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Annotated
8
+
9
+ from pydantic import Field, RootModel
10
+
11
+
12
+ class PropertyTag(RootModel[str]):
13
+ root: Annotated[
14
+ str,
15
+ Field(
16
+ description='Tag for categorizing publisher properties. Must be lowercase alphanumeric with underscores only.',
17
+ examples=['ctv', 'premium', 'news', 'sports', 'meta_network', 'social_media'],
18
+ pattern='^[a-z0-9_]+$',
19
+ title='Property Tag',
20
+ ),
21
+ ]
@@ -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,13 +1,15 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: publisher-property-selector.json
3
- # timestamp: 2025-11-19T02:02:39+00:00
3
+ # timestamp: 2025-11-21T20:45:16+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
7
  from typing import Annotated, Literal
8
8
 
9
9
  from adcp.types.base import AdCPBaseModel
10
- from pydantic import ConfigDict, Field, RootModel
10
+ from pydantic import ConfigDict, Field
11
+
12
+ from . import property_id, property_tag
11
13
 
12
14
 
13
15
  class PublisherPropertySelector1(AdCPBaseModel):
@@ -29,16 +31,12 @@ class PublisherPropertySelector1(AdCPBaseModel):
29
31
  ]
30
32
 
31
33
 
32
- class PropertyId(RootModel[str]):
33
- root: Annotated[str, Field(pattern='^[a-z0-9_]+$')]
34
-
35
-
36
34
  class PublisherPropertySelector2(AdCPBaseModel):
37
35
  model_config = ConfigDict(
38
36
  extra='forbid',
39
37
  )
40
38
  property_ids: Annotated[
41
- list[PropertyId],
39
+ list[property_id.PropertyId],
42
40
  Field(description="Specific property IDs from the publisher's adagents.json", min_length=1),
43
41
  ]
44
42
  publisher_domain: Annotated[
@@ -54,16 +52,12 @@ class PublisherPropertySelector2(AdCPBaseModel):
54
52
  ]
55
53
 
56
54
 
57
- class PropertyTag(PropertyId):
58
- pass
59
-
60
-
61
55
  class PublisherPropertySelector3(AdCPBaseModel):
62
56
  model_config = ConfigDict(
63
57
  extra='forbid',
64
58
  )
65
59
  property_tags: Annotated[
66
- list[PropertyTag],
60
+ list[property_tag.PropertyTag],
67
61
  Field(
68
62
  description="Property tags from the publisher's adagents.json. Selector covers all properties with these tags",
69
63
  min_length=1,
@@ -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,