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.
- adcp/__init__.py +5 -1
- adcp/adagents.py +122 -0
- adcp/types/generated.py +36 -531
- adcp/types/generated_poc/__init__.py +1 -1
- adcp/types/generated_poc/activate_signal_request.py +5 -5
- adcp/types/generated_poc/activate_signal_response.py +9 -9
- adcp/types/generated_poc/activation_key.py +8 -8
- adcp/types/generated_poc/adagents.py +46 -46
- adcp/types/generated_poc/asset_type.py +19 -19
- adcp/types/generated_poc/audio_asset.py +6 -6
- adcp/types/generated_poc/brand_manifest.py +73 -73
- adcp/types/generated_poc/build_creative_request.py +6 -6
- adcp/types/generated_poc/build_creative_response.py +9 -9
- adcp/types/generated_poc/channels.py +10 -10
- adcp/types/generated_poc/cpc_option.py +12 -8
- adcp/types/generated_poc/cpcv_option.py +12 -8
- adcp/types/generated_poc/cpm_auction_option.py +17 -13
- adcp/types/generated_poc/cpm_fixed_option.py +12 -8
- adcp/types/generated_poc/cpp_option.py +17 -13
- adcp/types/generated_poc/cpv_option.py +16 -12
- adcp/types/generated_poc/create_media_buy_request.py +29 -29
- adcp/types/generated_poc/create_media_buy_response.py +11 -11
- adcp/types/generated_poc/creative_asset.py +13 -13
- adcp/types/generated_poc/creative_assignment.py +4 -4
- adcp/types/generated_poc/creative_manifest.py +4 -4
- adcp/types/generated_poc/creative_policy.py +11 -11
- adcp/types/generated_poc/creative_status.py +5 -5
- adcp/types/generated_poc/css_asset.py +3 -3
- adcp/types/generated_poc/daast_asset.py +30 -30
- adcp/types/generated_poc/delivery_metrics.py +33 -33
- adcp/types/generated_poc/delivery_type.py +3 -3
- adcp/types/generated_poc/deployment.py +21 -21
- adcp/types/generated_poc/destination.py +10 -10
- adcp/types/generated_poc/error.py +7 -7
- adcp/types/generated_poc/flat_rate_option.py +16 -16
- adcp/types/generated_poc/format.py +70 -70
- adcp/types/generated_poc/format_id.py +3 -3
- adcp/types/generated_poc/frequency_cap.py +3 -3
- adcp/types/generated_poc/frequency_cap_scope.py +4 -4
- adcp/types/generated_poc/get_media_buy_delivery_request.py +21 -21
- adcp/types/generated_poc/get_media_buy_delivery_response.py +46 -46
- adcp/types/generated_poc/get_products_request.py +23 -23
- adcp/types/generated_poc/get_products_response.py +5 -5
- adcp/types/generated_poc/get_signals_request.py +19 -19
- adcp/types/generated_poc/get_signals_response.py +20 -20
- adcp/types/generated_poc/html_asset.py +3 -3
- adcp/types/generated_poc/identifier_types.py +20 -20
- adcp/types/generated_poc/image_asset.py +7 -7
- adcp/types/generated_poc/javascript_asset.py +7 -7
- adcp/types/generated_poc/list_authorized_properties_request.py +5 -5
- adcp/types/generated_poc/list_authorized_properties_response.py +9 -9
- adcp/types/generated_poc/list_creative_formats_request.py +22 -22
- adcp/types/generated_poc/list_creative_formats_response.py +11 -11
- adcp/types/generated_poc/list_creatives_request.py +51 -51
- adcp/types/generated_poc/list_creatives_response.py +61 -61
- adcp/types/generated_poc/markdown_asset.py +7 -7
- adcp/types/generated_poc/measurement.py +9 -9
- adcp/types/generated_poc/media_buy.py +8 -8
- adcp/types/generated_poc/media_buy_status.py +5 -5
- adcp/types/generated_poc/pacing.py +4 -4
- adcp/types/generated_poc/package.py +8 -8
- adcp/types/generated_poc/package_request.py +7 -7
- adcp/types/generated_poc/package_status.py +5 -5
- adcp/types/generated_poc/performance_feedback.py +31 -31
- adcp/types/generated_poc/placement.py +4 -4
- adcp/types/generated_poc/preview_creative_request.py +28 -28
- adcp/types/generated_poc/preview_creative_response.py +31 -31
- adcp/types/generated_poc/preview_render.py +36 -28
- adcp/types/generated_poc/pricing_model.py +8 -8
- adcp/types/generated_poc/product.py +32 -31
- adcp/types/generated_poc/promoted_offerings.py +29 -29
- adcp/types/generated_poc/promoted_products.py +3 -3
- adcp/types/generated_poc/property.py +18 -18
- adcp/types/generated_poc/protocol_envelope.py +9 -9
- adcp/types/generated_poc/provide_performance_feedback_request.py +24 -24
- adcp/types/generated_poc/provide_performance_feedback_response.py +9 -9
- adcp/types/generated_poc/publisher_identifier_types.py +6 -6
- adcp/types/generated_poc/push_notification_config.py +9 -9
- adcp/types/generated_poc/reporting_capabilities.py +21 -21
- adcp/types/generated_poc/response.py +5 -5
- adcp/types/generated_poc/standard_format_ids.py +36 -36
- adcp/types/generated_poc/sub_asset.py +13 -13
- adcp/types/generated_poc/sync_creatives_request.py +11 -11
- adcp/types/generated_poc/sync_creatives_response.py +23 -23
- adcp/types/generated_poc/targeting.py +9 -9
- adcp/types/generated_poc/task_status.py +10 -10
- adcp/types/generated_poc/task_type.py +6 -6
- adcp/types/generated_poc/tasks_get_request.py +5 -5
- adcp/types/generated_poc/tasks_get_response.py +35 -35
- adcp/types/generated_poc/tasks_list_request.py +36 -36
- adcp/types/generated_poc/tasks_list_response.py +35 -35
- adcp/types/generated_poc/text_asset.py +3 -3
- adcp/types/generated_poc/update_media_buy_request.py +27 -27
- adcp/types/generated_poc/update_media_buy_response.py +11 -11
- adcp/types/generated_poc/url_asset.py +7 -7
- adcp/types/generated_poc/vast_asset.py +38 -38
- adcp/types/generated_poc/vcpm_auction_option.py +17 -13
- adcp/types/generated_poc/vcpm_fixed_option.py +12 -8
- adcp/types/generated_poc/video_asset.py +8 -8
- adcp/types/generated_poc/webhook_asset.py +19 -19
- adcp/types/generated_poc/webhook_payload.py +18 -18
- {adcp-2.2.0.dist-info → adcp-2.4.0.dist-info}/METADATA +38 -2
- adcp-2.4.0.dist-info/RECORD +132 -0
- adcp-2.2.0.dist-info/RECORD +0 -132
- {adcp-2.2.0.dist-info → adcp-2.4.0.dist-info}/WHEEL +0 -0
- {adcp-2.2.0.dist-info → adcp-2.4.0.dist-info}/entry_points.txt +0 -0
- {adcp-2.2.0.dist-info → adcp-2.4.0.dist-info}/licenses/LICENSE +0 -0
- {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-
|
|
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=
|
|
15
|
+
extra='forbid',
|
|
16
16
|
)
|
|
17
17
|
currency: Annotated[
|
|
18
18
|
str,
|
|
19
19
|
Field(
|
|
20
|
-
description=
|
|
21
|
-
examples=[
|
|
22
|
-
pattern=
|
|
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=
|
|
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[
|
|
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=
|
|
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-
|
|
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=
|
|
15
|
+
extra='forbid',
|
|
16
16
|
)
|
|
17
17
|
demographic: Annotated[
|
|
18
18
|
str,
|
|
19
19
|
Field(
|
|
20
|
-
description=
|
|
21
|
-
pattern=
|
|
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=
|
|
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=
|
|
32
|
+
extra='forbid',
|
|
33
33
|
)
|
|
34
34
|
currency: Annotated[
|
|
35
35
|
str,
|
|
36
36
|
Field(
|
|
37
|
-
description=
|
|
38
|
-
examples=[
|
|
39
|
-
pattern=
|
|
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=
|
|
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=
|
|
55
|
+
Field(description='CPP-specific parameters for demographic targeting and GRP requirements'),
|
|
52
56
|
]
|
|
53
|
-
pricing_model: Annotated[Literal[
|
|
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=
|
|
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-
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
46
|
+
extra='forbid',
|
|
47
47
|
)
|
|
48
48
|
currency: Annotated[
|
|
49
49
|
str,
|
|
50
50
|
Field(
|
|
51
|
-
description=
|
|
52
|
-
examples=[
|
|
53
|
-
pattern=
|
|
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=
|
|
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=
|
|
68
|
+
Parameters, Field(description='CPV-specific parameters defining the view threshold')
|
|
65
69
|
]
|
|
66
|
-
pricing_model: Annotated[Literal[
|
|
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=
|
|
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-
|
|
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 =
|
|
20
|
-
daily =
|
|
21
|
-
monthly =
|
|
19
|
+
hourly = 'hourly'
|
|
20
|
+
daily = 'daily'
|
|
21
|
+
monthly = 'monthly'
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
class RequestedMetric(Enum):
|
|
25
|
-
impressions =
|
|
26
|
-
spend =
|
|
27
|
-
clicks =
|
|
28
|
-
ctr =
|
|
29
|
-
video_completions =
|
|
30
|
-
completion_rate =
|
|
31
|
-
conversions =
|
|
32
|
-
viewability =
|
|
33
|
-
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=
|
|
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=
|
|
53
|
+
extra='forbid',
|
|
54
54
|
)
|
|
55
55
|
brand_manifest: Annotated[
|
|
56
56
|
brand_manifest_1.BrandManifest | AnyUrl,
|
|
57
57
|
Field(
|
|
58
|
-
description=
|
|
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
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
61
|
+
'data': {
|
|
62
|
+
'colors': {'primary': '#FF6B35'},
|
|
63
|
+
'name': 'ACME Corporation',
|
|
64
|
+
'url': 'https://acmecorp.com',
|
|
65
65
|
},
|
|
66
|
-
|
|
66
|
+
'description': 'Inline brand manifest',
|
|
67
67
|
},
|
|
68
68
|
{
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
'data': 'https://cdn.acmecorp.com/brand-manifest.json',
|
|
70
|
+
'description': 'URL string reference to hosted manifest',
|
|
71
71
|
},
|
|
72
72
|
],
|
|
73
|
-
title=
|
|
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=
|
|
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=
|
|
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=
|
|
87
|
+
list[package_request.PackageRequest], Field(description='Array of package configurations')
|
|
88
88
|
]
|
|
89
|
-
po_number: Annotated[str | None, Field(description=
|
|
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=
|
|
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-
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
45
|
+
extra='forbid',
|
|
46
46
|
)
|
|
47
47
|
context: Annotated[
|
|
48
48
|
dict[str, Any] | None,
|
|
49
49
|
Field(
|
|
50
|
-
description=
|
|
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=
|
|
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=
|
|
64
|
-
title=
|
|
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-
|
|
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=
|
|
28
|
+
extra='forbid',
|
|
29
29
|
)
|
|
30
30
|
context_description: Annotated[
|
|
31
31
|
str | None,
|
|
32
|
-
Field(description=
|
|
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=
|
|
35
|
+
dict[str, str] | None, Field(description='Macro values to apply for this preview')
|
|
36
36
|
] = None
|
|
37
|
-
name: Annotated[str, Field(description=
|
|
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=
|
|
42
|
+
extra='forbid',
|
|
43
43
|
)
|
|
44
44
|
approved: Annotated[
|
|
45
45
|
bool | None,
|
|
46
46
|
Field(
|
|
47
|
-
description=
|
|
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=
|
|
67
|
+
Field(description='Assets required by the format, keyed by asset_role'),
|
|
68
68
|
]
|
|
69
|
-
creative_id: Annotated[str, Field(description=
|
|
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=
|
|
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=
|
|
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=
|
|
80
|
+
name: Annotated[str, Field(description='Human-readable creative name')]
|
|
81
81
|
tags: Annotated[
|
|
82
|
-
list[str] | None, Field(description=
|
|
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-
|
|
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=
|
|
15
|
+
extra='forbid',
|
|
16
16
|
)
|
|
17
|
-
creative_id: Annotated[str, Field(description=
|
|
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=
|
|
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-
|
|
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=
|
|
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=
|
|
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=
|
|
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-
|
|
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 =
|
|
16
|
-
optional =
|
|
17
|
-
none =
|
|
15
|
+
required = 'required'
|
|
16
|
+
optional = 'optional'
|
|
17
|
+
none = 'none'
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
class LandingPage(Enum):
|
|
21
|
-
any =
|
|
22
|
-
retailer_site_only =
|
|
23
|
-
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=
|
|
28
|
+
extra='forbid',
|
|
29
29
|
)
|
|
30
|
-
co_branding: Annotated[CoBranding, Field(description=
|
|
31
|
-
landing_page: Annotated[LandingPage, Field(description=
|
|
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=
|
|
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-
|
|
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 =
|
|
12
|
-
approved =
|
|
13
|
-
rejected =
|
|
14
|
-
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-
|
|
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=
|
|
15
|
+
extra='forbid',
|
|
16
16
|
)
|
|
17
|
-
content: Annotated[str, Field(description=
|
|
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
|