@wix/agent-skills 1.32.0 → 1.33.1
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/README.md +21 -0
- package/package.json +2 -2
- package/skills/wix-app/references/DASHBOARD_PAGE.md +1 -1
- package/skills/wix-app/references/EDITOR_REACT_COMPONENT.md +40 -41
- package/skills/wix-app/references/editor-react-component/ANIMATED-COMPONENTS.md +11 -6
- package/skills/wix-app/references/editor-react-component/DESIGN-STATES.md +2 -3
- package/skills/wix-app/references/editor-react-component/DISABLED-INVALID.md +31 -0
- package/skills/wix-app/references/editor-react-component/MANIFEST-ERRORS.md +14 -1
- package/skills/wix-app/references/editor-react-component/PARTS.md +32 -3
- package/skills/wix-app/references/editor-react-component/SSR.md +6 -3
- package/skills/wix-headless-kit/install/pins.json +1 -1
- package/skills/wix-manage/SKILL.md +25 -7
- package/skills/wix-manage/references/automations/actions.md +11 -11
- package/skills/wix-manage/references/automations/activation-status.md +6 -9
- package/skills/wix-manage/references/automations/api-catalog.md +48 -32
- package/skills/wix-manage/references/automations/automation-model.md +97 -22
- package/skills/wix-manage/references/automations/bracket-expressions.md +7 -7
- package/skills/wix-manage/references/automations/build-and-manage-automations.md +140 -309
- package/skills/wix-manage/references/automations/conditions.md +187 -0
- package/skills/wix-manage/references/automations/schemas-and-scheduling.md +191 -0
- package/skills/wix-manage/references/automations/special-actions.md +210 -0
- package/skills/wix-manage/references/automations/triggers.md +47 -10
- package/skills/wix-manage/references/automations/validation-and-verification.md +320 -0
- package/skills/wix-manage/references/custom-apps/use-app-tools.md +124 -0
- package/skills/wix-manage/references/events/create-wix-event.md +136 -73
- package/skills/wix-manage/references/events/manage-event-guests.md +366 -0
- package/skills/wix-manage/references/events/manage-event-tickets.md +293 -0
- package/skills/wix-manage/references/events/manage-wix-events.md +313 -55
- package/skills/wix-manage/references/stores/update-product-with-options.md +58 -2
- package/skills/wix-manage/references/custom-apps/use-app-skills-and-app-tools.md +0 -208
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "Manage Event Tickets"
|
|
3
|
+
description: "Manages the ticket types of a ticketed Wix event with the Ticket Definitions V3 API — adding, editing, repricing, hiding, reordering and deleting tickets, scheduling or ending ticket sales, and changing the ticket currency. Use when the user wants to add early-bird, VIP, child or donation tickets to an existing event, change a ticket's price or quantity, or set when tickets stop selling."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Manage Event Tickets
|
|
7
|
+
|
|
8
|
+
## Goal
|
|
9
|
+
Manage the ticket types ("ticket definitions") of a ticketed event. A ticket definition is one
|
|
10
|
+
type of ticket — "General Admission", "VIP" — with its price, quantity and sale period. Individual
|
|
11
|
+
tickets that guests bought are orders and tickets, in [Manage Event Guests](https://dev.wix.com/docs/api-reference/business-solutions/events/skills/manage-event-guests).
|
|
12
|
+
|
|
13
|
+
**Not here:**
|
|
14
|
+
- Creating a new event together with its first tickets: [Create an Event](https://dev.wix.com/docs/api-reference/business-solutions/events/skills/create-event#ticket-tiers).
|
|
15
|
+
- Closing or pausing registration for the whole event: an event setting, `PATCH https://www.wixapis.com/events/v3/events/<EVENT_ID>` with
|
|
16
|
+
`{ "event": { "registration": { "registrationPaused": true } } }` ([Manage Wix Events](https://dev.wix.com/docs/api-reference/business-solutions/events/skills/manage-events)).
|
|
17
|
+
Do not close an event's registration by ending every ticket's sale period.
|
|
18
|
+
- Tickets per order, tax and reservation hold: also event settings, under
|
|
19
|
+
`event.registration.tickets` (`ticketLimitPerOrder`, `taxSettings`, `reservationDurationInMinutes`)
|
|
20
|
+
with the same `PATCH https://www.wixapis.com/events/v3/events/<EVENT_ID>`.
|
|
21
|
+
|
|
22
|
+
## Prerequisite — the Wix Events app
|
|
23
|
+
|
|
24
|
+
Every call here returns `428 WIX_EVENTS_APP_NOT_INSTALLED` on a site without the Wix Events app.
|
|
25
|
+
Install it with appDefId `140603ad-af8d-84a5-2c80-a0f60cb47351`:
|
|
26
|
+
`POST https://www.wixapis.com/apps-installer-service/v1/app-instance/install` with
|
|
27
|
+
`{"tenant":{"tenantType":"SITE","id":"<SITE_ID>"},"appInstance":{"appDefId":"140603ad-af8d-84a5-2c80-a0f60cb47351"}}` —
|
|
28
|
+
`appDefId` nests under `appInstance`. See [Install Wix Apps](https://dev.wix.com/docs/api-reference/business-management/app-installation/skills/install-wix-apps).
|
|
29
|
+
|
|
30
|
+
## Before you start
|
|
31
|
+
|
|
32
|
+
Tickets exist only on events created with `registration.initialType: "TICKETING"`. On an RSVP event
|
|
33
|
+
every call here fails `428 INVALID_EVENT_TYPE`, and the event can't be converted. Find the event and
|
|
34
|
+
check its type first — this exact body:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
curl -X POST 'https://www.wixapis.com/events/v3/events/query' \
|
|
38
|
+
-H 'Content-Type: application/json' \
|
|
39
|
+
-H 'Authorization: <AUTH>' \
|
|
40
|
+
--data-binary '{
|
|
41
|
+
"query": {
|
|
42
|
+
"filter": { "title": { "$eq": "<EVENT_TITLE>" } },
|
|
43
|
+
"paging": { "limit": 100 }
|
|
44
|
+
},
|
|
45
|
+
"fields": ["REGISTRATION"]
|
|
46
|
+
}'
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
- `paging` is a sibling of `filter` inside `query`; nested inside `filter` it fails `400`.
|
|
50
|
+
- Send it as is: no extra filter fields and no `sort` — a nested `registration` filter or a `sort`
|
|
51
|
+
inside `filter` fails `400`. Read the type and dates from the result instead.
|
|
52
|
+
- Don't send `includeDrafts` — `true` needs a draft-events permission and fails `403`.
|
|
53
|
+
- The id is `events[].id`, the type `events[].registration.initialType`. If several events match,
|
|
54
|
+
pick by date or ask ([Manage Wix Events](https://dev.wix.com/docs/api-reference/business-solutions/events/skills/manage-events#find-an-event)).
|
|
55
|
+
|
|
56
|
+
If it is RSVP, create nothing in this turn: tell the user an RSVP event can't be converted, that a
|
|
57
|
+
ticketed copy would be a new event and its RSVPs would not carry over, and ask whether to create
|
|
58
|
+
it — and with which tickets and prices. See [Manage Wix Events](https://dev.wix.com/docs/api-reference/business-solutions/events/skills/manage-events).
|
|
59
|
+
|
|
60
|
+
Reference pages for these calls — use them rather than searching:
|
|
61
|
+
[Query Ticket Definitions](https://dev.wix.com/docs/api-reference/business-solutions/events/event-management/ticket-definitions-v3/query-ticket-definitions),
|
|
62
|
+
[Create Ticket Definition](https://dev.wix.com/docs/api-reference/business-solutions/events/event-management/ticket-definitions-v3/create-ticket-definition),
|
|
63
|
+
[Update Ticket Definition](https://dev.wix.com/docs/api-reference/business-solutions/events/event-management/ticket-definitions-v3/update-ticket-definition); to
|
|
64
|
+
find the event, [Query Events](https://dev.wix.com/docs/api-reference/business-solutions/events/event-management/events-v3/query-events).
|
|
65
|
+
|
|
66
|
+
The examples use `https://www.wixapis.com/events/v3/ticket-definitions`. The reference's
|
|
67
|
+
`https://www.wixapis.com/events-ticket-definitions/v3/ticket-definitions` is the same API — either
|
|
68
|
+
base works.
|
|
69
|
+
|
|
70
|
+
## List an event's tickets
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
curl -X POST 'https://www.wixapis.com/events/v3/ticket-definitions/query' \
|
|
74
|
+
-H 'Content-Type: application/json' \
|
|
75
|
+
-H 'Authorization: <AUTH>' \
|
|
76
|
+
--data-binary '{
|
|
77
|
+
"query": {
|
|
78
|
+
"filter": { "eventId": { "$eq": "<EVENT_ID>" } },
|
|
79
|
+
"cursorPaging": { "limit": 100 }
|
|
80
|
+
},
|
|
81
|
+
"fields": ["SALES_DETAILS"]
|
|
82
|
+
}'
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Always filter by `eventId` — without it the query returns every event's tickets. The response is
|
|
86
|
+
`ticketDefinitions[]`, with paging under `metadata` (not `pagingMetadata`). Each definition carries:
|
|
87
|
+
- `id` and `revision` — both needed to update it;
|
|
88
|
+
- `name`, `pricingMethod`, `feeType`, `hidden`, `initialLimit`, `salePeriod`;
|
|
89
|
+
- `saleStatus` — `SALE_SCHEDULED` (not on sale yet), `SALE_STARTED` or `SALE_ENDED`;
|
|
90
|
+
- with `SALES_DETAILS`: `salesDetails.soldCount`, `unsoldCount` (null when unlimited),
|
|
91
|
+
`reservedCount`, `soldOut`.
|
|
92
|
+
|
|
93
|
+
Other filters: `name`, `hidden`, `saleStatus`, `pricingMethod.free`, `feeType` (`$eq`, `$in`, …).
|
|
94
|
+
To find a ticket by the name the user gave, filter `eventId` and `name` together.
|
|
95
|
+
|
|
96
|
+
## Add a ticket type
|
|
97
|
+
|
|
98
|
+
`POST https://www.wixapis.com/events/v3/ticket-definitions`, one call per ticket type, up to 100 per
|
|
99
|
+
event. Create them one after another, not in parallel; on `429`, wait and retry that call before
|
|
100
|
+
moving to the next, and count the successes before reporting. Then list the event's tickets once
|
|
101
|
+
([List an event's tickets](#list-an-events-tickets)) and report what is stored.
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
curl -X POST 'https://www.wixapis.com/events/v3/ticket-definitions' \
|
|
105
|
+
-H 'Content-Type: application/json' \
|
|
106
|
+
-H 'Authorization: <AUTH>' \
|
|
107
|
+
--data-binary '{
|
|
108
|
+
"ticketDefinition": {
|
|
109
|
+
"eventId": "<EVENT_ID>",
|
|
110
|
+
"name": "Student",
|
|
111
|
+
"pricingMethod": { "fixedPrice": { "value": "12.00", "currency": "USD" } },
|
|
112
|
+
"feeType": "FEE_ADDED_AT_CHECKOUT",
|
|
113
|
+
"initialLimit": 30,
|
|
114
|
+
"salePeriod": { "endDate": "2026-11-15T05:00:00Z", "displayNotOnSale": true }
|
|
115
|
+
}
|
|
116
|
+
}'
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
`salePeriod` dates are instants: "stop selling on November 15" for a New York event is the start
|
|
120
|
+
of that day in `America/New_York` — `2026-11-15T05:00:00Z` — not `T00:00:00Z`, which is 7pm the
|
|
121
|
+
evening before. Convert
|
|
122
|
+
from the event's `dateAndTimeSettings.timeZoneId`, and say the local date and time you set.
|
|
123
|
+
Before sending, check the instant: converted back to the event's time zone it must read 00:00 on
|
|
124
|
+
the requested date. If it doesn't, fix it before the create — not with a follow-up update.
|
|
125
|
+
|
|
126
|
+
A sale date the user gives without a year is the **next such date from today** — on 20 October
|
|
127
|
+
2026, "stop selling on December 1st" is 1 December 2026. A sale period can never end after the
|
|
128
|
+
event starts: check `salePeriod.endDate` against the event's `dateAndTimeSettings.startDate`
|
|
129
|
+
before sending, and ask if that date falls after the event starts.
|
|
130
|
+
|
|
131
|
+
**Currency:** use the one the user names, as given ("20 euros" is `EUR`) — a ticket in that
|
|
132
|
+
currency is accepted even when the event has no tickets yet. When the user names none, use the
|
|
133
|
+
event's existing currency (`pricingMethod.fixedPrice.currency` of its other tickets, or
|
|
134
|
+
`registration.tickets.currency` on the event). To move an event that already has tickets to
|
|
135
|
+
another currency, see [Change the currency](#change-the-currency). The response is `{ "ticketDefinition": { "id",
|
|
136
|
+
"revision": "1", "saleStatus", ... } }`.
|
|
137
|
+
|
|
138
|
+
| Ticket | `pricingMethod` | `feeType` |
|
|
139
|
+
| --- | --- | --- |
|
|
140
|
+
| Fixed price | `{ "fixedPrice": { "value": "25.00", "currency": "USD" } }` | `FEE_ADDED_AT_CHECKOUT` |
|
|
141
|
+
| Free | `{ "fixedPrice": { "value": "0", "currency": "USD" } }` | `NO_FEE` |
|
|
142
|
+
| Donation / pay what you want (minimum may be `"0"`) | `{ "guestPrice": { "value": "5.00", "currency": "USD" } }` | `FEE_ADDED_AT_CHECKOUT` |
|
|
143
|
+
| Several prices in one ticket | `{ "pricingOptions": { "optionDetails": [ { "optionId": "<NEW_GUID>", "name": "Adult", "price": { "value": "30.00", "currency": "USD" } }, { "optionId": "<NEW_GUID>", "name": "Child", "price": { "value": "15.00", "currency": "USD" } } ] } }` | `FEE_ADDED_AT_CHECKOUT` |
|
|
144
|
+
|
|
145
|
+
- **Service fee.** Free ticket: `NO_FEE`. Paid ticket: `FEE_ADDED_AT_CHECKOUT` (the guest pays the
|
|
146
|
+
fee on top), or `FEE_INCLUDED` when the user wants to absorb the fee. On `400 INVALID_FEE_TYPE`,
|
|
147
|
+
read the error's `description`: `feeRequired=false` means the site collects no ticket fees — retry
|
|
148
|
+
that ticket once with `NO_FEE`; `feeRequired=true` means `NO_FEE` was sent on a paid ticket —
|
|
149
|
+
retry once with `FEE_ADDED_AT_CHECKOUT`.
|
|
150
|
+
- **Several prices need an `optionId` on every option** — a GUID you generate. Without it the create
|
|
151
|
+
fails with a bare `500 Internal Server Error`. Keep the ids from the response: an update must send
|
|
152
|
+
them back.
|
|
153
|
+
- **`value` is a string** — `"value": 10` fails `400 Unexpected value for field value`.
|
|
154
|
+
- **Quantity is `initialLimit`**; omit it for unlimited. If the event has a seating map, the seats
|
|
155
|
+
set the quantity and `initialLimit` is ignored.
|
|
156
|
+
- `name` is 1–30 characters, `description` up to 500, `policyText` up to 1000; a price option
|
|
157
|
+
`name` up to 200 and up to 100 options.
|
|
158
|
+
- **Read-only, never send:** `pricingMethod.free`, `pricingMethod.pricingType`, `saleStatus`,
|
|
159
|
+
`limited`, `actualLimit`, `limitPerCheckout`, `salesDetails`. They are ignored without an error, so
|
|
160
|
+
a "free" flag or a per-checkout limit you send silently does nothing. The number of tickets one
|
|
161
|
+
buyer can take per order is the event's `registration.tickets.ticketLimitPerOrder`.
|
|
162
|
+
- `428 INVALID_SALE_PERIOD` — `salePeriod.startDate` is not before `endDate` (on create and update).
|
|
163
|
+
|
|
164
|
+
## Change a ticket
|
|
165
|
+
|
|
166
|
+
`PATCH https://www.wixapis.com/events/v3/ticket-definitions/{ticketDefinition.id}`. The current
|
|
167
|
+
`revision` is required (`400 revision must not be empty` without it). Read the ticket right before
|
|
168
|
+
updating and send its `id`, current `revision`, and the fields you are changing.
|
|
169
|
+
|
|
170
|
+
**Price changes need `"mask": "pricingMethod"`.** The ticket update takes its field mask under the
|
|
171
|
+
key `mask` (not `fieldmask`); send it even though the reference schema omits it. Without it:
|
|
172
|
+
- a `fixedPrice` change returns `200` and bumps the `revision`, but the price is **not** changed;
|
|
173
|
+
- a `pricingOptions` change fails `400 INVALID_PATCH … field path is illegal`.
|
|
174
|
+
|
|
175
|
+
A narrower path such as `pricingMethod.fixedPrice.value` doesn't work either. Name, description,
|
|
176
|
+
policy, `initialLimit`, `hidden` and `salePeriod` apply without a mask.
|
|
177
|
+
Example — change a price:
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
curl -X PATCH 'https://www.wixapis.com/events/v3/ticket-definitions/<TICKET_DEFINITION_ID>' \
|
|
181
|
+
-H 'Content-Type: application/json' \
|
|
182
|
+
-H 'Authorization: <AUTH>' \
|
|
183
|
+
--data-binary '{
|
|
184
|
+
"ticketDefinition": {
|
|
185
|
+
"id": "<TICKET_DEFINITION_ID>",
|
|
186
|
+
"revision": "<REVISION>",
|
|
187
|
+
"pricingMethod": { "fixedPrice": { "value": "57.00", "currency": "USD" } }
|
|
188
|
+
},
|
|
189
|
+
"mask": "pricingMethod"
|
|
190
|
+
}'
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
- **Change the price**: send the whole `pricingMethod` for the ticket's pricing kind, with
|
|
194
|
+
`"mask": "pricingMethod"`. To change one price option of a several-prices ticket, send the full
|
|
195
|
+
`pricingOptions.optionDetails` array — every option, each with its existing `optionId`, and the new
|
|
196
|
+
price on the one that changes — with the same mask.
|
|
197
|
+
- **Rename / describe**: `name`, `description`, `policyText`.
|
|
198
|
+
- **Quantity**: `initialLimit` — not below the number already sold.
|
|
199
|
+
- **Then check the response.** The returned `ticketDefinition` must show the new value as well as a
|
|
200
|
+
`revision` one higher — a higher `revision` alone proves nothing. If the value did not change, do
|
|
201
|
+
not report success: read the ticket again and tell the user what is stored.
|
|
202
|
+
|
|
203
|
+
## Hide or show a ticket
|
|
204
|
+
|
|
205
|
+
`PATCH` as above with `"hidden": true` to hide a ticket from the event page so it can't be bought,
|
|
206
|
+
or `"hidden": false` to show it again. A hidden ticket can still be given to guests from the
|
|
207
|
+
dashboard; there is no private link or code that unlocks a hidden ticket for chosen buyers — say
|
|
208
|
+
so if the user asks for one.
|
|
209
|
+
|
|
210
|
+
## Sale period — schedule, end or reopen sales
|
|
211
|
+
|
|
212
|
+
`salePeriod` controls when one ticket can be bought:
|
|
213
|
+
|
|
214
|
+
| The user wants | `salePeriod` |
|
|
215
|
+
| --- | --- |
|
|
216
|
+
| Tickets go on sale later | `{ "startDate": "<ISO>" }` |
|
|
217
|
+
| Stop selling this ticket on a date (early bird) | `{ "endDate": "<ISO>" }` |
|
|
218
|
+
| Show the ticket while it's not on sale | add `"displayNotOnSale": true` |
|
|
219
|
+
| Stop selling this ticket now | `{ "endDate": "<now, ISO>" }` |
|
|
220
|
+
| Reopen an ended ticket | `{ "endDate": "<a future ISO date>" }` — `saleStatus` goes from `SALE_ENDED` back to `SALE_STARTED` |
|
|
221
|
+
|
|
222
|
+
Dates are ISO-8601 strings, rounded down to the minute. After the change, read `saleStatus` in the
|
|
223
|
+
response: `SALE_STARTED` means it is buyable now. If a reopened ticket still reads `SALE_ENDED`,
|
|
224
|
+
also check the event: a past event, a cancelled event, or `registration.registrationPaused: true`
|
|
225
|
+
stops all sales regardless of the ticket's sale period — reopen registration with `PATCH https://www.wixapis.com/events/v3/events/<EVENT_ID>` and
|
|
226
|
+
`{ "event": { "registration": { "registrationPaused": false } } }`.
|
|
227
|
+
|
|
228
|
+
Ending sales for **every** ticket is not how to close an event's registration — pause
|
|
229
|
+
registration on the event instead.
|
|
230
|
+
|
|
231
|
+
## Reorder tickets
|
|
232
|
+
|
|
233
|
+
`POST https://www.wixapis.com/events/v3/ticket-definitions/reorder`, moving one ticket before or
|
|
234
|
+
after another; this sets the order on the event page and in the dashboard:
|
|
235
|
+
|
|
236
|
+
```json
|
|
237
|
+
{
|
|
238
|
+
"eventId": "<EVENT_ID>",
|
|
239
|
+
"ticketDefinitionId": "<TICKET_TO_MOVE>",
|
|
240
|
+
"beforeDefinitionId": "<TICKET_IT_GOES_BEFORE>"
|
|
241
|
+
}
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
Send exactly one of `beforeDefinitionId` or `afterDefinitionId` (neither fails
|
|
245
|
+
`400 INVALID_REORDER_INSTRUCTION`). For a full new order, move the tickets one at a time from
|
|
246
|
+
second to last, each with `afterDefinitionId` set to the ticket that should precede it. The call
|
|
247
|
+
returns `{}`. The list call sorts by creation date by default, not by this order, so don't use it
|
|
248
|
+
to check the result — report the order you applied and whether every reorder call returned 2xx.
|
|
249
|
+
|
|
250
|
+
## Delete tickets
|
|
251
|
+
|
|
252
|
+
- One: `DELETE https://www.wixapis.com/events/v3/ticket-definitions/{ticketDefinitionId}`.
|
|
253
|
+
- All tickets of an event, or a filtered set: `POST https://www.wixapis.com/events/v3/bulk/ticket-definitions/delete`
|
|
254
|
+
with a **single-level** filter — `{ "filter": { "eventId": "<EVENT_ID>" } }`. Unlike the Events
|
|
255
|
+
bulk calls, there is no inner `filter`. Always include `eventId`, or the call reaches other
|
|
256
|
+
events' tickets. It returns `{}`, and a read right afterwards can still list the tickets — wait a
|
|
257
|
+
few seconds and query again before reporting what was deleted.
|
|
258
|
+
|
|
259
|
+
Deleting a ticket that has sales is allowed — nothing stops it. Before deleting one
|
|
260
|
+
(`salesDetails.soldCount` above 0), tell the user how many were sold and confirm; hiding it is
|
|
261
|
+
usually what they want. Fetching a deleted ticket afterwards returns `404`.
|
|
262
|
+
|
|
263
|
+
## Change the currency
|
|
264
|
+
|
|
265
|
+
`POST https://www.wixapis.com/events/v3/ticket-definitions/currency` with
|
|
266
|
+
`{ "eventId": "<EVENT_ID>", "currency": "EUR" }` changes the currency of **all** the event's tickets.
|
|
267
|
+
Amounts are not converted — 10 USD becomes 10 EUR — so update prices afterwards if the user wants
|
|
268
|
+
converted prices. Before calling, read the event with `"fields": ["DASHBOARD"]`: when
|
|
269
|
+
`summaries.tickets.currencyLocked` is `true` the call fails `428 CURRENCY_LOCKED` — tell the user
|
|
270
|
+
the currency can no longer be changed. Decide from that flag, not from whether the event has orders.
|
|
271
|
+
|
|
272
|
+
## Count tickets
|
|
273
|
+
|
|
274
|
+
`POST https://www.wixapis.com/events/v3/ticket-definitions/count` with
|
|
275
|
+
`{ "filter": { "eventId": "<EVENT_ID>" }, "facet": ["saleStatus"] }` returns counts per sale status,
|
|
276
|
+
as `facets.saleStatus.counts` (for example `{ "SALE_STARTED": 2 }`).
|
|
277
|
+
For sold and remaining tickets, use the list call with `SALES_DETAILS` and sum `soldCount` and
|
|
278
|
+
`unsoldCount`.
|
|
279
|
+
|
|
280
|
+
## Not supported
|
|
281
|
+
|
|
282
|
+
Say so plainly rather than approximating:
|
|
283
|
+
- a private link or code that unlocks a hidden ticket;
|
|
284
|
+
- a per-person or per-email cap across separate orders (only the per-order limit exists);
|
|
285
|
+
- a waitlist for a sold-out ticketed event (waitlists are RSVP-only);
|
|
286
|
+
- moving a sold ticket to another event or occurrence;
|
|
287
|
+
- one ticket admitting several people — create a ticket type per group size, or collect names on
|
|
288
|
+
the event's registration form ([Events Form API](https://dev.wix.com/docs/api-reference/business-solutions/events/event-management/form)).
|
|
289
|
+
|
|
290
|
+
## Related APIs
|
|
291
|
+
- **Ticket Definitions V3**: [REST](https://dev.wix.com/docs/api-reference/business-solutions/events/event-management/ticket-definitions-v3) — [Update Ticket Definition](https://dev.wix.com/docs/api-reference/business-solutions/events/event-management/ticket-definitions-v3/update-ticket-definition)
|
|
292
|
+
- [Manage Wix Events](https://dev.wix.com/docs/api-reference/business-solutions/events/skills/manage-events) — registration settings, tickets per order, tax
|
|
293
|
+
- [Manage Event Guests](https://dev.wix.com/docs/api-reference/business-solutions/events/skills/manage-event-guests) — orders, sold tickets, check-in
|