---
title: "Get a Performance Max asset group"
method: GET
path: "/v1/ads/campaigns/{campaignId}/asset-groups/{assetGroupId}"
tags: ["Ad Campaigns"]
---

# Get a Performance Max asset group

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

One asset group with its linked assets, ad strength, primary status and listing-group tree. Uses a 10-minute cache, served stale when Google quota is exhausted; any write below clears it.

## Path parameters

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

## Response `200`

The asset group.

- object
  - `assetGroup` GooglePmaxAssetGroupDetail, required
    - `id` string, required — Stable Google asset group id. Use it in the asset-group endpoints below.
    - `resourceName` string, required — customers/{customerId}/assetGroups/{assetGroupId}
    - `campaignId` string, required
    - `name` string, required
    - `status` string, required — Asset-group status on Google. Campaign status independently controls delivery.
    - `finalUrls` string[], required
    - `finalMobileUrls` string[], required
    - `path1` string, nullable, required
    - `path2` string, nullable, required
    - `adStrength` string, nullable, required — Google ad strength, such as POOR, AVERAGE, GOOD or EXCELLENT.
    - `primaryStatus` string, nullable, required — Why the group is or is not serving, such as ELIGIBLE, PAUSED or NOT_ELIGIBLE.
    - `primaryStatusReasons` string[], required
    - `assets` object[], required
      - `resourceName` string, required
      - `fieldType` string, required — Google asset role, such as HEADLINE or LOGO.
      - `status` string, required
      - `text` string
      - `imageUrl` string, uri
      - `youtubeVideoId` string
    - `listingGroupFilters` GoogleListingGroupFilterNode[], required — The asset group's listing-group tree as flat nodes (retail campaigns). Empty when the group has none.
      - `id` string, required
      - `resourceName` string, required — customers/{customerId}/assetGroupListingGroupFilters/{assetGroupId}~{filterId}
      - `parentResourceName` string, nullable, required — Null for the root node.
      - `type` 'SUBDIVISION' | 'UNIT_INCLUDED' | 'UNIT_EXCLUDED', required
      - `listingSource` string, required
      - `dimension` object, nullable, required — Google's case value for the node, such as { productBrand: { value: 'Acme' } }. A dimension with no value is the everything-else node. Null for the root.
  - `cachedAt` string, date-time, nullable, required
  - `stale` boolean, required

## 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/get.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)
