---
title: "Unlink assets from a campaign or ad group"
method: POST
path: "/api/v1/tools/google_remove_asset_links/execute"
tags: ["Google Ads"]
---

# Unlink assets from a campaign or ad group

`POST /api/v1/tools/google_remove_asset_links/execute`

## Request

- Base URL: `https://adako.ai`
- URL: `https://adako.ai/api/v1/tools/google_remove_asset_links/execute`
- Auth: HTTP bearer

Removes the link between an asset and a campaign, ad group or the account, so the extension stops serving there. The asset itself stays in the account library and can be linked again later.
Use when: the user has confirmed which extensions should stop showing, by name.
Do not use when: the user said "pause" or "turn off for now" and you have not explained that Google has no pause for asset links — removing and re-linking is the only path, and the link's history is lost.
Requires confirm_delete: true. Pass the link resource names from google_list_assets (each asset's links[].link_resource_name), not asset ids: an asset id alone does not say which of its links you mean, and an asset with an empty links list is not linked anywhere, so there is nothing to remove.
Removing a link is immediate. Nothing else about the campaign changes.
If you are unsure which account, campaign or period the user means, ask them — do not guess ids or dates.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `arguments` object, required
    - `customer_id` string: Google Ads customer id (10 digits, dashes optional). Omit to use the primary account; list_connected_accounts shows the valid ids.
    - `link_resource_names` string[], required: Link resource names from google_list_assets, e.g. "customers/123/campaignAssets/456~SITELINK".
    - `confirm_delete` boolean: Must be true to remove anything. Ask the user first.
    - `idempotency_key` string: Optional caller-supplied key; identical keys never execute twice.

## Response `200`

The tool ran. A write returns proposal_id and approve_url while the change waits for approval.

- SuccessEnvelope
  - `success` unknown, required
  - `tool` string, required
  - `data` object, required: Machine-readable result.
  - `markdown` string, required: The same result written for a person or a model.
  - `quota` Quota: Task usage for the current billing period.
    - `plan` string
    - `used` integer
    - `limit` integer
    - `period_end` string
    - `upgrade_url` string
  - `proposal_id` string: Present for writes. Nothing changes on the ad platform until it is approved.
  - `approve_url` string: Where a person approves the proposal.
  - `request_id` string, required

## Other responses

- `400`: Invalid arguments, or the ad account could not be resolved.
- `401`: Missing, invalid, revoked or expired API key.
- `402`: Monthly task quota used up, or the plan does not include this tool.
- `403`: The connected ad account lacks the access level this tool needs.
- `404`: Unknown tool name.
- `409`: Not connected, reconnect needed, confirmation required, a proposal already pending or no longer pending, an identical create that failed earlier today (proposal_failed_before), a create that duplicates an approved one (duplicate_create), the ad-account limit of the plan reached (account_limit), or an Idempotency-Key reused with different arguments.
- `429`: Rate limited by Adako or by the ad platform. See Retry-After.
- `500`: Unexpected error inside Adako.
- `502`: The ad platform returned an error.

---

[API](https://skmtc.dev/adako/apis/adako-rest-api.md) · [All operations](https://skmtc.dev/adako/apis/adako-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/adako/apis/adako-rest-api/revisions/59ee60d48a56?raw)
