---
title: "Edit a TikTok campaign"
method: POST
path: "/api/v1/tools/tiktok_update_campaign/execute"
tags: ["TikTok Ads"]
---

# Edit a TikTok campaign

`POST /api/v1/tools/tiktok_update_campaign/execute`

## Request

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

Changes a TikTok campaign's name or budget. The budget is a decimal in the account currency.
Use when: renaming for clarity, or the user has decided to scale a campaign and named the amount.
Do not use it to pause or resume — tiktok_pause_campaign and tiktok_resume_campaign exist so the risk of that change is stated correctly before the user approves it.
Do not use it for dates: a TikTok campaign has no schedule of its own, so start_date and end_date are refused here — set them on each ad group with tiktok_update_ad_group.
Do not change a budget by more than about 30% at a time. TikTok treats a large jump as a new learning phase and the CPA gets worse for a few days before it settles; the tool warns when a change crosses that line, and the warning is worth repeating to the user.
Do not set a budget here when the campaign uses BUDGET_MODE_INFINITE: the ad groups hold the budget and this tool will refuse, because capping the campaign would throttle every ad group at once. TikTok also refuses a new budget below 105% of what the campaign has already spent today (lifetime, for a lifetime budget); the tool checks that first.
Returns the campaign read back from TikTok after the change, so the new values are confirmed rather than assumed. At least one of name or daily_budget must be given.
If the user says "increase the budget" without a number, ask how much. Never pick an amount for them.

## 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.
    - `campaign_id` string, required: The campaign to edit.
    - `name` string: New campaign name. No emoji.
    - `daily_budget` number: The new budget, decimal in the account currency (150 means one hundred and fifty, not 15000). It is read in whatever mode the campaign already uses: a daily amount on a daily budget, the whole flight on a lifetime one (tiktok_list_campaigns shows which). TikTok has no way to switch a campaign between the two — that is set when it is created. Must be at least 105% of what the campaign has already spent.
    - `start_date` string: Not supported: TikTok campaigns have no schedule, so this is refused. Use tiktok_update_ad_group.
    - `end_date` string: Not supported: TikTok campaigns have no schedule, so this is refused. Use tiktok_update_ad_group.
    - `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)
