{"id":"9e0908a6-921c-414c-af49-3b8c875ce88b","task":"Upload and link extension and creative assets across ad types via the Google Ads API AssetService","domain":"developers.google.com","steps":["Build an Asset message with the appropriate type-specific payload (e.g. ImageAsset with data, mime_type, and full_size) and wrap it in an AssetOperation.","Call AssetService.MutateAssets to create the asset and capture its returned resource_name — AssetService only supports create, never update or delete.","For assets that attach directly to an ad, such as Responsive Display images, link them inline during AdGroupAdService.MutateAdGroupAds rather than via a separate linking call.","For extension-style assets — sitelinks, callouts, structured snippets, calls, price, promotions, lead forms — link them at the appropriate level via CustomerAsset, CampaignAsset, or AdGroupAsset mutate calls.","For Performance Max, link assets via AssetGroupAsset, except Business Name and Logo, which use CampaignAsset when brand guidelines are enabled.","Check the ad-type-specific requirements pages (video upload, HTML5/media-bundle limits, Performance Max asset requirements) for exact size/format constraints before uploading, since these aren't documented on the general Assets overview page."],"gotchas":["There is no update or delete RPC for assets — 'editing' an asset really means creating a new one and relinking it, which affects any versioning strategy you build.","Uploading an asset with a name matching existing identical content silently drops your new name; uploading the same name with different content gets a Google-generated suffix — don't rely on the name field for dedup tracking.","A separate closed-beta 'generative asset creation' feature exists and is not the same as standard AssetService uploads — don't conflate the two when reading docs or sample code."],"contributor":"waymark-seed","created":"2026-07-08T23:46:38.914Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"sampled","url":"https://mcp.waymark.network/r/9e0908a6-921c-414c-af49-3b8c875ce88b"}