adcp 2.3.0__py3-none-any.whl → 2.4.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 (120) hide show
  1. adcp/__init__.py +88 -39
  2. adcp/__main__.py +1 -1
  3. adcp/client.py +9 -9
  4. adcp/simple.py +1 -1
  5. adcp/testing/test_helpers.py +1 -1
  6. adcp/types/__init__.py +66 -2
  7. adcp/types/_generated.py +175 -0
  8. adcp/types/aliases.py +1 -1
  9. adcp/types/generated_poc/__init__.py +1 -1
  10. adcp/types/generated_poc/activate_signal_request.py +5 -5
  11. adcp/types/generated_poc/activate_signal_response.py +9 -9
  12. adcp/types/generated_poc/activation_key.py +8 -8
  13. adcp/types/generated_poc/adagents.py +46 -46
  14. adcp/types/generated_poc/asset_type.py +19 -19
  15. adcp/types/generated_poc/audio_asset.py +6 -6
  16. adcp/types/generated_poc/brand_manifest.py +61 -120
  17. adcp/types/generated_poc/build_creative_request.py +6 -6
  18. adcp/types/generated_poc/build_creative_response.py +9 -9
  19. adcp/types/generated_poc/channels.py +10 -10
  20. adcp/types/generated_poc/cpc_option.py +12 -8
  21. adcp/types/generated_poc/cpcv_option.py +12 -8
  22. adcp/types/generated_poc/cpm_auction_option.py +17 -13
  23. adcp/types/generated_poc/cpm_fixed_option.py +12 -8
  24. adcp/types/generated_poc/cpp_option.py +17 -13
  25. adcp/types/generated_poc/cpv_option.py +16 -12
  26. adcp/types/generated_poc/create_media_buy_request.py +30 -30
  27. adcp/types/generated_poc/create_media_buy_response.py +11 -11
  28. adcp/types/generated_poc/creative_asset.py +13 -13
  29. adcp/types/generated_poc/creative_assignment.py +4 -4
  30. adcp/types/generated_poc/creative_manifest.py +4 -4
  31. adcp/types/generated_poc/creative_policy.py +11 -11
  32. adcp/types/generated_poc/creative_status.py +5 -5
  33. adcp/types/generated_poc/css_asset.py +3 -3
  34. adcp/types/generated_poc/daast_asset.py +30 -30
  35. adcp/types/generated_poc/delivery_metrics.py +33 -33
  36. adcp/types/generated_poc/delivery_type.py +3 -3
  37. adcp/types/generated_poc/deployment.py +21 -21
  38. adcp/types/generated_poc/destination.py +10 -10
  39. adcp/types/generated_poc/error.py +7 -7
  40. adcp/types/generated_poc/flat_rate_option.py +16 -16
  41. adcp/types/generated_poc/format.py +70 -70
  42. adcp/types/generated_poc/format_id.py +3 -3
  43. adcp/types/generated_poc/frequency_cap.py +3 -3
  44. adcp/types/generated_poc/frequency_cap_scope.py +4 -4
  45. adcp/types/generated_poc/get_media_buy_delivery_request.py +21 -21
  46. adcp/types/generated_poc/get_media_buy_delivery_response.py +46 -46
  47. adcp/types/generated_poc/get_products_request.py +24 -24
  48. adcp/types/generated_poc/get_products_response.py +5 -5
  49. adcp/types/generated_poc/get_signals_request.py +19 -19
  50. adcp/types/generated_poc/get_signals_response.py +20 -20
  51. adcp/types/generated_poc/html_asset.py +3 -3
  52. adcp/types/generated_poc/identifier_types.py +20 -20
  53. adcp/types/generated_poc/image_asset.py +7 -7
  54. adcp/types/generated_poc/javascript_asset.py +7 -7
  55. adcp/types/generated_poc/list_authorized_properties_request.py +5 -5
  56. adcp/types/generated_poc/list_authorized_properties_response.py +9 -9
  57. adcp/types/generated_poc/list_creative_formats_request.py +22 -22
  58. adcp/types/generated_poc/list_creative_formats_response.py +11 -11
  59. adcp/types/generated_poc/list_creatives_request.py +51 -51
  60. adcp/types/generated_poc/list_creatives_response.py +57 -72
  61. adcp/types/generated_poc/markdown_asset.py +7 -7
  62. adcp/types/generated_poc/measurement.py +9 -9
  63. adcp/types/generated_poc/media_buy.py +8 -8
  64. adcp/types/generated_poc/media_buy_status.py +5 -5
  65. adcp/types/generated_poc/pacing.py +4 -4
  66. adcp/types/generated_poc/package.py +8 -8
  67. adcp/types/generated_poc/package_request.py +7 -7
  68. adcp/types/generated_poc/package_status.py +5 -5
  69. adcp/types/generated_poc/performance_feedback.py +31 -31
  70. adcp/types/generated_poc/placement.py +4 -4
  71. adcp/types/generated_poc/preview_creative_request.py +28 -28
  72. adcp/types/generated_poc/preview_creative_response.py +31 -31
  73. adcp/types/generated_poc/preview_render.py +36 -28
  74. adcp/types/generated_poc/pricing_model.py +8 -8
  75. adcp/types/generated_poc/product.py +53 -43
  76. adcp/types/generated_poc/promoted_offerings.py +30 -30
  77. adcp/types/generated_poc/promoted_products.py +3 -3
  78. adcp/types/generated_poc/property.py +18 -18
  79. adcp/types/generated_poc/protocol_envelope.py +9 -9
  80. adcp/types/generated_poc/provide_performance_feedback_request.py +24 -24
  81. adcp/types/generated_poc/provide_performance_feedback_response.py +9 -9
  82. adcp/types/generated_poc/publisher_identifier_types.py +6 -6
  83. adcp/types/generated_poc/push_notification_config.py +9 -9
  84. adcp/types/generated_poc/reporting_capabilities.py +21 -21
  85. adcp/types/generated_poc/response.py +5 -5
  86. adcp/types/generated_poc/standard_format_ids.py +36 -36
  87. adcp/types/generated_poc/sub_asset.py +13 -13
  88. adcp/types/generated_poc/sync_creatives_request.py +11 -11
  89. adcp/types/generated_poc/sync_creatives_response.py +23 -23
  90. adcp/types/generated_poc/targeting.py +9 -9
  91. adcp/types/generated_poc/task_status.py +10 -10
  92. adcp/types/generated_poc/task_type.py +6 -6
  93. adcp/types/generated_poc/tasks_get_request.py +5 -5
  94. adcp/types/generated_poc/tasks_get_response.py +35 -35
  95. adcp/types/generated_poc/tasks_list_request.py +36 -36
  96. adcp/types/generated_poc/tasks_list_response.py +35 -35
  97. adcp/types/generated_poc/text_asset.py +3 -3
  98. adcp/types/generated_poc/update_media_buy_request.py +27 -27
  99. adcp/types/generated_poc/update_media_buy_response.py +11 -11
  100. adcp/types/generated_poc/url_asset.py +7 -7
  101. adcp/types/generated_poc/vast_asset.py +38 -38
  102. adcp/types/generated_poc/vcpm_auction_option.py +17 -13
  103. adcp/types/generated_poc/vcpm_fixed_option.py +12 -8
  104. adcp/types/generated_poc/video_asset.py +8 -8
  105. adcp/types/generated_poc/webhook_asset.py +19 -19
  106. adcp/types/generated_poc/webhook_payload.py +18 -18
  107. adcp/types/stable.py +175 -0
  108. adcp/utils/preview_cache.py +6 -6
  109. {adcp-2.3.0.dist-info → adcp-2.4.1.dist-info}/METADATA +29 -4
  110. adcp-2.4.1.dist-info/RECORD +129 -0
  111. adcp/types/generated.py +0 -614
  112. adcp/types/generated_poc/brand_manifest_ref.py +0 -361
  113. adcp/types/generated_poc/index.py +0 -17
  114. adcp/types/generated_poc/pricing_option.py +0 -365
  115. adcp/types/generated_poc/start_timing.py +0 -13
  116. adcp-2.3.0.dist-info/RECORD +0 -132
  117. {adcp-2.3.0.dist-info → adcp-2.4.1.dist-info}/WHEEL +0 -0
  118. {adcp-2.3.0.dist-info → adcp-2.4.1.dist-info}/entry_points.txt +0 -0
  119. {adcp-2.3.0.dist-info → adcp-2.4.1.dist-info}/licenses/LICENSE +0 -0
  120. {adcp-2.3.0.dist-info → adcp-2.4.1.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: provide-performance-feedback-request.json
3
- # timestamp: 2025-11-15T22:03:55+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -12,74 +12,74 @@ from pydantic import AwareDatetime, ConfigDict, Field
12
12
 
13
13
 
14
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"
15
+ buyer_attribution = 'buyer_attribution'
16
+ third_party_measurement = 'third_party_measurement'
17
+ platform_analytics = 'platform_analytics'
18
+ verification_partner = 'verification_partner'
19
19
 
20
20
 
21
21
  class MeasurementPeriod(AdCPBaseModel):
22
22
  model_config = ConfigDict(
23
- extra="forbid",
23
+ extra='forbid',
24
24
  )
25
25
  end: Annotated[
26
- AwareDatetime, Field(description="ISO 8601 end timestamp for measurement period")
26
+ AwareDatetime, Field(description='ISO 8601 end timestamp for measurement period')
27
27
  ]
28
28
  start: Annotated[
29
- AwareDatetime, Field(description="ISO 8601 start timestamp for measurement period")
29
+ AwareDatetime, Field(description='ISO 8601 start timestamp for measurement period')
30
30
  ]
31
31
 
32
32
 
33
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"
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
42
 
43
43
 
44
44
  class ProvidePerformanceFeedbackRequest(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 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."
51
+ 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.'
52
52
  ),
53
53
  ] = None
54
54
  creative_id: Annotated[
55
55
  str | None,
56
56
  Field(
57
- description="Specific creative asset (if feedback is creative-specific)", min_length=1
57
+ description='Specific creative asset (if feedback is creative-specific)', min_length=1
58
58
  ),
59
59
  ] = None
60
60
  feedback_source: Annotated[
61
- FeedbackSource | None, Field(description="Source of the performance data")
61
+ FeedbackSource | None, Field(description='Source of the performance data')
62
62
  ] = FeedbackSource.buyer_attribution
63
63
  measurement_period: Annotated[
64
- MeasurementPeriod, Field(description="Time period for performance measurement")
64
+ MeasurementPeriod, Field(description='Time period for performance measurement')
65
65
  ]
66
66
  media_buy_id: Annotated[
67
67
  str, Field(description="Publisher's media buy identifier", min_length=1)
68
68
  ]
69
69
  metric_type: Annotated[
70
- MetricType | None, Field(description="The business metric being measured")
70
+ MetricType | None, Field(description='The business metric being measured')
71
71
  ] = MetricType.overall_performance
72
72
  package_id: Annotated[
73
73
  str | None,
74
74
  Field(
75
- description="Specific package within the media buy (if feedback is package-specific)",
75
+ description='Specific package within the media buy (if feedback is package-specific)',
76
76
  min_length=1,
77
77
  ),
78
78
  ] = None
79
79
  performance_index: Annotated[
80
80
  float,
81
81
  Field(
82
- description="Normalized performance score (0.0 = no value, 1.0 = expected, >1.0 = above expected)",
82
+ description='Normalized performance score (0.0 = no value, 1.0 = expected, >1.0 = above expected)',
83
83
  ge=0.0,
84
84
  ),
85
85
  ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: provide-performance-feedback-response.json
3
- # timestamp: 2025-11-15T22:03:55+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -14,34 +14,34 @@ from . import error
14
14
 
15
15
  class ProvidePerformanceFeedbackResponse1(AdCPBaseModel):
16
16
  model_config = ConfigDict(
17
- extra="forbid",
17
+ extra='forbid',
18
18
  )
19
19
  context: Annotated[
20
20
  dict[str, Any] | None,
21
21
  Field(
22
- description="Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers."
22
+ description='Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.'
23
23
  ),
24
24
  ] = None
25
25
  success: Annotated[
26
26
  Literal[True],
27
- Field(description="Whether the performance feedback was successfully received"),
27
+ Field(description='Whether the performance feedback was successfully received'),
28
28
  ]
29
29
 
30
30
 
31
31
  class ProvidePerformanceFeedbackResponse2(AdCPBaseModel):
32
32
  model_config = ConfigDict(
33
- extra="forbid",
33
+ extra='forbid',
34
34
  )
35
35
  context: Annotated[
36
36
  dict[str, Any] | None,
37
37
  Field(
38
- description="Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers."
38
+ description='Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.'
39
39
  ),
40
40
  ] = None
41
41
  errors: Annotated[
42
42
  list[error.Error],
43
43
  Field(
44
- description="Array of errors explaining why feedback was rejected (e.g., invalid measurement period, missing campaign data)",
44
+ description='Array of errors explaining why feedback was rejected (e.g., invalid measurement period, missing campaign data)',
45
45
  min_length=1,
46
46
  ),
47
47
  ]
@@ -53,7 +53,7 @@ class ProvidePerformanceFeedbackResponse(
53
53
  root: Annotated[
54
54
  ProvidePerformanceFeedbackResponse1 | ProvidePerformanceFeedbackResponse2,
55
55
  Field(
56
- description="Response payload for provide_performance_feedback task. Returns either success confirmation OR error information, never both.",
57
- title="Provide Performance Feedback Response",
56
+ description='Response payload for provide_performance_feedback task. Returns either success confirmation OR error information, never both.',
57
+ title='Provide Performance Feedback Response',
58
58
  ),
59
59
  ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: publisher-identifier-types.json
3
- # timestamp: 2025-11-15T22:03:55+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -8,8 +8,8 @@ from enum import Enum
8
8
 
9
9
 
10
10
  class PublisherIdentifierTypes(Enum):
11
- tag_id = "tag_id"
12
- duns = "duns"
13
- lei = "lei"
14
- seller_id = "seller_id"
15
- gln = "gln"
11
+ tag_id = 'tag_id'
12
+ duns = 'duns'
13
+ lei = 'lei'
14
+ seller_id = 'seller_id'
15
+ gln = 'gln'
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: push-notification-config.json
3
- # timestamp: 2025-11-15T22:03:55+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -12,18 +12,18 @@ from pydantic import AnyUrl, ConfigDict, Field
12
12
 
13
13
 
14
14
  class Scheme(Enum):
15
- Bearer = "Bearer"
16
- HMAC_SHA256 = "HMAC-SHA256"
15
+ Bearer = 'Bearer'
16
+ HMAC_SHA256 = 'HMAC-SHA256'
17
17
 
18
18
 
19
19
  class Authentication(AdCPBaseModel):
20
20
  model_config = ConfigDict(
21
- extra="forbid",
21
+ extra='forbid',
22
22
  )
23
23
  credentials: Annotated[
24
24
  str,
25
25
  Field(
26
- description="Credentials for authentication. For Bearer: token sent in Authorization header. For HMAC-SHA256: shared secret used to generate signature. Minimum 32 characters. Exchanged out-of-band during onboarding.",
26
+ description='Credentials for authentication. For Bearer: token sent in Authorization header. For HMAC-SHA256: shared secret used to generate signature. Minimum 32 characters. Exchanged out-of-band during onboarding.',
27
27
  min_length=32,
28
28
  ),
29
29
  ]
@@ -39,17 +39,17 @@ class Authentication(AdCPBaseModel):
39
39
 
40
40
  class PushNotificationConfig(AdCPBaseModel):
41
41
  model_config = ConfigDict(
42
- extra="forbid",
42
+ extra='forbid',
43
43
  )
44
44
  authentication: Annotated[
45
45
  Authentication,
46
- Field(description="Authentication configuration for webhook delivery (A2A-compatible)"),
46
+ Field(description='Authentication configuration for webhook delivery (A2A-compatible)'),
47
47
  ]
48
48
  token: Annotated[
49
49
  str | None,
50
50
  Field(
51
- description="Optional client-provided token for webhook validation. Echoed back in webhook payload to validate request authenticity.",
51
+ description='Optional client-provided token for webhook validation. Echoed back in webhook payload to validate request authenticity.',
52
52
  min_length=16,
53
53
  ),
54
54
  ] = None
55
- url: Annotated[AnyUrl, Field(description="Webhook endpoint URL for task status notifications")]
55
+ url: Annotated[AnyUrl, Field(description='Webhook endpoint URL for task status notifications')]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: reporting-capabilities.json
3
- # timestamp: 2025-11-15T22:03:55+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -12,57 +12,57 @@ from pydantic import ConfigDict, Field
12
12
 
13
13
 
14
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"
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
24
 
25
25
 
26
26
  class AvailableReportingFrequency(Enum):
27
- hourly = "hourly"
28
- daily = "daily"
29
- monthly = "monthly"
27
+ hourly = 'hourly'
28
+ daily = 'daily'
29
+ monthly = 'monthly'
30
30
 
31
31
 
32
32
  class ReportingCapabilities(AdCPBaseModel):
33
33
  model_config = ConfigDict(
34
- extra="forbid",
34
+ extra='forbid',
35
35
  )
36
36
  available_metrics: Annotated[
37
37
  list[AvailableMetric],
38
38
  Field(
39
- description="Metrics available in reporting. Impressions and spend are always implicitly included.",
39
+ description='Metrics available in reporting. Impressions and spend are always implicitly included.',
40
40
  examples=[
41
- ["impressions", "spend", "clicks", "video_completions"],
42
- ["impressions", "spend", "conversions"],
41
+ ['impressions', 'spend', 'clicks', 'video_completions'],
42
+ ['impressions', 'spend', 'conversions'],
43
43
  ],
44
44
  ),
45
45
  ]
46
46
  available_reporting_frequencies: Annotated[
47
47
  list[AvailableReportingFrequency],
48
- Field(description="Supported reporting frequency options", min_length=1),
48
+ Field(description='Supported reporting frequency options', min_length=1),
49
49
  ]
50
50
  expected_delay_minutes: Annotated[
51
51
  int,
52
52
  Field(
53
- description="Expected delay in minutes before reporting data becomes available (e.g., 240 for 4-hour delay)",
53
+ description='Expected delay in minutes before reporting data becomes available (e.g., 240 for 4-hour delay)',
54
54
  examples=[240, 300, 1440],
55
55
  ge=0,
56
56
  ),
57
57
  ]
58
58
  supports_webhooks: Annotated[
59
59
  bool,
60
- Field(description="Whether this product supports webhook-based reporting notifications"),
60
+ Field(description='Whether this product supports webhook-based reporting notifications'),
61
61
  ]
62
62
  timezone: Annotated[
63
63
  str,
64
64
  Field(
65
65
  description="Timezone for reporting periods. Use 'UTC' or IANA timezone (e.g., 'America/New_York'). Critical for daily/monthly frequency alignment.",
66
- examples=["UTC", "America/New_York", "Europe/London", "America/Los_Angeles"],
66
+ examples=['UTC', 'America/New_York', 'Europe/London', 'America/Los_Angeles'],
67
67
  ),
68
68
  ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: response.json
3
- # timestamp: 2025-11-15T22:03:55+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -12,13 +12,13 @@ from pydantic import ConfigDict, Field
12
12
 
13
13
  class ProtocolResponse(AdCPBaseModel):
14
14
  model_config = ConfigDict(
15
- extra="forbid",
15
+ extra='forbid',
16
16
  )
17
- context_id: Annotated[str | None, Field(description="Session continuity identifier")] = None
17
+ context_id: Annotated[str | None, Field(description='Session continuity identifier')] = None
18
18
  data: Annotated[
19
19
  Any | None,
20
20
  Field(
21
- description="AdCP task-specific response data (see individual task response schemas)"
21
+ description='AdCP task-specific response data (see individual task response schemas)'
22
22
  ),
23
23
  ] = None
24
- message: Annotated[str, Field(description="Human-readable summary")]
24
+ message: Annotated[str, Field(description='Human-readable summary')]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: standard-format-ids.json
3
- # timestamp: 2025-11-15T22:03:55+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -8,38 +8,38 @@ from enum import Enum
8
8
 
9
9
 
10
10
  class StandardFormatIds(Enum):
11
- display_300x250 = "display_300x250"
12
- display_728x90 = "display_728x90"
13
- display_320x50 = "display_320x50"
14
- display_160x600 = "display_160x600"
15
- display_970x250 = "display_970x250"
16
- display_336x280 = "display_336x280"
17
- display_expandable_300x250 = "display_expandable_300x250"
18
- display_expandable_728x90 = "display_expandable_728x90"
19
- display_interstitial_320x480 = "display_interstitial_320x480"
20
- display_interstitial_desktop = "display_interstitial_desktop"
21
- display_dynamic_300x250 = "display_dynamic_300x250"
22
- display_responsive = "display_responsive"
23
- native_in_feed = "native_in_feed"
24
- native_content_recommendation = "native_content_recommendation"
25
- native_product = "native_product"
26
- video_skippable_15s = "video_skippable_15s"
27
- video_skippable_30s = "video_skippable_30s"
28
- video_non_skippable_15s = "video_non_skippable_15s"
29
- video_non_skippable_30s = "video_non_skippable_30s"
30
- video_outstream_autoplay = "video_outstream_autoplay"
31
- video_vertical_story = "video_vertical_story"
32
- video_rewarded_30s = "video_rewarded_30s"
33
- video_pause_ad = "video_pause_ad"
34
- video_ctv_non_skippable_30s = "video_ctv_non_skippable_30s"
35
- audio_standard_15s = "audio_standard_15s"
36
- audio_standard_30s = "audio_standard_30s"
37
- audio_podcast_host_read = "audio_podcast_host_read"
38
- audio_programmatic = "audio_programmatic"
39
- universal_carousel = "universal_carousel"
40
- universal_canvas = "universal_canvas"
41
- universal_takeover = "universal_takeover"
42
- universal_gallery = "universal_gallery"
43
- universal_reveal = "universal_reveal"
44
- dooh_landscape_static = "dooh_landscape_static"
45
- dooh_portrait_video = "dooh_portrait_video"
11
+ display_300x250 = 'display_300x250'
12
+ display_728x90 = 'display_728x90'
13
+ display_320x50 = 'display_320x50'
14
+ display_160x600 = 'display_160x600'
15
+ display_970x250 = 'display_970x250'
16
+ display_336x280 = 'display_336x280'
17
+ display_expandable_300x250 = 'display_expandable_300x250'
18
+ display_expandable_728x90 = 'display_expandable_728x90'
19
+ display_interstitial_320x480 = 'display_interstitial_320x480'
20
+ display_interstitial_desktop = 'display_interstitial_desktop'
21
+ display_dynamic_300x250 = 'display_dynamic_300x250'
22
+ display_responsive = 'display_responsive'
23
+ native_in_feed = 'native_in_feed'
24
+ native_content_recommendation = 'native_content_recommendation'
25
+ native_product = 'native_product'
26
+ video_skippable_15s = 'video_skippable_15s'
27
+ video_skippable_30s = 'video_skippable_30s'
28
+ video_non_skippable_15s = 'video_non_skippable_15s'
29
+ video_non_skippable_30s = 'video_non_skippable_30s'
30
+ video_outstream_autoplay = 'video_outstream_autoplay'
31
+ video_vertical_story = 'video_vertical_story'
32
+ video_rewarded_30s = 'video_rewarded_30s'
33
+ video_pause_ad = 'video_pause_ad'
34
+ video_ctv_non_skippable_30s = 'video_ctv_non_skippable_30s'
35
+ audio_standard_15s = 'audio_standard_15s'
36
+ audio_standard_30s = 'audio_standard_30s'
37
+ audio_podcast_host_read = 'audio_podcast_host_read'
38
+ audio_programmatic = 'audio_programmatic'
39
+ universal_carousel = 'universal_carousel'
40
+ universal_canvas = 'universal_canvas'
41
+ universal_takeover = 'universal_takeover'
42
+ universal_gallery = 'universal_gallery'
43
+ universal_reveal = 'universal_reveal'
44
+ dooh_landscape_static = 'dooh_landscape_static'
45
+ dooh_portrait_video = 'dooh_portrait_video'
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: sub-asset.json
3
- # timestamp: 2025-11-15T22:03:55+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -12,44 +12,44 @@ from pydantic import AnyUrl, ConfigDict, Field
12
12
 
13
13
  class SubAsset1(AdCPBaseModel):
14
14
  model_config = ConfigDict(
15
- extra="forbid",
15
+ extra='forbid',
16
16
  )
17
17
  asset_id: Annotated[
18
- str, Field(description="Unique identifier for the asset within the creative")
18
+ str, Field(description='Unique identifier for the asset within the creative')
19
19
  ]
20
20
  asset_kind: Annotated[
21
- Literal["media"],
22
- Field(description="Discriminator indicating this is a media asset with content_uri"),
21
+ Literal['media'],
22
+ Field(description='Discriminator indicating this is a media asset with content_uri'),
23
23
  ]
24
24
  asset_type: Annotated[
25
25
  str,
26
26
  Field(
27
- description="Type of asset. Common types: thumbnail_image, product_image, featured_image, logo"
27
+ description='Type of asset. Common types: thumbnail_image, product_image, featured_image, logo'
28
28
  ),
29
29
  ]
30
- content_uri: Annotated[AnyUrl, Field(description="URL for media assets (images, videos, etc.)")]
30
+ content_uri: Annotated[AnyUrl, Field(description='URL for media assets (images, videos, etc.)')]
31
31
 
32
32
 
33
33
  class SubAsset2(AdCPBaseModel):
34
34
  model_config = ConfigDict(
35
- extra="forbid",
35
+ extra='forbid',
36
36
  )
37
37
  asset_id: Annotated[
38
- str, Field(description="Unique identifier for the asset within the creative")
38
+ str, Field(description='Unique identifier for the asset within the creative')
39
39
  ]
40
40
  asset_kind: Annotated[
41
- Literal["text"],
42
- Field(description="Discriminator indicating this is a text asset with content"),
41
+ Literal['text'],
42
+ Field(description='Discriminator indicating this is a text asset with content'),
43
43
  ]
44
44
  asset_type: Annotated[
45
45
  str,
46
46
  Field(
47
- description="Type of asset. Common types: headline, body_text, cta_text, price_text, sponsor_name, author_name, click_url"
47
+ description='Type of asset. Common types: headline, body_text, cta_text, price_text, sponsor_name, author_name, click_url'
48
48
  ),
49
49
  ]
50
50
  content: Annotated[
51
51
  str | list[str],
52
52
  Field(
53
- description="Text content for text-based assets like headlines, body text, CTA text, etc."
53
+ description='Text content for text-based assets like headlines, body text, CTA text, etc.'
54
54
  ),
55
55
  ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: sync-creatives-request.json
3
- # timestamp: 2025-11-15T22:03:55+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -15,50 +15,50 @@ from . import push_notification_config as push_notification_config_1
15
15
 
16
16
 
17
17
  class ValidationMode(Enum):
18
- strict = "strict"
19
- lenient = "lenient"
18
+ strict = 'strict'
19
+ lenient = 'lenient'
20
20
 
21
21
 
22
22
  class SyncCreativesRequest(AdCPBaseModel):
23
23
  model_config = ConfigDict(
24
- extra="forbid",
24
+ extra='forbid',
25
25
  )
26
26
  assignments: Annotated[
27
27
  dict[str, list[str]] | None,
28
- Field(description="Optional bulk assignment of creatives to packages"),
28
+ Field(description='Optional bulk assignment of creatives to packages'),
29
29
  ] = None
30
30
  context: Annotated[
31
31
  dict[str, Any] | None,
32
32
  Field(
33
- 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."
33
+ 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.'
34
34
  ),
35
35
  ] = None
36
36
  creatives: Annotated[
37
37
  list[creative_asset.CreativeAsset],
38
- Field(description="Array of creative assets to sync (create or update)", max_length=100),
38
+ Field(description='Array of creative assets to sync (create or update)', max_length=100),
39
39
  ]
40
40
  delete_missing: Annotated[
41
41
  bool | None,
42
42
  Field(
43
- description="When true, creatives not included in this sync will be archived. Use with caution for full library replacement."
43
+ description='When true, creatives not included in this sync will be archived. Use with caution for full library replacement.'
44
44
  ),
45
45
  ] = False
46
46
  dry_run: Annotated[
47
47
  bool | None,
48
48
  Field(
49
- description="When true, preview changes without applying them. Returns what would be created/updated/deleted."
49
+ description='When true, preview changes without applying them. Returns what would be created/updated/deleted.'
50
50
  ),
51
51
  ] = False
52
52
  patch: Annotated[
53
53
  bool | None,
54
54
  Field(
55
- description="When true, only provided fields are updated (partial update). When false, entire creative is replaced (full upsert)."
55
+ description='When true, only provided fields are updated (partial update). When false, entire creative is replaced (full upsert).'
56
56
  ),
57
57
  ] = False
58
58
  push_notification_config: Annotated[
59
59
  push_notification_config_1.PushNotificationConfig | None,
60
60
  Field(
61
- description="Optional webhook configuration for async sync notifications. Publisher will send webhook when sync completes if operation takes longer than immediate response time (typically for large bulk operations or manual approval/HITL)."
61
+ description='Optional webhook configuration for async sync notifications. Publisher will send webhook when sync completes if operation takes longer than immediate response time (typically for large bulk operations or manual approval/HITL).'
62
62
  ),
63
63
  ] = None
64
64
  validation_mode: Annotated[