RECIPE: Manage Campaign Lifecycle

Download skillThe skill is a reference md and part of wix-manage skill. You can use the following command to add the full wix-manage skill to your project:
Copy

Operate on campaigns that already exist. Base URL: https://www.wixapis.com/google-ads/v1; <AUTH> = Authorization header, and body calls also need Content-Type: application/json.

Answer directly. When the user asks how to do something, give the endpoint, an example request, and the key behavior right away — use {campaignId} as a placeholder rather than asking which campaign. Only pause to confirm when you are about to execute a launch, resume, or delete on the user's behalf (those spend money or are irreversible); explaining how never requires confirmation.

Launch vs Resume — the key distinction. Launch activates a campaign for the first time (POST /v1/campaigns/{campaignId}/launch). Resume reactivates one that was live and then paused (POST /v1/campaigns/{campaignId}/resume). Both move it to LIVE and both count against the 5-live-campaigns-per-site cap.

Read

  • List: GET /v1/campaigns{ "campaigns": [ { "id", "campaignType", "status", "name", "budget": { "amountMicros" } } ] }
  • Get one: GET /v1/campaigns/{campaignId}status and budget are synced live from Google on each read.

status (read-only, can change on its own via policy/billing): DRAFT, LIVE, PAUSED, LEARNING (PMAX Leads, ~28d post-launch), IN_REVIEW, DISAPPROVED, NOT_SERVING (budget), ENDED, ERROR.

Launch / Pause / Resume

Copy
  • Pause stops delivery immediately without losing configuration. Optional body fields: scheduledResumeDate (ISO 8601 — the campaign auto-resumes at that time; pass null to cancel a scheduled resume), resumeReminderDate (dashboard reminder), turnAutoRenewOff. Send {} to pause with no auto-resume. To temporarily stop a campaign, pause it — never delete.
  • Resume accepts { "turnAutoRenewOn": true } to re-enable subscription auto-renewal. Fails with MAXIMUM_NUMBER_OF_CAMPAIGNS_REACHED if 5 are already live.

Update (partial) & change budget

PATCH /v1/campaigns/{id} — send only the fields you're changing, plus the required id and accountId. Budget is in micros (20000000 = $20.00/day).

Copy

Changing only the daily budget = the same call with just id, accountId, and budget.amountMicros. Over the account max → CAMPAIGN_DAILY_BUDGET_TOO_HIGH (check GET /v1/campaign/daily-budget-boundaries, returns min/max in micros).

Delete & history

  • Delete (irreversible): DELETE /v1/campaigns/{id}{}. Confirm first; prefer Pause if the user only wants to stop spending.
  • Change log: GET /v1/campaigns/{id}/change-log{ "entries": [ { "action": "CREATED|LAUNCHED|PAUSED|RESUMED|UPDATED|ENDED", "timestamp" } ] } — use this to explain "why/when did my campaign change." (GET /v1/campaigns/{id}/status-history is a legacy equivalent.)

Errors

CodeMeaning / fix
CAMPAIGN_NOT_FOUNDWrong or deleted id — re-list campaigns
ACCOUNT_NOT_FOUNDNo Google Ads account — run the install-and-create-account recipe
MAXIMUM_NUMBER_OF_CAMPAIGNS_REACHED5 live already — pause one, then Launch/Resume
CAMPAIGN_DAILY_BUDGET_TOO_HIGHBudget over account max — lower within daily-budget-boundaries
CUSTOM_CHARGES_SUBSCRIPTION_EXPIRED / …_AUTO_RENEWAL_OFFRenew / re-enable auto-renewal (Resume accepts turnAutoRenewOn)

Campaign Service docs

Last updated: 3 August 2026

Did this help?