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.
GET /v1/campaigns → { "campaigns": [ { "id", "campaignType", "status", "name", "budget": { "amountMicros" } } ] }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.
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.{ "turnAutoRenewOn": true } to re-enable subscription auto-renewal. Fails with MAXIMUM_NUMBER_OF_CAMPAIGNS_REACHED if 5 are already live.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).
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 /v1/campaigns/{id} → {}. Confirm first; prefer Pause if the user only wants to stop spending.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.)| Code | Meaning / fix |
|---|---|
CAMPAIGN_NOT_FOUND | Wrong or deleted id — re-list campaigns |
ACCOUNT_NOT_FOUND | No Google Ads account — run the install-and-create-account recipe |
MAXIMUM_NUMBER_OF_CAMPAIGNS_REACHED | 5 live already — pause one, then Launch/Resume |
CAMPAIGN_DAILY_BUDGET_TOO_HIGH | Budget over account max — lower within daily-budget-boundaries |
CUSTOM_CHARGES_SUBSCRIPTION_EXPIRED / …_AUTO_RENEWAL_OFF | Renew / re-enable auto-renewal (Resume accepts turnAutoRenewOn) |
Last updated: 3 August 2026