adcp 2.13.0__py3-none-any.whl → 2.14.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 +14 -1
- adcp/adagents.py +53 -9
- adcp/client.py +361 -57
- adcp/protocols/mcp.py +1 -3
- adcp/types/__init__.py +9 -33
- adcp/types/_generated.py +82 -13
- adcp/types/aliases.py +23 -0
- adcp/types/generated_poc/adagents.py +9 -13
- adcp/types/generated_poc/core/activation_key.py +12 -2
- adcp/types/generated_poc/core/assets/daast_asset.py +12 -2
- adcp/types/generated_poc/core/assets/image_asset.py +9 -5
- adcp/types/generated_poc/core/assets/vast_asset.py +12 -2
- adcp/types/generated_poc/core/assets/video_asset.py +9 -5
- adcp/types/generated_poc/core/async_response_data.py +72 -0
- adcp/types/generated_poc/core/brand_manifest_ref.py +35 -0
- adcp/types/generated_poc/core/creative_asset.py +4 -6
- adcp/types/generated_poc/core/creative_manifest.py +4 -6
- adcp/types/generated_poc/core/deployment.py +16 -8
- adcp/types/generated_poc/core/destination.py +12 -2
- adcp/types/generated_poc/core/format.py +3 -3
- adcp/types/generated_poc/core/{webhook_payload.py → mcp_webhook_payload.py} +8 -33
- adcp/types/generated_poc/core/pricing_option.py +51 -0
- adcp/types/generated_poc/core/product.py +4 -29
- adcp/types/generated_poc/core/promoted_offerings.py +5 -21
- adcp/types/generated_poc/core/property.py +4 -6
- adcp/types/generated_poc/core/publisher_property_selector.py +15 -2
- adcp/types/generated_poc/core/push_notification_config.py +1 -4
- adcp/types/generated_poc/core/start_timing.py +18 -0
- adcp/types/generated_poc/core/sub_asset.py +12 -2
- adcp/types/generated_poc/creative/preview_creative_response.py +3 -14
- adcp/types/generated_poc/creative/preview_render.py +3 -11
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +37 -0
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +19 -0
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +31 -0
- adcp/types/generated_poc/media_buy/create_media_buy_request.py +7 -26
- adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +4 -2
- adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +38 -0
- adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +24 -0
- adcp/types/generated_poc/media_buy/get_products_async_response_working.py +35 -0
- adcp/types/generated_poc/media_buy/get_products_request.py +5 -20
- adcp/types/generated_poc/media_buy/list_creatives_response.py +5 -7
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +31 -0
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +19 -0
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +37 -0
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +30 -0
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +19 -0
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +31 -0
- adcp/types/generated_poc/media_buy/update_media_buy_request.py +4 -14
- adcp/types/generated_poc/signals/activate_signal_request.py +2 -2
- adcp/types/generated_poc/signals/activate_signal_response.py +2 -2
- adcp/types/generated_poc/signals/get_signals_request.py +2 -2
- adcp/types/generated_poc/signals/get_signals_response.py +2 -3
- adcp/utils/preview_cache.py +6 -4
- adcp/webhooks.py +508 -0
- {adcp-2.13.0.dist-info → adcp-2.14.0.dist-info}/METADATA +2 -2
- {adcp-2.13.0.dist-info → adcp-2.14.0.dist-info}/RECORD +60 -44
- adcp/types/generated_poc/core/dimensions.py +0 -18
- {adcp-2.13.0.dist-info → adcp-2.14.0.dist-info}/WHEEL +0 -0
- {adcp-2.13.0.dist-info → adcp-2.14.0.dist-info}/entry_points.txt +0 -0
- {adcp-2.13.0.dist-info → adcp-2.14.0.dist-info}/licenses/LICENSE +0 -0
- {adcp-2.13.0.dist-info → adcp-2.14.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: core/start_timing.json
|
|
3
|
+
# timestamp: 2025-12-11T15:09:37+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated
|
|
8
|
+
|
|
9
|
+
from pydantic import AwareDatetime, Field, RootModel
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class StartTiming(RootModel[str | AwareDatetime]):
|
|
13
|
+
root: Annotated[
|
|
14
|
+
str | AwareDatetime,
|
|
15
|
+
Field(
|
|
16
|
+
description="Campaign start timing: 'asap' or ISO 8601 date-time", title='Start Timing'
|
|
17
|
+
),
|
|
18
|
+
]
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: core/sub_asset.json
|
|
3
|
-
# timestamp: 2025-
|
|
3
|
+
# timestamp: 2025-12-11T15:09:37+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
7
|
from typing import Annotated, Literal
|
|
8
8
|
|
|
9
9
|
from adcp.types.base import AdCPBaseModel
|
|
10
|
-
from pydantic import AnyUrl, ConfigDict, Field
|
|
10
|
+
from pydantic import AnyUrl, ConfigDict, Field, RootModel
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class SubAsset1(AdCPBaseModel):
|
|
@@ -53,3 +53,13 @@ class SubAsset2(AdCPBaseModel):
|
|
|
53
53
|
description='Text content for text-based assets like headlines, body text, CTA text, etc.'
|
|
54
54
|
),
|
|
55
55
|
]
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class SubAsset(RootModel[SubAsset1 | SubAsset2]):
|
|
59
|
+
root: Annotated[
|
|
60
|
+
SubAsset1 | SubAsset2,
|
|
61
|
+
Field(
|
|
62
|
+
description='Sub-asset for multi-asset creative formats, including carousel images and native ad template variables',
|
|
63
|
+
title='Sub-Asset',
|
|
64
|
+
),
|
|
65
|
+
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: creative/preview_creative_response.json
|
|
3
|
-
# timestamp: 2025-
|
|
3
|
+
# timestamp: 2025-12-11T15:09:37+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -50,11 +50,7 @@ class Preview(AdCPBaseModel):
|
|
|
50
50
|
]
|
|
51
51
|
preview_id: Annotated[str, Field(description='Unique identifier for this preview variant')]
|
|
52
52
|
renders: Annotated[
|
|
53
|
-
list[
|
|
54
|
-
preview_render.PreviewRender1
|
|
55
|
-
| preview_render.PreviewRender2
|
|
56
|
-
| preview_render.PreviewRender3
|
|
57
|
-
],
|
|
53
|
+
list[preview_render.PreviewRender],
|
|
58
54
|
Field(
|
|
59
55
|
description='Array of rendered pieces for this preview variant. Most formats render as a single piece. Companion ad formats (video + banner), multi-placement formats, and adaptive formats render as multiple pieces.',
|
|
60
56
|
min_length=1,
|
|
@@ -93,14 +89,7 @@ class PreviewCreativeResponse1(AdCPBaseModel):
|
|
|
93
89
|
class Preview1(AdCPBaseModel):
|
|
94
90
|
input: Input4
|
|
95
91
|
preview_id: str
|
|
96
|
-
renders: Annotated[
|
|
97
|
-
list[
|
|
98
|
-
preview_render.PreviewRender1
|
|
99
|
-
| preview_render.PreviewRender2
|
|
100
|
-
| preview_render.PreviewRender3
|
|
101
|
-
],
|
|
102
|
-
Field(min_length=1),
|
|
103
|
-
]
|
|
92
|
+
renders: Annotated[list[preview_render.PreviewRender], Field(min_length=1)]
|
|
104
93
|
|
|
105
94
|
|
|
106
95
|
class Response(AdCPBaseModel):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: creative/preview_render.json
|
|
3
|
-
# timestamp: 2025-
|
|
3
|
+
# timestamp: 2025-12-11T15:09:37+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -134,17 +134,9 @@ class PreviewRender3(AdCPBaseModel):
|
|
|
134
134
|
]
|
|
135
135
|
|
|
136
136
|
|
|
137
|
-
class PreviewRender(
|
|
138
|
-
RootModel[
|
|
139
|
-
PreviewRender1
|
|
140
|
-
| PreviewRender2
|
|
141
|
-
| PreviewRender3
|
|
142
|
-
]
|
|
143
|
-
):
|
|
137
|
+
class PreviewRender(RootModel[PreviewRender1 | PreviewRender2 | PreviewRender3]):
|
|
144
138
|
root: Annotated[
|
|
145
|
-
PreviewRender1
|
|
146
|
-
| PreviewRender2
|
|
147
|
-
| PreviewRender3,
|
|
139
|
+
PreviewRender1 | PreviewRender2 | PreviewRender3,
|
|
148
140
|
Field(
|
|
149
141
|
description='A single rendered piece of a creative preview with discriminated output format',
|
|
150
142
|
title='Preview Render',
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: media_buy/create_media_buy_async_response_input_required.json
|
|
3
|
+
# timestamp: 2025-12-11T15:09:37+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import Enum
|
|
8
|
+
from typing import Annotated
|
|
9
|
+
|
|
10
|
+
from adcp.types.base import AdCPBaseModel
|
|
11
|
+
from pydantic import ConfigDict, Field
|
|
12
|
+
|
|
13
|
+
from ..core import context as context_1
|
|
14
|
+
from ..core import error
|
|
15
|
+
from ..core import ext as ext_1
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class Reason(Enum):
|
|
19
|
+
APPROVAL_REQUIRED = 'APPROVAL_REQUIRED'
|
|
20
|
+
BUDGET_EXCEEDS_LIMIT = 'BUDGET_EXCEEDS_LIMIT'
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class CreateMediaBuyInputRequired(AdCPBaseModel):
|
|
24
|
+
model_config = ConfigDict(
|
|
25
|
+
extra='forbid',
|
|
26
|
+
)
|
|
27
|
+
context: context_1.ContextObject | None = None
|
|
28
|
+
errors: Annotated[
|
|
29
|
+
list[error.Error] | None,
|
|
30
|
+
Field(
|
|
31
|
+
description='Optional validation errors or warnings for debugging purposes. Helps explain why input is required.'
|
|
32
|
+
),
|
|
33
|
+
] = None
|
|
34
|
+
ext: ext_1.ExtensionObject | None = None
|
|
35
|
+
reason: Annotated[
|
|
36
|
+
Reason | None, Field(description='Reason code indicating why input is needed')
|
|
37
|
+
] = None
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: media_buy/create_media_buy_async_response_submitted.json
|
|
3
|
+
# timestamp: 2025-12-11T15:09:37+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from adcp.types.base import AdCPBaseModel
|
|
8
|
+
from pydantic import ConfigDict
|
|
9
|
+
|
|
10
|
+
from ..core import context as context_1
|
|
11
|
+
from ..core import ext as ext_1
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class CreateMediaBuySubmitted(AdCPBaseModel):
|
|
15
|
+
model_config = ConfigDict(
|
|
16
|
+
extra='forbid',
|
|
17
|
+
)
|
|
18
|
+
context: context_1.ContextObject | None = None
|
|
19
|
+
ext: ext_1.ExtensionObject | None = None
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: media_buy/create_media_buy_async_response_working.json
|
|
3
|
+
# timestamp: 2025-12-11T15:09:37+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated
|
|
8
|
+
|
|
9
|
+
from adcp.types.base import AdCPBaseModel
|
|
10
|
+
from pydantic import ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
from ..core import context as context_1
|
|
13
|
+
from ..core import ext as ext_1
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class CreateMediaBuyWorking(AdCPBaseModel):
|
|
17
|
+
model_config = ConfigDict(
|
|
18
|
+
extra='forbid',
|
|
19
|
+
)
|
|
20
|
+
context: context_1.ContextObject | None = None
|
|
21
|
+
current_step: Annotated[
|
|
22
|
+
str | None, Field(description='Current step or phase of the operation')
|
|
23
|
+
] = None
|
|
24
|
+
ext: ext_1.ExtensionObject | None = None
|
|
25
|
+
percentage: Annotated[
|
|
26
|
+
float | None, Field(description='Completion percentage (0-100)', ge=0.0, le=100.0)
|
|
27
|
+
] = None
|
|
28
|
+
step_number: Annotated[int | None, Field(description='Current step number', ge=1)] = None
|
|
29
|
+
total_steps: Annotated[
|
|
30
|
+
int | None, Field(description='Total number of steps in the operation', ge=1)
|
|
31
|
+
] = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/create_media_buy_request.json
|
|
3
|
-
# timestamp: 2025-
|
|
3
|
+
# timestamp: 2025-12-11T15:09:37+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -8,11 +8,12 @@ from enum import Enum
|
|
|
8
8
|
from typing import Annotated
|
|
9
9
|
|
|
10
10
|
from adcp.types.base import AdCPBaseModel
|
|
11
|
-
from pydantic import
|
|
11
|
+
from pydantic import AwareDatetime, ConfigDict, Field
|
|
12
12
|
|
|
13
|
-
from ..core import
|
|
13
|
+
from ..core import brand_manifest_ref
|
|
14
14
|
from ..core import context as context_1
|
|
15
15
|
from ..core import ext as ext_1
|
|
16
|
+
from ..core import start_timing
|
|
16
17
|
from ..core.push_notification_config import PushNotificationConfig
|
|
17
18
|
from . import package_request
|
|
18
19
|
|
|
@@ -55,24 +56,9 @@ class CreateMediaBuyRequest(AdCPBaseModel):
|
|
|
55
56
|
extra='forbid',
|
|
56
57
|
)
|
|
57
58
|
brand_manifest: Annotated[
|
|
58
|
-
|
|
59
|
+
brand_manifest_ref.BrandManifestReference,
|
|
59
60
|
Field(
|
|
60
|
-
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.'
|
|
61
|
-
examples=[
|
|
62
|
-
{
|
|
63
|
-
'data': {
|
|
64
|
-
'colors': {'primary': '#FF6B35'},
|
|
65
|
-
'name': 'ACME Corporation',
|
|
66
|
-
'url': 'https://acmecorp.com',
|
|
67
|
-
},
|
|
68
|
-
'description': 'Inline brand manifest',
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
'data': 'https://cdn.acmecorp.com/brand-manifest.json',
|
|
72
|
-
'description': 'URL string reference to hosted manifest',
|
|
73
|
-
},
|
|
74
|
-
],
|
|
75
|
-
title='Brand Manifest Reference',
|
|
61
|
+
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.'
|
|
76
62
|
),
|
|
77
63
|
]
|
|
78
64
|
buyer_ref: Annotated[str, Field(description="Buyer's reference identifier for this media buy")]
|
|
@@ -86,9 +72,4 @@ class CreateMediaBuyRequest(AdCPBaseModel):
|
|
|
86
72
|
]
|
|
87
73
|
po_number: Annotated[str | None, Field(description='Purchase order number for tracking')] = None
|
|
88
74
|
reporting_webhook: ReportingWebhook | None = None
|
|
89
|
-
start_time:
|
|
90
|
-
str | AwareDatetime,
|
|
91
|
-
Field(
|
|
92
|
-
description="Campaign start timing: 'asap' or ISO 8601 date-time", title='Start Timing'
|
|
93
|
-
),
|
|
94
|
-
]
|
|
75
|
+
start_time: start_timing.StartTiming
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/get_media_buy_delivery_response.json
|
|
3
|
-
# timestamp: 2025-
|
|
3
|
+
# timestamp: 2025-12-11T15:09:37+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
7
|
from enum import Enum
|
|
8
|
-
from typing import Annotated
|
|
8
|
+
from typing import Annotated, Any
|
|
9
9
|
|
|
10
10
|
from adcp.types.base import AdCPBaseModel
|
|
11
11
|
from pydantic import AwareDatetime, ConfigDict, Field
|
|
@@ -72,6 +72,7 @@ class Totals(DeliveryMetrics):
|
|
|
72
72
|
ge=0.0,
|
|
73
73
|
),
|
|
74
74
|
] = None
|
|
75
|
+
spend: Any
|
|
75
76
|
|
|
76
77
|
|
|
77
78
|
class NotificationType(Enum):
|
|
@@ -133,6 +134,7 @@ class ByPackageItem(DeliveryMetrics):
|
|
|
133
134
|
ge=0.0,
|
|
134
135
|
),
|
|
135
136
|
]
|
|
137
|
+
spend: Any
|
|
136
138
|
|
|
137
139
|
|
|
138
140
|
class MediaBuyDelivery(AdCPBaseModel):
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: media_buy/get_products_async_response_input_required.json
|
|
3
|
+
# timestamp: 2025-12-11T15:09:37+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import Enum
|
|
8
|
+
from typing import Annotated
|
|
9
|
+
|
|
10
|
+
from adcp.types.base import AdCPBaseModel
|
|
11
|
+
from pydantic import ConfigDict, Field
|
|
12
|
+
|
|
13
|
+
from ..core import context as context_1
|
|
14
|
+
from ..core import ext as ext_1
|
|
15
|
+
from ..core import product
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class Reason(Enum):
|
|
19
|
+
CLARIFICATION_NEEDED = 'CLARIFICATION_NEEDED'
|
|
20
|
+
BUDGET_REQUIRED = 'BUDGET_REQUIRED'
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class GetProductsInputRequired(AdCPBaseModel):
|
|
24
|
+
model_config = ConfigDict(
|
|
25
|
+
extra='forbid',
|
|
26
|
+
)
|
|
27
|
+
context: context_1.ContextObject | None = None
|
|
28
|
+
ext: ext_1.ExtensionObject | None = None
|
|
29
|
+
partial_results: Annotated[
|
|
30
|
+
list[product.Product] | None,
|
|
31
|
+
Field(description='Partial product results that may help inform the clarification'),
|
|
32
|
+
] = None
|
|
33
|
+
reason: Annotated[
|
|
34
|
+
Reason | None, Field(description='Reason code indicating why input is needed')
|
|
35
|
+
] = None
|
|
36
|
+
suggestions: Annotated[
|
|
37
|
+
list[str] | None, Field(description='Suggested values or options for the required input')
|
|
38
|
+
] = None
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: media_buy/get_products_async_response_submitted.json
|
|
3
|
+
# timestamp: 2025-12-11T15:09:37+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated
|
|
8
|
+
|
|
9
|
+
from adcp.types.base import AdCPBaseModel
|
|
10
|
+
from pydantic import AwareDatetime, ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
from ..core import context as context_1
|
|
13
|
+
from ..core import ext as ext_1
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class GetProductsSubmitted(AdCPBaseModel):
|
|
17
|
+
model_config = ConfigDict(
|
|
18
|
+
extra='forbid',
|
|
19
|
+
)
|
|
20
|
+
context: context_1.ContextObject | None = None
|
|
21
|
+
estimated_completion: Annotated[
|
|
22
|
+
AwareDatetime | None, Field(description='Estimated completion time for the search')
|
|
23
|
+
] = None
|
|
24
|
+
ext: ext_1.ExtensionObject | None = None
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: media_buy/get_products_async_response_working.json
|
|
3
|
+
# timestamp: 2025-12-11T15:09:37+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated
|
|
8
|
+
|
|
9
|
+
from adcp.types.base import AdCPBaseModel
|
|
10
|
+
from pydantic import ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
from ..core import context as context_1
|
|
13
|
+
from ..core import ext as ext_1
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class GetProductsWorking(AdCPBaseModel):
|
|
17
|
+
model_config = ConfigDict(
|
|
18
|
+
extra='forbid',
|
|
19
|
+
)
|
|
20
|
+
context: context_1.ContextObject | None = None
|
|
21
|
+
current_step: Annotated[
|
|
22
|
+
str | None,
|
|
23
|
+
Field(
|
|
24
|
+
description="Current step in the search process (e.g., 'searching_inventory', 'validating_availability')"
|
|
25
|
+
),
|
|
26
|
+
] = None
|
|
27
|
+
ext: ext_1.ExtensionObject | None = None
|
|
28
|
+
percentage: Annotated[
|
|
29
|
+
float | None,
|
|
30
|
+
Field(description='Progress percentage of the search operation', ge=0.0, le=100.0),
|
|
31
|
+
] = None
|
|
32
|
+
step_number: Annotated[int | None, Field(description='Current step number (1-indexed)')] = None
|
|
33
|
+
total_steps: Annotated[
|
|
34
|
+
int | None, Field(description='Total number of steps in the search process')
|
|
35
|
+
] = None
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/get_products_request.json
|
|
3
|
-
# timestamp: 2025-
|
|
3
|
+
# timestamp: 2025-12-11T15:09:37+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
7
|
from typing import Annotated
|
|
8
8
|
|
|
9
9
|
from adcp.types.base import AdCPBaseModel
|
|
10
|
-
from pydantic import
|
|
10
|
+
from pydantic import ConfigDict, Field
|
|
11
11
|
|
|
12
|
-
from ..core import
|
|
12
|
+
from ..core import brand_manifest_ref
|
|
13
13
|
from ..core import context as context_1
|
|
14
14
|
from ..core import ext as ext_1
|
|
15
15
|
from ..core import product_filters
|
|
@@ -20,24 +20,9 @@ class GetProductsRequest(AdCPBaseModel):
|
|
|
20
20
|
extra='forbid',
|
|
21
21
|
)
|
|
22
22
|
brand_manifest: Annotated[
|
|
23
|
-
|
|
23
|
+
brand_manifest_ref.BrandManifestReference | None,
|
|
24
24
|
Field(
|
|
25
|
-
description='Brand information manifest providing brand context, assets, and product catalog. Can be provided inline or as a URL reference to a hosted manifest.'
|
|
26
|
-
examples=[
|
|
27
|
-
{
|
|
28
|
-
'data': {
|
|
29
|
-
'colors': {'primary': '#FF6B35'},
|
|
30
|
-
'name': 'ACME Corporation',
|
|
31
|
-
'url': 'https://acmecorp.com',
|
|
32
|
-
},
|
|
33
|
-
'description': 'Inline brand manifest',
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
'data': 'https://cdn.acmecorp.com/brand-manifest.json',
|
|
37
|
-
'description': 'URL string reference to hosted manifest',
|
|
38
|
-
},
|
|
39
|
-
],
|
|
40
|
-
title='Brand Manifest Reference',
|
|
25
|
+
description='Brand information manifest providing brand context, assets, and product catalog. Can be provided inline or as a URL reference to a hosted manifest.'
|
|
41
26
|
),
|
|
42
27
|
] = None
|
|
43
28
|
brief: Annotated[
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/list_creatives_response.json
|
|
3
|
-
# timestamp: 2025-
|
|
3
|
+
# timestamp: 2025-12-11T15:09:37+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -147,12 +147,10 @@ class Creative(AdCPBaseModel):
|
|
|
147
147
|
| html_asset.HtmlAsset
|
|
148
148
|
| css_asset.CssAsset
|
|
149
149
|
| javascript_asset.JavascriptAsset
|
|
150
|
+
| vast_asset.VastAsset
|
|
151
|
+
| daast_asset.DaastAsset
|
|
150
152
|
| promoted_offerings.PromotedOfferings
|
|
151
|
-
| url_asset.UrlAsset
|
|
152
|
-
| vast_asset.VastAsset1
|
|
153
|
-
| vast_asset.VastAsset2
|
|
154
|
-
| daast_asset.DaastAsset1
|
|
155
|
-
| daast_asset.DaastAsset2,
|
|
153
|
+
| url_asset.UrlAsset,
|
|
156
154
|
]
|
|
157
155
|
| None,
|
|
158
156
|
Field(description='Assets for this creative, keyed by asset_role'),
|
|
@@ -180,7 +178,7 @@ class Creative(AdCPBaseModel):
|
|
|
180
178
|
creative_status.CreativeStatus, Field(description='Current approval status of the creative')
|
|
181
179
|
]
|
|
182
180
|
sub_assets: Annotated[
|
|
183
|
-
list[sub_asset.
|
|
181
|
+
list[sub_asset.SubAsset] | None,
|
|
184
182
|
Field(
|
|
185
183
|
description='Sub-assets for multi-asset formats (included when include_sub_assets=true)'
|
|
186
184
|
),
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: media_buy/sync_creatives_async_response_input_required.json
|
|
3
|
+
# timestamp: 2025-12-18T20:00:24+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import Enum
|
|
8
|
+
from typing import Annotated
|
|
9
|
+
|
|
10
|
+
from adcp.types.base import AdCPBaseModel
|
|
11
|
+
from pydantic import ConfigDict, Field
|
|
12
|
+
|
|
13
|
+
from ..core import context as context_1
|
|
14
|
+
from ..core import ext as ext_1
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class Reason(Enum):
|
|
18
|
+
APPROVAL_REQUIRED = 'APPROVAL_REQUIRED'
|
|
19
|
+
ASSET_CONFIRMATION = 'ASSET_CONFIRMATION'
|
|
20
|
+
FORMAT_CLARIFICATION = 'FORMAT_CLARIFICATION'
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class SyncCreativesInputRequired(AdCPBaseModel):
|
|
24
|
+
model_config = ConfigDict(
|
|
25
|
+
extra='forbid',
|
|
26
|
+
)
|
|
27
|
+
context: context_1.ContextObject | None = None
|
|
28
|
+
ext: ext_1.ExtensionObject | None = None
|
|
29
|
+
reason: Annotated[
|
|
30
|
+
Reason | None, Field(description='Reason code indicating why buyer input is needed')
|
|
31
|
+
] = None
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: media_buy/sync_creatives_async_response_submitted.json
|
|
3
|
+
# timestamp: 2025-12-11T15:09:37+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from adcp.types.base import AdCPBaseModel
|
|
8
|
+
from pydantic import ConfigDict
|
|
9
|
+
|
|
10
|
+
from ..core import context as context_1
|
|
11
|
+
from ..core import ext as ext_1
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class SyncCreativesSubmitted(AdCPBaseModel):
|
|
15
|
+
model_config = ConfigDict(
|
|
16
|
+
extra='forbid',
|
|
17
|
+
)
|
|
18
|
+
context: context_1.ContextObject | None = None
|
|
19
|
+
ext: ext_1.ExtensionObject | None = None
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: media_buy/sync_creatives_async_response_working.json
|
|
3
|
+
# timestamp: 2025-12-11T15:09:37+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated
|
|
8
|
+
|
|
9
|
+
from adcp.types.base import AdCPBaseModel
|
|
10
|
+
from pydantic import ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
from ..core import context as context_1
|
|
13
|
+
from ..core import ext as ext_1
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class SyncCreativesWorking(AdCPBaseModel):
|
|
17
|
+
model_config = ConfigDict(
|
|
18
|
+
extra='forbid',
|
|
19
|
+
)
|
|
20
|
+
context: context_1.ContextObject | None = None
|
|
21
|
+
creatives_processed: Annotated[
|
|
22
|
+
int | None, Field(description='Number of creatives processed so far', ge=0)
|
|
23
|
+
] = None
|
|
24
|
+
creatives_total: Annotated[
|
|
25
|
+
int | None, Field(description='Total number of creatives to process', ge=0)
|
|
26
|
+
] = None
|
|
27
|
+
current_step: Annotated[
|
|
28
|
+
str | None, Field(description='Current step or phase of the operation')
|
|
29
|
+
] = None
|
|
30
|
+
ext: ext_1.ExtensionObject | None = None
|
|
31
|
+
percentage: Annotated[
|
|
32
|
+
float | None, Field(description='Completion percentage (0-100)', ge=0.0, le=100.0)
|
|
33
|
+
] = None
|
|
34
|
+
step_number: Annotated[int | None, Field(description='Current step number', ge=1)] = None
|
|
35
|
+
total_steps: Annotated[
|
|
36
|
+
int | None, Field(description='Total number of steps in the operation', ge=1)
|
|
37
|
+
] = None
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: media_buy/update_media_buy_async_response_input_required.json
|
|
3
|
+
# timestamp: 2025-12-11T15:09:37+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import Enum
|
|
8
|
+
from typing import Annotated
|
|
9
|
+
|
|
10
|
+
from adcp.types.base import AdCPBaseModel
|
|
11
|
+
from pydantic import ConfigDict, Field
|
|
12
|
+
|
|
13
|
+
from ..core import context as context_1
|
|
14
|
+
from ..core import ext as ext_1
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class Reason(Enum):
|
|
18
|
+
APPROVAL_REQUIRED = 'APPROVAL_REQUIRED'
|
|
19
|
+
CHANGE_CONFIRMATION = 'CHANGE_CONFIRMATION'
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class UpdateMediaBuyInputRequired(AdCPBaseModel):
|
|
23
|
+
model_config = ConfigDict(
|
|
24
|
+
extra='forbid',
|
|
25
|
+
)
|
|
26
|
+
context: context_1.ContextObject | None = None
|
|
27
|
+
ext: ext_1.ExtensionObject | None = None
|
|
28
|
+
reason: Annotated[
|
|
29
|
+
Reason | None, Field(description='Reason code indicating why input is needed')
|
|
30
|
+
] = None
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: media_buy/update_media_buy_async_response_submitted.json
|
|
3
|
+
# timestamp: 2025-12-11T15:09:37+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from adcp.types.base import AdCPBaseModel
|
|
8
|
+
from pydantic import ConfigDict
|
|
9
|
+
|
|
10
|
+
from ..core import context as context_1
|
|
11
|
+
from ..core import ext as ext_1
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class UpdateMediaBuySubmitted(AdCPBaseModel):
|
|
15
|
+
model_config = ConfigDict(
|
|
16
|
+
extra='forbid',
|
|
17
|
+
)
|
|
18
|
+
context: context_1.ContextObject | None = None
|
|
19
|
+
ext: ext_1.ExtensionObject | None = None
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: media_buy/update_media_buy_async_response_working.json
|
|
3
|
+
# timestamp: 2025-12-11T15:09:37+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated
|
|
8
|
+
|
|
9
|
+
from adcp.types.base import AdCPBaseModel
|
|
10
|
+
from pydantic import ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
from ..core import context as context_1
|
|
13
|
+
from ..core import ext as ext_1
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class UpdateMediaBuyWorking(AdCPBaseModel):
|
|
17
|
+
model_config = ConfigDict(
|
|
18
|
+
extra='forbid',
|
|
19
|
+
)
|
|
20
|
+
context: context_1.ContextObject | None = None
|
|
21
|
+
current_step: Annotated[
|
|
22
|
+
str | None, Field(description='Current step or phase of the operation')
|
|
23
|
+
] = None
|
|
24
|
+
ext: ext_1.ExtensionObject | None = None
|
|
25
|
+
percentage: Annotated[
|
|
26
|
+
float | None, Field(description='Completion percentage (0-100)', ge=0.0, le=100.0)
|
|
27
|
+
] = None
|
|
28
|
+
step_number: Annotated[int | None, Field(description='Current step number', ge=1)] = None
|
|
29
|
+
total_steps: Annotated[
|
|
30
|
+
int | None, Field(description='Total number of steps in the operation', ge=1)
|
|
31
|
+
] = None
|