---
title: "Link or unlink asset group assets"
method: POST
path: "/v1/ads/campaigns/{campaignId}/asset-groups/{assetGroupId}/assets"
tags: ["Ad Campaigns"]
---

# Link or unlink asset group assets

`POST /v1/ads/campaigns/{campaignId}/asset-groups/{assetGroupId}/assets`

Link existing assets or new content to the asset group, and unlink assets, in one atomic request. Links are applied before unlinks, so swapping the last asset of a role does not trip Google's per-role minimum. Unlinking removes the link only; the asset stays in the account library. validateOnly: true validates without writing.

## Path parameters

- `campaignId` string, required
- `assetGroupId` string, required

## Request body

- object
  - `link` GoogleAssetGroupAssetLink[]
    - `fieldType` string, required — Google AssetFieldType, such as HEADLINE, LONG_HEADLINE, DESCRIPTION, BUSINESS_NAME, MARKETING_IMAGE, SQUARE_MARKETING_IMAGE, PORTRAIT_MARKETING_IMAGE, LOGO, LANDSCAPE_LOGO or YOUTUBE_VIDEO.
    - `asset` string — Existing asset id or resource name customers/{customerId}/assets/{assetId}. Must belong to the campaign's ad account.
    - `text` string — Text assets link as HEADLINE, LONG_HEADLINE, DESCRIPTION or BUSINESS_NAME.
    - `imageUrl` string, uri — Public http(s) image. Links as an image role or LOGO / LANDSCAPE_LOGO.
    - `youtubeVideoId` string — Links as YOUTUBE_VIDEO.
  - `unlink` GoogleAssetGroupAssetUnlink[]
    - `fieldType` string, required
    - `asset` string, required — Asset id or resource name, as returned in the asset group's assets.
  - `validateOnly` boolean

## Response `200`

Links applied (or validated).

- object
  - `assetGroupId` string
  - `linked` integer
  - `unlinked` integer
  - `validateOnly` boolean

## Other responses

- `400` — Invalid request
- `401` — Unauthorized
- `404` — Resource not found
- `422` — Google Ads connection needs reconnecting.
- `429` — Google quota or the Zernio Google operations burst limit is exhausted.
- `501` — Campaign is not on Google Ads.

## Changes

- **2026-09-28** `1c23a639830f` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/ads/campaigns/:campaignId/asset-groups/:assetGroupId/assets/post.md)

---

[API](https://skmtc.dev/zernio/apis/zernio-api.md) · [All operations](https://skmtc.dev/zernio/apis/zernio-api/llms.txt) · [OpenAPI document](https://skmtc.dev/zernio/apis/zernio-api/revisions/1c23a639830f?raw)
