Skip to content

chore: Upgrade adcp library to 3.5.0 #1043

@KonstantinMirin

Description

@KonstantinMirin

Summary

Upgrade the adcp Python library from 3.2.0 to 3.5.0 to gain access to new AdCP v3 types and enable 9 feature issues currently waiting on library support.

What 3.3.0 brings

New request/response types

  • SyncAccountsRequest/Response, ListAccountsRequest/Response, Account — multi-advertiser account management
  • GetMediaBuyArtifactsRequest/Response, Artifact — media buy artifact retrieval
  • LogEventRequest/Response, SyncEventSourcesRequest/Response — conversion tracking
  • GetCreativeDeliveryRequest/Response — creative-level delivery metrics
  • DeliveryForecast, ForecastMethod, ForecastPoint, ForecastRange — delivery forecasting

New targeting and pricing types

  • DaypartTarget — daypart targeting
  • PricingModel.cpa, PricingModel.time — CPA and time-based pricing

Improved core types

  • PaginationRequest (cursor, max_results) and PaginationResponse (cursor, has_more, total_count) — cursor-based pagination
  • BrandManifestReference (RootModel[BrandManifest | AnyUrl]) — unified brand manifest handling
  • GetProductsRequest now includes all 10 spec fields (product_selectors, pagination, account_id, etc.)
  • Creative restructured with variants and variant_count for multi-variant creative support
  • Property updated with identifier and type fields

Migration scope

The upgrade requires updating models that extend library types to align with the new field structures:

Area Scope Est. test updates
Creative model Align with variants-based structure ~30 tests
Property model Align with identifier/type fields ~4 tests
Pagination Adopt cursor-based PaginationRequest/PaginationResponse, update import paths ~10 tests
GetProductsRequest Extend library directly (zero local fields needed) ~5 tests
GetMediaBuyDeliveryRequest Remove redundant account_id override ~2 tests
Import paths Pagination moved from list_creatives_request/response to core/pagination_request/pagination_response ~5 tests

Confirmed migration pattern

GetProductsRequest migration has been validated — all 10 fields inherited from library with zero local re-declarations:

class GetProductsRequest(LibraryGetProductsRequest):
    model_config = ConfigDict(extra=get_pydantic_extra_mode())

Pydantic auto-coerces BrandManifest dicts into BrandManifestReference. Existing create_get_products_request() helper works without changes.

This upgrade unblocks

Prerequisite for:

Strengthens:

Acceptance criteria

  • adcp>=3.3.0 in pyproject.toml, uv lock clean
  • All import paths updated (Pagination, PaginationRequest)
  • Creative model aligned with variants structure
  • Property model aligned with identifier/type fields
  • GetProductsRequest extends library with zero local field re-declarations
  • GetMediaBuyDeliveryRequest.account_id local override removed
  • KNOWN_NOT_EXTENDED updated in test_schema_library_inheritance.py
  • make quality passes
  • No regressions in unit tests

Metadata

Metadata

Labels

Ready for DevThis is a good issue to work onadcp-v3AdCP v3 spec gaphelp wantedExtra attention is needed

Type

No type

Projects

Status

Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions