Help us improve
Share bugs, ideas, or general feedback.
From wix-ecom-cowork
Manages Wix eCommerce categories and collections via REST/GraphQL APIs: query listings, create new ones, product assignment, AI categorization.
npx claudepluginhub wix/wix-ecom-cowork --plugin wix-ecom-coworkHow this skill is triggered — by the user, by Claude, or both
Slash command
/wix-ecom-cowork:category-managementThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Complete category (collection) management including creation, product assignment, organization, and AI-powered product categorization.
Handles full CRUD operations on Wix Stores products including variants, media, collections, and bulk actions via direct REST API calls. Useful for managing ecommerce catalogs.
Configures and manages Wix business solutions via REST API: stores, bookings, payments, CMS, contacts, events, forms, media, blog, calendar, domains, and more.
Manage Saleor catalog: products, variants, types, categories, collections, media, warehouse stock via GraphQL. Guides schema review, mutations, hierarchy for product data tasks.
Share bugs, ideas, or general feedback.
Complete category (collection) management including creation, product assignment, organization, and AI-powered product categorization.
df7c18eb-009b-4868-9891-15e19dddbe67${API_KEY}${SITE_ID}REST API Endpoint: GET /_api/wix-ecommerce-renderer-web/store-manager/categories
curl -X GET "https://www.wixapis.com/_api/wix-ecommerce-renderer-web/store-manager/categories" \
-H "Authorization: ${API_KEY}" \
-H "wix-site-id: ${SITE_ID}"
Response Structure:
{
"categories": [
{
"id": "category-123",
"name": "Electronics",
"slug": "electronics",
"description": "Electronic devices and gadgets",
"visible": true,
"numberOfProducts": 45,
"parentId": null
}
]
}
GraphQL Endpoint: POST /_api/wix-ecommerce-graphql-web/api
Query: categories
curl -X POST "https://www.wixapis.com/_api/wix-ecommerce-graphql-web/api" \
-H "Authorization: ${API_KEY}" \
-H "wix-site-id: ${SITE_ID}" \
-H "Content-Type: application/json" \
-d '{
"query": "{site { categoriesComponents {success categorySettings {categoryId connected} }}}",
"operationName": "categories",
"source": "WixStoresWebClient"
}'
Response:
{
"data": {
"site": {
"categoriesComponents": {
"success": true,
"categorySettings": [
{
"categoryId": "category-123",
"connected": true
}
]
}
}
}
}
Endpoint: POST https://www.wixapis.com/stores/v1/collections/query
curl -X POST "https://www.wixapis.com/stores/v1/collections/query" \
-H "Authorization: ${API_KEY}" \
-H "wix-site-id: ${SITE_ID}" \
-H "Content-Type: application/json" \
-d '{
"query": {
"paging": {"limit": 50, "offset": 0}
}
}'
Response:
{
"collections": [
{
"id": "collection-123",
"name": "Summer Collection",
"slug": "summer-collection",
"description": "Hot summer items",
"visible": true,
"numberOfProducts": 25,
"media": {
"mainMedia": {
"image": {
"url": "https://static.wixstatic.com/media/image.jpg"
}
}
}
}
],
"metadata": {
"count": 1,
"offset": 0,
"total": 5
}
}
Endpoint: POST https://www.wixapis.com/stores/v1/collections
curl -X POST "https://www.wixapis.com/stores/v1/collections" \
-H "Authorization: ${API_KEY}" \
-H "wix-site-id: ${SITE_ID}" \
-H "Content-Type: application/json" \
-d '{
"collection": {
"name": "New Category Name",
"description": "Category description here",
"visible": true
}
}'
Response:
{
"collection": {
"id": "new-collection-123",
"name": "New Category Name",
"slug": "new-category-name",
"description": "Category description here",
"visible": true,
"numberOfProducts": 0
}
}
Endpoint: PATCH https://www.wixapis.com/stores/v1/collections/{id}
curl -X PATCH "https://www.wixapis.com/stores/v1/collections/${COLLECTION_ID}" \
-H "Authorization: ${API_KEY}" \
-H "wix-site-id: ${SITE_ID}" \
-H "Content-Type: application/json" \
-d '{
"collection": {
"name": "Updated Category Name",
"description": "Updated description",
"visible": true
}
}'
Method 1: Update Product (Add Category ID)
curl -X PATCH "https://www.wixapis.com/stores/v1/products/${PRODUCT_ID}" \
-H "Authorization: ${API_KEY}" \
-H "wix-site-id: ${SITE_ID}" \
-H "Content-Type: application/json" \
-d '{
"product": {
"id": "'"${PRODUCT_ID}"'",
"collectionIds": ["collection-123", "collection-456"]
}
}'
Method 2: Bulk Assignment (GraphQL)
Use getProductsList to query products, then update multiple products:
# First, get products that should be in this category
curl -X POST "https://www.wixapis.com/_api/wix-ecommerce-graphql-web/api" \
-H "Authorization: ${API_KEY}" \
-H "wix-site-id: ${SITE_ID}" \
-H "Content-Type: application/json" \
-d '{
"query": "query getProductsList($offset: Int, $limit: Int, $filters: ProductFilters) { catalog { products(offset: $offset, limit: $limit, filters: $filters) { list { id name categoryIds } } } }",
"variables": {"limit": 100, "offset": 0},
"operationName": "getProductsList",
"source": "WixStoresWebClient"
}'
# Then bulk update products to add category
# (Use REST API PATCH in a loop or bulk endpoint)
GraphQL with Filters:
curl -X POST "https://www.wixapis.com/_api/wix-ecommerce-graphql-web/api" \
-H "Authorization: ${API_KEY}" \
-H "wix-site-id: ${SITE_ID}" \
-H "Content-Type: application/json" \
-d '{
"query": "query getProductsList($offset: Int, $limit: Int, $filters: ProductFilters) { catalog { products(offset: $offset, limit: $limit, filters: $filters) { totalCount list { id name price categoryIds } } } }",
"variables": {
"limit": 100,
"offset": 0,
"filters": {"categoryIds": ["CATEGORY_ID"]}
},
"operationName": "getProductsList",
"source": "WixStoresWebClient"
}' | jq '{
category: "CATEGORY_NAME",
totalProducts: .data.catalog.products.totalCount,
products: [.data.catalog.products.list[] | {id, name, price}]
}'
GraphQL: getProductsTotalCount
curl -X POST "https://www.wixapis.com/_api/wix-ecommerce-graphql-web/api" \
-H "Authorization: ${API_KEY}" \
-H "wix-site-id: ${SITE_ID}" \
-H "Content-Type: application/json" \
-d '{
"query": "query getProductsTotalCount($filters: ProductFilters) { catalog { products(filters: $filters) { totalCount } } }",
"variables": {
"filters": {"categoryIds": ["CATEGORY_ID"]}
},
"operationName": "getProductsTotalCount",
"source": "WixStoresWebClient"
}'
Update product and remove category ID from collectionIds:
curl -X PATCH "https://www.wixapis.com/stores/v1/products/${PRODUCT_ID}" \
-H "Authorization: ${API_KEY}" \
-H "wix-site-id: ${SITE_ID}" \
-H "Content-Type: application/json" \
-d '{
"product": {
"id": "'"${PRODUCT_ID}"'",
"collectionIds": []
}
}'
Endpoint: DELETE https://www.wixapis.com/stores/v1/collections/{id}
curl -X DELETE "https://www.wixapis.com/stores/v1/collections/${COLLECTION_ID}" \
-H "Authorization: ${API_KEY}" \
-H "wix-site-id: ${SITE_ID}"
Note: Deleting a category does NOT delete the products, only the category assignment.
For each product, analyze:
// Pseudo-code for AI category matching
function matchProductToCategory(product, categories) {
const productKeywords = extractKeywords(product.name + ' ' + product.description);
const scores = categories.map(category => {
const categoryKeywords = extractKeywords(category.name + ' ' + category.description);
const matchScore = calculateSimilarity(productKeywords, categoryKeywords);
return {
categoryId: category.id,
categoryName: category.name,
score: matchScore,
confidence: matchScore > 0.7 ? 'high' : matchScore > 0.4 ? 'medium' : 'low'
};
});
return scores.sort((a, b) => b.score - a.score)[0];
}
Clothing: shirt, dress, pants, jacket, shoes, apparel, fashion, wear Electronics: phone, computer, gadget, tech, device, electronic Home & Living: furniture, decor, kitchen, bedding, home Beauty: skincare, makeup, cosmetic, beauty, fragrance Food & Beverage: food, drink, snack, beverage, organic Sports & Fitness: fitness, sports, exercise, gym, outdoor Books & Media: book, ebook, audiobook, media, magazine Toys & Games: toy, game, puzzle, kids, children
# Get all products
products=$(curl -s -X POST "https://www.wixapis.com/stores/v1/products/query" \
-H "Authorization: ${API_KEY}" \
-H "wix-site-id: ${SITE_ID}" \
-H "Content-Type: application/json" \
-d '{"query": {"paging": {"limit": 100}}}')
# Loop and assign
for product_id in $(echo "$products" | jq -r '.products[].id'); do
curl -s -X PATCH "https://www.wixapis.com/stores/v1/products/${product_id}" \
-H "Authorization: ${API_KEY}" \
-H "wix-site-id: ${SITE_ID}" \
-H "Content-Type: application/json" \
-d '{
"product": {
"id": "'"${product_id}"'",
"collectionIds": ["TARGET_CATEGORY_ID"]
}
}' > /dev/null
echo "✅ Added product ${product_id} to category"
sleep 0.2 # Rate limiting
done