@wix/agent-skills 1.16.0 → 1.16.2
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.
- package/package.json +1 -1
- package/skills/wix-app/SKILL.md +72 -8
- package/skills/wix-app/references/CODE_QUALITY.md +0 -1
- package/skills/wix-app/references/DASHBOARD_MODAL.md +21 -14
- package/skills/wix-app/references/DASHBOARD_PAGE.md +30 -184
- package/skills/wix-app/references/EDITOR_REACT_COMPONENT.md +19 -3
- package/skills/wix-app/references/WIX_PATTERNS_DOCS.md +172 -0
- package/skills/wix-app/references/dashboard-page/WDS_LAYOUT.md +187 -0
- package/skills/wix-app/references/editor-react-component/A11Y-REVIEW.md +12 -7
- package/skills/wix-app/references/editor-react-component/ANIMATED-COMPONENTS.md +31 -2
- package/skills/wix-app/references/editor-react-component/COMPONENT-API.md +6 -1
- package/skills/wix-app/references/editor-react-component/COMPONENT-CONFIGURATION.md +60 -0
- package/skills/wix-app/references/editor-react-component/DIRECTIONALITY.md +6 -6
- package/skills/wix-app/references/editor-react-component/FUNCTION-HANDLERS.md +167 -0
- package/skills/wix-app/references/editor-react-component/REACT-GUIDELINES.md +2 -2
- package/skills/wix-app/references/editor-react-component/SITE-CONTEXT-HOOKS.md +187 -0
- package/skills/wix-app/scripts/scan-a11y-code.cjs +777 -0
- package/skills/wix-app/scripts/scan-a11y-eslint.cjs +201 -0
- package/skills/wix-base44-connector/SKILL.md +185 -0
- package/skills/wix-base44-connector/scripts/utils.js +212 -0
- package/skills/wix-design-system/SKILL.md +19 -15
- package/skills/wix-docs/SKILL.md +75 -1
- package/skills/wix-headless/references/CAPABILITIES.md +16 -3
- package/skills/wix-headless/references/SDK_HANDOFF.md +1 -1
- package/skills/wix-headless/references/SEED.md +1 -1
- package/skills/wix-headless/references/inline-recipes/how-to-code-forms.md +560 -102
- package/skills/wix-headless/references/inline-recipes/setup-forms.md +210 -143
- package/skills/wix-manage/SKILL.md +20 -17
- package/skills/wix-manage/references/accessibility/scan-site-accessibility.md +98 -0
- package/skills/wix-manage/references/analytics/analytics-dashboard-navigation.md +1 -2
- package/skills/wix-manage/references/domains/domain-search-purchase-and-connect.md +2603 -0
- package/skills/wix-manage/references/events/create-wix-event.md +112 -90
- package/skills/wix-manage/references/events/manage-wix-events.md +33 -94
- package/skills/wix-manage/references/sites/create-headless-site.md +1 -0
- package/skills/wix-manage/references/sites/manage-oauth-apps.md +154 -0
- package/skills/wix-manage/references/sites/read-site-context.md +125 -0
- package/skills/wix-manage/references/sites/site-import.md +67 -15
- package/skills/wix-manage/references/stores/create-product-catalog-v3.md +273 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/wix-writers.js +1 -1
- package/skills/wix-vibe-headless/SKILL.md +2 -1
- package/skills/wix-vibe-headless/install/deploy.cjs +63 -3
- package/skills/wix-vibe-headless/platforms/base44-ecom-light-seed.md +104 -0
- package/skills/wix-vibe-headless/platforms/base44-ecom-light.md +74 -0
- package/skills/wix-vibe-headless/platforms/base44.md +15 -40
- package/skills/wix-vibe-headless/references/blog/INSTRUCTIONS.md +7 -11
- package/skills/wix-vibe-headless/references/blog/seed/SEED.md +1 -1
- package/skills/wix-vibe-headless/references/bookings/INSTRUCTIONS.md +7 -11
- package/skills/wix-vibe-headless/references/bookings/seed/SEED.md +1 -1
- package/skills/wix-vibe-headless/references/cms/INSTRUCTIONS.md +1 -2
- package/skills/wix-vibe-headless/references/events/INSTRUCTIONS.md +7 -12
- package/skills/wix-vibe-headless/references/events/seed/SEED.md +1 -1
- package/skills/wix-vibe-headless/references/members/INSTRUCTIONS.md +7 -11
- package/skills/wix-vibe-headless/references/portfolio/INSTRUCTIONS.md +7 -11
- package/skills/wix-vibe-headless/references/portfolio/seed/SEED.md +1 -1
- package/skills/wix-vibe-headless/references/pricing-plans/INSTRUCTIONS.md +7 -11
- package/skills/wix-vibe-headless/references/pricing-plans/seed/SEED.md +1 -1
- package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +7 -11
- package/skills/wix-vibe-headless/references/restaurants/seed/SEED.md +1 -1
- package/skills/wix-vibe-headless/references/shared/app/components/WixManageBanner.jsx +1 -1
- package/skills/wix-vibe-headless/references/shared/app/rest/wix-config.js +5 -3
- package/skills/wix-vibe-headless/references/storefront/INSTRUCTIONS.md +75 -13
- package/skills/wix-vibe-headless/references/storefront/app/components/ProductCard.jsx +29 -86
- package/skills/wix-vibe-headless/references/storefront/app/components/ProductGrid.jsx +3 -8
- package/skills/wix-vibe-headless/references/storefront/app/components/VariantPicker.jsx +78 -105
- package/skills/wix-vibe-headless/references/storefront/app/hooks/useProductCard.js +92 -0
- package/skills/wix-vibe-headless/references/storefront/app/hooks/useVariantOptions.js +76 -0
- package/skills/wix-vibe-headless/references/storefront/seed/SEED.md +1 -1
- package/skills/wix-vibe-headless/references/storefront/seed/seed-store.js +44 -5
- package/skills/wix-app/references/AUTO_PATTERNS_DASHBOARD.md +0 -326
- package/skills/wix-app/references/auto-patterns-dashboard/action-cell.md +0 -115
- package/skills/wix-app/references/auto-patterns-dashboard/app-config-structure.md +0 -264
- package/skills/wix-app/references/auto-patterns-dashboard/app-context.md +0 -37
- package/skills/wix-app/references/auto-patterns-dashboard/bulk-actions.md +0 -86
- package/skills/wix-app/references/auto-patterns-dashboard/collection-page-actions.md +0 -119
- package/skills/wix-app/references/auto-patterns-dashboard/collection-page.md +0 -103
- package/skills/wix-app/references/auto-patterns-dashboard/custom-actions-override.md +0 -76
- package/skills/wix-app/references/auto-patterns-dashboard/custom-columns-override.md +0 -82
- package/skills/wix-app/references/auto-patterns-dashboard/custom-components-override.md +0 -89
- package/skills/wix-app/references/auto-patterns-dashboard/custom-header-override.md +0 -124
- package/skills/wix-app/references/auto-patterns-dashboard/custom-sections-override.md +0 -91
- package/skills/wix-app/references/auto-patterns-dashboard/custom-slots-override.md +0 -71
- package/skills/wix-app/references/auto-patterns-dashboard/entity-page-actions.md +0 -70
- package/skills/wix-app/references/auto-patterns-dashboard/entity-page-view-actions.md +0 -73
- package/skills/wix-app/references/auto-patterns-dashboard/entity-page.md +0 -98
- package/skills/wix-app/references/auto-patterns-dashboard/example-patterns.json +0 -278
- package/skills/wix-app/references/auto-patterns-dashboard/pages-configuration.md +0 -94
- package/skills/wix-app/references/auto-patterns-dashboard/resolved-action.md +0 -43
- package/skills/wix-app/references/auto-patterns-dashboard/sdk-utilities.md +0 -66
- package/skills/wix-app/references/auto-patterns-dashboard/views.md +0 -76
- package/skills/wix-app/scripts/generate-auto-patterns.js +0 -510
- package/skills/wix-manage/references/domains/domain-search-and-purchase.md +0 -437
- package/skills/wix-manage/references/stores/create-product-from-image.md +0 -1031
- package/skills/wix-manage/references/stores/create-product-with-options-catalog-v3.md +0 -623
- package/skills/wix-manage/references/stores/setup-online-store-catalog-v3.md +0 -106
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: "Create an Event with the Wix Events API"
|
|
3
|
-
description: "Creates an event with the Wix Events V3 API — the required request body, ISO-8601 date and time settings, venue/online/TBD location, RSVP vs ticketed registration, guest capacity,
|
|
3
|
+
description: "Creates an event with the Wix Events V3 API — the required request body, ISO-8601 date and time settings, venue/online/TBD location, RSVP vs ticketed registration, guest capacity, short vs rich-text descriptions, ticket tiers and pricing, and recurring series. Covers the exact field shapes and the API's misleading validation messages. Use when the user wants to create an event, set its date, location, description, guest limit or ticket prices, or set up a repeating event."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Create an Event with the Wix Events API
|
|
7
7
|
|
|
8
8
|
## Goal
|
|
9
|
-
Create an event on a Wix site — one-off or recurring, RSVP or ticketed
|
|
10
|
-
|
|
9
|
+
Create an event on a Wix site — one-off or recurring, RSVP or ticketed, with ticket tiers. To
|
|
10
|
+
publish, cancel, clone, update or count events that already exist, see
|
|
11
11
|
[Manage Wix Events](manage-wix-events.md).
|
|
12
12
|
|
|
13
13
|
## First: pick the right "Events" API
|
|
14
14
|
|
|
15
15
|
Several unrelated Wix APIs are called "Events". Routing to the wrong one is the most expensive
|
|
16
|
-
mistake
|
|
17
|
-
failing.
|
|
16
|
+
mistake here, because the wrong API answers plausibly for several calls before failing.
|
|
18
17
|
|
|
19
18
|
| The user means | API | Base path |
|
|
20
19
|
| --- | --- | --- |
|
|
@@ -23,21 +22,16 @@ failing.
|
|
|
23
22
|
| An entry on the marketing plan calendar | Marketing Calendar Event V1 | `/promote/marketing-plan-service/v1/events` |
|
|
24
23
|
| An automation trigger | Triggered Events | `/automations/v1/events/report` |
|
|
25
24
|
|
|
26
|
-
A recurring *class or course that guests book* is Bookings
|
|
27
|
-
|
|
25
|
+
A recurring *class or course that guests book* is Bookings. A recurring *event series guests
|
|
26
|
+
attend* is Wix Events.
|
|
28
27
|
|
|
29
|
-
## Prerequisite — the Wix Events app
|
|
28
|
+
## Prerequisite — the Wix Events app
|
|
30
29
|
|
|
31
|
-
Every `/events/v3` call against a site without
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
Install it with appDefId `140603ad-af8d-84a5-2c80-a0f60cb47351` — see
|
|
39
|
-
[Install Wix Apps](../app-installation/install-wix-apps.md). Confirm with the user first unless
|
|
40
|
-
they already asked for the event to be created.
|
|
30
|
+
Every `/events/v3` call against a site without it returns `428 WIX_EVENTS_APP_NOT_INSTALLED`.
|
|
31
|
+
Install with appDefId `140603ad-af8d-84a5-2c80-a0f60cb47351` via
|
|
32
|
+
`POST /apps-installer-service/v1/app-instance/install`, body
|
|
33
|
+
`{"tenant":{"tenantType":"SITE","id":"<SITE_ID>"},"appInstance":{"appDefId":"<APP_DEF_ID>"}}` —
|
|
34
|
+
`appDefId` nests under `appInstance`. See [Install Wix Apps](../app-installation/install-wix-apps.md).
|
|
41
35
|
|
|
42
36
|
## Create the event
|
|
43
37
|
|
|
@@ -55,122 +49,150 @@ curl -X POST 'https://www.wixapis.com/events/v3/events' \
|
|
|
55
49
|
"timeZoneId": "America/New_York"
|
|
56
50
|
},
|
|
57
51
|
"registration": { "initialType": "RSVP" }
|
|
58
|
-
}
|
|
59
|
-
"draft": true
|
|
52
|
+
}
|
|
60
53
|
}'
|
|
61
54
|
```
|
|
62
55
|
|
|
63
|
-
`title`, `location`, `dateAndTimeSettings` and `registration.initialType` are
|
|
64
|
-
|
|
65
|
-
is invisible on the site until published with `POST /events/v3/events/{eventId}/publish`
|
|
66
|
-
(empty body), which moves it to `UPCOMING`.
|
|
56
|
+
`title`, `location`, `dateAndTimeSettings` and `registration.initialType` are required. The event
|
|
57
|
+
is created published (`status: "UPCOMING"`).
|
|
67
58
|
|
|
68
|
-
|
|
59
|
+
> **Do not add `"draft": true` unless the user asked for a draft.** Draft events require the
|
|
60
|
+
> `WIX_EVENTS.READ_DRAFT_EVENTS` permission, and without it every follow-up call fails `403` —
|
|
61
|
+
> adding ticket definitions, querying the event, fetching it by slug, even publishing it. The
|
|
62
|
+
> event is created, but nothing can be done with it. Create it published and skip the publish
|
|
63
|
+
> step entirely.
|
|
69
64
|
|
|
70
|
-
|
|
65
|
+
## Date and time
|
|
71
66
|
|
|
72
|
-
|
|
73
|
-
`
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
APIs, not only Events.
|
|
67
|
+
**`startDate` and `endDate` are ISO-8601 strings, not `{seconds, nanos}` objects.** The spec types
|
|
68
|
+
them as `string` / `format: date-time` but also points at `google.protobuf.Timestamp`, whose
|
|
69
|
+
fields are `seconds` and `nanos`. That is the internal form and must not be sent. This applies to
|
|
70
|
+
every date-time field across the Wix APIs.
|
|
77
71
|
|
|
78
72
|
| Rule | If broken |
|
|
79
73
|
| --- | --- |
|
|
80
|
-
|
|
|
74
|
+
| ISO-8601 strings | `400 Expected a string.` |
|
|
81
75
|
| `endDate` is required | `400 endDate.isDefined must be true, event cannot have negative duration` |
|
|
82
|
-
| `timeZoneId` is required, in [TZ database](https://www.iana.org/time-zones) form
|
|
76
|
+
| `timeZoneId` is required, in [TZ database](https://www.iana.org/time-zones) form | `400 getTimeZoneId is not supported` |
|
|
83
77
|
|
|
84
|
-
> The `timeZoneId` error reads as though the field is unsupported. It is not — it means the
|
|
85
|
-
>
|
|
78
|
+
> The `timeZoneId` error reads as though the field is unsupported. It is not — it means the field
|
|
79
|
+
> is **missing**. Add it; do not remove it.
|
|
80
|
+
|
|
81
|
+
Midnight is `00:00` of the next day. `2026-08-18T24:00:00.000Z` is not a valid ISO time.
|
|
86
82
|
|
|
87
83
|
**Date to be announced:** send `dateAndTimeSettings` as
|
|
88
84
|
`{ "dateAndTimeTbd": true, "dateAndTimeTbdMessage": "Date coming soon" }` and nothing else. The
|
|
89
|
-
message is mandatory — omitting it fails
|
|
85
|
+
message is mandatory — omitting it fails `400 getScheduleTbdMessage must not be a blank`.
|
|
90
86
|
|
|
91
87
|
## Location
|
|
92
88
|
|
|
93
|
-
`location.type` is `VENUE` or `ONLINE`. There is no `TBD` type — a to-be-announced location is
|
|
94
|
-
|
|
89
|
+
`location.type` is `VENUE` or `ONLINE`. There is no `TBD` type — a to-be-announced location is a
|
|
90
|
+
`VENUE` with `locationTbd: true`.
|
|
95
91
|
|
|
96
92
|
| Body | Result |
|
|
97
93
|
| --- | --- |
|
|
98
94
|
| `{ "name": "Grand Hall", "type": "VENUE" }` | Accepted |
|
|
99
|
-
| `{ "name": "Zoom", "type": "ONLINE" }` | Accepted |
|
|
100
95
|
| `{ "name": "To be announced", "locationTbd": true }` | Accepted — `type` defaults to `VENUE` |
|
|
101
|
-
| `{ "locationTbd": true }` | `400
|
|
102
|
-
| `{ "name": "TBA", "type": "TBD"
|
|
103
|
-
|
|
104
|
-
For a real street address, add an `address` object:
|
|
96
|
+
| `{ "locationTbd": true }` | `400 Location address must not be a blank` |
|
|
97
|
+
| `{ "name": "TBA", "type": "TBD" }` | `400 type enum must be in [VENUE(0), ONLINE(1)]` |
|
|
105
98
|
|
|
106
|
-
|
|
107
|
-
"
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
"country": "US", "subdivision": "US-NY", "city": "New York", "postalCode": "10001",
|
|
111
|
-
"streetAddress": { "number": "429", "name": "11th Ave" }
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
`subdivision` is the ISO-3166-2 code (`US-NY`), and the API fills in `formattedAddress` and
|
|
117
|
-
`geocode` on the response. A `VENUE` with no `address` comes back with `locationTbd: true` set
|
|
118
|
-
by the API whether or not you sent it.
|
|
99
|
+
For a street address add `address`:
|
|
100
|
+
`{ "country": "US", "subdivision": "US-NY", "city": "New York", "postalCode": "10001",
|
|
101
|
+
"streetAddress": { "number": "429", "name": "11th Ave" } }` — `subdivision` is the ISO-3166-2
|
|
102
|
+
code; the API fills in `formattedAddress` and `geocode`.
|
|
119
103
|
|
|
120
104
|
## Registration type and capacity
|
|
121
105
|
|
|
122
106
|
`initialType` must be nested under `registration`; at the root of `event` it is treated as
|
|
123
|
-
omitted
|
|
124
|
-
`EXTERNAL` and `NONE`.
|
|
125
|
-
|
|
126
|
-
> The API's error text for this field advertises `[RSVP,TICKETS,RSVP_AND_TICKETS]`. Those
|
|
127
|
-
> values do not work — `TICKETS` is rejected. Use `TICKETING`.
|
|
107
|
+
omitted. Accepted values are **`RSVP`**, **`TICKETING`**, `EXTERNAL` and `NONE`.
|
|
128
108
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
creation time — "people should register by RSVP, not tickets" means `RSVP`.
|
|
109
|
+
> The API's error text advertises `[RSVP,TICKETS,RSVP_AND_TICKETS]`. Those do not work —
|
|
110
|
+
> `TICKETS` is rejected. Use `TICKETING`.
|
|
132
111
|
|
|
133
|
-
|
|
112
|
+
`initialType` is immutable: an `RSVP` event can never become `TICKETING` or vice versa. Choose
|
|
113
|
+
correctly at creation — "register by RSVP, not tickets" means `RSVP`.
|
|
134
114
|
|
|
135
|
-
|
|
136
|
-
"registration": { "initialType": "RSVP", "rsvp": { "limit": 30 } }
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
A `limit` placed directly on `registration` is **silently ignored** — the event is created with
|
|
140
|
-
no cap and no error. Set `waitlistEnabled: true` alongside it to let guests join a waitlist once
|
|
141
|
-
the limit is reached. For a ticketed event the cap is per ticket type, via `initialLimit` on the
|
|
142
|
-
ticket definition — see [Manage Wix Events](manage-wix-events.md).
|
|
115
|
+
**Guest limit (RSVP events).** The cap is `registration.rsvp.limit`:
|
|
116
|
+
`"registration": { "initialType": "RSVP", "rsvp": { "limit": 30 } }`. A `limit` placed directly
|
|
117
|
+
on `registration` is **silently ignored** — no cap, no error. Add `waitlistEnabled: true` for a
|
|
118
|
+
waitlist. Ticketed events cap per tier instead, via `initialLimit` below.
|
|
143
119
|
|
|
144
120
|
## Description — two different fields
|
|
145
121
|
|
|
146
122
|
| Field | Type | Use for |
|
|
147
123
|
| --- | --- | --- |
|
|
148
|
-
| `shortDescription` | plain string, max 500 |
|
|
124
|
+
| `shortDescription` | plain string, max 500 | One line under the event title |
|
|
149
125
|
| `description` | Ricos rich content object | The formatted body on the event page |
|
|
150
126
|
|
|
151
|
-
A plain sentence belongs in `shortDescription`.
|
|
152
|
-
`400
|
|
153
|
-
[Rich Content](../rich-content/author-ricos-rich-content.md)
|
|
127
|
+
A plain sentence belongs in `shortDescription`. A string sent to `description` fails
|
|
128
|
+
`400 Expected an object` — it takes a Ricos `{ "nodes": [...] }` tree, as built in
|
|
129
|
+
[Rich Content](../rich-content/author-ricos-rich-content.md). `shortDescription` is returned only
|
|
130
|
+
with `"fields": ["DETAILS"]`, `description` only with `["TEXTS"]`; both are stored regardless.
|
|
131
|
+
|
|
132
|
+
## Ticket tiers
|
|
133
|
+
|
|
134
|
+
For events created with `"initialType": "TICKETING"`. One call per tier — there is no
|
|
135
|
+
bulk-create, and up to 100 tiers per event.
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
curl -X POST 'https://www.wixapis.com/events/v3/ticket-definitions' \
|
|
139
|
+
-H 'Content-Type: application/json' -H 'Authorization: <AUTH>' \
|
|
140
|
+
--data-binary '{
|
|
141
|
+
"ticketDefinition": {
|
|
142
|
+
"eventId": "<EVENT_ID>",
|
|
143
|
+
"name": "General Admission",
|
|
144
|
+
"pricingMethod": { "fixedPrice": { "value": "25.00", "currency": "USD" } },
|
|
145
|
+
"feeType": "FEE_ADDED_AT_CHECKOUT",
|
|
146
|
+
"initialLimit": 100
|
|
147
|
+
}
|
|
148
|
+
}'
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
| To create | `pricingMethod` |
|
|
152
|
+
| --- | --- |
|
|
153
|
+
| Fixed price | `{ "fixedPrice": { "value": "25.00", "currency": "USD" } }` |
|
|
154
|
+
| Free | `{ "fixedPrice": { "value": "0", "currency": "USD" } }` |
|
|
155
|
+
| Donation, with a minimum | `{ "guestPrice": { "value": "5.00", "currency": "USD" } }` |
|
|
156
|
+
|
|
157
|
+
- **`feeType` is required** — `FEE_ADDED_AT_CHECKOUT` or `FEE_INCLUDED`.
|
|
158
|
+
- **`value` is a string.** `"value": 10` fails `400 Unexpected value for field value`.
|
|
159
|
+
- **No writable `free` flag** — `pricingMethod.free` is read-only; a free ticket is a `fixedPrice`
|
|
160
|
+
of `"0"`.
|
|
161
|
+
- Quantity is **`initialLimit`**, not `initialQuantity`; omit for unlimited. `limitPerCheckout` is
|
|
162
|
+
read-only. `name` max 30 chars.
|
|
163
|
+
|
|
164
|
+
## Recurring events
|
|
165
|
+
|
|
166
|
+
Wix Events has **no recurrence rule** — no `RRULE`, no "weekly" pattern. Calculate every
|
|
167
|
+
occurrence yourself and list them all (up to 1000). **Each occurrence needs its own
|
|
168
|
+
`timeZoneId`**; omitting it fails with a cryptic `ZoneOffset` error:
|
|
154
169
|
|
|
155
170
|
```json
|
|
156
|
-
"
|
|
157
|
-
"
|
|
158
|
-
|
|
171
|
+
"dateAndTimeSettings": {
|
|
172
|
+
"startDate": "2026-10-20T18:00:00.000Z",
|
|
173
|
+
"endDate": "2026-10-20T19:00:00.000Z",
|
|
174
|
+
"timeZoneId": "America/New_York",
|
|
175
|
+
"recurringEvents": {
|
|
176
|
+
"individualEventDates": [
|
|
177
|
+
{ "startDate": "2026-10-20T18:00:00.000Z", "endDate": "2026-10-20T19:00:00.000Z", "timeZoneId": "America/New_York" },
|
|
178
|
+
{ "startDate": "2026-10-27T18:00:00.000Z", "endDate": "2026-10-27T19:00:00.000Z", "timeZoneId": "America/New_York" }
|
|
179
|
+
]
|
|
180
|
+
}
|
|
181
|
+
}
|
|
159
182
|
```
|
|
160
183
|
|
|
161
|
-
|
|
162
|
-
`
|
|
184
|
+
Pick a sensible horizon for "weekly" and say how many occurrences you created. The event returns
|
|
185
|
+
`recurrenceStatus: "RECURRING"`. Each occurrence is an independent event with its own ID; all
|
|
186
|
+
share a generated `recurringEvents.categoryId`, which is how you query the series.
|
|
163
187
|
|
|
164
188
|
## Gotchas & troubleshooting
|
|
165
189
|
|
|
166
|
-
- **An invalid enum value reports as a missing one
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
`getScheduleTbdMessage` and `endDate.isDefined` each map to the plain field of the same name.
|
|
171
|
-
- `title` is required, min 1 and max 120 characters. There is no separate name field.
|
|
190
|
+
- **An invalid enum value reports as a missing one** — `<field> value is required` rather than
|
|
191
|
+
"invalid value". If a field you *did* send is reported as required, suspect the value.
|
|
192
|
+
- **Error text names internal accessors**: `getTimeZoneId`, `getScheduleTbdMessage`,
|
|
193
|
+
`endDate.isDefined` each map to the plain field of the same name.
|
|
172
194
|
|
|
173
195
|
## Related APIs
|
|
174
196
|
- **Wix Events V3**: [REST](https://dev.wix.com/docs/api-reference/business-solutions/events/event-management/events-v3)
|
|
175
|
-
-
|
|
176
|
-
- [
|
|
197
|
+
- **Ticket Definitions V3**: [REST](https://dev.wix.com/docs/api-reference/business-solutions/events/event-management/ticket-definitions-v3)
|
|
198
|
+
- [Manage Wix Events](manage-wix-events.md) — publish, cancel, delete, clone, update, count
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: "Manage Wix Events —
|
|
3
|
-
description: "
|
|
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."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Manage Wix Events —
|
|
6
|
+
# Manage Wix Events — Publishing, Cancelling, Cloning and Counting
|
|
7
7
|
|
|
8
8
|
## Goal
|
|
9
|
-
Operate on events that already exist
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
Operate on events that already exist. Creating an event — including its date, location,
|
|
10
|
+
description, guest limit, ticket tiers and recurring occurrences — is
|
|
11
|
+
[Create an Event](create-wix-event.md).
|
|
12
12
|
|
|
13
|
-
## Prerequisite — the Wix Events app
|
|
13
|
+
## Prerequisite — the Wix Events app
|
|
14
14
|
|
|
15
15
|
Every endpoint here returns `428 WIX_EVENTS_APP_NOT_INSTALLED` against a site without the app.
|
|
16
|
-
Install it first — do not guess the install path
|
|
16
|
+
Install it first — do not guess the install path:
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
19
|
curl -X POST 'https://www.wixapis.com/apps-installer-service/v1/app-instance/install' \
|
|
@@ -26,50 +26,7 @@ curl -X POST 'https://www.wixapis.com/apps-installer-service/v1/app-instance/ins
|
|
|
26
26
|
```
|
|
27
27
|
|
|
28
28
|
`appDefId` nests under `appInstance`, not at the root — at the root it fails with
|
|
29
|
-
`400 appInstance must not be empty`. See [Install Wix Apps](../app-installation/install-wix-apps.md)
|
|
30
|
-
for the full flow.
|
|
31
|
-
|
|
32
|
-
## Ticket definitions
|
|
33
|
-
|
|
34
|
-
Ticket definitions belong to events created with `"initialType": "TICKETING"`. Tickets are a
|
|
35
|
-
separate API; up to 100 definitions per event.
|
|
36
|
-
|
|
37
|
-
```bash
|
|
38
|
-
curl -X POST 'https://www.wixapis.com/events/v3/ticket-definitions' \
|
|
39
|
-
-H 'Content-Type: application/json' \
|
|
40
|
-
-H 'Authorization: <AUTH>' \
|
|
41
|
-
--data-binary '{
|
|
42
|
-
"ticketDefinition": {
|
|
43
|
-
"eventId": "<EVENT_ID>",
|
|
44
|
-
"name": "General Admission",
|
|
45
|
-
"pricingMethod": { "fixedPrice": { "value": "25.00", "currency": "USD" } },
|
|
46
|
-
"feeType": "FEE_ADDED_AT_CHECKOUT",
|
|
47
|
-
"initialLimit": 100
|
|
48
|
-
}
|
|
49
|
-
}'
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
| To create | `pricingMethod` |
|
|
53
|
-
| --- | --- |
|
|
54
|
-
| A fixed-price ticket | `{ "fixedPrice": { "value": "25.00", "currency": "USD" } }` |
|
|
55
|
-
| A free ticket | `{ "fixedPrice": { "value": "0", "currency": "USD" } }` |
|
|
56
|
-
| A donation / pay-what-you-want ticket, with a minimum | `{ "guestPrice": { "value": "5.00", "currency": "USD" } }` |
|
|
57
|
-
|
|
58
|
-
Easy to get wrong:
|
|
59
|
-
|
|
60
|
-
- **`feeType` is required** — `FEE_ADDED_AT_CHECKOUT` (fee on top of the price) or
|
|
61
|
-
`FEE_INCLUDED` (fee absorbed into it).
|
|
62
|
-
- **`value` is a string.** `"value": 10` fails with `400 Unexpected value for field value`.
|
|
63
|
-
- **There is no writable `free` flag.** `pricingMethod.free` is read-only, computed from the
|
|
64
|
-
price; sending `{"free": true}` fails with `value fixedPrice or guestPrice or pricingOptions
|
|
65
|
-
must not be empty`.
|
|
66
|
-
- **The quantity field is `initialLimit`**, not `initialQuantity`. Omit it for unlimited tickets.
|
|
67
|
-
- `limitPerCheckout` is read-only — it cannot be set on create.
|
|
68
|
-
- `name` is capped at 30 characters, `description` at 500.
|
|
69
|
-
|
|
70
|
-
**Multiple tiers** — call the endpoint once per tier with the same `eventId`. For "General
|
|
71
|
-
Admission at $20 and VIP at $50", that is two calls, each with its own `name`, `fixedPrice` and
|
|
72
|
-
`initialLimit`. There is no bulk-create for ticket definitions.
|
|
29
|
+
`400 appInstance must not be empty`. See [Install Wix Apps](../app-installation/install-wix-apps.md).
|
|
73
30
|
|
|
74
31
|
## Publish, cancel and delete
|
|
75
32
|
|
|
@@ -82,14 +39,20 @@ Admission at $20 and VIP at $50", that is two calls, each with its own `name`, `
|
|
|
82
39
|
Publish and cancel take an empty body. Publishing is irreversible — a published event cannot
|
|
83
40
|
return to `DRAFT`. Cancelling closes registration but keeps the event; deleting removes it.
|
|
84
41
|
|
|
42
|
+
> **Draft events need the `WIX_EVENTS.READ_DRAFT_EVENTS` permission.** Without it, publishing a
|
|
43
|
+
> draft fails `403` — as does querying it, fetching it by slug, or adding ticket definitions to
|
|
44
|
+
> it. If you hit that `403`, the event was still created; the way forward is to create events
|
|
45
|
+
> already published rather than as drafts, which needs no publish step at all. See
|
|
46
|
+
> [Create an Event](create-wix-event.md).
|
|
47
|
+
|
|
85
48
|
## Clone an event
|
|
86
49
|
|
|
87
50
|
`POST /events/v3/events/{eventId}/clone` with an empty body copies the registration form,
|
|
88
51
|
notifications, translations and ticket configuration.
|
|
89
52
|
|
|
90
|
-
> **The clone does not keep the original's date.** Its start date is reset to roughly 14 days
|
|
91
|
-
>
|
|
92
|
-
>
|
|
53
|
+
> **The clone does not keep the original's date.** Its start date is reset to roughly 14 days from
|
|
54
|
+
> now and it comes back as a `DRAFT`. For a duplicate on a particular date, follow the clone with
|
|
55
|
+
> an update — and note the draft permission above.
|
|
93
56
|
|
|
94
57
|
## Update an event
|
|
95
58
|
|
|
@@ -110,9 +73,13 @@ curl -X PATCH 'https://www.wixapis.com/events/v3/events/<EVENT_ID>' \
|
|
|
110
73
|
}'
|
|
111
74
|
```
|
|
112
75
|
|
|
113
|
-
The Events API takes **no field mask and no `revision`** on update — send only the fields you
|
|
114
|
-
|
|
115
|
-
|
|
76
|
+
The Events API takes **no field mask and no `revision`** on update — send only the fields you are
|
|
77
|
+
changing. A `revision`, if you send one, is ignored rather than rejected.
|
|
78
|
+
|
|
79
|
+
**When moving a date, send `startDate` and `endDate` together.** `dateAndTimeSettings` is replaced
|
|
80
|
+
wholesale rather than merged, so a patch carrying only `startDate` leaves the event with no end and
|
|
81
|
+
fails `400 event cannot have negative duration` — an error naming neither the missing field nor the
|
|
82
|
+
replacement. `timeZoneId` is optional here, unlike on create; the stored one is kept.
|
|
116
83
|
|
|
117
84
|
Ticket definitions are the exception — `PATCH /events/v3/ticket-definitions/{ticketDefinition.id}`
|
|
118
85
|
*does* require the current `revision`, which increments on every update.
|
|
@@ -126,49 +93,21 @@ Ticket definitions are the exception — `PATCH /events/v3/ticket-definitions/{t
|
|
|
126
93
|
```
|
|
127
94
|
|
|
128
95
|
Query Events returns only published events — **drafts are excluded from both the results and the
|
|
129
|
-
total
|
|
130
|
-
event you just made.
|
|
96
|
+
total**, and including them needs the draft permission above. Create published, or publish first,
|
|
97
|
+
if the count is meant to include the event you just made.
|
|
131
98
|
|
|
132
99
|
`POST /events/v3/events/count-by-status` exists, but an empty request body returns empty `facets`
|
|
133
100
|
even when the site has events, so it is not the way to answer "how many events do I have".
|
|
134
101
|
|
|
135
|
-
## Recurring events
|
|
136
|
-
|
|
137
|
-
Wix Events has **no recurrence rule** — no `RRULE`, no "weekly" pattern. Calculate every
|
|
138
|
-
occurrence date yourself and list them all (up to 1000), alongside the normal top-level
|
|
139
|
-
`startDate` / `endDate` / `timeZoneId`:
|
|
140
|
-
|
|
141
|
-
```json
|
|
142
|
-
"dateAndTimeSettings": {
|
|
143
|
-
"startDate": "2026-10-20T18:00:00.000Z",
|
|
144
|
-
"endDate": "2026-10-20T19:00:00.000Z",
|
|
145
|
-
"timeZoneId": "America/New_York",
|
|
146
|
-
"recurringEvents": {
|
|
147
|
-
"individualEventDates": [
|
|
148
|
-
{ "startDate": "2026-10-20T18:00:00.000Z", "endDate": "2026-10-20T19:00:00.000Z", "timeZoneId": "America/New_York" },
|
|
149
|
-
{ "startDate": "2026-10-27T18:00:00.000Z", "endDate": "2026-10-27T19:00:00.000Z", "timeZoneId": "America/New_York" }
|
|
150
|
-
]
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
For "a weekly event starting next week", generate the dates yourself — pick a sensible horizon
|
|
156
|
-
(a few months) and say how many occurrences you created. The event returns
|
|
157
|
-
`recurrenceStatus: "RECURRING"`. Each occurrence is an independent event with its own ID,
|
|
158
|
-
updatable and deletable on its own; all share a generated `recurringEvents.categoryId`. Query by
|
|
159
|
-
that `categoryId` to retrieve the whole series.
|
|
160
|
-
|
|
161
102
|
## Gotchas & troubleshooting
|
|
162
103
|
|
|
163
|
-
- **An invalid enum value reports as a missing one
|
|
164
|
-
`<field> value is required` rather than "invalid value"
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
[Create an Event](create-wix-event.md).
|
|
104
|
+
- **An invalid enum value reports as a missing one** — a value outside an enum returns
|
|
105
|
+
`<field> value is required` rather than "invalid value". If a field you *did* send is reported
|
|
106
|
+
as required, suspect the value, not its presence.
|
|
107
|
+
- Dates are always ISO-8601 strings, never `{seconds, nanos}`, and `timeZoneId` is required
|
|
108
|
+
whenever `dateAndTimeSettings` is sent — see [Create an Event](create-wix-event.md).
|
|
169
109
|
|
|
170
110
|
## Related APIs
|
|
171
111
|
- **Wix Events V3**: [REST](https://dev.wix.com/docs/api-reference/business-solutions/events/event-management/events-v3)
|
|
172
|
-
- **Ticket Definitions V3**: [REST](https://dev.wix.com/docs/api-reference/business-solutions/events/event-management/ticket-definitions-v3)
|
|
173
112
|
- **Event Guests**: `POST /events/v2/guests/query` — who registered
|
|
174
|
-
- [Create an Event](create-wix-event.md) —
|
|
113
|
+
- [Create an Event](create-wix-event.md) — create body, dates, location, capacity, tickets, recurring
|
|
@@ -50,3 +50,4 @@ To provision headless onto an existing site, pass `"existingMetasite": {}` inste
|
|
|
50
50
|
After creating the site:
|
|
51
51
|
- Install additional apps using [Install Wix Apps](../app-installation/install-wix-apps.md)
|
|
52
52
|
- Add content (products, services, blog posts, etc.)
|
|
53
|
+
- Use the `appId` as the `client_id` to mint visitor tokens and make buyer-facing API calls — see [Manage OAuth Apps](manage-oauth-apps.md)
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "Manage OAuth Apps"
|
|
3
|
+
description: Create, read, update, and query OAuth apps for a Wix headless site. Each OAuth app's id is the client_id a frontend uses to mint anonymous visitor tokens and call Wix APIs.
|
|
4
|
+
---
|
|
5
|
+
# Manage OAuth Apps
|
|
6
|
+
|
|
7
|
+
An OAuth app is a site-level credential holder. Its `id` is the `client_id` (the two terms are interchangeable — Wix uses `appId` in provisioning responses, `clientId` in token requests, and `id` in the OAuth Apps API; they all refer to the same value).
|
|
8
|
+
|
|
9
|
+
When a headless site is provisioned it gets one OAuth app automatically (see [Create Headless Site](create-headless-site.md)); use this recipe to create additional apps, inspect existing ones, or update their redirect configuration.
|
|
10
|
+
|
|
11
|
+
> **`client_id` is not a secret** — it is a public identifier safe to embed in frontend code. The visitor token it mints is also non-privileged: it represents an anonymous visitor, not an admin. The `client_secret` is different — shown once in the Headless Settings dashboard, never returned by the API, and rotation is dashboard-only.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Create an OAuth App
|
|
16
|
+
|
|
17
|
+
**Endpoint**: `POST https://www.wixapis.com/oauth-app/v1/oauth-apps`
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
curl -X POST \
|
|
21
|
+
'https://www.wixapis.com/oauth-app/v1/oauth-apps' \
|
|
22
|
+
-H 'Authorization: <AUTH>' \
|
|
23
|
+
-H 'wix-site-id: <metaSiteId>' \
|
|
24
|
+
-H 'Content-Type: application/json' \
|
|
25
|
+
-d '{
|
|
26
|
+
"oAuthApp": {
|
|
27
|
+
"name": "My Storefront",
|
|
28
|
+
"loginUrl": "https://example.com/login",
|
|
29
|
+
"allowedRedirectUris": ["https://example.com/callback"],
|
|
30
|
+
"allowedRedirectDomains": ["example.com"]
|
|
31
|
+
}
|
|
32
|
+
}'
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**Response**:
|
|
36
|
+
```json
|
|
37
|
+
{
|
|
38
|
+
"oAuthApp": {
|
|
39
|
+
"id": "<clientId>",
|
|
40
|
+
"name": "My Storefront",
|
|
41
|
+
"loginUrl": "https://example.com/login",
|
|
42
|
+
"allowedRedirectUris": ["https://example.com/callback"],
|
|
43
|
+
"allowedRedirectDomains": ["example.com"],
|
|
44
|
+
"createdDate": "2026-08-18T10:00:00Z"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
`id` is the OAuth `client_id`. After creating the app, retrieve the `client_secret` from the Headless Settings dashboard.
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Get an OAuth App
|
|
54
|
+
|
|
55
|
+
**Endpoint**: `GET https://www.wixapis.com/oauth-app/v1/oauth-apps/{id}`
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
curl 'https://www.wixapis.com/oauth-app/v1/oauth-apps/<clientId>' \
|
|
59
|
+
-H 'Authorization: <AUTH>' \
|
|
60
|
+
-H 'wix-site-id: <metaSiteId>'
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Query OAuth Apps
|
|
66
|
+
|
|
67
|
+
**Endpoint**: `POST https://www.wixapis.com/oauth-app/v1/oauth-apps/query`
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
curl -X POST \
|
|
71
|
+
'https://www.wixapis.com/oauth-app/v1/oauth-apps/query' \
|
|
72
|
+
-H 'Authorization: <AUTH>' \
|
|
73
|
+
-H 'wix-site-id: <metaSiteId>' \
|
|
74
|
+
-H 'Content-Type: application/json' \
|
|
75
|
+
-d '{ "query": {} }'
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Returns all OAuth apps for the site.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Update an OAuth App
|
|
83
|
+
|
|
84
|
+
**Endpoint**: `PATCH https://www.wixapis.com/oauth-app/v1/oauth-apps/{id}`
|
|
85
|
+
|
|
86
|
+
Update requires an explicit `mask.paths` — omitting it silently updates nothing.
|
|
87
|
+
|
|
88
|
+
Updatable fields: `name`, `description`, `loginUrl`, `logoutUrl`, `allowedRedirectUris`, `allowedRedirectDomains`, `technology`.
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
curl -X PATCH \
|
|
92
|
+
'https://www.wixapis.com/oauth-app/v1/oauth-apps/<clientId>' \
|
|
93
|
+
-H 'Authorization: <AUTH>' \
|
|
94
|
+
-H 'wix-site-id: <metaSiteId>' \
|
|
95
|
+
-H 'Content-Type: application/json' \
|
|
96
|
+
-d '{
|
|
97
|
+
"oAuthApp": {
|
|
98
|
+
"allowedRedirectUris": ["https://example.com/callback", "https://example.com/auth"]
|
|
99
|
+
},
|
|
100
|
+
"mask": { "paths": ["allowedRedirectUris"] }
|
|
101
|
+
}'
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Key Fields
|
|
107
|
+
|
|
108
|
+
| Field | Notes |
|
|
109
|
+
|---|---|
|
|
110
|
+
| `id` | The OAuth `client_id`. Read-only. |
|
|
111
|
+
| `name` | Required on create. 2–256 chars. |
|
|
112
|
+
| `loginUrl` | External login redirect. Defaults to Wix login if omitted. |
|
|
113
|
+
| `logoutUrl` | Called when the user logs out at Wix. |
|
|
114
|
+
| `allowedRedirectUris` | Exact-match URIs for post-authentication redirect. Max 20. |
|
|
115
|
+
| `allowedRedirectDomains` | Domain-level allow-list for non-auth redirects (e.g. checkout). Max 20. |
|
|
116
|
+
| `applicationType` | `WEB_APP`, `MOBILE`, `OTHER` |
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Minting a Visitor Token
|
|
121
|
+
|
|
122
|
+
Once you have a `client_id`, frontends use it to mint an anonymous visitor token for buyer-facing API calls.
|
|
123
|
+
|
|
124
|
+
**Endpoint**: `POST https://www.wixapis.com/oauth2/token`
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
# Initial anonymous mint
|
|
128
|
+
curl -X POST 'https://www.wixapis.com/oauth2/token' \
|
|
129
|
+
-H 'Content-Type: application/json' \
|
|
130
|
+
-d '{ "clientId": "<clientId>", "grantType": "anonymous" }'
|
|
131
|
+
|
|
132
|
+
# Response: { "access_token": "...", "refresh_token": "...", "expires_in": 14400 }
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
# Refresh (use this instead of re-minting)
|
|
137
|
+
curl -X POST 'https://www.wixapis.com/oauth2/token' \
|
|
138
|
+
-H 'Content-Type: application/json' \
|
|
139
|
+
-d '{ "clientId": "<clientId>", "grantType": "refresh_token", "refreshToken": "<refreshToken>" }'
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Use the `access_token` as the `Authorization` header on subsequent API calls.
|
|
143
|
+
|
|
144
|
+
> **Never re-mint anonymous on every load.** The visitor token is the cart/session identity — a fresh anonymous mint creates a new visitor and silently empties the cart. Persist the `refresh_token` and use it to renew.
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## API Reference
|
|
149
|
+
|
|
150
|
+
- [OAuth Apps — Create](https://dev.wix.com/docs/api-reference/business-management/headless/oauth-apps/create-o-auth-app)
|
|
151
|
+
- [OAuth Apps — Get](https://dev.wix.com/docs/api-reference/business-management/headless/oauth-apps/get-o-auth-app)
|
|
152
|
+
- [OAuth Apps — Query](https://dev.wix.com/docs/api-reference/business-management/headless/oauth-apps/query-o-auth-apps)
|
|
153
|
+
- [OAuth Apps — Update](https://dev.wix.com/docs/api-reference/business-management/headless/oauth-apps/update-o-auth-app)
|
|
154
|
+
- [Retrieve Tokens — `/oauth2/token` contract, all grant types](https://dev.wix.com/docs/api-reference/business-management/headless/authentication/retrieve-tokens)
|