adcp 2.3.0__py3-none-any.whl → 2.4.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 (107) hide show
  1. adcp/__init__.py +1 -1
  2. adcp/types/generated.py +36 -531
  3. adcp/types/generated_poc/__init__.py +1 -1
  4. adcp/types/generated_poc/activate_signal_request.py +5 -5
  5. adcp/types/generated_poc/activate_signal_response.py +9 -9
  6. adcp/types/generated_poc/activation_key.py +8 -8
  7. adcp/types/generated_poc/adagents.py +46 -46
  8. adcp/types/generated_poc/asset_type.py +19 -19
  9. adcp/types/generated_poc/audio_asset.py +6 -6
  10. adcp/types/generated_poc/brand_manifest.py +73 -73
  11. adcp/types/generated_poc/build_creative_request.py +6 -6
  12. adcp/types/generated_poc/build_creative_response.py +9 -9
  13. adcp/types/generated_poc/channels.py +10 -10
  14. adcp/types/generated_poc/cpc_option.py +12 -8
  15. adcp/types/generated_poc/cpcv_option.py +12 -8
  16. adcp/types/generated_poc/cpm_auction_option.py +17 -13
  17. adcp/types/generated_poc/cpm_fixed_option.py +12 -8
  18. adcp/types/generated_poc/cpp_option.py +17 -13
  19. adcp/types/generated_poc/cpv_option.py +16 -12
  20. adcp/types/generated_poc/create_media_buy_request.py +29 -29
  21. adcp/types/generated_poc/create_media_buy_response.py +11 -11
  22. adcp/types/generated_poc/creative_asset.py +13 -13
  23. adcp/types/generated_poc/creative_assignment.py +4 -4
  24. adcp/types/generated_poc/creative_manifest.py +4 -4
  25. adcp/types/generated_poc/creative_policy.py +11 -11
  26. adcp/types/generated_poc/creative_status.py +5 -5
  27. adcp/types/generated_poc/css_asset.py +3 -3
  28. adcp/types/generated_poc/daast_asset.py +30 -30
  29. adcp/types/generated_poc/delivery_metrics.py +33 -33
  30. adcp/types/generated_poc/delivery_type.py +3 -3
  31. adcp/types/generated_poc/deployment.py +21 -21
  32. adcp/types/generated_poc/destination.py +10 -10
  33. adcp/types/generated_poc/error.py +7 -7
  34. adcp/types/generated_poc/flat_rate_option.py +16 -16
  35. adcp/types/generated_poc/format.py +70 -70
  36. adcp/types/generated_poc/format_id.py +3 -3
  37. adcp/types/generated_poc/frequency_cap.py +3 -3
  38. adcp/types/generated_poc/frequency_cap_scope.py +4 -4
  39. adcp/types/generated_poc/get_media_buy_delivery_request.py +21 -21
  40. adcp/types/generated_poc/get_media_buy_delivery_response.py +46 -46
  41. adcp/types/generated_poc/get_products_request.py +23 -23
  42. adcp/types/generated_poc/get_products_response.py +5 -5
  43. adcp/types/generated_poc/get_signals_request.py +19 -19
  44. adcp/types/generated_poc/get_signals_response.py +20 -20
  45. adcp/types/generated_poc/html_asset.py +3 -3
  46. adcp/types/generated_poc/identifier_types.py +20 -20
  47. adcp/types/generated_poc/image_asset.py +7 -7
  48. adcp/types/generated_poc/javascript_asset.py +7 -7
  49. adcp/types/generated_poc/list_authorized_properties_request.py +5 -5
  50. adcp/types/generated_poc/list_authorized_properties_response.py +9 -9
  51. adcp/types/generated_poc/list_creative_formats_request.py +22 -22
  52. adcp/types/generated_poc/list_creative_formats_response.py +11 -11
  53. adcp/types/generated_poc/list_creatives_request.py +51 -51
  54. adcp/types/generated_poc/list_creatives_response.py +61 -61
  55. adcp/types/generated_poc/markdown_asset.py +7 -7
  56. adcp/types/generated_poc/measurement.py +9 -9
  57. adcp/types/generated_poc/media_buy.py +8 -8
  58. adcp/types/generated_poc/media_buy_status.py +5 -5
  59. adcp/types/generated_poc/pacing.py +4 -4
  60. adcp/types/generated_poc/package.py +8 -8
  61. adcp/types/generated_poc/package_request.py +7 -7
  62. adcp/types/generated_poc/package_status.py +5 -5
  63. adcp/types/generated_poc/performance_feedback.py +31 -31
  64. adcp/types/generated_poc/placement.py +4 -4
  65. adcp/types/generated_poc/preview_creative_request.py +28 -28
  66. adcp/types/generated_poc/preview_creative_response.py +31 -31
  67. adcp/types/generated_poc/preview_render.py +36 -28
  68. adcp/types/generated_poc/pricing_model.py +8 -8
  69. adcp/types/generated_poc/product.py +32 -31
  70. adcp/types/generated_poc/promoted_offerings.py +29 -29
  71. adcp/types/generated_poc/promoted_products.py +3 -3
  72. adcp/types/generated_poc/property.py +18 -18
  73. adcp/types/generated_poc/protocol_envelope.py +9 -9
  74. adcp/types/generated_poc/provide_performance_feedback_request.py +24 -24
  75. adcp/types/generated_poc/provide_performance_feedback_response.py +9 -9
  76. adcp/types/generated_poc/publisher_identifier_types.py +6 -6
  77. adcp/types/generated_poc/push_notification_config.py +9 -9
  78. adcp/types/generated_poc/reporting_capabilities.py +21 -21
  79. adcp/types/generated_poc/response.py +5 -5
  80. adcp/types/generated_poc/standard_format_ids.py +36 -36
  81. adcp/types/generated_poc/sub_asset.py +13 -13
  82. adcp/types/generated_poc/sync_creatives_request.py +11 -11
  83. adcp/types/generated_poc/sync_creatives_response.py +23 -23
  84. adcp/types/generated_poc/targeting.py +9 -9
  85. adcp/types/generated_poc/task_status.py +10 -10
  86. adcp/types/generated_poc/task_type.py +6 -6
  87. adcp/types/generated_poc/tasks_get_request.py +5 -5
  88. adcp/types/generated_poc/tasks_get_response.py +35 -35
  89. adcp/types/generated_poc/tasks_list_request.py +36 -36
  90. adcp/types/generated_poc/tasks_list_response.py +35 -35
  91. adcp/types/generated_poc/text_asset.py +3 -3
  92. adcp/types/generated_poc/update_media_buy_request.py +27 -27
  93. adcp/types/generated_poc/update_media_buy_response.py +11 -11
  94. adcp/types/generated_poc/url_asset.py +7 -7
  95. adcp/types/generated_poc/vast_asset.py +38 -38
  96. adcp/types/generated_poc/vcpm_auction_option.py +17 -13
  97. adcp/types/generated_poc/vcpm_fixed_option.py +12 -8
  98. adcp/types/generated_poc/video_asset.py +8 -8
  99. adcp/types/generated_poc/webhook_asset.py +19 -19
  100. adcp/types/generated_poc/webhook_payload.py +18 -18
  101. {adcp-2.3.0.dist-info → adcp-2.4.0.dist-info}/METADATA +1 -1
  102. adcp-2.4.0.dist-info/RECORD +132 -0
  103. adcp-2.3.0.dist-info/RECORD +0 -132
  104. {adcp-2.3.0.dist-info → adcp-2.4.0.dist-info}/WHEEL +0 -0
  105. {adcp-2.3.0.dist-info → adcp-2.4.0.dist-info}/entry_points.txt +0 -0
  106. {adcp-2.3.0.dist-info → adcp-2.4.0.dist-info}/licenses/LICENSE +0 -0
  107. {adcp-2.3.0.dist-info → adcp-2.4.0.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: update-media-buy-request.json
3
- # timestamp: 2025-11-15T22:03:55+00:00
3
+ # timestamp: 2025-11-18T03:04:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -16,27 +16,27 @@ from . import targeting
16
16
 
17
17
  class Packages(AdCPBaseModel):
18
18
  model_config = ConfigDict(
19
- extra="forbid",
19
+ extra='forbid',
20
20
  )
21
- active: Annotated[bool | None, Field(description="Pause/resume specific package")] = None
21
+ active: Annotated[bool | None, Field(description='Pause/resume specific package')] = None
22
22
  bid_price: Annotated[
23
23
  float | None,
24
24
  Field(
25
- description="Updated bid price for auction-based pricing options (only applies when pricing_option is auction-based)",
25
+ description='Updated bid price for auction-based pricing options (only applies when pricing_option is auction-based)',
26
26
  ge=0.0,
27
27
  ),
28
28
  ] = None
29
29
  budget: Annotated[
30
30
  float | None,
31
31
  Field(
32
- description="Updated budget allocation for this package in the currency specified by the pricing option",
32
+ description='Updated budget allocation for this package in the currency specified by the pricing option',
33
33
  ge=0.0,
34
34
  ),
35
35
  ] = None
36
36
  buyer_ref: Annotated[
37
37
  str | None, Field(description="Buyer's reference for the package to update")
38
38
  ] = None
39
- creative_ids: Annotated[list[str] | None, Field(description="Update creative assignments")] = (
39
+ creative_ids: Annotated[list[str] | None, Field(description='Update creative assignments')] = (
40
40
  None
41
41
  )
42
42
  pacing: pacing_1.Pacing | None = None
@@ -46,25 +46,25 @@ class Packages(AdCPBaseModel):
46
46
 
47
47
  class Packages1(AdCPBaseModel):
48
48
  model_config = ConfigDict(
49
- extra="forbid",
49
+ extra='forbid',
50
50
  )
51
- active: Annotated[bool | None, Field(description="Pause/resume specific package")] = None
51
+ active: Annotated[bool | None, Field(description='Pause/resume specific package')] = None
52
52
  bid_price: Annotated[
53
53
  float | None,
54
54
  Field(
55
- description="Updated bid price for auction-based pricing options (only applies when pricing_option is auction-based)",
55
+ description='Updated bid price for auction-based pricing options (only applies when pricing_option is auction-based)',
56
56
  ge=0.0,
57
57
  ),
58
58
  ] = None
59
59
  budget: Annotated[
60
60
  float | None,
61
61
  Field(
62
- description="Updated budget allocation for this package in the currency specified by the pricing option",
62
+ description='Updated budget allocation for this package in the currency specified by the pricing option',
63
63
  ge=0.0,
64
64
  ),
65
65
  ] = None
66
66
  buyer_ref: Annotated[str, Field(description="Buyer's reference for the package to update")]
67
- creative_ids: Annotated[list[str] | None, Field(description="Update creative assignments")] = (
67
+ creative_ids: Annotated[list[str] | None, Field(description='Update creative assignments')] = (
68
68
  None
69
69
  )
70
70
  pacing: pacing_1.Pacing | None = None
@@ -76,35 +76,35 @@ class Packages1(AdCPBaseModel):
76
76
 
77
77
  class UpdateMediaBuyRequest1(AdCPBaseModel):
78
78
  model_config = ConfigDict(
79
- extra="forbid",
79
+ extra='forbid',
80
80
  )
81
- active: Annotated[bool | None, Field(description="Pause/resume the entire media buy")] = None
81
+ active: Annotated[bool | None, Field(description='Pause/resume the entire media buy')] = None
82
82
  buyer_ref: Annotated[
83
83
  str | None, Field(description="Buyer's reference for the media buy to update")
84
84
  ] = None
85
85
  context: Annotated[
86
86
  dict[str, Any] | None,
87
87
  Field(
88
- description="Initiator-provided context included in the request payload. Agents must echo this value back unchanged in responses and webhooks. Use for UI/session hints, correlation tokens, or tracking metadata."
88
+ description='Initiator-provided context included in the request payload. Agents must echo this value back unchanged in responses and webhooks. Use for UI/session hints, correlation tokens, or tracking metadata.'
89
89
  ),
90
90
  ] = None
91
91
  end_time: Annotated[
92
- AwareDatetime | None, Field(description="New end date/time in ISO 8601 format")
92
+ AwareDatetime | None, Field(description='New end date/time in ISO 8601 format')
93
93
  ] = None
94
94
  media_buy_id: Annotated[str, Field(description="Publisher's ID of the media buy to update")]
95
95
  packages: Annotated[
96
- list[Packages | Packages1] | None, Field(description="Package-specific updates")
96
+ list[Packages | Packages1] | None, Field(description='Package-specific updates')
97
97
  ] = None
98
98
  push_notification_config: Annotated[
99
99
  push_notification_config_1.PushNotificationConfig | None,
100
100
  Field(
101
- description="Optional webhook configuration for async update notifications. Publisher will send webhook when update completes if operation takes longer than immediate response time."
101
+ description='Optional webhook configuration for async update notifications. Publisher will send webhook when update completes if operation takes longer than immediate response time.'
102
102
  ),
103
103
  ] = None
104
104
  start_time: Annotated[
105
105
  str | AwareDatetime | None,
106
106
  Field(
107
- description="Campaign start timing: 'asap' or ISO 8601 date-time", title="Start Timing"
107
+ description="Campaign start timing: 'asap' or ISO 8601 date-time", title='Start Timing'
108
108
  ),
109
109
  ] = None
110
110
 
@@ -117,35 +117,35 @@ Packages3 = Packages1
117
117
 
118
118
  class UpdateMediaBuyRequest2(AdCPBaseModel):
119
119
  model_config = ConfigDict(
120
- extra="forbid",
120
+ extra='forbid',
121
121
  )
122
- active: Annotated[bool | None, Field(description="Pause/resume the entire media buy")] = None
122
+ active: Annotated[bool | None, Field(description='Pause/resume the entire media buy')] = None
123
123
  buyer_ref: Annotated[str, Field(description="Buyer's reference for the media buy to update")]
124
124
  context: Annotated[
125
125
  dict[str, Any] | None,
126
126
  Field(
127
- description="Initiator-provided context included in the request payload. Agents must echo this value back unchanged in responses and webhooks. Use for UI/session hints, correlation tokens, or tracking metadata."
127
+ description='Initiator-provided context included in the request payload. Agents must echo this value back unchanged in responses and webhooks. Use for UI/session hints, correlation tokens, or tracking metadata.'
128
128
  ),
129
129
  ] = None
130
130
  end_time: Annotated[
131
- AwareDatetime | None, Field(description="New end date/time in ISO 8601 format")
131
+ AwareDatetime | None, Field(description='New end date/time in ISO 8601 format')
132
132
  ] = None
133
133
  media_buy_id: Annotated[
134
134
  str | None, Field(description="Publisher's ID of the media buy to update")
135
135
  ] = None
136
136
  packages: Annotated[
137
- list[Packages2 | Packages3] | None, Field(description="Package-specific updates")
137
+ list[Packages2 | Packages3] | None, Field(description='Package-specific updates')
138
138
  ] = None
139
139
  push_notification_config: Annotated[
140
140
  push_notification_config_1.PushNotificationConfig | None,
141
141
  Field(
142
- description="Optional webhook configuration for async update notifications. Publisher will send webhook when update completes if operation takes longer than immediate response time."
142
+ description='Optional webhook configuration for async update notifications. Publisher will send webhook when update completes if operation takes longer than immediate response time.'
143
143
  ),
144
144
  ] = None
145
145
  start_time: Annotated[
146
146
  str | AwareDatetime | None,
147
147
  Field(
148
- description="Campaign start timing: 'asap' or ISO 8601 date-time", title="Start Timing"
148
+ description="Campaign start timing: 'asap' or ISO 8601 date-time", title='Start Timing'
149
149
  ),
150
150
  ] = None
151
151
 
@@ -154,7 +154,7 @@ class UpdateMediaBuyRequest(RootModel[UpdateMediaBuyRequest1 | UpdateMediaBuyReq
154
154
  root: Annotated[
155
155
  UpdateMediaBuyRequest1 | UpdateMediaBuyRequest2,
156
156
  Field(
157
- description="Request parameters for updating campaign and package settings",
158
- title="Update Media Buy Request",
157
+ description='Request parameters for updating campaign and package settings',
158
+ title='Update Media Buy Request',
159
159
  ),
160
160
  ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: update-media-buy-response.json
3
- # timestamp: 2025-11-15T22:03:55+00:00
3
+ # timestamp: 2025-11-18T03:04:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -14,7 +14,7 @@ from . import error
14
14
 
15
15
  class AffectedPackage(AdCPBaseModel):
16
16
  model_config = ConfigDict(
17
- extra="forbid",
17
+ extra='forbid',
18
18
  )
19
19
  buyer_ref: Annotated[str, Field(description="Buyer's reference for the package")]
20
20
  package_id: Annotated[str, Field(description="Publisher's package identifier")]
@@ -22,38 +22,38 @@ class AffectedPackage(AdCPBaseModel):
22
22
 
23
23
  class UpdateMediaBuyResponse1(AdCPBaseModel):
24
24
  model_config = ConfigDict(
25
- extra="forbid",
25
+ extra='forbid',
26
26
  )
27
27
  affected_packages: Annotated[
28
- list[AffectedPackage] | None, Field(description="Array of packages that were modified")
28
+ list[AffectedPackage] | None, Field(description='Array of packages that were modified')
29
29
  ] = None
30
30
  buyer_ref: Annotated[str, Field(description="Buyer's reference identifier for the media buy")]
31
31
  context: Annotated[
32
32
  dict[str, Any] | None,
33
33
  Field(
34
- description="Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers."
34
+ description='Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.'
35
35
  ),
36
36
  ] = None
37
37
  implementation_date: Annotated[
38
38
  AwareDatetime | None,
39
- Field(description="ISO 8601 timestamp when changes take effect (null if pending approval)"),
39
+ Field(description='ISO 8601 timestamp when changes take effect (null if pending approval)'),
40
40
  ] = None
41
41
  media_buy_id: Annotated[str, Field(description="Publisher's identifier for the media buy")]
42
42
 
43
43
 
44
44
  class UpdateMediaBuyResponse2(AdCPBaseModel):
45
45
  model_config = ConfigDict(
46
- extra="forbid",
46
+ extra='forbid',
47
47
  )
48
48
  context: Annotated[
49
49
  dict[str, Any] | None,
50
50
  Field(
51
- description="Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers."
51
+ description='Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.'
52
52
  ),
53
53
  ] = None
54
54
  errors: Annotated[
55
55
  list[error.Error],
56
- Field(description="Array of errors explaining why the operation failed", min_length=1),
56
+ Field(description='Array of errors explaining why the operation failed', min_length=1),
57
57
  ]
58
58
 
59
59
 
@@ -61,7 +61,7 @@ class UpdateMediaBuyResponse(RootModel[UpdateMediaBuyResponse1 | UpdateMediaBuyR
61
61
  root: Annotated[
62
62
  UpdateMediaBuyResponse1 | UpdateMediaBuyResponse2,
63
63
  Field(
64
- description="Response payload for update_media_buy task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - updates are either fully applied or not applied at all.",
65
- title="Update Media Buy Response",
64
+ description='Response payload for update_media_buy task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - updates are either fully applied or not applied at all.',
65
+ title='Update Media Buy Response',
66
66
  ),
67
67
  ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: url-asset.json
3
- # timestamp: 2025-11-15T22:03:55+00:00
3
+ # timestamp: 2025-11-18T03:04:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -12,19 +12,19 @@ from pydantic import AnyUrl, ConfigDict, Field
12
12
 
13
13
 
14
14
  class UrlType(Enum):
15
- clickthrough = "clickthrough"
16
- tracker_pixel = "tracker_pixel"
17
- tracker_script = "tracker_script"
15
+ clickthrough = 'clickthrough'
16
+ tracker_pixel = 'tracker_pixel'
17
+ tracker_script = 'tracker_script'
18
18
 
19
19
 
20
20
  class UrlAsset(AdCPBaseModel):
21
21
  model_config = ConfigDict(
22
- extra="forbid",
22
+ extra='forbid',
23
23
  )
24
24
  description: Annotated[
25
- str | None, Field(description="Description of what this URL points to")
25
+ str | None, Field(description='Description of what this URL points to')
26
26
  ] = None
27
- url: Annotated[AnyUrl, Field(description="URL reference")]
27
+ url: Annotated[AnyUrl, Field(description='URL reference')]
28
28
  url_type: Annotated[
29
29
  UrlType | None,
30
30
  Field(
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: vast-asset.json
3
- # timestamp: 2025-11-15T22:03:55+00:00
3
+ # timestamp: 2025-11-18T03:04:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -12,75 +12,75 @@ from pydantic import AnyUrl, ConfigDict, Field
12
12
 
13
13
 
14
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"
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
31
 
32
32
 
33
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"
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'
39
39
 
40
40
 
41
41
  class VastAsset1(AdCPBaseModel):
42
42
  model_config = ConfigDict(
43
- extra="forbid",
43
+ extra='forbid',
44
44
  )
45
45
  delivery_type: Annotated[
46
- Literal["url"],
47
- Field(description="Discriminator indicating VAST is delivered via URL endpoint"),
46
+ Literal['url'],
47
+ Field(description='Discriminator indicating VAST is delivered via URL endpoint'),
48
48
  ]
49
49
  duration_ms: Annotated[
50
- int | None, Field(description="Expected video duration in milliseconds (if known)", ge=0)
50
+ int | None, Field(description='Expected video duration in milliseconds (if known)', ge=0)
51
51
  ] = None
52
52
  tracking_events: Annotated[
53
- list[TrackingEvent] | None, Field(description="Tracking events supported by this VAST tag")
53
+ list[TrackingEvent] | None, Field(description='Tracking events supported by this VAST tag')
54
54
  ] = None
55
- url: Annotated[AnyUrl, Field(description="URL endpoint that returns VAST XML")]
56
- vast_version: Annotated[VastVersion | None, Field(description="VAST specification version")] = (
55
+ url: Annotated[AnyUrl, Field(description='URL endpoint that returns VAST XML')]
56
+ vast_version: Annotated[VastVersion | None, Field(description='VAST specification version')] = (
57
57
  None
58
58
  )
59
59
  vpaid_enabled: Annotated[
60
60
  bool | None,
61
- Field(description="Whether VPAID (Video Player-Ad Interface Definition) is supported"),
61
+ Field(description='Whether VPAID (Video Player-Ad Interface Definition) is supported'),
62
62
  ] = None
63
63
 
64
64
 
65
65
  class VastAsset2(AdCPBaseModel):
66
66
  model_config = ConfigDict(
67
- extra="forbid",
67
+ extra='forbid',
68
68
  )
69
- content: Annotated[str, Field(description="Inline VAST XML content")]
69
+ content: Annotated[str, Field(description='Inline VAST XML content')]
70
70
  delivery_type: Annotated[
71
- Literal["inline"],
72
- Field(description="Discriminator indicating VAST is delivered as inline XML content"),
71
+ Literal['inline'],
72
+ Field(description='Discriminator indicating VAST is delivered as inline XML content'),
73
73
  ]
74
74
  duration_ms: Annotated[
75
- int | None, Field(description="Expected video duration in milliseconds (if known)", ge=0)
75
+ int | None, Field(description='Expected video duration in milliseconds (if known)', ge=0)
76
76
  ] = None
77
77
  tracking_events: Annotated[
78
- list[TrackingEvent] | None, Field(description="Tracking events supported by this VAST tag")
78
+ list[TrackingEvent] | None, Field(description='Tracking events supported by this VAST tag')
79
79
  ] = None
80
- vast_version: Annotated[VastVersion | None, Field(description="VAST specification version")] = (
80
+ vast_version: Annotated[VastVersion | None, Field(description='VAST specification version')] = (
81
81
  None
82
82
  )
83
83
  vpaid_enabled: Annotated[
84
84
  bool | None,
85
- Field(description="Whether VPAID (Video Player-Ad Interface Definition) is supported"),
85
+ Field(description='Whether VPAID (Video Player-Ad Interface Definition) is supported'),
86
86
  ] = None
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: vcpm-auction-option.json
3
- # timestamp: 2025-11-15T22:03:55+00:00
3
+ # timestamp: 2025-11-18T03:04:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -11,43 +11,47 @@ from pydantic import ConfigDict, Field
11
11
 
12
12
 
13
13
  class PriceGuidance(AdCPBaseModel):
14
- floor: Annotated[float, Field(description="Minimum acceptable bid price", ge=0.0)]
14
+ floor: Annotated[float, Field(description='Minimum acceptable bid price', ge=0.0)]
15
15
  p25: Annotated[
16
- float | None, Field(description="25th percentile of recent winning bids", ge=0.0)
16
+ float | None, Field(description='25th percentile of recent winning bids', ge=0.0)
17
17
  ] = None
18
- p50: Annotated[float | None, Field(description="Median of recent winning bids", ge=0.0)] = None
18
+ p50: Annotated[float | None, Field(description='Median of recent winning bids', ge=0.0)] = None
19
19
  p75: Annotated[
20
- float | None, Field(description="75th percentile of recent winning bids", ge=0.0)
20
+ float | None, Field(description='75th percentile of recent winning bids', ge=0.0)
21
21
  ] = None
22
22
  p90: Annotated[
23
- float | None, Field(description="90th percentile of recent winning bids", ge=0.0)
23
+ float | None, Field(description='90th percentile of recent winning bids', ge=0.0)
24
24
  ] = None
25
25
 
26
26
 
27
27
  class VcpmAuctionPricingOption(AdCPBaseModel):
28
28
  model_config = ConfigDict(
29
- extra="forbid",
29
+ extra='forbid',
30
30
  )
31
31
  currency: Annotated[
32
32
  str,
33
33
  Field(
34
- description="ISO 4217 currency code",
35
- examples=["USD", "EUR", "GBP", "JPY"],
36
- pattern="^[A-Z]{3}$",
34
+ description='ISO 4217 currency code',
35
+ examples=['USD', 'EUR', 'GBP', 'JPY'],
36
+ pattern='^[A-Z]{3}$',
37
37
  ),
38
38
  ]
39
+ is_fixed: Annotated[
40
+ Literal[False],
41
+ Field(description='Whether this is a fixed rate (true) or auction-based (false)'),
42
+ ]
39
43
  min_spend_per_package: Annotated[
40
44
  float | None,
41
45
  Field(
42
- description="Minimum spend requirement per package using this pricing option, in the specified currency",
46
+ description='Minimum spend requirement per package using this pricing option, in the specified currency',
43
47
  ge=0.0,
44
48
  ),
45
49
  ] = None
46
50
  price_guidance: Annotated[
47
- PriceGuidance, Field(description="Statistical guidance for auction pricing")
51
+ PriceGuidance, Field(description='Statistical guidance for auction pricing')
48
52
  ]
49
53
  pricing_model: Annotated[
50
- Literal["vcpm"], Field(description="Cost per 1,000 viewable impressions (MRC standard)")
54
+ Literal['vcpm'], Field(description='Cost per 1,000 viewable impressions (MRC standard)')
51
55
  ]
52
56
  pricing_option_id: Annotated[
53
57
  str,
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: vcpm-fixed-option.json
3
- # timestamp: 2025-11-15T22:03:55+00:00
3
+ # timestamp: 2025-11-18T03:04:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -12,25 +12,29 @@ from pydantic import ConfigDict, Field
12
12
 
13
13
  class VcpmFixedRatePricingOption(AdCPBaseModel):
14
14
  model_config = ConfigDict(
15
- extra="forbid",
15
+ extra='forbid',
16
16
  )
17
17
  currency: Annotated[
18
18
  str,
19
19
  Field(
20
- description="ISO 4217 currency code",
21
- examples=["USD", "EUR", "GBP", "JPY"],
22
- pattern="^[A-Z]{3}$",
20
+ description='ISO 4217 currency code',
21
+ examples=['USD', 'EUR', 'GBP', 'JPY'],
22
+ pattern='^[A-Z]{3}$',
23
23
  ),
24
24
  ]
25
+ is_fixed: Annotated[
26
+ Literal[True],
27
+ Field(description='Whether this is a fixed rate (true) or auction-based (false)'),
28
+ ]
25
29
  min_spend_per_package: Annotated[
26
30
  float | None,
27
31
  Field(
28
- description="Minimum spend requirement per package using this pricing option, in the specified currency",
32
+ description='Minimum spend requirement per package using this pricing option, in the specified currency',
29
33
  ge=0.0,
30
34
  ),
31
35
  ] = None
32
36
  pricing_model: Annotated[
33
- Literal["vcpm"], Field(description="Cost per 1,000 viewable impressions (MRC standard)")
37
+ Literal['vcpm'], Field(description='Cost per 1,000 viewable impressions (MRC standard)')
34
38
  ]
35
39
  pricing_option_id: Annotated[
36
40
  str,
@@ -39,5 +43,5 @@ class VcpmFixedRatePricingOption(AdCPBaseModel):
39
43
  ),
40
44
  ]
41
45
  rate: Annotated[
42
- float, Field(description="Fixed vCPM rate (cost per 1,000 viewable impressions)", ge=0.0)
46
+ float, Field(description='Fixed vCPM rate (cost per 1,000 viewable impressions)', ge=0.0)
43
47
  ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: video-asset.json
3
- # timestamp: 2025-11-15T22:03:55+00:00
3
+ # timestamp: 2025-11-18T03:04:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -12,17 +12,17 @@ from pydantic import AnyUrl, ConfigDict, Field
12
12
 
13
13
  class VideoAsset(AdCPBaseModel):
14
14
  model_config = ConfigDict(
15
- extra="forbid",
15
+ extra='forbid',
16
16
  )
17
17
  bitrate_kbps: Annotated[
18
- int | None, Field(description="Video bitrate in kilobits per second", ge=1)
18
+ int | None, Field(description='Video bitrate in kilobits per second', ge=1)
19
19
  ] = None
20
20
  duration_ms: Annotated[
21
- int | None, Field(description="Video duration in milliseconds", ge=0)
21
+ int | None, Field(description='Video duration in milliseconds', ge=0)
22
22
  ] = None
23
- format: Annotated[str | None, Field(description="Video file format (mp4, webm, mov, etc.)")] = (
23
+ format: Annotated[str | None, Field(description='Video file format (mp4, webm, mov, etc.)')] = (
24
24
  None
25
25
  )
26
- height: Annotated[int | None, Field(description="Video height in pixels", ge=1)] = None
27
- url: Annotated[AnyUrl, Field(description="URL to the video asset")]
28
- width: Annotated[int | None, Field(description="Video width in pixels", ge=1)] = None
26
+ height: Annotated[int | None, Field(description='Video height in pixels', ge=1)] = None
27
+ url: Annotated[AnyUrl, Field(description='URL to the video asset')]
28
+ width: Annotated[int | None, Field(description='Video width in pixels', ge=1)] = None
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: webhook-asset.json
3
- # timestamp: 2025-11-15T22:03:55+00:00
3
+ # timestamp: 2025-11-18T03:04:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -12,21 +12,21 @@ from pydantic import AnyUrl, ConfigDict, Field
12
12
 
13
13
 
14
14
  class Method(Enum):
15
- GET = "GET"
16
- POST = "POST"
15
+ GET = 'GET'
16
+ POST = 'POST'
17
17
 
18
18
 
19
19
  class ResponseType(Enum):
20
- html = "html"
21
- json = "json"
22
- xml = "xml"
23
- javascript = "javascript"
20
+ html = 'html'
21
+ json = 'json'
22
+ xml = 'xml'
23
+ javascript = 'javascript'
24
24
 
25
25
 
26
26
  class Method1(Enum):
27
- hmac_sha256 = "hmac_sha256"
28
- api_key = "api_key"
29
- none = "none"
27
+ hmac_sha256 = 'hmac_sha256'
28
+ api_key = 'api_key'
29
+ none = 'none'
30
30
 
31
31
 
32
32
  class Security(AdCPBaseModel):
@@ -36,30 +36,30 @@ class Security(AdCPBaseModel):
36
36
  hmac_header: Annotated[
37
37
  str | None, Field(description="Header name for HMAC signature (e.g., 'X-Signature')")
38
38
  ] = None
39
- method: Annotated[Method1, Field(description="Authentication method")]
39
+ method: Annotated[Method1, Field(description='Authentication method')]
40
40
 
41
41
 
42
42
  class WebhookAsset(AdCPBaseModel):
43
43
  model_config = ConfigDict(
44
- extra="forbid",
44
+ extra='forbid',
45
45
  )
46
- method: Annotated[Method | None, Field(description="HTTP method")] = Method.POST
46
+ method: Annotated[Method | None, Field(description='HTTP method')] = Method.POST
47
47
  required_macros: Annotated[
48
48
  list[str] | None,
49
- Field(description="Universal macros that must be provided for webhook to function"),
49
+ Field(description='Universal macros that must be provided for webhook to function'),
50
50
  ] = None
51
51
  response_type: Annotated[
52
- ResponseType, Field(description="Expected content type of webhook response")
52
+ ResponseType, Field(description='Expected content type of webhook response')
53
53
  ]
54
- security: Annotated[Security, Field(description="Security configuration for webhook calls")]
54
+ security: Annotated[Security, Field(description='Security configuration for webhook calls')]
55
55
  supported_macros: Annotated[
56
56
  list[str] | None,
57
57
  Field(
58
- description="Universal macros that can be passed to webhook (e.g., {DEVICE_TYPE}, {COUNTRY})"
58
+ description='Universal macros that can be passed to webhook (e.g., {DEVICE_TYPE}, {COUNTRY})'
59
59
  ),
60
60
  ] = None
61
61
  timeout_ms: Annotated[
62
62
  int | None,
63
- Field(description="Maximum time to wait for response in milliseconds", ge=10, le=5000),
63
+ Field(description='Maximum time to wait for response in milliseconds', ge=10, le=5000),
64
64
  ] = 500
65
- url: Annotated[AnyUrl, Field(description="Webhook URL to call for dynamic content")]
65
+ url: Annotated[AnyUrl, Field(description='Webhook URL to call for dynamic content')]