This skill provides foundational patterns for making direct Wix REST API calls without using MCP tools. All requests use curl commands with proper authentication and headers.
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.
Compares coding agents like Claude Code and Aider on custom YAML-defined codebase tasks using git worktrees, measuring pass rate, cost, time, and consistency.
This skill provides foundational patterns for making direct Wix REST API calls without using MCP tools. All requests use curl commands with proper authentication and headers.
df7c18eb-009b-4868-9891-15e19dddbe67 (hard-coded)${API_KEY} (environment variable)${SITE_ID} (environment variable)Site-level requests (most common):
-H "Authorization: ${API_KEY}"
-H "wix-site-id: ${SITE_ID}"
-H "Content-Type: application/json"
Account-level requests (rare):
-H "Authorization: ${API_KEY}"
-H "wix-account-id: ${ACCOUNT_ID}"
-H "Content-Type: application/json"
wix-site-id OR wix-account-id, NOT bothContent-Type: application/jsonhttps://www.wixapis.com/stores/v1/
https://www.wixapis.com/stores-reader/v1/
https://www.wixapis.com/stores/v2/
https://www.wixapis.com/stores/v3/
Note: Each site supports either V1 or V3, not both. Use Catalog Versioning API to determine which version a site uses.
curl -X GET "https://www.wixapis.com/stores/v1/products/${PRODUCT_ID}" \
-H "Authorization: ${API_KEY}" \
-H "wix-site-id: ${SITE_ID}" \
-H "Accept: application/json"
curl -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": {
"filter": "{\"visible\": true}",
"paging": {"limit": 50, "offset": 0}
}
}'
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": {
"name": "Updated Product Name",
"price": 29.99
}
}'
curl -X POST "https://www.wixapis.com/stores/v1/bulk/products/update" \
-H "Authorization: ${API_KEY}" \
-H "wix-site-id: ${SITE_ID}" \
-H "Content-Type: application/json" \
-d '{
"set": [
{
"id": "product-1",
"property": "visible",
"value": true
}
]
}'
curl -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,
"offset": 0
}
}
}'
Response includes pagination metadata:
{
"products": [...],
"metadata": {
"count": 100,
"offset": 0,
"total": 450
}
}
Iterate through pages:
"offset": 0"offset": 100"offset": 200offset + count >= totalFilters use JSON string format inside query:
-d '{
"query": {
"filter": "{\"price\": {\"$gte\": 10, \"$lte\": 100}}"
}
}'
Common filter operators:
$eq - equals$ne - not equals$gt - greater than$gte - greater than or equal$lt - less than$lte - less than or equal$in - value in array$and - logical AND$or - logical OR-d '{
"query": {
"sort": "{\"price\": \"asc\"}",
"paging": {"limit": 50}
}
}'
Sort directions:
"asc" - ascending"desc" - descending200 - Success400 - Bad Request (invalid parameters)401 - Unauthorized (invalid API key)403 - Forbidden (insufficient permissions)404 - Not Found (resource doesn't exist)429 - Too Many Requests (rate limit)500 - Internal Server Error{
"error": {
"code": "INVALID_ARGUMENT",
"message": "Product ID is required",
"details": {
"applicationError": {
"description": "Product ID cannot be empty",
"code": "MISSING_REQUIRED_FIELD"
}
}
}
}
response=$(curl -s -w "\n%{http_code}" -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": {}}')
http_code=$(echo "$response" | tail -n1)
body=$(echo "$response" | sed '$d')
if [ "$http_code" -ge 400 ]; then
echo "Error: HTTP $http_code"
echo "$body" | jq '.error'
exit 1
fi
echo "$body" | jq '.'
Wix API Rate Limits:
Best Practices:
X-RateLimit-* headers in responses{
"product": {
"id": "abc123",
"name": "Product Name",
"price": 29.99,
"visible": true
}
}
{
"products": [
{
"id": "abc123",
"name": "Product 1"
}
],
"metadata": {
"count": 1,
"offset": 0,
"total": 1
}
}
{
"bulkActionMetadata": {
"totalSuccesses": 10,
"totalFailures": 0,
"undetailedFailures": 0
},
"results": [
{
"itemMetadata": {
"id": "product-1",
"originalIndex": 0,
"success": true
}
}
]
}
curl -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": 1}}}'
Expected response: HTTP 200 with product data
# Test read permission
curl -X GET "https://www.wixapis.com/stores/v1/products/${PRODUCT_ID}" \
-H "Authorization: ${API_KEY}" \
-H "wix-site-id: ${SITE_ID}"
# Test write permission
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": {"name": "Test Update"}}'
export API_KEY="your-api-key-here"
export SITE_ID="your-site-id-here"
export APP_ID="df7c18eb-009b-4868-9891-15e19dddbe67"
-H "Authorization: ${API_KEY}" \
-H "wix-site-id: ${SITE_ID}" \
-H "Content-Type: application/json"
curl ... | jq '.'
curl ... > response.json
curl -v ...