Found while applying live changes with v0.2.1 (API v5):
-
Campaign update sends unwrapped payload. WritableResource.update PUTs fields at top level, but Apple's v5 campaign endpoint requires {"campaign": {...}} β every campaign update fails with UNRECOGNIZED_PROPERTY. CampaignResource should override update to wrap the payload.
-
Single-keyword update 404s. KeywordResource.update PUTs targetingkeywords/{id}, which does not exist in v5 β only the bulk endpoint works. update() should delegate to update_bulk() (which works).
-
Partial errors inside HTTP 200 are swallowed. Bulk keyword updates that fail per-item (e.g. NOT_SAME_CURRENCY_AS_ORG_CURRENCY when bidding in a non-org currency) return 200 with an error.errors array; _parse_list_response ignores it, so callers see success while nothing changed. Responses with an error block should raise (or surface the errors on the returned object).
All three reproduced against the live API on 2026-08-06; workarounds exist in caller code (wrap campaign payload, use update_bulk, verify writes by re-fetching).
Found while applying live changes with v0.2.1 (API v5):
Campaign update sends unwrapped payload.
WritableResource.updatePUTs fields at top level, but Apple's v5 campaign endpoint requires{"campaign": {...}}β every campaign update fails withUNRECOGNIZED_PROPERTY. CampaignResource should override update to wrap the payload.Single-keyword update 404s.
KeywordResource.updatePUTstargetingkeywords/{id}, which does not exist in v5 β only the bulk endpoint works. update() should delegate to update_bulk() (which works).Partial errors inside HTTP 200 are swallowed. Bulk keyword updates that fail per-item (e.g.
NOT_SAME_CURRENCY_AS_ORG_CURRENCYwhen bidding in a non-org currency) return 200 with anerror.errorsarray;_parse_list_responseignores it, so callers see success while nothing changed. Responses with an error block should raise (or surface the errors on the returned object).All three reproduced against the live API on 2026-08-06; workarounds exist in caller code (wrap campaign payload, use update_bulk, verify writes by re-fetching).