This recipe demonstrates how to list and query the sites associated with a Wix account.
SITE_LIST.READ (scope SCOPE.ACC-DC-OS.READ-SITE)Returns up to 100 sites per request. Use cursor paging (below) to retrieve more.
Endpoint: POST https://www.wixapis.com/site-list/v2/sites/query
The request takes a query object that supports filter, sort, and cursorPaging.
Request Body:
All three fields are optional — { "query": { "cursorPaging": { "limit": 50 } } } lists every site.
Request:
The response has the sites array plus two paging objects: a top-level cursorPaging
(echoes the applied limit and the next cursor) and metadata (count, cursors.next, hasNext).
⚠️ There is no pagingMetadata field. Read paging info from metadata.
Each entry in sites has these fields (from the Site schema):
| Field | Type | Notes |
|---|---|---|
id | string | Site ID — use for site-level API calls |
htmlAppId | string | Internal HTML app ID |
name | string | URL slug / internal name |
displayName | string | Human-readable site name |
createdDate / updatedDate | datetime | |
trashedDate | datetime | Present only if the site is in the trash |
published | boolean | Whether the site is published |
premium | boolean | Whether the site has a Wix Premium (paid) plan |
viewUrl | string | Public site address; empty string when unpublished. There is no siteUrl field. |
editUrl | string | Relative editor path; prefix with https://manage.wix.com to open |
thumbnail | string | Relative thumbnail path |
ownerAccountId | string | |
contributorAccountIds | string[] | |
editorType | string | e.g. EDITOR, ODEDITOR — also a valid filter field |
blocked | boolean | |
folderId / parentId | string | Set for sites organized in folders / parent-child setups |
namespace | string | e.g. WIX |
domainConnected | boolean | |
parentChildRole | string | e.g. NONE |
Cursor-based. Read the next cursor from metadata.cursors.next and stop when
metadata.hasNext is false.
The cursor does not carry the page limit, and it already encodes the filter/sort
from the first request. On follow-up pages send only the cursor (plus limit if you
want a non-default page size) — do not repeat filter or sort.
First request:
Next page (cursor from metadata.cursors.next):
Loop:
Omit filter and page through with cursorPaging until metadata.hasNext is false.
Prefer server-side filter (e.g. { "editorType": "EDITOR" }) and sort over fetching
everything and filtering client-side. Filterable fields match the site object (e.g. name,
displayName, editorType, published).
After finding a site:
id for site-level API callsLast updated: 30 June 2026