---
title: "Edit a TikTok ad group"
method: POST
path: "/api/v1/tools/tiktok_update_ad_group/execute"
tags: ["TikTok Ads"]
---

# Edit a TikTok ad group

`POST /api/v1/tools/tiktok_update_ad_group/execute`

## Request

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

Changes a TikTok ad group's name, daily budget, bid, schedule or targeting (locations, ages, gender, languages, interests).
Use when: the user wants to scale, narrow or reschedule an existing ad group. Resolve every location, language and interest with tiktok_search_targeting first — this tool takes ids and refuses names.
Do not treat targeting fields as additive. TikTok replaces them wholesale: passing one location id to an ad group targeting five leaves it targeting one. The preview always shows the full before and after for exactly that reason — read it to the user before they approve.
Do not change budget or bid by more than about 30% at a time: TikTok restarts the learning phase after a large move and performance dips for days. The tool warns when a change crosses that line. TikTok also refuses a budget below 105% of what the ad group has spent today, and a bid that is not below both the ad group and campaign budgets; both are checked first.
Do not set a manual bid on an ad group that is bidding automatically unless the user asked for a cap and understands the risk — a cap below the market price stops delivery silently, with no error anywhere.
Dates are the advertiser's days. Moving the start of an ad group that has already started is refused (TikTok does not allow it); changing only the end date keeps the start, and changing only the start keeps an existing end date.
Returns the ad group read back from TikTok after the change. At least one field must be given.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `arguments` object, required
    - `advertiser_id` string: TikTok advertiser id (a long numeric string). Only needed when the user has authorised more than one advertiser. Omit it to use the primary one.
    - `adgroup_id` string, required: The ad group to edit.
    - `name` string: New ad group name. No emoji.
    - `daily_budget` number: The new budget, decimal in the account currency. It is read in whatever mode the ad group already uses: a daily amount on a daily budget, the whole flight on a lifetime one. The Update endpoint takes no budget_mode, so the mode itself cannot be changed here. Must be at least 105% of what the ad group has already spent.
    - `bid` number: Manual bid (cost cap), decimal in the account currency. The unit follows the optimisation goal: per click for CLICK and PAGE_VISIT, per 1,000 impressions for REACH, per focused view for ENGAGED_VIEW and ENGAGED_VIEW_FIFTEEN, and a target cost per result for FOLLOWERS, CONVERT and VALUE. It must be lower than both the ad group and the campaign budget. Omit to let TikTok bid automatically, which is the right default for a new ad group. Setting one switches the ad group off automatic bidding.
    - `start_date` string: New first day, in the advertiser's timezone. Refused once the ad group has started; a past day is refused.
    - `end_date` string: New last day, inclusive, in the advertiser's timezone (delivery stops at 23:59:59 that day).
    - `location_ids` string[]: Replaces the ad group's locations entirely. Ids from tiktok_search_targeting; checked against TikTok's list, including overlaps.
    - `age_groups` string[]: Replaces the ad group's age bands entirely. In the US, Canada, Latin America, the EEA, the UK and Switzerland, an ad group narrowed by gender or interests must name adult bands only.
    - `gender` 'GENDER_UNLIMITED' | 'GENDER_MALE' | 'GENDER_FEMALE': Gender to target. Leave unset unless the product genuinely requires it.
    - `languages` string[]: Replaces the ad group's languages entirely. Codes exactly as tiktok_search_targeting returns them.
    - `interest_category_ids` string[]: Replaces the ad group's interests entirely. Ids from tiktok_search_targeting.
    - `interest_keyword_ids` string[]: Replaces the ad group's additional interests entirely. Ids from tiktok_search_targeting (type: interest_keyword).
    - `idempotency_key` string: Optional caller-supplied key; identical keys never execute twice.
    - `raw_data` boolean: Return compact JSON only (no markdown). Use when you will compute on the result.

## 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)
