Advanced product management using Wix's GraphQL API for comprehensive product operations including variants, options, media, fulfillment, subscriptions, and complete product schemas.
From wix-ecom-coworknpx claudepluginhub itayher/wix-ecom-cowork --plugin wix-ecom-coworkThis skill uses the workspace's default tool permissions.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Designs and optimizes AI agent action spaces, tool definitions, observation formats, error recovery, and context for higher task completion rates.
Advanced product management using Wix's GraphQL API for comprehensive product operations including variants, options, media, fulfillment, subscriptions, and complete product schemas.
df7c18eb-009b-4868-9891-15e19dddbe67${API_KEY}${SITE_ID}POST /_api/wix-ecommerce-graphql-web/api-H "Authorization: ${API_KEY}"
-H "wix-site-id: ${SITE_ID}"
-H "Content-Type: application/json"
GraphQL Query: getProductByIdPreOrder
Retrieves the complete product schema including variants, options, inventory, media, custom fields, subscription plans, and fulfillment details.
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 getProductByIdPreOrder($productId: String!) { catalog { product(productId: $productId) { id name price discount { mode value } costAndProfitData { itemCost } currency inventory { status quantity preOrderInfoView { message preOrder limit } } isVisible media { id title url mediaType width height altText } productItemsSummary { productItemsCount inStockProductItemsCount inventoryQuantity } productItems { inventory { quantity status } costAndProfitData { itemCost } optionsSelections sku surcharge weight isVisible } sku productType isManageProductItems isTrackingInventory description options { id title optionType selections { id description value linkedMediaItems { url mediaType } } } customTextFields { title isMandatory inputLimit } categoryIds ribbon brand taxGroupId fulfillerId subscriptionPlans { list { id name discount { value mode } frequency duration } } } } }",
"variables": {
"productId": "PRODUCT_ID_HERE"
},
"operationName": "getProductByIdPreOrder",
"source": "WixStoresWebClient"
}'
Response Structure:
product.id - Product IDproduct.name - Product nameproduct.price - Product priceproduct.options[] - Product options (size, color, etc.)
options[].selections[] - Option valuesproduct.productItems[] - Variants with inventory
productItems[].optionsSelections - Variant combinationproductItems[].inventory - Variant-specific stockproduct.media[] - Product images/videosproduct.subscriptionPlans - Subscription configurationsproduct.fulfillerId - Fulfillment providerGraphQL Query: getProductsList
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, $sort: ProductSort) { catalog { products(offset: $offset, limit: $limit, filters: $filters, sort: $sort) { totalCount list { id name price currency inventory { status quantity } isVisible media { url } sku productType } } } }",
"variables": {
"limit": 100,
"offset": 0
},
"operationName": "getProductsList",
"source": "WixStoresWebClient"
}'
GraphQL Query: getPremiumFeatures
Check which premium eCommerce features are enabled for the store.
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 getPremiumFeatures($offset: Int, $limit: Int) { premiumFeatures(offset: $offset, limit: $limit) { name } storeInfo { hasActiveRecurringPaymentMethods } }",
"variables": {
"limit": 100,
"offset": 0
},
"operationName": "getPremiumFeatures",
"source": "WixStoresWebClient"
}'
GraphQL Query: getUnifiedFulfillers
Retrieve all fulfillment providers (dropshipping, print-on-demand, etc.) connected to the store.
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 getUnifiedFulfillers { unifiedFulfillers { id name managedProductsAssociations dashboardUrl appDetails { logoUrl duplicateProduct changePrice changeInventory manageOptions } emailNotifications { email automaticNotificationsConfiguration } } }",
"variables": {},
"operationName": "getUnifiedFulfillers",
"source": "WixStoresWebClient"
}'
GraphQL Query: getShippingGroups
Retrieve shipping groups for organizing products by shipping requirements.
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 getShippingGroups { shippingProductGroups { defaultGroup { id name } userDefinedGroups { id name } } }",
"variables": {},
"operationName": "getShippingGroups",
"source": "WixStoresWebClient"
}'
GraphQL Query: PageUrlForShoutout
Get the public storefront URL for a product.
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": "{ product(productId: \"PRODUCT_ID\") { pageUrl } }",
"operationName": "PageUrlForShoutout",
"source": "WixStoresWebClient"
}'
GraphQL returns 200 even with errors. Check the response structure:
{
"data": { ... },
"errors": [
{
"message": "Error description",
"path": ["catalog", "product"],
"extensions": { "code": "ERROR_CODE" }
}
]
}
Use offset and limit variables:
# From getProductByIdPreOrder response
jq '.data.catalog.product.productItems[] | {
variant: .optionsSelections,
sku: .sku,
inventory: .inventory.quantity,
price: .pricePerUnit
}'