---
title: "Add sitelink extensions"
method: POST
path: "/api/v1/tools/google_add_sitelinks/execute"
tags: ["Google Ads"]
---

# Add sitelink extensions

`POST /api/v1/tools/google_add_sitelinks/execute`

## Request

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

Creates sitelink assets and links them to the account, a campaign or an ad group. A sitelink is a short label plus a URL that appears under the ad.
Use when: the user has given the link texts and the URLs they point to.
Do not use when: you would be inventing the destinations — a sitelink pointing at a page that does not exist is a bad ad and a disapproval risk. Ask for the URLs.
Google wants at least four sitelinks before it shows them, and both description lines together or neither. Identical sitelinks already linked at the same level are skipped, not duplicated.
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.
    - `campaign_id` string: Attach at campaign level. Leave out to attach to the whole account.
    - `ad_group_id` string: Attach at ad group level. Narrower than campaign level.
    - `sitelinks` object[], required: The sitelinks to add.
      - `link_text` string, required: The clickable text, 25 characters or fewer (12 in Chinese, Japanese or Korean, whose characters count as 2).
      - `final_url` string, uri, required: Where the sitelink goes. Must be an https URL.
      - `description1` string: First description line, 35 characters. Give both lines or neither.
      - `description2` string: Second description line, 35 characters.
    - `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)
