These calls need the Wix CMS app on the site (appDefId e593b0bd-b783-45b8-97c2-873d42aacaf4); a 428, a 400 naming the app, or an empty result on a site that should have content means it is not there. List Installed Apps shows what the site has; Install Wix Apps adds it by that id.
Standard call shape (every curl below). The <AUTH> placeholder is shorthand for Authorization: Bearer <TOKEN> only. Body-bearing requests also need Content-Type: application/json.
Some CMS collections gate their items behind a draft/publish workflow instead of writing straight to the live site. Such a collection has the Draft Items plugin installed. Each item is in one of three states — DRAFT, PUBLISHED, or CHANGED (a published item with a pending draft edit) — and edits are staged as drafts until explicitly published.
This reference is for an agent that must detect whether a collection uses this workflow, read the right version of an item, and drive item state transitions (publish, unpublish, revert, delete) through the public Wix Data REST API.
A collection with the Draft Items plugin has two paired surfaces:
| Surface | Collection ID | Holds |
|---|---|---|
| Published (live) | the collection's own id (e.g. articles) | Items visible on the site |
| Paired drafts | draftItemsPluginOptions.draftsCollectionId (conventionally <collectionId>__drafts, e.g. articles__drafts) | Pending drafts (new items not yet published, or edits to a published item) |
Read the drafts collection id from the plugin — do not assume the __drafts suffix. The published collection's Draft Items plugin exposes draftItemsPluginOptions.draftsCollectionId; the drafts collection's plugin exposes draftItemsPluginOptions.publishedCollectionId. Resolve the pairing from those fields.
Item state is derived from where the item exists:
| State | Meaning | Where it lives |
|---|---|---|
| DRAFT | Not yet on the site | Only in the drafts collection |
| PUBLISHED | Live on the site, no pending edit | Only in the published collection |
| CHANGED | Live on the site and has a pending draft edit | In both the published and drafts collections |
Treat state as server-authoritative. Derive it from the published/draft surfaces (or the item the API returns) — never render an optimistic status before the write confirms.
Read the collection and inspect its plugins. A collection with the Draft Items plugin uses the draft/publish workflow.
draftItemsPluginOptions.draftsCollectionId gives the paired drafts collection to author and edit drafts against.Once the Draft Items plugin is installed, do not insert, update, patch, remove, or save items directly in the published collection. Read draftItemsPluginOptions.draftsCollectionId from the plugin and write new items and pending edits to that drafts collection. Then call Publish Data Item Draft (POST /wix-data/v2/items/publish-draft) to publish an item to the published collection. This lifecycle operation takes the published collection ID; it is the supported way to move a draft into the live collection.
Reads target a specific surface — there is no merged view:
articles).draftItemsPluginOptions.draftsCollectionId (e.g. articles__drafts).Endpoint: POST https://www.wixapis.com/wix-data/v2/items/query
dataCollectionId: "articles".dataCollectionId set to the paired drafts collection id.Insert into the drafts collection. Do not insert into the published collection while the Draft Items plugin is installed. The item starts as DRAFT and becomes live only after you call Publish Data Item Draft.
Endpoint: POST https://www.wixapis.com/wix-data/v2/items
Update or patch against the drafts collection (articles__drafts). See CMS Data Items CRUD for Update/Patch shapes.
PUT and PATCH against the published collection fail while the Draft Items plugin is installed. Create a draft of the published item, then edit that draft in the paired drafts collection. The published version remains live and unchanged until the draft is published.
dataItem, a full draft copy with the same item ID; dataItem.dataCollectionId identifies the paired drafts collection. The item is now CHANGED.For a CHANGED item, edit its existing draft directly. Create Data Item Draft returns ALREADY_EXISTS if a draft already exists; query the paired drafts collection when the item's state is unknown.
Call Publish Data Item Draft to publish the pending draft. It replaces the published item's data with the draft's content; the draft is then deleted. Pass the published collection ID. This lifecycle operation is the allowed way to write the draft's content to the published collection.
Endpoint: POST https://www.wixapis.com/wix-data/v2/items/publish-draft
Response — the newly-published item (the draft is gone):
NOT_FOUND if no pending draft exists for that id.Retracts a published item back to draft state. Pass the published collection id.
Endpoint: POST https://www.wixapis.com/wix-data/v2/items/unpublish
copyToDraft controls whether the published data is copied into the drafts collection:
copyToDraft | Behavior | Use for |
|---|---|---|
true (default) | Removes the live copy and copies its data into a draft. Any existing pending draft for that ID is overwritten, discarding its unpublished edits. | Take the item offline and retain the previously-published content as a draft. |
false | Removes the live copy without creating a draft. Any existing pending draft is preserved unchanged. No dataItem is returned. | Remove the live version while leaving any pending draft intact. |
copyToDraft: true) carries the new draft, not the removed live item.NOT_FOUND if no published item exists with that id.Discard the pending draft while keeping the live version as-is: delete the item from the drafts collection.
Permanent deletion is irreversible. Confirm with the user before calling Unpublish Data Item with copyToDraft: false or deleting a draft, unless the request already names the items to remove.
To permanently delete a published item, call Unpublish Data Item with copyToDraft: false to remove it from the published collection. This preserves any existing pending draft, so query the paired drafts collection for that item ID next. Delete the draft only if the query returns it; when no draft exists, skip the DELETE call. For a CHANGED item, this deletes its preserved pending draft. For a PUBLISHED item with no pending draft, unpublishing completes the deletion.
If an item was never published and exists only in the drafts collection (DRAFT), delete it directly from the paired drafts collection. Do not call Unpublish Data Item; it returns NOT_FOUND when no published item exists.
Enable — add the Draft Items plugin (requires collection-management permission). Use the dedicated endpoint; the Draft Items plugin cannot be added through the generic add-plugin call.
Endpoint: POST https://www.wixapis.com/wix-data/v2/collections/add-draft-items-plugin
publishPluginConflictAction controls what happens if the legacy Publish plugin is already installed:
| Value | Behavior |
|---|---|
FAIL_WHEN_PUBLISH_INSTALLED | Fail if the Publish plugin is already installed. |
COPY_DRAFT_ITEMS_WITH_DRAFT_STATUS | Copy draft items with draft status; where a published version already exists, discard the draft item. |
Disable — remove the plugin:
Endpoint: POST https://www.wixapis.com/wix-data/v2/collections/delete-draft-items-plugin
draftItemsRemovalAction decides the fate of existing drafts:
| Value | Behavior |
|---|---|
FAIL_IF_DRAFT_ITEMS_EXIST | Fail if any draft items exist. |
DISCARD_EXISTING_DRAFT_ITEMS | Discard draft items (data loss). |
PUBLISH_EXISTING_DRAFT_ITEMS | Publish draft items, overwriting any currently published items with the same ids. |
At the REST level, every read/author/publish/unpublish call here goes through the Data Items API and requires write access to the collection's data items. Beyond that, individual draft and publish actions may be further permission-restricted per caller on the collection, and there's no way to introspect those permissions ahead of time — so attempt the action and handle authorization errors gracefully if the write is rejected.
| Collection state | Desired action | API call | Permission needed |
|---|---|---|---|
| Draft Items plugin absent | Any write | Normal insert/update — writes go live immediately | Write Data Items |
| Draft Items enabled | Detect workflow | GET https://www.wixapis.com/wix-data/v2/collections/{id} → inspect plugins for the Draft Items plugin; read draftItemsPluginOptions.draftsCollectionId | (read) |
| Draft Items enabled | Read published items | POST https://www.wixapis.com/wix-data/v2/items/query on the published id | read |
| Draft Items enabled | Read drafts | POST https://www.wixapis.com/wix-data/v2/items/query on the drafts collection id | read |
| PUBLISHED | Edit into a pending draft (→ CHANGED) | Create the draft (createDataItemDraft), then edit it on the drafts collection | Write Data Items |
| — | Create new draft (→ DRAFT) | POST https://www.wixapis.com/wix-data/v2/items on the drafts collection | Write Data Items |
| DRAFT / CHANGED | Publish (→ PUBLISHED) | POST https://www.wixapis.com/wix-data/v2/items/publish-draft (published id) | Write Data Items |
| PUBLISHED / CHANGED | Remove from live collection, keep as draft (→ DRAFT) | Unpublish Data Item — POST https://www.wixapis.com/wix-data/v2/items/unpublish, copyToDraft:true | Write Data Items |
| PUBLISHED / CHANGED | Remove live copy without creating a draft; preserve any existing draft | Unpublish Data Item — POST https://www.wixapis.com/wix-data/v2/items/unpublish, copyToDraft:false | Write Data Items |
| CHANGED | Revert to live version (discard edit) | DELETE https://www.wixapis.com/wix-data/v2/items/{id}?dataCollectionId=<drafts id> | Write Data Items |
| PUBLISHED / CHANGED | Permanently delete (confirm first unless the request names the item) | POST https://www.wixapis.com/wix-data/v2/items/unpublish with copyToDraft:false (published id), then query and delete any remaining draft | Write Data Items |
| DRAFT (never published) | Permanently delete (confirm first unless the request names the item) | DELETE https://www.wixapis.com/wix-data/v2/items/{id}?dataCollectionId=<drafts id> | Write Data Items |
| plain, no plugin | Enable workflow | POST https://www.wixapis.com/wix-data/v2/collections/add-draft-items-plugin | Manage Data Collections |
copyToDraft: false or a draft DELETE unless the request already names the items to remove. For PUBLISHED or CHANGED items, call Unpublish Data Item with the published collection ID and copyToDraft: false, then query and delete any remaining draft from the paired drafts collection. For a DRAFT that was never published, delete it directly from the paired drafts collection; Unpublish Data Item would return NOT_FOUND.draftItemsPluginOptions.draftsCollectionId off the published collection's Draft Items plugin rather than assuming a __drafts suffix.publish-draft and unpublish — not the drafts collection id. Author and edit drafts against the drafts collection id.publish-draft, the pending draft no longer exists; the returned item is the live one.copyToDraft: true — any pending edit for that id is replaced with the previously-published data.consistentRead: true if you must read immediately after a write.Last updated: 13 October 2026