Set up what appears around an event on its page: the schedule, policies and categories. Each call takes the event's id — find it first with the query below. The event's URL slug, public guest list, details page and online conferencing are event updates, in Manage Wix Events.
Find the event by its title — this exact body:
paging is a sibling of filter inside query; nested inside filter it fails 400.includeDrafts unless the user says the event is a draft — true needs a draft-events
permission. If it fails 403, say draft events aren't readable from this connection.events[].id. If several events match, pick by date or ask
(Manage Wix Events).Reference pages for the calls below — the full contract of each; use these rather than searching for them:
| Part | Reference |
|---|---|
| Find the event, turn the schedule section on | Query Events, Update Event |
| Schedule | Add Schedule Item, Publish Draft, Query Schedule Items, Get Schedule Item, Update Schedule Item, Delete Schedule Item, Discard Draft |
| Policies | Create Policy, Query Policies, Update Policy, Delete Policy, Reorder Event Policies |
| Categories | Query Categories, Create Category, Bulk Create Category, Update Category, Delete Category, Assign Events, Unassign Events, List Event Categories, Reorder Category Events |
The request bodies below are complete for the common path; the reference pages are for the fields this recipe doesn't use.
Item calls write to a draft schedule. Always run all three steps: add the items, publish the draft, then turn the schedule section on — skipping either of the last two leaves the event page without the schedule.
Use https://www.wixapis.com/events/v1/schedule. Some reference examples show
https://www.wixapis.com/events/v1/agenda, which is not served.
1. Add items — one call per item, POST https://www.wixapis.com/events/v1/schedule/draft:
name (up to 120 characters) and timeSlot.start / timeSlot.end are required. Times are
ISO-8601; work them out in the event's time zone and send that timeZoneId (the default is UTC).description (up to 10,000), stageName (up to 30), tags (up to 5, each up to 30),
hidden. Several items can share a time slot.{ "item": { "id", ... } }.2. Publish: POST https://www.wixapis.com/events/v1/schedule/publish with
{ "eventId": "<EVENT_ID>" }.
3. Turn the section on if it isn't:
PATCH https://www.wixapis.com/events/v3/events/<EVENT_ID> with
{ "event": { "agendaSettings": { "enabled": true } }, "fields": ["AGENDA"] }.
Confirm from the three responses — each add returns the item's id, publish returns 2xx, and the
update returns agendaSettings.enabled: true. No separate read of the schedule is needed.
Read the schedule — only to list or change items that already exist:
POST https://www.wixapis.com/events/v1/schedule/query with
{ "query": { "filter": { "eventId": { "$eq": "<EVENT_ID>" } }, "paging": { "limit": 100 } } }
returns items[]. Use this call to list items, not the GET list. One item:
GET https://www.wixapis.com/events/v1/schedule/<ITEM_ID>?eventId=<EVENT_ID>&includeDraft=true.
Change items (then publish again):
PATCH https://www.wixapis.com/events/v1/schedule/draft/<ITEM_ID> with
{ "eventId": "<EVENT_ID>", "item": { "name": "Keynote" }, "fields": { "paths": ["item.name"] } }.
Always send fields.paths, one path per field you change — without it the item is replaced by
what you sent, and every field you left out (name, tags, time slot) is cleared."hidden": true or "status": "CANCELED" the same way (SCHEDULED to
restore).DELETE https://www.wixapis.com/events/v1/schedule/draft/items?eventId=<EVENT_ID>&itemIds=<ITEM_ID>.DELETE https://www.wixapis.com/events/v1/schedule/draft?eventId=<EVENT_ID>.timeSlot the same way, then publish.An event takes up to 3 policies; a fourth fails 428 POLICIES_LIMIT_REACHED — list them first
and offer to edit one instead. The examples use https://www.wixapis.com/events/v2/policies; the
reference's https://www.wixapis.com/events-policies/v2/policies is the same API.
POST https://www.wixapis.com/events/v2/policiesname 1–40 characters; body 1–50,000 and may use simple HTML (<p>, <b>, <ul>).
POST https://www.wixapis.com/events/v2/policies/query with
{ "query": { "filter": { "eventId": { "$eq": "<EVENT_ID>" } } } } → policies[] with id and
revision.PATCH https://www.wixapis.com/events/v2/policies/<POLICY_ID> with all of
id, revision (current), eventId, name and body under policy.DELETE https://www.wixapis.com/events/v2/policies/<POLICY_ID>.POST https://www.wixapis.com/events/v2/policies/reorder with eventId,
policyId, and exactly one of beforePolicyId / afterPolicyId.Categories are site-wide; create one once, then assign events to it. An event can be in several.
POST https://www.wixapis.com/events/v1/categories/query with
{ "query": { "paging": { "limit": 100 } }, "fieldset": ["COUNTS"] } → categories[] (id,
name, states) and metaData.POST https://www.wixapis.com/events/v1/categories with
{ "category": { "name": "Workshops" } } (name 1–30). Several at once (up to 10):
POST https://www.wixapis.com/events/v1/bulk/categories/create with { "categories": [ { "name": "..." } ] }.PATCH https://www.wixapis.com/events/v1/categories/<CATEGORY_ID> with
{ "category": { "id": "<CATEGORY_ID>", "name": "New name" } }.DELETE https://www.wixapis.com/events/v1/categories/<CATEGORY_ID> — the events stay.POST https://www.wixapis.com/events/v1/categories/<CATEGORY_ID>/events
with { "eventId": ["<EVENT_ID>", "<EVENT_ID>"] } (up to 100).DELETE https://www.wixapis.com/events/v1/categories/<CATEGORY_ID>/events?eventId=<EVENT_ID>&eventId=<EVENT_ID>.GET https://www.wixapis.com/events/v1/categories/<EVENT_ID> (the path
takes the event id), or Get Event with fields=CATEGORIES.POST https://www.wixapis.com/events/v1/categories/<CATEGORY_ID>/reorder
with eventId and one of beforeEventId / afterEventId.Leave categories in the RECURRING_EVENT state alone — don't rename them or assign events to
them; create and assign MANUAL categories (the default). You may delete a RECURRING_EVENT
category whose series has been deleted.
Last updated: 28 October 2026