Hi — flagging a contract gap between the Python SDK and the AdCP spec it targets.
Spec
In static/schemas/source/creative/sync-creatives-response.json, the per-creative result item (oneOf[0].properties.creatives.items) defines 12 properties:
| field |
required |
creative_id |
yes |
action |
yes |
account |
no |
assigned_to |
no |
assignment_errors |
no |
changes |
no |
errors |
no |
expires_at |
no |
platform_id |
no |
preview_url |
no |
status |
no |
warnings |
no |
This schema shape is stable across the spec range relevant to this SDK — verified identical at:
- tag
v3.1.0-beta.3 (commit 727085264) — the spec target stamped in the 5.7.0 package description ("5.7.0 targets AdCP spec 3.1.0-beta.3")
- a downstream pin at adcp commit
04f59d2d5 (2026-05-13)
origin/main today
SDK 5.7.0
adcp/types/generated_poc/creative/sync_creatives_response.py emits a Creative(AdcpVersionEnvelope) Pydantic class with only 3 declared fields plus 2 inherited from the envelope:
```python
class Creative(AdcpVersionEnvelope):
creative_id: str
action: CreativeAction
errors: Optional[list[Error]] = None
```
Pydantic introspection:
```
from adcp.types.generated_poc.creative.sync_creatives_response import Creative
list(Creative.model_fields)
['adcp_version', 'adcp_major_version', 'creative_id', 'action', 'errors']
```
Gap
The SDK is missing 9 of 12 spec-defined fields: account, assigned_to, assignment_errors, changes, expires_at, platform_id, preview_url, status, warnings.
All 9 are optional in the spec, which suggests the codegen path is filtering on required[] and dropping the rest. By the AdCP contract these are buyer-observable fields (e.g. status carries the review-lifecycle signal, assigned_to reports successful assignments, errors is only meaningful when read alongside action). Without typed access, callers either drop to raw dict parsing or miss the data entirely.
For comparison, the TypeScript SDK at adcontextprotocol/adcp-client (src/lib/types/core.generated.ts, SyncCreativesSuccess.creatives[]) emits the full 12-field shape.
Suggested fix
Whatever generator step writes generated_poc/creative/sync_creatives_response.py should walk the full properties map of oneOf[0].properties.creatives.items, not just required[]. The Optional[...] typing for the new fields is straightforward once they're enumerated.
Happy to provide a reduction case or help test a fix.
Hi — flagging a contract gap between the Python SDK and the AdCP spec it targets.
Spec
In
static/schemas/source/creative/sync-creatives-response.json, the per-creative result item (oneOf[0].properties.creatives.items) defines 12 properties:creative_idactionaccountassigned_toassignment_errorschangeserrorsexpires_atplatform_idpreview_urlstatuswarningsThis schema shape is stable across the spec range relevant to this SDK — verified identical at:
v3.1.0-beta.3(commit727085264) — the spec target stamped in the 5.7.0 package description ("5.7.0 targets AdCP spec 3.1.0-beta.3")04f59d2d5(2026-05-13)origin/maintodaySDK 5.7.0
adcp/types/generated_poc/creative/sync_creatives_response.pyemits aCreative(AdcpVersionEnvelope)Pydantic class with only 3 declared fields plus 2 inherited from the envelope:```python
class Creative(AdcpVersionEnvelope):
creative_id: str
action: CreativeAction
errors: Optional[list[Error]] = None
```
Pydantic introspection:
```
Gap
The SDK is missing 9 of 12 spec-defined fields:
account,assigned_to,assignment_errors,changes,expires_at,platform_id,preview_url,status,warnings.All 9 are optional in the spec, which suggests the codegen path is filtering on
required[]and dropping the rest. By the AdCP contract these are buyer-observable fields (e.g.statuscarries the review-lifecycle signal,assigned_toreports successful assignments,errorsis only meaningful when read alongsideaction). Without typed access, callers either drop to raw dict parsing or miss the data entirely.For comparison, the TypeScript SDK at
adcontextprotocol/adcp-client(src/lib/types/core.generated.ts,SyncCreativesSuccess.creatives[]) emits the full 12-field shape.Suggested fix
Whatever generator step writes
generated_poc/creative/sync_creatives_response.pyshould walk the fullpropertiesmap ofoneOf[0].properties.creatives.items, not justrequired[]. TheOptional[...]typing for the new fields is straightforward once they're enumerated.Happy to provide a reduction case or help test a fix.