@wix/agent-skills 1.19.1 → 1.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/package.json +1 -1
  2. package/skills/wix-app/references/EDITOR_REACT_COMPONENT.md +1 -1
  3. package/skills/wix-app/references/SERVICE_PLUGIN.md +14 -1
  4. package/skills/wix-app/references/editor-react-component/ACCESSIBILITY.md +7 -2
  5. package/skills/wix-app/references/editor-react-component/ANIMATED-COMPONENTS.md +53 -28
  6. package/skills/wix-app/references/editor-react-component/COMPONENT-CONTRACT.md +17 -4
  7. package/skills/wix-app/references/editor-react-component/FUNCTION-HANDLERS.md +71 -31
  8. package/skills/wix-app/references/editor-react-component/REACT-GUIDELINES.md +3 -4
  9. package/skills/wix-app/references/service-plugin/ADDITIONAL-FEES.md +4 -0
  10. package/skills/wix-app/references/service-plugin/AVAILABILITY-TIME-SLOTS-CONFIGURATION.md +118 -0
  11. package/skills/wix-app/references/service-plugin/BOOKING-POLICY.md +65 -0
  12. package/skills/wix-app/references/service-plugin/BOOKINGS-PRICING.md +71 -0
  13. package/skills/wix-app/references/service-plugin/BOOKINGS-STAFF-SORTING.md +11 -3
  14. package/skills/wix-app/references/service-plugin/BOOKINGS-VALIDATION.md +137 -0
  15. package/skills/wix-app/references/service-plugin/DISCOUNT-TRIGGERS.md +23 -16
  16. package/skills/wix-app/references/service-plugin/GIFT-CARDS.md +4 -0
  17. package/skills/wix-app/references/service-plugin/PAYMENT-SETTINGS.md +4 -2
  18. package/skills/wix-app/references/service-plugin/REALTIME-PERMISSIONS.md +45 -0
  19. package/skills/wix-app/references/service-plugin/SHIPPING-RATES.md +15 -0
  20. package/skills/wix-app/references/service-plugin/TOOLS_PROVIDER.md +4 -0
  21. package/skills/wix-app/references/service-plugin/VALIDATIONS.md +4 -0
  22. package/skills/wix-base44-connector/SKILL.md +46 -24
  23. package/skills/wix-headless/SKILL.md +1 -0
  24. package/skills/wix-headless/references/CAPABILITIES.md +7 -2
  25. package/skills/wix-headless/references/SDK_HANDOFF.md +2 -1
  26. package/skills/wix-headless/references/inline-recipes/experience-store.md +49 -0
  27. package/skills/wix-headless/references/inline-recipes/how-to-code-a-store.md +431 -115
  28. package/skills/wix-headless/references/inline-recipes/how-to-code-members-astro.md +1 -1
  29. package/skills/wix-headless/references/managed/CREATE.md +5 -0
  30. package/skills/wix-headless/references/managed/DEPLOYMENT.md +8 -8
  31. package/skills/wix-headless-fast/install/fast-path.mjs +3 -1
  32. package/skills/wix-headless-fast/references/shared/app/wix/media.ts +13 -0
  33. package/skills/wix-headless-fast/references/storefront/INSTRUCTIONS.md +227 -56
  34. package/skills/wix-headless-fast/references/storefront/app/components/storefront/CartDrawer.tsx +37 -3
  35. package/skills/wix-headless-fast/references/storefront/app/components/storefront/FilterPanel.tsx +266 -0
  36. package/skills/wix-headless-fast/references/storefront/app/components/storefront/QuickAdd.tsx +165 -0
  37. package/skills/wix-headless-fast/references/storefront/app/hooks/storefront/useProductDetail.ts +48 -15
  38. package/skills/wix-headless-fast/references/storefront/app/hooks/storefront/useShop.ts +129 -11
  39. package/skills/wix-headless-fast/references/storefront/app/wix/storefront/cart.ts +36 -6
  40. package/skills/wix-headless-fast/references/storefront/app/wix/storefront/catalog.ts +190 -24
  41. package/skills/wix-headless-fast/references/storefront/app/wix/storefront/types.ts +62 -4
  42. package/skills/wix-headless-fast/references/storefront/app-astro/layouts/SiteLayout.astro +21 -2
  43. package/skills/wix-headless-fast/references/storefront/seed/SEED.md +5 -1
  44. package/skills/wix-headless-fast/references/storefront/seed/seed-store.mjs +59 -6
  45. package/skills/wix-manage/SKILL.md +8 -5
  46. package/skills/wix-manage/references/bookings/create-and-update-booking-services.md +4 -1
  47. package/skills/wix-manage/references/bookings/create-appointment-service.md +3 -1
  48. package/skills/wix-manage/references/bookings/create-class-service.md +3 -1
  49. package/skills/wix-manage/references/bookings/create-course-service.md +4 -2
  50. package/skills/wix-manage/references/bookings/end-to-end-booking-flow.md +68 -3
  51. package/skills/wix-manage/references/ecommerce/pricing-promotions/ecom-pricing-flow-seasonal-promotion.md +1 -1
  52. package/skills/wix-manage/references/events/create-wix-event.md +46 -0
  53. package/skills/wix-manage/references/events/manage-wix-events.md +51 -1
  54. package/skills/wix-manage/references/google-ads/manage-campaign-lifecycle.md +6 -6
  55. package/skills/wix-manage/references/google-ads/manage-campaign-success-guide.md +108 -14
  56. package/skills/wix-manage/references/seo/manage-content-plan.md +1 -1
  57. package/skills/wix-manage/references/seo/manage-seo-suggestions.md +351 -0
  58. package/skills/wix-manage/references/sites/upload-static-site.md +264 -34
  59. package/skills/wix-vibe-headless/install/deploy.cjs +33 -2
  60. package/skills/wix-vibe-headless/platforms/base44-ecom-light-seed-with-install.md +1 -1
  61. package/skills/wix-vibe-headless/platforms/base44-ecom-light-seed.md +13 -4
  62. package/skills/wix-vibe-headless/platforms/base44-ecom-light.md +1 -1
  63. package/skills/wix-vibe-headless/platforms/base44.md +19 -4
  64. package/skills/wix-vibe-headless/platforms/generic.md +6 -0
  65. package/skills/wix-vibe-headless/references/_shared/nav/nav.tanstack.js +30 -0
  66. package/skills/wix-vibe-headless/references/_shared/routing.md +86 -0
  67. package/skills/wix-vibe-headless/references/blog/INSTRUCTIONS.md +44 -0
  68. package/skills/wix-vibe-headless/references/blog/app/components/PostCard.jsx +1 -1
  69. package/skills/wix-vibe-headless/references/blog/app/components/PostChips.jsx +1 -1
  70. package/skills/wix-vibe-headless/references/blog/app/pages/CategoryPage.jsx +1 -1
  71. package/skills/wix-vibe-headless/references/blog/app/pages/PostDetail.jsx +1 -1
  72. package/skills/wix-vibe-headless/references/blog/app/pages/TagPage.jsx +1 -1
  73. package/skills/wix-vibe-headless/references/bookings/INSTRUCTIONS.md +42 -0
  74. package/skills/wix-vibe-headless/references/bookings/app/components/ServiceCard.jsx +1 -1
  75. package/skills/wix-vibe-headless/references/bookings/app/pages/ServiceDetail.jsx +1 -1
  76. package/skills/wix-vibe-headless/references/events/INSTRUCTIONS.md +42 -0
  77. package/skills/wix-vibe-headless/references/events/app/components/EventCard.jsx +1 -1
  78. package/skills/wix-vibe-headless/references/events/app/pages/EventDetail.jsx +1 -1
  79. package/skills/wix-vibe-headless/references/members/INSTRUCTIONS.md +42 -0
  80. package/skills/wix-vibe-headless/references/members/app/components/MemberMenu.jsx +1 -1
  81. package/skills/wix-vibe-headless/references/members/app/components/RequireAuth.jsx +1 -1
  82. package/skills/wix-vibe-headless/references/members/app/pages/Login.jsx +1 -1
  83. package/skills/wix-vibe-headless/references/portfolio/INSTRUCTIONS.md +43 -0
  84. package/skills/wix-vibe-headless/references/portfolio/app/components/CollectionCard.jsx +1 -1
  85. package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectCard.jsx +1 -1
  86. package/skills/wix-vibe-headless/references/portfolio/app/pages/CollectionPage.jsx +1 -1
  87. package/skills/wix-vibe-headless/references/portfolio/app/pages/ProjectDetail.jsx +1 -1
  88. package/skills/wix-vibe-headless/references/pricing-plans/INSTRUCTIONS.md +43 -0
  89. package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanCard.jsx +1 -1
  90. package/skills/wix-vibe-headless/references/pricing-plans/app/pages/PlanDetail.jsx +1 -1
  91. package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +36 -0
  92. package/skills/wix-vibe-headless/references/shared/app/lib/nav.js +9 -0
  93. package/skills/wix-vibe-headless/references/storefront/INSTRUCTIONS.md +110 -27
  94. package/skills/wix-vibe-headless/references/storefront/app/components/CartDrawer.jsx +32 -14
  95. package/skills/wix-vibe-headless/references/storefront/app/context/CartContext.jsx +14 -3
  96. package/skills/wix-vibe-headless/references/storefront/app/hooks/useProductCard.js +47 -35
  97. package/skills/wix-vibe-headless/references/storefront/app/hooks/useProductDetail.js +77 -30
  98. package/skills/wix-vibe-headless/references/storefront/app/rest/wix-store-cart.js +31 -2
  99. package/skills/wix-vibe-headless/references/storefront/app/rest/wix-store-catalog.js +31 -6
@@ -56,6 +56,32 @@ curl -X POST 'https://www.wixapis.com/events/v3/events' \
56
56
  `title`, `location`, `dateAndTimeSettings` and `registration.initialType` are required. The event
57
57
  is created published (`status: "UPCOMING"`).
58
58
 
59
+ **What comes back** — the created event under `event`; the id you need for every follow-up call is
60
+ `event.id`:
61
+
62
+ ```json
63
+ {
64
+ "event": {
65
+ "id": "<EVENT_ID>",
66
+ "title": "Summer Gala",
67
+ "slug": "summer-gala",
68
+ "status": "UPCOMING",
69
+ "location": { "name": "Grand Hall", "type": "VENUE", "locationTbd": false },
70
+ "dateAndTimeSettings": {
71
+ "startDate": "2026-09-15T19:00:00Z", "endDate": "2026-09-15T22:00:00Z",
72
+ "timeZoneId": "America/New_York", "recurrenceStatus": "ONE_TIME"
73
+ },
74
+ "createdDate": "...", "updatedDate": "..."
75
+ }
76
+ }
77
+ ```
78
+
79
+ Update, cancel, publish and clone return the same `{ "event": { ... } }`; delete returns
80
+ `{ "eventId": "..." }`. Some fields are returned only when the request's `fields` array asks for
81
+ them: `"DETAILS"` adds `shortDescription`, `"TEXTS"` adds `description`, `"REGISTRATION"` adds
82
+ `registration` (including `rsvp.limit`), `"URLS"` adds `eventPageUrl`. Without `fields`, read the
83
+ result from the top-level fields above and do not treat a missing `registration` as an error.
84
+
59
85
  > **Do not add `"draft": true` unless the user asked for a draft.** Draft events require the
60
86
  > `WIX_EVENTS.READ_DRAFT_EVENTS` permission, and without it every follow-up call fails `403` —
61
87
  > adding ticket definitions, querying the event, fetching it by slug, even publishing it. The
@@ -154,6 +180,26 @@ curl -X POST 'https://www.wixapis.com/events/v3/ticket-definitions' \
154
180
  | Free | `{ "fixedPrice": { "value": "0", "currency": "USD" } }` |
155
181
  | Donation, with a minimum | `{ "guestPrice": { "value": "5.00", "currency": "USD" } }` |
156
182
 
183
+ The response is the definition under `ticketDefinition`:
184
+
185
+ ```json
186
+ {
187
+ "ticketDefinition": {
188
+ "id": "<TICKET_DEFINITION_ID>",
189
+ "eventId": "<EVENT_ID>",
190
+ "revision": "1",
191
+ "name": "General Admission",
192
+ "limited": true, "initialLimit": 100, "actualLimit": 100,
193
+ "pricingMethod": { "fixedPrice": { "value": "25.00", "currency": "USD" } },
194
+ "feeType": "FEE_ADDED_AT_CHECKOUT",
195
+ "saleStatus": "SALE_STARTED"
196
+ }
197
+ }
198
+ ```
199
+
200
+ Keep `revision` — `PATCH /events/v3/ticket-definitions/{id}` requires the current value, and it
201
+ increments on every update.
202
+
157
203
  - **`feeType` is required** — `FEE_ADDED_AT_CHECKOUT` or `FEE_INCLUDED`.
158
204
  - **`value` is a string.** `"value": 10` fails `400 Unexpected value for field value`.
159
205
  - **No writable `free` flag** — `pricingMethod.free` is read-only; a free ticket is a `fixedPrice`
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: "Manage Wix Events — Publishing, Cancelling, Cloning and Counting"
3
- description: "Operates on events that already exist with the Wix Events V3 API — publishing a draft, cancelling, deleting, cloning, updating an event's date or details, and counting events. Use when the user wants to publish or cancel an event, duplicate one, move an event's date, or count their events. Creating an event, its tickets or a recurring series is a separate recipe."
3
+ description: "Operates on events that already exist with the Wix Events V3 API — finding an event by title, publishing a draft, cancelling, deleting (one or by filter), cloning, updating an event's date or details, and counting events. Use when the user wants to find, publish or cancel an event, duplicate one, move an event's date, delete events in bulk, or count their events. Creating an event, its tickets or a recurring series is a separate recipe."
4
4
  ---
5
5
 
6
6
  # Manage Wix Events — Publishing, Cancelling, Cloning and Counting
@@ -28,6 +28,36 @@ curl -X POST 'https://www.wixapis.com/apps-installer-service/v1/app-instance/ins
28
28
  `appDefId` nests under `appInstance`, not at the root — at the root it fails with
29
29
  `400 appInstance must not be empty`. See [Install Wix Apps](../app-installation/install-wix-apps.md).
30
30
 
31
+ ## Find an event
32
+
33
+ Every action below takes an `eventId`. When the user names the event instead, look it up with
34
+ `POST /events/v3/events/query` — `title` supports `$eq` and, for several names at once, `$in`; there is
35
+ no contains match:
36
+
37
+ ```bash
38
+ curl -X POST 'https://www.wixapis.com/events/v3/events/query' \
39
+ -H 'Content-Type: application/json' \
40
+ -H 'Authorization: <AUTH>' \
41
+ --data-binary '{
42
+ "query": {
43
+ "filter": { "title": { "$eq": "Open House" } },
44
+ "paging": { "limit": 100 }
45
+ },
46
+ "fields": ["DETAILS"],
47
+ "includeDrafts": false
48
+ }'
49
+ ```
50
+
51
+ `filter` and `paging` are siblings under `query`; `paging` nested inside `filter` fails `400`. Matches
52
+ come back in `events[]` with the id at `events[].id`, and `pagingMetadata.total` is the count.
53
+
54
+ > **Keep `includeDrafts: false` unless the user is asking about draft events.** Setting it to `true`
55
+ > needs `WIX_EVENTS.READ_DRAFT_EVENTS`, and a caller without it gets
56
+ > `403 Requires WIX_EVENTS.READ_DRAFT_EVENTS permission` rather than more results — so do not flip
57
+ > it as a precaution on an ordinary lookup, and do not probe for it and fall back. If the user does
58
+ > want drafts and the call returns that `403`, say draft events are not readable from this
59
+ > connection instead of answering from published events alone.
60
+
31
61
  ## Publish, cancel and delete
32
62
 
33
63
  | Action | Call | Resulting `status` |
@@ -35,10 +65,27 @@ curl -X POST 'https://www.wixapis.com/apps-installer-service/v1/app-instance/ins
35
65
  | Publish a draft | `POST /events/v3/events/{eventId}/publish` | `UPCOMING` |
36
66
  | Cancel | `POST /events/v3/events/{eventId}/cancel` | `CANCELED` |
37
67
  | Delete | `DELETE /events/v3/events/{eventId}` | — |
68
+ | Delete several | `POST /events/v3/bulk/events/delete-by-filter` | — |
38
69
 
39
70
  Publish and cancel take an empty body. Publishing is irreversible — a published event cannot
40
71
  return to `DRAFT`. Cancelling closes registration but keeps the event; deleting removes it.
41
72
 
73
+ Publish, cancel, clone and update all return `{ "event": { "id", "title", "slug", "status", ... } }`
74
+ — the same event object [Create an Event](create-wix-event.md#create-the-event) shows in full.
75
+ Delete returns `{ "eventId": "..." }` and the bulk delete below returns `{}`.
76
+
77
+ To delete a set of events in one call, `POST /events/v3/bulk/events/delete-by-filter`:
78
+
79
+ ```json
80
+ { "filter": { "filter": { "id": { "$in": ["<EVENT_ID>", "<EVENT_ID>"] } } } }
81
+ ```
82
+
83
+ The request's one field, `filter`, takes a whole query-shaped object — the same object Query Events
84
+ takes under `query`, with the conditions under its own `filter` key — not a bare condition map. That
85
+ is why the key appears twice: `filter.filter.<field>`. A single level,
86
+ `{ "filter": { "id": { "$in": [...] } } }`, is not the documented shape. Resolve the ids with the
87
+ query above first; one `DELETE` per event also works but costs a call each.
88
+
42
89
  > **Draft events need the `WIX_EVENTS.READ_DRAFT_EVENTS` permission.** Without it, publishing a
43
90
  > draft fails `403` — as does querying it, fetching it by slug, or adding ticket definitions to
44
91
  > it. If you hit that `403`, the event was still created; the way forward is to create events
@@ -104,6 +151,9 @@ even when the site has events, so it is not the way to answer "how many events d
104
151
  - **An invalid enum value reports as a missing one** — a value outside an enum returns
105
152
  `<field> value is required` rather than "invalid value". If a field you *did* send is reported
106
153
  as required, suspect the value, not its presence.
154
+ - **`includeDrafts` stays `false` unless the request is about drafts** — see
155
+ [Find an event](#find-an-event). The `WIX_EVENTS.READ_DRAFT_EVENTS` note on the Query Events
156
+ reference describes the permission; it does not mean the caller has it.
107
157
  - Dates are always ISO-8601 strings, never `{seconds, nanos}`, and `timeZoneId` is required
108
158
  whenever `dateAndTimeSettings` is sent — see [Create an Event](create-wix-event.md).
109
159
 
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  name: "Manage Campaign Lifecycle"
3
- description: "Manages existing Google Ads campaigns on a Wix site: list/get, launch (first activation) vs resume (reactivate after a pause), pause a running campaign — optionally with a scheduled auto-resume date — update name/budget/targeting, change the daily budget, delete permanently, and read status history / change log. Use when the user wants to 'pause my Google ad', 'resume my campaign', 'stop the campaign', 'change my daily budget', 'rename the campaign', 'delete this campaign', 'list my Google Ads campaigns', or 'why did my campaign status change'. Requires an existing Google Ads account and campaign. REST base https://www.wixapis.com/google-ads/v1."
3
+ description: "Manages existing Google Ads campaigns on a Wix site: list/get, launch (first activation) vs resume (reactivate after a pause), pause a running campaign — optionally with a scheduled auto-resume date — update name/budget/targeting, change the daily budget, delete permanently, and read status history / change log. Use when the user wants to 'pause my Google ad', 'resume my campaign', 'stop the campaign', 'change my daily budget', 'rename the campaign', 'delete this campaign', 'list my Google Ads campaigns', or 'why did my campaign status change'. Requires an existing Google Ads account and campaign. REST base https://www.wixapis.com/_serverless/pa-google/v1."
4
4
  ---
5
5
  # RECIPE: Manage Campaign Lifecycle
6
6
 
7
- 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`.
7
+ Operate on campaigns that already exist. Base URL: `https://www.wixapis.com/_serverless/pa-google/v1`; `<AUTH>` = `Authorization` header, and body calls also need `Content-Type: application/json`.
8
8
 
9
9
  **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.
10
10
 
@@ -21,14 +21,14 @@ Operate on campaigns that already exist. Base URL: `https://www.wixapis.com/goog
21
21
 
22
22
  ```bash
23
23
  # Launch (first activation) → status LIVE
24
- curl -X POST 'https://www.wixapis.com/google-ads/v1/campaigns/{campaignId}/launch' -H 'Authorization: <AUTH>' -H 'Content-Type: application/json' -d '{}'
24
+ curl -X POST 'https://www.wixapis.com/_serverless/pa-google/v1/campaigns/{campaignId}/launch' -H 'Authorization: <AUTH>' -H 'Content-Type: application/json' -d '{}'
25
25
 
26
26
  # Pause a running campaign (settings + data preserved) → status PAUSED
27
- curl -X POST 'https://www.wixapis.com/google-ads/v1/campaigns/{campaignId}/pause' -H 'Authorization: <AUTH>' -H 'Content-Type: application/json' \
27
+ curl -X POST 'https://www.wixapis.com/_serverless/pa-google/v1/campaigns/{campaignId}/pause' -H 'Authorization: <AUTH>' -H 'Content-Type: application/json' \
28
28
  -d '{ "scheduledResumeDate": "2024-04-15T08:00:00.000Z" }'
29
29
 
30
30
  # Resume a paused campaign → status LIVE
31
- curl -X POST 'https://www.wixapis.com/google-ads/v1/campaigns/{campaignId}/resume' -H 'Authorization: <AUTH>' -H 'Content-Type: application/json' -d '{}'
31
+ curl -X POST 'https://www.wixapis.com/_serverless/pa-google/v1/campaigns/{campaignId}/resume' -H 'Authorization: <AUTH>' -H 'Content-Type: application/json' -d '{}'
32
32
  ```
33
33
 
34
34
  - **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**.
@@ -39,7 +39,7 @@ curl -X POST 'https://www.wixapis.com/google-ads/v1/campaigns/{campaignId}/resum
39
39
  `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).
40
40
 
41
41
  ```bash
42
- curl -X PATCH 'https://www.wixapis.com/google-ads/v1/campaigns/{campaignId}' -H 'Authorization: <AUTH>' -H 'Content-Type: application/json' \
42
+ curl -X PATCH 'https://www.wixapis.com/_serverless/pa-google/v1/campaigns/{campaignId}' -H 'Authorization: <AUTH>' -H 'Content-Type: application/json' \
43
43
  -d '{ "campaign": { "id": "...", "accountId": "...", "name": "New name", "budget": { "amountMicros": "20000000" } } }'
44
44
  ```
45
45
 
@@ -1,39 +1,45 @@
1
1
  ---
2
2
  name: "Manage a Campaign Success Guide"
3
- description: "Retrieves and manages the campaign success guide for an existing Wix Google Ads Performance Max Leads campaign. Offer it after creating a supported campaign, even while it is learning or has no metrics; that proactive offer requires approval before retrieval. A direct request to improve a campaign, see what to fix next, or show the guide is already approval to retrieve it. Also use when a user reports completing or wants to reopen a guide item. Treat a clear completion report as an actionable update request even when phrased as a statement. Covers campaign selection, prioritized guide retrieval, and suggestion status updates without redundant confirmation. REST base https://www.wixapis.com/pa-platform/suggestions/v1."
3
+ description: "Campaign Success Guide for existing Wix Google Ads Performance Max Leads campaigns. Use after creating a supported campaign, even while it is learning or has no metrics, and whenever users ask how to improve a campaign, what to fix next, to view the guide, or to mark or reopen a recommendation. Covers campaign and site selection; prioritized actionable recommendations; deduplicated, destination-specific Editor and Google Ads navigation; offers to perform supported work after approval; Merchant Center and Business Profile connection follow-ups; and suggestion-status tracking."
4
4
  ---
5
5
  # RECIPE: Manage a Campaign Success Guide
6
6
 
7
- A campaign success guide is a prioritized list of improvements for an **existing** Google Ads `PERFORMANCE_MAX_LEADS` campaign. Offer it as a useful next step after [creating a Performance Max campaign](create-performance-max-campaign.md). Once Create Campaign returns the campaign ID, ask whether the user wants to retrieve the guide; call the API only after they approve. There is no need to wait for the campaign to leave `LEARNING` or generate performance metrics because the guide analyzes the landing page, campaign configuration, and relevant site connections rather than depending on campaign performance data.
8
-
9
- Also use this recipe for requests such as "How can I improve my campaign?", "What should I fix next?", "Show my campaign success guide", "I made the call-to-action button clearer as the success guide recommended", "Mark this recommendation complete", or "Reopen that guide item."
7
+ A campaign success guide is a prioritized list of improvements for an **existing** Google Ads `PERFORMANCE_MAX_LEADS` campaign. Offer it as a useful next step after [creating a Performance Max campaign](create-performance-max-campaign.md). Once Create Campaign returns the campaign ID, ask whether the user wants to retrieve the guide; call the API only after they approve. The guide does not use campaign performance metrics. It evaluates landing-page content, campaign configuration, and Wix site connections, so `LEARNING` status and an empty analytics history do not block it.
10
8
 
11
9
  A direct request to improve a campaign, see what to fix next, or show its success guide is itself approval to retrieve the guide once the campaign is identified. Do not ask whether the user wants the guide after they have already made one of those requests. Separate approval is needed only when you proactively offer the guide after campaign creation.
12
10
 
13
- This differs from [Get AI Campaign Suggestions](get-campaign-suggestions.md), which generates keywords, budgets, locations, copy, images, and other inputs used while **building** a campaign. Do not route pre-campaign keyword, budget, creative, or targeting generation here.
11
+ Treat a broad request such as "How can I improve my Google Ads campaign?" as a Campaign Success Guide request for an existing campaign. Route here before offering generic optimization advice, querying analytics, or generating the pre-campaign inputs covered by Get AI Campaign Suggestions. If the conversation does not identify a Wix site or campaign, explain that you will use the guide and ask one focused question that resolves the missing identity; do not probe site-scoped APIs first.
14
12
 
15
- Base URL: `https://www.wixapis.com/pa-platform/suggestions/v1`. `<AUTH>` is the `Authorization` header; body calls also need `Content-Type: application/json`.
13
+ This differs from [Get AI Campaign Suggestions](get-campaign-suggestions.md), which generates keywords, budgets, locations, copy, images, and other inputs used while **building** a campaign. Do not route pre-campaign keyword, budget, creative, or targeting generation here.
16
14
 
17
15
  ## Resolve the campaign
18
16
 
19
- The guide endpoints require a campaign UUID, but users often provide only a campaign name or say "my campaign."
17
+ The guide endpoints require a campaign UUID, but users often provide only a campaign name or say "my campaign." Google Ads calls operate on the current Wix site from the call context; the site is not a request-body field. Use an already-selected site context without asking the user to repeat it. If there is no unambiguous current site, ask which site to use instead of probing several sites. Follow the rest of this resolution flow only when retrieving or updating a guide. If the conversation already contains the guide recommendations and the user only wants them presented, do not block the action plan on campaign identity; resolve only the site context needed for relevant navigation.
20
18
 
21
- 1. If the user provides a campaign UUID, use it.
22
- 2. Otherwise follow [Manage Campaign Lifecycle](manage-campaign-lifecycle.md) and call:
19
+ Site listing is for resolving navigation metadata only. Never use account-wide site listing to hunt for a campaign before retrieving or updating a guide. A current-site ID in the available context counts as an unambiguous selected site even when the user's prompt does not repeat its name. If no current-site ID is available, ask which site to use.
20
+
21
+ 1. If the campaign UUID is known, use it in the current site context.
22
+ 2. Otherwise, list campaigns once for the current site using the Campaign API's public serverless route:
23
23
 
24
24
  ```bash
25
- curl -X GET 'https://www.wixapis.com/google-ads/v1/campaigns' \
25
+ curl -X GET 'https://www.wixapis.com/_serverless/pa-google/v1/campaigns' \
26
26
  -H 'Authorization: <AUTH>'
27
27
  ```
28
28
 
29
+ Use this full URL exactly once. The `/_serverless/pa-google` prefix is part of the public endpoint. Do not retry with a relative URL or another service prefix, or probe another site when the documented call returns an error.
30
+
29
31
  Read each campaign's `id`, `name`, `campaignType`, and `status`.
30
- 3. Select a campaign only when one result clearly matches the user's wording. If none or multiple plausibly match, show concise choices and ask the user to choose; never guess.
32
+ 3. Select a campaign only when one result clearly matches the user's wording. If several campaigns on that site plausibly match, show concise campaign choices and ask the user to choose; never guess.
31
33
  4. Continue only for `campaignType: "PERFORMANCE_MAX_LEADS"`. If the selected campaign has another type, explain that campaign success guides currently support Google Ads Performance Max Leads campaigns only. For a supported campaign, do not gate guide retrieval on `status` or query analytics first: `LEARNING` and missing performance metrics are not reasons to wait.
32
34
 
33
35
  The common flow always sends `platformType: "GOOGLE"`; do not ask the user to provide it.
34
36
 
35
37
  ## Retrieve or create the guide
36
38
 
39
+ Skip this call when the conversation already contains a retrieved guide or its recommendations; immediately present the supplied result using the next section instead of retrieving it again or asking for campaign identity. When the user paraphrases recommendation labels, map them to the closest unambiguous suggestion types in the translation table. Wording such as "still need to" or "still to do" means those items are `OPEN`.
40
+
41
+ When the user only wants a supplied guide presented, this article already contains the response behavior. Do not read the linked action recipes until the user accepts an offer to perform that action; unnecessary recipe reads delay the answer and can prevent the navigation block from being returned.
42
+
37
43
  ```bash
38
44
  curl -X POST \
39
45
  'https://www.wixapis.com/pa-platform/suggestions/v1/campaign-success-guides/get-or-create' \
@@ -67,6 +73,76 @@ Present only the suggestions the API returns and preserve their order; `suggesti
67
73
 
68
74
  `OPEN` means pending action. `COMPLETED` means the user marked the item completed; it does **not** mean the API changed the site or campaign for them.
69
75
 
76
+ ## Present the guide as an actionable plan
77
+
78
+ Do not return a bare list of task labels. Turn the returned suggestions into a compact action plan while preserving the API's order:
79
+
80
+ Use this output structure:
81
+
82
+ 1. A numbered suggestion list with no navigation URLs or Markdown links inside the suggestion items.
83
+ 2. One grouped offer for the supported work the agent can perform after approval.
84
+ 3. A **Next actions** block after the complete suggestion list and offer, containing each relevant destination link exactly once.
85
+
86
+ This structure is mandatory even when only one suggestion uses a destination. Never put the Editor, Google Ads, or another shared navigation link inline with a suggestion.
87
+
88
+ 1. Name the campaign and link `campaignSuccessGuide.url` as the analyzed landing page when present.
89
+ 2. For every returned suggestion, show its user-facing label, tracking status (`Pending` for `OPEN`, `Marked complete` for `COMPLETED`), and one concrete next step. Do not show enum values unless they help resolve an ambiguity.
90
+ 3. For each `OPEN` item, distinguish work the agent can help perform from work the user must finish in Wix. Prefer an offer to do supported work over instructions that make the user do the same operation manually.
91
+ 4. Do not offer work for `COMPLETED` items unless the user asks to reopen them.
92
+ 5. Put each unique navigation link after the suggestions as a destination-specific CTA. Do not group every URL under a generic **Open in Wix** label or reuse that label for unrelated destinations. Name the actual page or action—for example, **Go to Editor**, **Go to Google Ads**, or **Connect Google Business Profile**. Deduplicate by destination: if two or ten tasks require the Editor, include the Editor CTA **once**, at the bottom, and never repeat it beside individual tasks. Apply the same deduplication to the Google Ads dashboard or any other shared destination.
93
+
94
+ The navigation block is part of the guide, including when the user supplied or paraphrased the recommendations. Before responding, resolve the destinations required by the `OPEN` items. Resolving navigation is read-only and does not require approval, including when the user says not to change anything yet. Use the selected site's `id` and `editUrl` from available site context. If the current-site ID is known but `editUrl` is absent, look up the site's navigation metadata through an available site-listing capability once; select only the result whose `id` or `metaSiteId` exactly matches that current-site ID, then read its `displayName`, `editUrl`, and `editorType`. Do not inspect other sites for campaigns. When no current-site ID is known and the lookup returns exactly one site, use it for navigation. When several sites are available and none is selected, present the action plan immediately and ask which site's CTAs to add. If an item belongs in the Editor or Google Ads, include that destination once unless the destination is genuinely unavailable; do not omit navigation merely because no API call was needed to obtain the guide.
95
+
96
+ ### Which action to offer
97
+
98
+ | Suggestion types | Response behavior |
99
+ | --- | --- |
100
+ | `CLEAR_CTA_COPY`, `ABOVE_THE_FOLD_CTA`, `HEADER_MATCH`, `CONVERSION_POINT`, `GOOGLE_REVIEWS`, `TESTIMONIAL`, `CONTACT_AND_CREDIBILITY`, `FAQ_SECTION`, `MINIMIZE_FORM_FIELDS`, `SOCIAL_CHANNELS` | These change visible landing-page content. Briefly describe the edit and point to the single **Go to Editor** CTA after the suggestions. If the current environment has a site-editing capability that can safely make the specific change, offer to make it after the user approves; otherwise do not imply that marking the suggestion complete will edit the page. |
101
+ | `MOBILE_OPTIMIZATION`, `SITE_SPEED` | Offer to inspect the problem and recommend a concrete fix first; these broad findings are not a safe one-click mutation. Include the single Editor link when the resulting work belongs there. Do not promise an improvement before identifying the actual cause. |
102
+ | `GOOGLE_ADS_SEARCH_THEMES` | Offer to generate relevant search themes, show the proposed set, and apply the approved set to the existing campaign by following [Get AI Campaign Suggestions](get-campaign-suggestions.md) and [Manage Campaign Lifecycle](manage-campaign-lifecycle.md). Updating the campaign is a mutation, so do not apply themes merely because the guide returned this item. |
103
+ | `GOOGLE_MERCHANT_CENTER_CONNECTION` | Offer to link the Merchant Center account using the account flow below. Reuse an already-linked Merchant Center account ID when present; otherwise ask the user for the ID. Get approval before the account update. Explain that the link begins as `PENDING` and its owner may still need to approve it in Google. |
104
+ | `GOOGLE_BUSINESS_PROFILE_CONNECTION` | Offer to check the connection and start it by following [Connect a Wix Site to Google Business Profile](../google-business-profile/connect-google-business-profile.md). Be explicit that the agent can initiate the flow and provide its authorization URL, but the site owner must finish Google's consent in their browser. |
105
+
106
+ After the tasks, make one closing offer that groups the supported actions you can take; do not append a separate approval question to every item.
107
+
108
+ For a Merchant Center connection, first read the selected site's Google Ads account:
109
+
110
+ ```bash
111
+ curl -X GET 'https://www.wixapis.com/_serverless/pa-google/v1/accounts/current-site' \
112
+ -H 'Authorization: <AUTH>'
113
+ ```
114
+
115
+ Read `account.id`, `account.merchantCenterAccountId`, and `account.merchantCenterAccountLinkStatus`. If `merchantCenterAccountId` is present, use it as the existing connection context. If it is absent, ask the user for the account ID shown in Google Merchant Center; the Google Ads account API does not list candidate Merchant Center accounts. After the user confirms the ID and approves the mutation, follow [Install Google Ads and Create an Account](install-and-create-account.md) and update `merchantCenterAccountId` on `account.id`.
116
+
117
+ ### Build destination-specific CTAs
118
+
119
+ - **Editor:** Include this only when at least one returned `OPEN` item requires landing-page or mobile editing. Use the exact `editUrl` from the selected site context or the single matching result from the site-navigation lookup described above; prefix a relative value with `https://manage.wix.com`. Never construct or guess an Editor URL, and do not substitute the public landing-page URL for an Editor link. If the site is `EDITORLESS` or has no `editUrl`, say that an Editor link is unavailable instead of inventing one. Label the CTA **Go to Editor** or name the more specific editing action; do not label it **Open in Wix**.
120
+ - **Google Ads:** When a returned item belongs in Google Ads, use the verified route from [Google Ads Dashboard Navigation](google-ads-dashboard-navigation.md): `https://manage.wix.com/dashboard/{metaSiteId}/google-ads`. Label the CTA **Go to Google Ads** or name the specific campaign action.
121
+ - **Other destinations:** Name the destination or action in the CTA, such as **Open Forms dashboard**, **Review site speed**, or **Connect Google Business Profile**. Never make several unrelated links look like the same generic action.
122
+ - Include only relevant destinations and list each URL once. Authorization URLs created by a later connection flow are task-specific; return one only after the user accepts that offer and the flow creates it.
123
+
124
+ Example when several tasks share the Editor:
125
+
126
+ ```markdown
127
+ ## Campaign success guide
128
+ Landing page: [Request a quote](https://www.example.com/request-a-quote)
129
+
130
+ 1. **Clarify the main call to action — Pending**
131
+ Make the button describe the conversion, such as “Request a quote.”
132
+ 2. **Move a call to action above the fold — Pending**
133
+ Place the primary button where visitors see it without scrolling.
134
+ 3. **Configure Google Ads search themes — Pending**
135
+ **I can help with this:** I can propose relevant themes and apply the set you approve.
136
+
137
+ I can take care of the search-theme update after you review the proposed set.
138
+
139
+ ### Next actions
140
+ - [Go to Editor]({editUrl})
141
+ - [Go to Google Ads](https://manage.wix.com/dashboard/{metaSiteId}/google-ads)
142
+ ```
143
+
144
+ Each link has its own destination-specific CTA, and the Editor URL appears once even though the first two recommendations both use it.
145
+
70
146
  ## Translate suggestion types for the user
71
147
 
72
148
  Keep the enum value unchanged in API calls, but use these labels when explaining the guide:
@@ -95,9 +171,9 @@ The update endpoint identifies the suggestion by its **`type`**, not its suggest
95
171
 
96
172
  Before executing an update:
97
173
 
98
- 1. Identify the campaign and a suggestion `type` currently present in its latest guide.
174
+ 1. Identify the campaign and a suggestion `type` currently present in its latest guide. Use the current-site ID directly and follow the campaign-resolution flow above; listing that site's campaigns once is valid context resolution, but account-wide site listing is not. Ask one focused site or campaign question only when the current context or campaign results leave more than one plausible target. Do not probe several sites or guess, because the same recommendation type can exist on multiple campaigns.
99
175
  2. Match the user's wording to one returned suggestion and infer the requested status only when it is clear: a statement that they completed the recommendation means `COMPLETED`; a request to reopen it means `OPEN`.
100
- 3. Execute immediately when the campaign, suggestion, and status are unambiguous. Ask one targeted clarification only when any of them is unclear; never guess.
176
+ 3. Execute immediately when the campaign, suggestion, and status are unambiguous. The completion statement is approval for this tracking-status update; do not ask a redundant confirmation question. Ask one targeted clarification only when identity, suggestion, or intended status is unclear; never guess.
101
177
 
102
178
  Mark an item completed:
103
179
 
@@ -112,6 +188,24 @@ curl -X POST \
112
188
  }'
113
189
  ```
114
190
 
191
+ ```json
192
+ {
193
+ "campaignSuccessGuide": {
194
+ "id": "7d4a9c2e-86f1-4b37-a2d5-9e18c6f043ab",
195
+ "suggestions": [
196
+ {
197
+ "type": "CLEAR_CTA_COPY",
198
+ "status": "COMPLETED"
199
+ },
200
+ {
201
+ "type": "FAQ_SECTION",
202
+ "status": "OPEN"
203
+ }
204
+ ]
205
+ }
206
+ }
207
+ ```
208
+
115
209
  Reopen the same item by sending:
116
210
 
117
211
  ```json
@@ -132,7 +226,7 @@ If a mutation times out with an unknown outcome, do not retry automatically. Ret
132
226
  | `PLATFORM_NOT_SUPPORTED` | Use `GOOGLE`; do not substitute another platform value. |
133
227
  | `CAMPAIGN_TYPE_NOT_SUPPORTED` | Explain that success guides currently support Google Ads Performance Max Leads campaigns only. |
134
228
  | `SUGGESTION_NOT_FOUND` | Retrieve the latest guide and choose a `type` actually present; do not keep retrying stale data. |
135
- | Authentication or permission error | Stop after the first rejected campaign or guide call and explain that the current collaborator cannot access or modify it. Do not try alternate base URLs, infer that Google Ads is not installed, or probe other endpoints to bypass authorization. |
229
+ | Authentication or permission error | Stop after the first rejected campaign or guide call and explain that the current collaborator cannot access or modify it. Do not try alternate base URLs, infer that Google Ads is not installed, or probe other sites or endpoints to bypass authorization. |
136
230
 
137
231
  ## References
138
232
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: "Generate and Read a Wix Site's Content Plan"
3
- description: Generate an SEO content plan and read its blog post topics, or troubleshoot an existing content plan flow stuck at KEYWORD_RESEARCH while polling GetContentPlanFlow. Use this recipe for both generation and stalled-flow questions: it explains the intentional pause, the Create Content Plan release request, missing flow IDs, and the exact public API paths and response fields.
3
+ description: "Generate an SEO content plan and read its blog post topics, or troubleshoot an existing content plan flow stuck at KEYWORD_RESEARCH while polling GetContentPlanFlow. Use this recipe for both generation and stalled-flow questions: it explains the intentional pause, the Create Content Plan release request, missing flow IDs, and the exact public API paths and response fields."
4
4
  ---
5
5
 
6
6
  # Generate and Read a Wix Site's Content Plan