adcp 2.2.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 (108) hide show
  1. adcp/__init__.py +5 -1
  2. adcp/adagents.py +122 -0
  3. adcp/types/generated.py +36 -531
  4. adcp/types/generated_poc/__init__.py +1 -1
  5. adcp/types/generated_poc/activate_signal_request.py +5 -5
  6. adcp/types/generated_poc/activate_signal_response.py +9 -9
  7. adcp/types/generated_poc/activation_key.py +8 -8
  8. adcp/types/generated_poc/adagents.py +46 -46
  9. adcp/types/generated_poc/asset_type.py +19 -19
  10. adcp/types/generated_poc/audio_asset.py +6 -6
  11. adcp/types/generated_poc/brand_manifest.py +73 -73
  12. adcp/types/generated_poc/build_creative_request.py +6 -6
  13. adcp/types/generated_poc/build_creative_response.py +9 -9
  14. adcp/types/generated_poc/channels.py +10 -10
  15. adcp/types/generated_poc/cpc_option.py +12 -8
  16. adcp/types/generated_poc/cpcv_option.py +12 -8
  17. adcp/types/generated_poc/cpm_auction_option.py +17 -13
  18. adcp/types/generated_poc/cpm_fixed_option.py +12 -8
  19. adcp/types/generated_poc/cpp_option.py +17 -13
  20. adcp/types/generated_poc/cpv_option.py +16 -12
  21. adcp/types/generated_poc/create_media_buy_request.py +29 -29
  22. adcp/types/generated_poc/create_media_buy_response.py +11 -11
  23. adcp/types/generated_poc/creative_asset.py +13 -13
  24. adcp/types/generated_poc/creative_assignment.py +4 -4
  25. adcp/types/generated_poc/creative_manifest.py +4 -4
  26. adcp/types/generated_poc/creative_policy.py +11 -11
  27. adcp/types/generated_poc/creative_status.py +5 -5
  28. adcp/types/generated_poc/css_asset.py +3 -3
  29. adcp/types/generated_poc/daast_asset.py +30 -30
  30. adcp/types/generated_poc/delivery_metrics.py +33 -33
  31. adcp/types/generated_poc/delivery_type.py +3 -3
  32. adcp/types/generated_poc/deployment.py +21 -21
  33. adcp/types/generated_poc/destination.py +10 -10
  34. adcp/types/generated_poc/error.py +7 -7
  35. adcp/types/generated_poc/flat_rate_option.py +16 -16
  36. adcp/types/generated_poc/format.py +70 -70
  37. adcp/types/generated_poc/format_id.py +3 -3
  38. adcp/types/generated_poc/frequency_cap.py +3 -3
  39. adcp/types/generated_poc/frequency_cap_scope.py +4 -4
  40. adcp/types/generated_poc/get_media_buy_delivery_request.py +21 -21
  41. adcp/types/generated_poc/get_media_buy_delivery_response.py +46 -46
  42. adcp/types/generated_poc/get_products_request.py +23 -23
  43. adcp/types/generated_poc/get_products_response.py +5 -5
  44. adcp/types/generated_poc/get_signals_request.py +19 -19
  45. adcp/types/generated_poc/get_signals_response.py +20 -20
  46. adcp/types/generated_poc/html_asset.py +3 -3
  47. adcp/types/generated_poc/identifier_types.py +20 -20
  48. adcp/types/generated_poc/image_asset.py +7 -7
  49. adcp/types/generated_poc/javascript_asset.py +7 -7
  50. adcp/types/generated_poc/list_authorized_properties_request.py +5 -5
  51. adcp/types/generated_poc/list_authorized_properties_response.py +9 -9
  52. adcp/types/generated_poc/list_creative_formats_request.py +22 -22
  53. adcp/types/generated_poc/list_creative_formats_response.py +11 -11
  54. adcp/types/generated_poc/list_creatives_request.py +51 -51
  55. adcp/types/generated_poc/list_creatives_response.py +61 -61
  56. adcp/types/generated_poc/markdown_asset.py +7 -7
  57. adcp/types/generated_poc/measurement.py +9 -9
  58. adcp/types/generated_poc/media_buy.py +8 -8
  59. adcp/types/generated_poc/media_buy_status.py +5 -5
  60. adcp/types/generated_poc/pacing.py +4 -4
  61. adcp/types/generated_poc/package.py +8 -8
  62. adcp/types/generated_poc/package_request.py +7 -7
  63. adcp/types/generated_poc/package_status.py +5 -5
  64. adcp/types/generated_poc/performance_feedback.py +31 -31
  65. adcp/types/generated_poc/placement.py +4 -4
  66. adcp/types/generated_poc/preview_creative_request.py +28 -28
  67. adcp/types/generated_poc/preview_creative_response.py +31 -31
  68. adcp/types/generated_poc/preview_render.py +36 -28
  69. adcp/types/generated_poc/pricing_model.py +8 -8
  70. adcp/types/generated_poc/product.py +32 -31
  71. adcp/types/generated_poc/promoted_offerings.py +29 -29
  72. adcp/types/generated_poc/promoted_products.py +3 -3
  73. adcp/types/generated_poc/property.py +18 -18
  74. adcp/types/generated_poc/protocol_envelope.py +9 -9
  75. adcp/types/generated_poc/provide_performance_feedback_request.py +24 -24
  76. adcp/types/generated_poc/provide_performance_feedback_response.py +9 -9
  77. adcp/types/generated_poc/publisher_identifier_types.py +6 -6
  78. adcp/types/generated_poc/push_notification_config.py +9 -9
  79. adcp/types/generated_poc/reporting_capabilities.py +21 -21
  80. adcp/types/generated_poc/response.py +5 -5
  81. adcp/types/generated_poc/standard_format_ids.py +36 -36
  82. adcp/types/generated_poc/sub_asset.py +13 -13
  83. adcp/types/generated_poc/sync_creatives_request.py +11 -11
  84. adcp/types/generated_poc/sync_creatives_response.py +23 -23
  85. adcp/types/generated_poc/targeting.py +9 -9
  86. adcp/types/generated_poc/task_status.py +10 -10
  87. adcp/types/generated_poc/task_type.py +6 -6
  88. adcp/types/generated_poc/tasks_get_request.py +5 -5
  89. adcp/types/generated_poc/tasks_get_response.py +35 -35
  90. adcp/types/generated_poc/tasks_list_request.py +36 -36
  91. adcp/types/generated_poc/tasks_list_response.py +35 -35
  92. adcp/types/generated_poc/text_asset.py +3 -3
  93. adcp/types/generated_poc/update_media_buy_request.py +27 -27
  94. adcp/types/generated_poc/update_media_buy_response.py +11 -11
  95. adcp/types/generated_poc/url_asset.py +7 -7
  96. adcp/types/generated_poc/vast_asset.py +38 -38
  97. adcp/types/generated_poc/vcpm_auction_option.py +17 -13
  98. adcp/types/generated_poc/vcpm_fixed_option.py +12 -8
  99. adcp/types/generated_poc/video_asset.py +8 -8
  100. adcp/types/generated_poc/webhook_asset.py +19 -19
  101. adcp/types/generated_poc/webhook_payload.py +18 -18
  102. {adcp-2.2.0.dist-info → adcp-2.4.0.dist-info}/METADATA +38 -2
  103. adcp-2.4.0.dist-info/RECORD +132 -0
  104. adcp-2.2.0.dist-info/RECORD +0 -132
  105. {adcp-2.2.0.dist-info → adcp-2.4.0.dist-info}/WHEEL +0 -0
  106. {adcp-2.2.0.dist-info → adcp-2.4.0.dist-info}/entry_points.txt +0 -0
  107. {adcp-2.2.0.dist-info → adcp-2.4.0.dist-info}/licenses/LICENSE +0 -0
  108. {adcp-2.2.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: cpm-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,28 +12,32 @@ from pydantic import ConfigDict, Field
12
12
 
13
13
  class CpmFixedRatePricingOption(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
- pricing_model: Annotated[Literal["cpm"], Field(description="Cost per 1,000 impressions")]
36
+ pricing_model: Annotated[Literal['cpm'], Field(description='Cost per 1,000 impressions')]
33
37
  pricing_option_id: Annotated[
34
38
  str,
35
39
  Field(
36
40
  description="Unique identifier for this pricing option within the product (e.g., 'cpm_usd_guaranteed')"
37
41
  ),
38
42
  ]
39
- rate: Annotated[float, Field(description="Fixed CPM rate (cost per 1,000 impressions)", ge=0.0)]
43
+ rate: Annotated[float, Field(description='Fixed CPM rate (cost per 1,000 impressions)', ge=0.0)]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: cpp-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,49 +12,53 @@ from pydantic import ConfigDict, Field
12
12
 
13
13
  class Parameters(AdCPBaseModel):
14
14
  model_config = ConfigDict(
15
- extra="forbid",
15
+ extra='forbid',
16
16
  )
17
17
  demographic: Annotated[
18
18
  str,
19
19
  Field(
20
- description="Target demographic in Nielsen format: P/M/W/A/C + age range. Examples: P18-49 (Persons 18-49), M25-54 (Men 25-54), W35+ (Women 35+), A18-34 (Adults 18-34), C2-11 (Children 2-11)",
21
- pattern="^[PMWAC][0-9]{2}(-[0-9]{2}|\\+)$",
20
+ description='Target demographic in Nielsen format: P/M/W/A/C + age range. Examples: P18-49 (Persons 18-49), M25-54 (Men 25-54), W35+ (Women 35+), A18-34 (Adults 18-34), C2-11 (Children 2-11)',
21
+ pattern='^[PMWAC][0-9]{2}(-[0-9]{2}|\\+)$',
22
22
  ),
23
23
  ]
24
24
  min_points: Annotated[
25
25
  float | None,
26
- Field(description="Minimum GRPs/TRPs required for this pricing option", ge=0.0),
26
+ Field(description='Minimum GRPs/TRPs required for this pricing option', ge=0.0),
27
27
  ] = None
28
28
 
29
29
 
30
30
  class CppPricingOption(AdCPBaseModel):
31
31
  model_config = ConfigDict(
32
- extra="forbid",
32
+ extra='forbid',
33
33
  )
34
34
  currency: Annotated[
35
35
  str,
36
36
  Field(
37
- description="ISO 4217 currency code",
38
- examples=["USD", "EUR", "GBP", "JPY"],
39
- pattern="^[A-Z]{3}$",
37
+ description='ISO 4217 currency code',
38
+ examples=['USD', 'EUR', 'GBP', 'JPY'],
39
+ pattern='^[A-Z]{3}$',
40
40
  ),
41
41
  ]
42
+ is_fixed: Annotated[
43
+ Literal[True],
44
+ Field(description='Whether this is a fixed rate (true) or auction-based (false)'),
45
+ ]
42
46
  min_spend_per_package: Annotated[
43
47
  float | None,
44
48
  Field(
45
- description="Minimum spend requirement per package using this pricing option, in the specified currency",
49
+ description='Minimum spend requirement per package using this pricing option, in the specified currency',
46
50
  ge=0.0,
47
51
  ),
48
52
  ] = None
49
53
  parameters: Annotated[
50
54
  Parameters,
51
- Field(description="CPP-specific parameters for demographic targeting and GRP requirements"),
55
+ Field(description='CPP-specific parameters for demographic targeting and GRP requirements'),
52
56
  ]
53
- pricing_model: Annotated[Literal["cpp"], Field(description="Cost per Gross Rating Point")]
57
+ pricing_model: Annotated[Literal['cpp'], Field(description='Cost per Gross Rating Point')]
54
58
  pricing_option_id: Annotated[
55
59
  str,
56
60
  Field(
57
61
  description="Unique identifier for this pricing option within the product (e.g., 'cpp_usd_p18-49')"
58
62
  ),
59
63
  ]
60
- rate: Annotated[float, Field(description="Fixed CPP rate (cost per rating point)", ge=0.0)]
64
+ rate: Annotated[float, Field(description='Fixed CPP rate (cost per rating point)', ge=0.0)]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: cpv-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
 
@@ -14,7 +14,7 @@ class ViewThreshold(RootModel[float]):
14
14
  root: Annotated[
15
15
  float,
16
16
  Field(
17
- description="Percentage completion threshold for CPV pricing (0.0 to 1.0, e.g., 0.5 = 50% completion)",
17
+ description='Percentage completion threshold for CPV pricing (0.0 to 1.0, e.g., 0.5 = 50% completion)',
18
18
  ge=0.0,
19
19
  le=1.0,
20
20
  ),
@@ -23,7 +23,7 @@ class ViewThreshold(RootModel[float]):
23
23
 
24
24
  class ViewThreshold1(AdCPBaseModel):
25
25
  model_config = ConfigDict(
26
- extra="forbid",
26
+ extra='forbid',
27
27
  )
28
28
  duration_seconds: Annotated[
29
29
  int,
@@ -36,38 +36,42 @@ class ViewThreshold1(AdCPBaseModel):
36
36
 
37
37
  class Parameters(AdCPBaseModel):
38
38
  model_config = ConfigDict(
39
- extra="forbid",
39
+ extra='forbid',
40
40
  )
41
41
  view_threshold: ViewThreshold | ViewThreshold1
42
42
 
43
43
 
44
44
  class CpvPricingOption(AdCPBaseModel):
45
45
  model_config = ConfigDict(
46
- extra="forbid",
46
+ extra='forbid',
47
47
  )
48
48
  currency: Annotated[
49
49
  str,
50
50
  Field(
51
- description="ISO 4217 currency code",
52
- examples=["USD", "EUR", "GBP", "JPY"],
53
- pattern="^[A-Z]{3}$",
51
+ description='ISO 4217 currency code',
52
+ examples=['USD', 'EUR', 'GBP', 'JPY'],
53
+ pattern='^[A-Z]{3}$',
54
54
  ),
55
55
  ]
56
+ is_fixed: Annotated[
57
+ Literal[True],
58
+ Field(description='Whether this is a fixed rate (true) or auction-based (false)'),
59
+ ]
56
60
  min_spend_per_package: Annotated[
57
61
  float | None,
58
62
  Field(
59
- description="Minimum spend requirement per package using this pricing option, in the specified currency",
63
+ description='Minimum spend requirement per package using this pricing option, in the specified currency',
60
64
  ge=0.0,
61
65
  ),
62
66
  ] = None
63
67
  parameters: Annotated[
64
- Parameters, Field(description="CPV-specific parameters defining the view threshold")
68
+ Parameters, Field(description='CPV-specific parameters defining the view threshold')
65
69
  ]
66
- pricing_model: Annotated[Literal["cpv"], Field(description="Cost per view at threshold")]
70
+ pricing_model: Annotated[Literal['cpv'], Field(description='Cost per view at threshold')]
67
71
  pricing_option_id: Annotated[
68
72
  str,
69
73
  Field(
70
74
  description="Unique identifier for this pricing option within the product (e.g., 'cpv_usd_50pct')"
71
75
  ),
72
76
  ]
73
- rate: Annotated[float, Field(description="Fixed CPV rate (cost per view)", ge=0.0)]
77
+ rate: Annotated[float, Field(description='Fixed CPV rate (cost per view)', ge=0.0)]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: create-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,28 +16,28 @@ from .push_notification_config import PushNotificationConfig
16
16
 
17
17
 
18
18
  class ReportingFrequency(Enum):
19
- hourly = "hourly"
20
- daily = "daily"
21
- monthly = "monthly"
19
+ hourly = 'hourly'
20
+ daily = 'daily'
21
+ monthly = 'monthly'
22
22
 
23
23
 
24
24
  class RequestedMetric(Enum):
25
- impressions = "impressions"
26
- spend = "spend"
27
- clicks = "clicks"
28
- ctr = "ctr"
29
- video_completions = "video_completions"
30
- completion_rate = "completion_rate"
31
- conversions = "conversions"
32
- viewability = "viewability"
33
- engagement_rate = "engagement_rate"
25
+ impressions = 'impressions'
26
+ spend = 'spend'
27
+ clicks = 'clicks'
28
+ ctr = 'ctr'
29
+ video_completions = 'video_completions'
30
+ completion_rate = 'completion_rate'
31
+ conversions = 'conversions'
32
+ viewability = 'viewability'
33
+ engagement_rate = 'engagement_rate'
34
34
 
35
35
 
36
36
  class ReportingWebhook(PushNotificationConfig):
37
37
  reporting_frequency: Annotated[
38
38
  ReportingFrequency,
39
39
  Field(
40
- description="Frequency for automated reporting delivery. Must be supported by all products in the media buy."
40
+ description='Frequency for automated reporting delivery. Must be supported by all products in the media buy.'
41
41
  ),
42
42
  ]
43
43
  requested_metrics: Annotated[
@@ -50,47 +50,47 @@ class ReportingWebhook(PushNotificationConfig):
50
50
 
51
51
  class CreateMediaBuyRequest(AdCPBaseModel):
52
52
  model_config = ConfigDict(
53
- extra="forbid",
53
+ extra='forbid',
54
54
  )
55
55
  brand_manifest: Annotated[
56
56
  brand_manifest_1.BrandManifest | AnyUrl,
57
57
  Field(
58
- description="Brand information manifest serving as the namespace and identity for this media buy. Provides brand context, assets, and product catalog. Can be provided inline or as a URL reference to a hosted manifest. Can be cached and reused across multiple requests.",
58
+ description='Brand information manifest serving as the namespace and identity for this media buy. Provides brand context, assets, and product catalog. Can be provided inline or as a URL reference to a hosted manifest. Can be cached and reused across multiple requests.',
59
59
  examples=[
60
60
  {
61
- "data": {
62
- "colors": {"primary": "#FF6B35"},
63
- "name": "ACME Corporation",
64
- "url": "https://acmecorp.com",
61
+ 'data': {
62
+ 'colors': {'primary': '#FF6B35'},
63
+ 'name': 'ACME Corporation',
64
+ 'url': 'https://acmecorp.com',
65
65
  },
66
- "description": "Inline brand manifest",
66
+ 'description': 'Inline brand manifest',
67
67
  },
68
68
  {
69
- "data": "https://cdn.acmecorp.com/brand-manifest.json",
70
- "description": "URL string reference to hosted manifest",
69
+ 'data': 'https://cdn.acmecorp.com/brand-manifest.json',
70
+ 'description': 'URL string reference to hosted manifest',
71
71
  },
72
72
  ],
73
- title="Brand Manifest Reference",
73
+ title='Brand Manifest Reference',
74
74
  ),
75
75
  ]
76
76
  buyer_ref: Annotated[str, Field(description="Buyer's reference identifier for this media buy")]
77
77
  context: Annotated[
78
78
  dict[str, Any] | None,
79
79
  Field(
80
- 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."
80
+ 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.'
81
81
  ),
82
82
  ] = None
83
83
  end_time: Annotated[
84
- AwareDatetime, Field(description="Campaign end date/time in ISO 8601 format")
84
+ AwareDatetime, Field(description='Campaign end date/time in ISO 8601 format')
85
85
  ]
86
86
  packages: Annotated[
87
- list[package_request.PackageRequest], Field(description="Array of package configurations")
87
+ list[package_request.PackageRequest], Field(description='Array of package configurations')
88
88
  ]
89
- po_number: Annotated[str | None, Field(description="Purchase order number for tracking")] = None
89
+ po_number: Annotated[str | None, Field(description='Purchase order number for tracking')] = None
90
90
  reporting_webhook: ReportingWebhook | None = None
91
91
  start_time: Annotated[
92
92
  str | AwareDatetime,
93
93
  Field(
94
- description="Campaign start timing: 'asap' or ISO 8601 date-time", title="Start Timing"
94
+ description="Campaign start timing: 'asap' or ISO 8601 date-time", title='Start Timing'
95
95
  ),
96
96
  ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: create-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 Package(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 identifier for the package")]
20
20
  package_id: Annotated[str, Field(description="Publisher's unique identifier for the package")]
@@ -22,37 +22,37 @@ class Package(AdCPBaseModel):
22
22
 
23
23
  class CreateMediaBuyResponse1(AdCPBaseModel):
24
24
  model_config = ConfigDict(
25
- extra="forbid",
25
+ extra='forbid',
26
26
  )
27
27
  buyer_ref: Annotated[str, Field(description="Buyer's reference identifier for this media buy")]
28
28
  context: Annotated[
29
29
  dict[str, Any] | None,
30
30
  Field(
31
- description="Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers."
31
+ description='Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.'
32
32
  ),
33
33
  ] = None
34
34
  creative_deadline: Annotated[
35
- AwareDatetime | None, Field(description="ISO 8601 timestamp for creative upload deadline")
35
+ AwareDatetime | None, Field(description='ISO 8601 timestamp for creative upload deadline')
36
36
  ] = None
37
37
  media_buy_id: Annotated[
38
38
  str, Field(description="Publisher's unique identifier for the created media buy")
39
39
  ]
40
- packages: Annotated[list[Package], Field(description="Array of created packages")]
40
+ packages: Annotated[list[Package], Field(description='Array of created packages')]
41
41
 
42
42
 
43
43
  class CreateMediaBuyResponse2(AdCPBaseModel):
44
44
  model_config = ConfigDict(
45
- extra="forbid",
45
+ extra='forbid',
46
46
  )
47
47
  context: Annotated[
48
48
  dict[str, Any] | None,
49
49
  Field(
50
- description="Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers."
50
+ description='Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.'
51
51
  ),
52
52
  ] = None
53
53
  errors: Annotated[
54
54
  list[error.Error],
55
- Field(description="Array of errors explaining why the operation failed", min_length=1),
55
+ Field(description='Array of errors explaining why the operation failed', min_length=1),
56
56
  ]
57
57
 
58
58
 
@@ -60,7 +60,7 @@ class CreateMediaBuyResponse(RootModel[CreateMediaBuyResponse1 | CreateMediaBuyR
60
60
  root: Annotated[
61
61
  CreateMediaBuyResponse1 | CreateMediaBuyResponse2,
62
62
  Field(
63
- description="Response payload for create_media_buy task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - the media buy is either fully created or not created at all.",
64
- title="Create Media Buy Response",
63
+ description='Response payload for create_media_buy task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - the media buy is either fully created or not created at all.',
64
+ title='Create Media Buy Response',
65
65
  ),
66
66
  ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: creative-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
 
@@ -25,26 +25,26 @@ from . import (
25
25
 
26
26
  class Input(AdCPBaseModel):
27
27
  model_config = ConfigDict(
28
- extra="forbid",
28
+ extra='forbid',
29
29
  )
30
30
  context_description: Annotated[
31
31
  str | None,
32
- Field(description="Natural language description of the context for AI-generated content"),
32
+ Field(description='Natural language description of the context for AI-generated content'),
33
33
  ] = None
34
34
  macros: Annotated[
35
- dict[str, str] | None, Field(description="Macro values to apply for this preview")
35
+ dict[str, str] | None, Field(description='Macro values to apply for this preview')
36
36
  ] = None
37
- name: Annotated[str, Field(description="Human-readable name for this preview variant")]
37
+ name: Annotated[str, Field(description='Human-readable name for this preview variant')]
38
38
 
39
39
 
40
40
  class CreativeAsset(AdCPBaseModel):
41
41
  model_config = ConfigDict(
42
- extra="forbid",
42
+ extra='forbid',
43
43
  )
44
44
  approved: Annotated[
45
45
  bool | None,
46
46
  Field(
47
- description="For generative creatives: set to true to approve and finalize, false to request regeneration with updated assets/message. Omit for non-generative creatives."
47
+ description='For generative creatives: set to true to approve and finalize, false to request regeneration with updated assets/message. Omit for non-generative creatives.'
48
48
  ),
49
49
  ] = None
50
50
  assets: Annotated[
@@ -64,20 +64,20 @@ class CreativeAsset(AdCPBaseModel):
64
64
  | daast_asset.DaastAsset1
65
65
  | daast_asset.DaastAsset2,
66
66
  ],
67
- Field(description="Assets required by the format, keyed by asset_role"),
67
+ Field(description='Assets required by the format, keyed by asset_role'),
68
68
  ]
69
- creative_id: Annotated[str, Field(description="Unique identifier for the creative")]
69
+ creative_id: Annotated[str, Field(description='Unique identifier for the creative')]
70
70
  format_id: Annotated[
71
71
  format_id_1.FormatId,
72
- Field(description="Format identifier specifying which format this creative conforms to"),
72
+ Field(description='Format identifier specifying which format this creative conforms to'),
73
73
  ]
74
74
  inputs: Annotated[
75
75
  list[Input] | None,
76
76
  Field(
77
- description="Preview contexts for generative formats - defines what scenarios to generate previews for"
77
+ description='Preview contexts for generative formats - defines what scenarios to generate previews for'
78
78
  ),
79
79
  ] = None
80
- name: Annotated[str, Field(description="Human-readable creative name")]
80
+ name: Annotated[str, Field(description='Human-readable creative name')]
81
81
  tags: Annotated[
82
- list[str] | None, Field(description="User-defined tags for organization and searchability")
82
+ list[str] | None, Field(description='User-defined tags for organization and searchability')
83
83
  ] = None
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: creative-assignment.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,9 +12,9 @@ from pydantic import ConfigDict, Field
12
12
 
13
13
  class CreativeAssignment(AdCPBaseModel):
14
14
  model_config = ConfigDict(
15
- extra="forbid",
15
+ extra='forbid',
16
16
  )
17
- creative_id: Annotated[str, Field(description="Unique identifier for the creative")]
17
+ creative_id: Annotated[str, Field(description='Unique identifier for the creative')]
18
18
  placement_ids: Annotated[
19
19
  list[str] | None,
20
20
  Field(
@@ -23,5 +23,5 @@ class CreativeAssignment(AdCPBaseModel):
23
23
  ),
24
24
  ] = None
25
25
  weight: Annotated[
26
- float | None, Field(description="Delivery weight for this creative", ge=0.0, le=100.0)
26
+ float | None, Field(description='Delivery weight for this creative', ge=0.0, le=100.0)
27
27
  ] = None
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: creative-manifest.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
 
@@ -26,7 +26,7 @@ from . import (
26
26
 
27
27
  class CreativeManifest(AdCPBaseModel):
28
28
  model_config = ConfigDict(
29
- extra="forbid",
29
+ extra='forbid',
30
30
  )
31
31
  assets: Annotated[
32
32
  dict[
@@ -51,11 +51,11 @@ class CreativeManifest(AdCPBaseModel):
51
51
  ),
52
52
  ]
53
53
  format_id: Annotated[
54
- format_id_1.FormatId, Field(description="Format identifier this manifest is for")
54
+ format_id_1.FormatId, Field(description='Format identifier this manifest is for')
55
55
  ]
56
56
  promoted_offering: Annotated[
57
57
  str | None,
58
58
  Field(
59
- description="Product name or offering being advertised. Maps to promoted_offerings in create_media_buy request to associate creative with the product being promoted."
59
+ description='Product name or offering being advertised. Maps to promoted_offerings in create_media_buy request to associate creative with the product being promoted.'
60
60
  ),
61
61
  ] = None
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: creative-policy.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,23 +12,23 @@ from pydantic import ConfigDict, Field
12
12
 
13
13
 
14
14
  class CoBranding(Enum):
15
- required = "required"
16
- optional = "optional"
17
- none = "none"
15
+ required = 'required'
16
+ optional = 'optional'
17
+ none = 'none'
18
18
 
19
19
 
20
20
  class LandingPage(Enum):
21
- any = "any"
22
- retailer_site_only = "retailer_site_only"
23
- must_include_retailer = "must_include_retailer"
21
+ any = 'any'
22
+ retailer_site_only = 'retailer_site_only'
23
+ must_include_retailer = 'must_include_retailer'
24
24
 
25
25
 
26
26
  class CreativePolicy(AdCPBaseModel):
27
27
  model_config = ConfigDict(
28
- extra="forbid",
28
+ extra='forbid',
29
29
  )
30
- co_branding: Annotated[CoBranding, Field(description="Co-branding requirement")]
31
- landing_page: Annotated[LandingPage, Field(description="Landing page requirements")]
30
+ co_branding: Annotated[CoBranding, Field(description='Co-branding requirement')]
31
+ landing_page: Annotated[LandingPage, Field(description='Landing page requirements')]
32
32
  templates_available: Annotated[
33
- bool, Field(description="Whether creative templates are provided")
33
+ bool, Field(description='Whether creative templates are provided')
34
34
  ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: creative-status.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
 
@@ -8,7 +8,7 @@ from enum import Enum
8
8
 
9
9
 
10
10
  class CreativeStatus(Enum):
11
- processing = "processing"
12
- approved = "approved"
13
- rejected = "rejected"
14
- pending_review = "pending_review"
11
+ processing = 'processing'
12
+ approved = 'approved'
13
+ rejected = 'rejected'
14
+ pending_review = 'pending_review'
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: css-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,9 +12,9 @@ from pydantic import ConfigDict, Field
12
12
 
13
13
  class CssAsset(AdCPBaseModel):
14
14
  model_config = ConfigDict(
15
- extra="forbid",
15
+ extra='forbid',
16
16
  )
17
- content: Annotated[str, Field(description="CSS content")]
17
+ content: Annotated[str, Field(description='CSS content')]
18
18
  media: Annotated[
19
19
  str | None, Field(description="CSS media query context (e.g., 'screen', 'print')")
20
20
  ] = None