From wix-ecom-cowork
Manages Wix eCommerce categories and collections via REST/GraphQL APIs: query listings, create new ones, product assignment, AI categorization.
How 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.
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
npx claudepluginhub wix/wix-ecom-cowork --plugin wix-ecom-coworkHandles full CRUD operations on Wix Stores products including variants, media, collections, and bulk actions via direct REST API calls. Useful for managing ecommerce catalogs.
Manage Saleor catalog: products, variants, types, categories, collections, media, warehouse stock via GraphQL. Guides schema review, mutations, hierarchy for product data tasks.
Configures and manages Wix business solutions via REST API: stores, bookings, payments, CMS, contacts, blog, calendar, domains, and more. For site setup, entity management, and backend integrations.