@wix/agent-skills 1.16.3 → 1.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/skills/wix-app/SKILL.md +115 -12
- package/skills/wix-app/references/APP_MARKET_REVIEW.md +1 -1
- package/skills/wix-app/references/BACKEND_API.md +18 -0
- package/skills/wix-app/references/CUSTOM_ELEMENT_WIDGET.md +6 -0
- package/skills/wix-app/references/DASHBOARD_MODAL.md +10 -2
- package/skills/wix-app/references/DASHBOARD_PAGE.md +32 -70
- package/skills/wix-app/references/EDITOR_REACT_COMPONENT.md +145 -127
- package/skills/wix-app/references/SITE_PLUGIN.md +14 -2
- package/skills/wix-app/references/WIX_PATTERNS_DOCS.md +74 -68
- package/skills/wix-app/references/backend-event/COMMON-EVENTS.md +2 -2
- package/skills/wix-app/references/dashboard-page/COLLECTION_TOOLKIT.md +79 -0
- package/skills/wix-app/references/dashboard-page/ENTITY_PAGE_TOOLKIT.md +73 -0
- package/skills/wix-app/references/dashboard-page/PATTERNS_BUNDLE_READING.md +52 -0
- package/skills/wix-app/references/dashboard-page/UX_SUCCESS_MODEL.md +184 -0
- package/skills/wix-app/references/editor-react-component/ACCESSIBILITY.md +182 -99
- package/skills/wix-app/references/editor-react-component/ANIMATED-COMPONENTS.md +94 -49
- package/skills/wix-app/references/editor-react-component/BRANDED-COMPONENTS.md +16 -6
- package/skills/wix-app/references/editor-react-component/BROWSER-SUPPORT.md +56 -0
- package/skills/wix-app/references/editor-react-component/COMPONENT-CONTRACT.md +275 -0
- package/skills/wix-app/references/editor-react-component/COMPONENT-PREVIEW.md +35 -40
- package/skills/wix-app/references/editor-react-component/CSS-GUIDELINES.md +167 -445
- package/skills/wix-app/references/editor-react-component/DESIGN-STATES.md +56 -29
- package/skills/wix-app/references/editor-react-component/DIRECTIONALITY.md +53 -158
- package/skills/wix-app/references/editor-react-component/EDITOR-EXTENSION-CONFIGURATION.md +78 -0
- package/skills/wix-app/references/editor-react-component/FUNCTION-HANDLERS.md +42 -134
- package/skills/wix-app/references/editor-react-component/MANIFEST-ERRORS.md +11 -3
- package/skills/wix-app/references/editor-react-component/PARTS.md +46 -24
- package/skills/wix-app/references/editor-react-component/PROPS-VS-CSS.md +63 -179
- package/skills/wix-app/references/editor-react-component/REACT-GUIDELINES.md +79 -163
- package/skills/wix-app/references/editor-react-component/SITE-CONTEXT-HOOKS.md +36 -21
- package/skills/wix-app/references/editor-react-component/SSR.md +30 -99
- package/skills/wix-base44-connector/SKILL.md +156 -50
- package/skills/wix-base44-connector/references/CAPABILITY_MAP.md +78 -0
- package/skills/wix-base44-connector/scripts/utils.js +239 -45
- package/skills/wix-headless/entry/bootstrap.mjs +9 -2
- package/skills/wix-headless/entry/skill.md +1 -1
- package/skills/wix-headless/references/CAPABILITIES.md +9 -1
- package/skills/wix-headless/references/DESIGN.md +1 -0
- package/skills/wix-headless/references/DISCOVERY.md +2 -1
- package/skills/wix-headless/references/IMAGE_GENERATION.md +1 -0
- package/skills/wix-headless/references/SDK_HANDOFF.md +5 -2
- package/skills/wix-headless/references/SEED.md +2 -1
- package/skills/wix-headless/references/SETUP.md +1 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-a-blog.md +2 -2
- package/skills/wix-headless/references/inline-recipes/how-to-code-a-store.md +68 -31
- package/skills/wix-headless/references/inline-recipes/how-to-code-forms.md +26 -10
- package/skills/wix-headless/references/inline-recipes/how-to-code-members-astro.md +8 -8
- package/skills/wix-headless/references/inline-recipes/how-to-code-members-custom-login.md +1 -1
- package/skills/wix-headless/references/inline-recipes/how-to-code-members-non-astro.md +1 -1
- package/skills/wix-headless/references/inline-recipes/how-to-code-pricing-plans.md +10 -8
- package/skills/wix-headless/references/inline-recipes/how-to-code-rentals.md +254 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-restaurant-orders.md +27 -24
- package/skills/wix-headless/references/inline-recipes/setup-online-store.md +13 -0
- package/skills/wix-headless/references/inline-recipes/setup-rentals.md +254 -0
- package/skills/wix-headless/references/managed/AUTHENTICATION.md +5 -0
- package/skills/wix-headless/references/non-astro.md +1 -1
- package/skills/wix-headless-fast/SKILL.md +166 -0
- package/skills/wix-headless-fast/entry/skill.md +99 -0
- package/skills/wix-headless-fast/install/deploy.mjs +433 -0
- package/skills/wix-headless-fast/install/fast-path.mjs +141 -0
- package/skills/wix-headless-fast/references/blog/INSTRUCTIONS.md +137 -0
- package/skills/wix-headless-fast/references/blog/app/components/blog/BlogFeedView.tsx +137 -0
- package/skills/wix-headless-fast/references/blog/app/components/blog/PostView.tsx +113 -0
- package/skills/wix-headless-fast/references/blog/app/components/blog/RichContent.tsx +42 -0
- package/skills/wix-headless-fast/references/blog/app/hooks/blog/useBlogFeed.ts +123 -0
- package/skills/wix-headless-fast/references/blog/app/hooks/blog/usePost.ts +70 -0
- package/skills/wix-headless-fast/references/blog/app/wix/blog/posts.ts +99 -0
- package/skills/wix-headless-fast/references/blog/app/wix/blog/taxonomy.ts +76 -0
- package/skills/wix-headless-fast/references/blog/app/wix/blog/types.ts +62 -0
- package/skills/wix-headless-fast/references/blog/app-astro/layouts/SiteLayout.astro +40 -0
- package/skills/wix-headless-fast/references/blog/app-astro/pages/blog/[...slug].astro +99 -0
- package/skills/wix-headless-fast/references/blog/app-astro/pages/blog.astro +24 -0
- package/skills/wix-headless-fast/references/blog/lock/astro/package-lock.json +16156 -0
- package/skills/wix-headless-fast/references/blog/seed/SEED.md +72 -0
- package/skills/wix-headless-fast/references/blog/seed/seed-blog.mjs +287 -0
- package/skills/wix-headless-fast/references/bookings/INSTRUCTIONS.md +129 -0
- package/skills/wix-headless-fast/references/bookings/app/components/bookings/ServiceBookingView.tsx +143 -0
- package/skills/wix-headless-fast/references/bookings/app/components/bookings/ServicesView.tsx +119 -0
- package/skills/wix-headless-fast/references/bookings/app/hooks/bookings/useBookingFlow.ts +138 -0
- package/skills/wix-headless-fast/references/bookings/app/hooks/bookings/useServices.ts +54 -0
- package/skills/wix-headless-fast/references/bookings/app/wix/bookings/booking.ts +206 -0
- package/skills/wix-headless-fast/references/bookings/app/wix/bookings/services.ts +96 -0
- package/skills/wix-headless-fast/references/bookings/app/wix/bookings/types.ts +70 -0
- package/skills/wix-headless-fast/references/bookings/app-astro/layouts/SiteLayout.astro +40 -0
- package/skills/wix-headless-fast/references/bookings/app-astro/pages/services/[slug].astro +76 -0
- package/skills/wix-headless-fast/references/bookings/app-astro/pages/services.astro +22 -0
- package/skills/wix-headless-fast/references/bookings/lock/astro/package-lock.json +11962 -0
- package/skills/wix-headless-fast/references/bookings/seed/SEED.md +61 -0
- package/skills/wix-headless-fast/references/bookings/seed/seed-bookings.mjs +302 -0
- package/skills/wix-headless-fast/references/cms/INSTRUCTIONS.md +179 -0
- package/skills/wix-headless-fast/references/cms/app/hooks/cms/useCollection.ts +83 -0
- package/skills/wix-headless-fast/references/cms/app/hooks/cms/useItem.ts +57 -0
- package/skills/wix-headless-fast/references/cms/app/wix/cms/items.ts +151 -0
- package/skills/wix-headless-fast/references/cms/app/wix/cms/types.ts +75 -0
- package/skills/wix-headless-fast/references/cms/app-astro/layouts/SiteLayout.astro +41 -0
- package/skills/wix-headless-fast/references/cms/lock/astro/package-lock.json +11262 -0
- package/skills/wix-headless-fast/references/cms/seed/SEED.md +103 -0
- package/skills/wix-headless-fast/references/cms/seed/seed-cms.mjs +324 -0
- package/skills/wix-headless-fast/references/events/INSTRUCTIONS.md +149 -0
- package/skills/wix-headless-fast/references/events/app/components/events/EventConfirmationView.tsx +66 -0
- package/skills/wix-headless-fast/references/events/app/components/events/EventRegistrationView.tsx +176 -0
- package/skills/wix-headless-fast/references/events/app/components/events/EventsView.tsx +118 -0
- package/skills/wix-headless-fast/references/events/app/hooks/events/useEventRegistration.ts +117 -0
- package/skills/wix-headless-fast/references/events/app/hooks/events/useEvents.ts +59 -0
- package/skills/wix-headless-fast/references/events/app/wix/events/events.ts +136 -0
- package/skills/wix-headless-fast/references/events/app/wix/events/registration.ts +128 -0
- package/skills/wix-headless-fast/references/events/app/wix/events/types.ts +61 -0
- package/skills/wix-headless-fast/references/events/app-astro/layouts/SiteLayout.astro +40 -0
- package/skills/wix-headless-fast/references/events/app-astro/pages/event-confirmation.astro +12 -0
- package/skills/wix-headless-fast/references/events/app-astro/pages/events/[slug].astro +80 -0
- package/skills/wix-headless-fast/references/events/app-astro/pages/events.astro +21 -0
- package/skills/wix-headless-fast/references/events/lock/astro/package-lock.json +11884 -0
- package/skills/wix-headless-fast/references/events/seed/SEED.md +86 -0
- package/skills/wix-headless-fast/references/events/seed/seed-events.mjs +276 -0
- package/skills/wix-headless-fast/references/forms/INSTRUCTIONS.md +150 -0
- package/skills/wix-headless-fast/references/forms/app/hooks/forms/useWixForm.ts +317 -0
- package/skills/wix-headless-fast/references/forms/app/wix/forms/forms.ts +269 -0
- package/skills/wix-headless-fast/references/forms/app/wix/forms/submissions.ts +231 -0
- package/skills/wix-headless-fast/references/forms/app/wix/forms/types.ts +135 -0
- package/skills/wix-headless-fast/references/forms/lock/astro/package-lock.json +10593 -0
- package/skills/wix-headless-fast/references/forms/seed/SEED.md +108 -0
- package/skills/wix-headless-fast/references/forms/seed/seed-forms.mjs +320 -0
- package/skills/wix-headless-fast/references/members/INSTRUCTIONS.md +63 -0
- package/skills/wix-headless-fast/references/members/app/components/members/AccountView.tsx +60 -0
- package/skills/wix-headless-fast/references/members/app/components/members/LoginForm.tsx +155 -0
- package/skills/wix-headless-fast/references/members/app/components/members/MemberMenu.tsx +78 -0
- package/skills/wix-headless-fast/references/members/app/components/members/RequireAuth.tsx +47 -0
- package/skills/wix-headless-fast/references/members/app/hooks/members/useMember.ts +66 -0
- package/skills/wix-headless-fast/references/members/app/wix/members/auth.ts +88 -0
- package/skills/wix-headless-fast/references/members/app/wix/members/client.ts +53 -0
- package/skills/wix-headless-fast/references/members/app/wix/members/member-store.ts +122 -0
- package/skills/wix-headless-fast/references/members/app/wix/members/members.ts +50 -0
- package/skills/wix-headless-fast/references/members/app/wix/members/types.ts +21 -0
- package/skills/wix-headless-fast/references/members/app-astro/layouts/SiteLayout.astro +42 -0
- package/skills/wix-headless-fast/references/members/app-astro/pages/account.astro +10 -0
- package/skills/wix-headless-fast/references/members/app-astro/pages/login.astro +11 -0
- package/skills/wix-headless-fast/references/members/lock/astro/package-lock.json +10329 -0
- package/skills/wix-headless-fast/references/members/seed/SEED.md +39 -0
- package/skills/wix-headless-fast/references/members/seed/seed-members.mjs +94 -0
- package/skills/wix-headless-fast/references/portfolio/INSTRUCTIONS.md +134 -0
- package/skills/wix-headless-fast/references/portfolio/app/components/portfolio/CollectionProjectsView.tsx +110 -0
- package/skills/wix-headless-fast/references/portfolio/app/components/portfolio/CollectionsView.tsx +90 -0
- package/skills/wix-headless-fast/references/portfolio/app/components/portfolio/ProjectDetailView.tsx +115 -0
- package/skills/wix-headless-fast/references/portfolio/app/hooks/portfolio/useCollectionProjects.ts +59 -0
- package/skills/wix-headless-fast/references/portfolio/app/hooks/portfolio/useCollections.ts +39 -0
- package/skills/wix-headless-fast/references/portfolio/app/hooks/portfolio/useProjectDetail.ts +58 -0
- package/skills/wix-headless-fast/references/portfolio/app/wix/portfolio/portfolio.ts +165 -0
- package/skills/wix-headless-fast/references/portfolio/app/wix/portfolio/types.ts +55 -0
- package/skills/wix-headless-fast/references/portfolio/app-astro/layouts/SiteLayout.astro +40 -0
- package/skills/wix-headless-fast/references/portfolio/app-astro/pages/portfolio/[slug].astro +30 -0
- package/skills/wix-headless-fast/references/portfolio/app-astro/pages/portfolio.astro +21 -0
- package/skills/wix-headless-fast/references/portfolio/app-astro/pages/projects/[slug].astro +29 -0
- package/skills/wix-headless-fast/references/portfolio/lock/astro/package-lock.json +10197 -0
- package/skills/wix-headless-fast/references/portfolio/seed/SEED.md +78 -0
- package/skills/wix-headless-fast/references/portfolio/seed/seed-portfolio.mjs +258 -0
- package/skills/wix-headless-fast/references/pricing-plans/INSTRUCTIONS.md +133 -0
- package/skills/wix-headless-fast/references/pricing-plans/app/components/pricing-plans/PlanDetailView.tsx +58 -0
- package/skills/wix-headless-fast/references/pricing-plans/app/components/pricing-plans/PlansView.tsx +126 -0
- package/skills/wix-headless-fast/references/pricing-plans/app/hooks/pricing-plans/usePlanPurchase.ts +37 -0
- package/skills/wix-headless-fast/references/pricing-plans/app/hooks/pricing-plans/usePlans.ts +39 -0
- package/skills/wix-headless-fast/references/pricing-plans/app/wix/pricing-plans/plans.ts +75 -0
- package/skills/wix-headless-fast/references/pricing-plans/app/wix/pricing-plans/purchase.ts +45 -0
- package/skills/wix-headless-fast/references/pricing-plans/app/wix/pricing-plans/types.ts +30 -0
- package/skills/wix-headless-fast/references/pricing-plans/app-astro/layouts/SiteLayout.astro +41 -0
- package/skills/wix-headless-fast/references/pricing-plans/app-astro/pages/plans/[slug].astro +40 -0
- package/skills/wix-headless-fast/references/pricing-plans/app-astro/pages/plans.astro +21 -0
- package/skills/wix-headless-fast/references/pricing-plans/lock/astro/package-lock.json +11226 -0
- package/skills/wix-headless-fast/references/pricing-plans/seed/SEED.md +71 -0
- package/skills/wix-headless-fast/references/pricing-plans/seed/seed-pricing-plans.mjs +279 -0
- package/skills/wix-headless-fast/references/restaurants/INSTRUCTIONS.md +165 -0
- package/skills/wix-headless-fast/references/restaurants/app/components/restaurants/MenuView.tsx +142 -0
- package/skills/wix-headless-fast/references/restaurants/app/components/restaurants/OrderCartButton.tsx +26 -0
- package/skills/wix-headless-fast/references/restaurants/app/components/restaurants/OrderCartDrawer.tsx +121 -0
- package/skills/wix-headless-fast/references/restaurants/app/components/restaurants/ReservationView.tsx +155 -0
- package/skills/wix-headless-fast/references/restaurants/app/hooks/restaurants/useMenus.ts +55 -0
- package/skills/wix-headless-fast/references/restaurants/app/hooks/restaurants/useOrderCart.ts +43 -0
- package/skills/wix-headless-fast/references/restaurants/app/hooks/restaurants/useReservation.ts +177 -0
- package/skills/wix-headless-fast/references/restaurants/app/wix/restaurants/menu.ts +165 -0
- package/skills/wix-headless-fast/references/restaurants/app/wix/restaurants/order-store.ts +103 -0
- package/skills/wix-headless-fast/references/restaurants/app/wix/restaurants/ordering.ts +254 -0
- package/skills/wix-headless-fast/references/restaurants/app/wix/restaurants/reservations.ts +146 -0
- package/skills/wix-headless-fast/references/restaurants/app/wix/restaurants/types.ts +168 -0
- package/skills/wix-headless-fast/references/restaurants/app-astro/layouts/SiteLayout.astro +47 -0
- package/skills/wix-headless-fast/references/restaurants/app-astro/pages/menu.astro +22 -0
- package/skills/wix-headless-fast/references/restaurants/app-astro/pages/reservations.astro +12 -0
- package/skills/wix-headless-fast/references/restaurants/lock/astro/package-lock.json +12560 -0
- package/skills/wix-headless-fast/references/restaurants/seed/SEED.md +81 -0
- package/skills/wix-headless-fast/references/restaurants/seed/seed-restaurants.mjs +479 -0
- package/skills/wix-headless-fast/references/shared/CONTENT.md +22 -0
- package/skills/wix-headless-fast/references/shared/CUSTOM_OPERATIONS.md +73 -0
- package/skills/wix-headless-fast/references/shared/DESIGN.md +26 -0
- package/skills/wix-headless-fast/references/shared/app/styles/global.css +52 -0
- package/skills/wix-headless-fast/references/shared/app/wix/config.ts +15 -0
- package/skills/wix-headless-fast/references/shared/app/wix/media.ts +27 -0
- package/skills/wix-headless-fast/references/shared/app/wix/money.ts +24 -0
- package/skills/wix-headless-fast/references/shared/app/wix/sdk.ts +76 -0
- package/skills/wix-headless-fast/references/shared/capabilities/media-upload/app/wix/media-upload/client.ts +46 -0
- package/skills/wix-headless-fast/references/shared/capabilities/media-upload/app-astro/pages/api/wix/media-upload.ts +46 -0
- package/skills/wix-headless-fast/references/shared/seed/images.mjs +145 -0
- package/skills/wix-headless-fast/references/storefront/INSTRUCTIONS.md +149 -0
- package/skills/wix-headless-fast/references/storefront/app/components/storefront/CartButton.tsx +26 -0
- package/skills/wix-headless-fast/references/storefront/app/components/storefront/CartDrawer.tsx +121 -0
- package/skills/wix-headless-fast/references/storefront/app/components/storefront/ProductCard.tsx +100 -0
- package/skills/wix-headless-fast/references/storefront/app/components/storefront/ProductDetailView.tsx +130 -0
- package/skills/wix-headless-fast/references/storefront/app/components/storefront/ProductGrid.tsx +48 -0
- package/skills/wix-headless-fast/references/storefront/app/components/storefront/ShopView.tsx +66 -0
- package/skills/wix-headless-fast/references/storefront/app/components/storefront/VariantPicker.tsx +103 -0
- package/skills/wix-headless-fast/references/storefront/app/hooks/storefront/useCart.ts +48 -0
- package/skills/wix-headless-fast/references/storefront/app/hooks/storefront/useProductDetail.ts +140 -0
- package/skills/wix-headless-fast/references/storefront/app/hooks/storefront/useShop.ts +80 -0
- package/skills/wix-headless-fast/references/storefront/app/wix/storefront/cart-store.ts +101 -0
- package/skills/wix-headless-fast/references/storefront/app/wix/storefront/cart.ts +221 -0
- package/skills/wix-headless-fast/references/storefront/app/wix/storefront/catalog.ts +215 -0
- package/skills/wix-headless-fast/references/storefront/app/wix/storefront/types.ts +109 -0
- package/skills/wix-headless-fast/references/storefront/app-astro/layouts/SiteLayout.astro +46 -0
- package/skills/wix-headless-fast/references/storefront/app-astro/pages/products/[slug].astro +56 -0
- package/skills/wix-headless-fast/references/storefront/app-astro/pages/shop.astro +23 -0
- package/skills/wix-headless-fast/references/storefront/lock/astro/package-lock.json +12247 -0
- package/skills/wix-headless-fast/references/storefront/seed/SEED.md +85 -0
- package/skills/wix-headless-fast/references/storefront/seed/seed-store.mjs +415 -0
- package/skills/wix-manage/SKILL.md +28 -2
- package/skills/wix-manage/references/bookings/booking-system-integration-gaps.md +20 -13
- package/skills/wix-manage/references/bookings/end-to-end-booking-flow.md +24 -11
- package/skills/wix-manage/references/cms/cms-ecommerce-catalog-integration.md +5 -5
- package/skills/wix-manage/references/google-ads/manage-campaign-success-guide.md +141 -0
- package/skills/wix-manage/references/google-business-profile/connect-google-business-profile.md +134 -0
- package/skills/wix-manage/references/google-business-profile/manage-google-business-profile-locations.md +182 -0
- package/skills/wix-manage/references/marketing/create-and-publish-social-post.md +3 -0
- package/skills/wix-manage/references/seo/manage-seo-tags.md +315 -0
- package/skills/wix-manage/references/seo/manage-url-redirects.md +250 -0
- package/skills/wix-manage/references/sites/query-sites.md +72 -161
- package/skills/wix-manage/references/stores/create-product-catalog-v3.md +21 -6
- package/skills/wix-manage/references/stores/update-product-with-options.md +83 -0
- package/skills/wix-replatform/resources/rp-mapper/wix-business-solutions-taxonomy.md +5 -6
- package/skills/wix-vibe-headless/SKILL.md +18 -4
- package/skills/wix-vibe-headless/install/deploy.cjs +12 -4
- package/skills/wix-vibe-headless/install/pin-agents-md.cjs +2 -1
- package/skills/wix-vibe-headless/platforms/base44-ecom-light-seed.md +16 -10
- package/skills/wix-vibe-headless/platforms/base44-ecom-light.md +13 -8
- package/skills/wix-vibe-headless/platforms/base44.md +27 -62
- package/skills/wix-vibe-headless/platforms/generic.md +6 -3
- package/skills/wix-vibe-headless/references/bookings/INSTRUCTIONS.md +45 -0
- package/skills/wix-vibe-headless/references/bookings/app/components/RentalDurationPicker.jsx +67 -0
- package/skills/wix-vibe-headless/references/bookings/app/hooks/useRentalDuration.js +128 -0
- package/skills/wix-vibe-headless/references/bookings/app/hooks/useServiceDetail.js +5 -3
- package/skills/wix-vibe-headless/references/bookings/app/rest/wix-bookings-checkout.js +9 -8
- package/skills/wix-vibe-headless/references/bookings/app/rest/wix-bookings-rentals.js +250 -0
- package/skills/wix-vibe-headless/references/bookings/app/rest/wix-bookings-services.js +12 -5
- package/skills/wix-vibe-headless/references/bookings/seed/SEED.md +41 -0
- package/skills/wix-vibe-headless/references/bookings/seed/seed-rentals.js +267 -0
- package/skills/wix-vibe-headless/references/cms/INSTRUCTIONS.md +6 -3
- package/skills/wix-vibe-headless/references/forms/INSTRUCTIONS.md +470 -0
- package/skills/wix-vibe-headless/references/forms/app/hooks/useWixForm.js +425 -0
- package/skills/wix-vibe-headless/references/forms/app/lib/wix-form-schema-utils.js +187 -0
- package/skills/wix-vibe-headless/references/forms/app/rest/wix-forms-submissions.js +238 -0
- package/skills/wix-vibe-headless/references/forms/app/rest/wix-forms.js +108 -0
- package/skills/wix-vibe-headless/references/forms/seed/SEED.md +1762 -0
- package/skills/wix-vibe-headless/references/rentals/INSTRUCTIONS.md +13 -0
- package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +4 -1
- package/skills/wix-vibe-headless/references/restaurants/app/components/OrderCartDrawer.jsx +23 -11
- package/skills/wix-vibe-headless/references/restaurants/app/context/OrderCartContext.jsx +1 -1
- package/skills/wix-vibe-headless/references/restaurants/app/rest/wix-restaurants-ordering.js +29 -31
- package/skills/wix-vibe-headless/references/storefront/INSTRUCTIONS.md +152 -92
- package/skills/wix-vibe-headless/references/storefront/app/components/CartDrawer.jsx +37 -38
- package/skills/wix-vibe-headless/references/storefront/app/context/CartContext.jsx +2 -2
- package/skills/wix-vibe-headless/references/storefront/app/hooks/useProductDetail.js +15 -8
- package/skills/wix-vibe-headless/references/storefront/app/lib/storeImage.js +37 -0
- package/skills/wix-vibe-headless/references/storefront/app/rest/wix-store-cart.js +35 -35
- package/skills/wix-vibe-headless/references/storefront/app/rest/wix-store-catalog.js +18 -6
- package/skills/wix-vibe-headless/references/storefront/seed/SEED.md +30 -7
- package/skills/wix-vibe-headless/references/storefront/seed/seed-store.js +46 -10
- package/skills/wix-app/references/editor-react-component/A11Y-REVIEW-REFERENCE.md +0 -172
- package/skills/wix-app/references/editor-react-component/A11Y-REVIEW.md +0 -143
- package/skills/wix-app/references/editor-react-component/COMPONENT-API.md +0 -516
- package/skills/wix-app/references/editor-react-component/COMPONENT-CONFIGURATION.md +0 -225
- package/skills/wix-app/references/editor-react-component/EDIT-FLOW.md +0 -6
- package/skills/wix-app/references/editor-react-component/REACT-PATTERNS.md +0 -95
- package/skills/wix-vibe-headless/references/storefront/app/components/ProductCard.jsx +0 -110
- package/skills/wix-vibe-headless/references/storefront/app/components/ProductGallery.jsx +0 -51
- package/skills/wix-vibe-headless/references/storefront/app/components/ProductGrid.jsx +0 -49
- package/skills/wix-vibe-headless/references/storefront/app/components/VariantPicker.jsx +0 -92
- package/skills/wix-vibe-headless/references/storefront/app/pages/ProductDetail.jsx +0 -139
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "Manage URL Redirects on a Wix Site"
|
|
3
|
+
description: "Retrieve, create, and delete URL redirects on a Wix site using the public SEO Redirects API. Covers exact and group redirects, language-scoped redirects for multilingual sites, batches of up to 500, and the change flow for a redirect that already exists. This API has no query, search, or update method: List Redirects is the only read-many. Redirects do not chain, so creating one that points at a path another redirect starts from permanently deletes that other redirect; list and check before every write."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Manage URL Redirects on a Wix Site
|
|
7
|
+
|
|
8
|
+
Use the public **SEO Redirects API** to manage where a Wix site sends visitors who
|
|
9
|
+
request an old or moved URL. The API selects the site from the caller's
|
|
10
|
+
authorization context.
|
|
11
|
+
|
|
12
|
+
If the run already identifies a site - one connected site, or a site ID supplied
|
|
13
|
+
by the environment - use it and continue. Ask which site only when several are
|
|
14
|
+
available and nothing in the request or the context picks one. Do not stop to ask
|
|
15
|
+
for a site ID the API never takes.
|
|
16
|
+
|
|
17
|
+
A redirect returns a 301 permanent redirect, takes effect on the live site
|
|
18
|
+
immediately with no site publish, and **takes precedence over a real page at the
|
|
19
|
+
same path**. Creating a redirect from a path that still serves a page makes that
|
|
20
|
+
page unreachable until the redirect is deleted.
|
|
21
|
+
|
|
22
|
+
## Redirects do not chain, they replace
|
|
23
|
+
|
|
24
|
+
This is the single most important thing to know, and it is not what most agents
|
|
25
|
+
assume. If an existing redirect **starts at** the path your new redirect points
|
|
26
|
+
to, the two do not form a chain. The existing one is **deleted**, and your create
|
|
27
|
+
proceeds.
|
|
28
|
+
|
|
29
|
+
So with `/blog` -> `/news` already on the site, creating `/old-blog` -> `/blog`
|
|
30
|
+
does **not** produce `/old-blog` -> `/blog` -> `/news`. It produces
|
|
31
|
+
`/old-blog` -> `/blog`, and `/blog` -> `/news` is gone for good. Never describe
|
|
32
|
+
the result as a chain, a hop, or a redirect sequence.
|
|
33
|
+
|
|
34
|
+
## Run this check before every create
|
|
35
|
+
|
|
36
|
+
Do not skip it because the user's request was explicit. The user asking for a
|
|
37
|
+
redirect is not the same as the user agreeing to lose a different one.
|
|
38
|
+
|
|
39
|
+
1. Call **List Redirects**.
|
|
40
|
+
2. Compare the redirect you are about to create against every existing one:
|
|
41
|
+
- an existing redirect whose `from` equals your new `to` **will be deleted**
|
|
42
|
+
(loop resolution, described above);
|
|
43
|
+
- an existing redirect whose `from` equals your new `from` means your create
|
|
44
|
+
**fails** with `FROM_URL_EXISTS` and writes nothing.
|
|
45
|
+
- Paths differing only by a trailing slash count as equal for both checks.
|
|
46
|
+
3. **If either matched, end your turn without writing.** Name the exact redirect
|
|
47
|
+
at stake and what happens to it, then stop and wait for the user's answer.
|
|
48
|
+
|
|
49
|
+
This is a rule about turn structure, not about intent: **never put a create in
|
|
50
|
+
the same response as the List Redirects that found the conflict.** Reporting
|
|
51
|
+
the conflict and creating the redirect anyway is the failure this rule exists
|
|
52
|
+
to prevent - the user cannot answer a question you already acted on. If your
|
|
53
|
+
next action after listing is a write, you have skipped this step.
|
|
54
|
+
4. If neither matched, no deletion is possible: create it in the same turn and
|
|
55
|
+
report the result. Do not ask permission you do not need.
|
|
56
|
+
|
|
57
|
+
`options.forceReplace` is the only way to overwrite a taken `from` path, and it
|
|
58
|
+
**deletes** the redirect holding it. Never set it on your own initiative. Offer it
|
|
59
|
+
only after reporting the conflict, and only if the user asks to replace.
|
|
60
|
+
|
|
61
|
+
## The six methods and their request shapes
|
|
62
|
+
|
|
63
|
+
Every path is under `https://www.wixapis.com/seo-redirects-service/v1`. Use these
|
|
64
|
+
directly - do not go looking for the shapes in the docs first.
|
|
65
|
+
|
|
66
|
+
| Method | Call |
|
|
67
|
+
|---|---|
|
|
68
|
+
| List Redirects | `GET /redirects` - no body, no parameters |
|
|
69
|
+
| Get Redirect | `GET /redirects/{redirectId}` |
|
|
70
|
+
| Create Redirect | `POST /create-redirect` - body below |
|
|
71
|
+
| Delete Redirect | `DELETE /redirects/{redirectId}` - empty response |
|
|
72
|
+
| Bulk Create Redirects | `POST /bulk/redirects/create` |
|
|
73
|
+
| Bulk Delete Redirects | `POST /bulk/redirects/delete` |
|
|
74
|
+
|
|
75
|
+
Create Redirect takes the redirect nested under `redirect`. `options` and
|
|
76
|
+
`language` are optional, `id` only when preserving an existing redirect's
|
|
77
|
+
identity:
|
|
78
|
+
|
|
79
|
+
```json
|
|
80
|
+
{
|
|
81
|
+
"redirect": {
|
|
82
|
+
"from": "/old-blog",
|
|
83
|
+
"to": "/blog",
|
|
84
|
+
"options": { "groupRedirect": true },
|
|
85
|
+
"language": "fr"
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
The two bulk methods take flat lists. Bulk Create's `returnFullEntity` returns
|
|
91
|
+
each created redirect in `results[].item`:
|
|
92
|
+
|
|
93
|
+
```json
|
|
94
|
+
{ "redirects": [ { "from": "/old-pricing", "to": "/pricing" } ], "returnFullEntity": true }
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
```json
|
|
98
|
+
{ "redirectIds": ["5b07d9de-6a9f-494d-8066-a7b66c970270"] }
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Worked example: the request that deletes something
|
|
102
|
+
|
|
103
|
+
The user asks to send `/old-blog` and everything under it to `/blog`.
|
|
104
|
+
|
|
105
|
+
**1. List first.**
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
GET https://www.wixapis.com/seo-redirects-service/v1/redirects
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
```json
|
|
112
|
+
{
|
|
113
|
+
"redirects": [
|
|
114
|
+
{
|
|
115
|
+
"id": "583fe7d7-2944-436f-870a-09eb6d2e52fa",
|
|
116
|
+
"from": "/blog",
|
|
117
|
+
"to": "/news",
|
|
118
|
+
"createdDate": "2026-08-20T09:12:44.000Z"
|
|
119
|
+
}
|
|
120
|
+
]
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**2. Compare.** The new `to` is `/blog`, and an existing redirect's `from` is
|
|
125
|
+
`/blog`. That is the deletion case. **End the turn here** - report that creating
|
|
126
|
+
this redirect deletes `/blog` -> `/news` permanently, and that the two will not
|
|
127
|
+
chain, then wait.
|
|
128
|
+
|
|
129
|
+
**3. Only after the user agrees**, create it:
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
POST https://www.wixapis.com/seo-redirects-service/v1/create-redirect
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
```json
|
|
136
|
+
{ "redirect": { "from": "/old-blog", "to": "/blog", "options": { "groupRedirect": true } } }
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
```json
|
|
140
|
+
{
|
|
141
|
+
"redirect": {
|
|
142
|
+
"id": "9c4a1f2e-77b0-4b13-a2c8-6e0d3f5b8a91",
|
|
143
|
+
"from": "/old-blog",
|
|
144
|
+
"to": "/blog",
|
|
145
|
+
"options": { "groupRedirect": true }
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
`/blog` -> `/news` is now gone. Say so - do not report it as still in place, and
|
|
151
|
+
do not describe the result as `/old-blog` -> `/blog` -> `/news`.
|
|
152
|
+
|
|
153
|
+
## When a write fails
|
|
154
|
+
|
|
155
|
+
Report the failure and stop. Do **not** retry with a different request shape, a
|
|
156
|
+
different path, `forceReplace` added, or a bulk call in place of a single one. A
|
|
157
|
+
failed create wrote nothing, so there is nothing to clean up, and a mutated retry
|
|
158
|
+
is a second attempt at a decision the user has not agreed to.
|
|
159
|
+
|
|
160
|
+
On the first `403` or `PERMISSION_DENIED`, stop and report the missing
|
|
161
|
+
authorization for managing SEO settings. Do not try another site, path, or method.
|
|
162
|
+
|
|
163
|
+
## Choose exact or group
|
|
164
|
+
|
|
165
|
+
| User intent | Setting |
|
|
166
|
+
|---|---|
|
|
167
|
+
| "Redirect this one URL" | omit `options`, or `options.groupRedirect: false` |
|
|
168
|
+
| "Redirect this section", "everything under /blog" | `options.groupRedirect: true` |
|
|
169
|
+
|
|
170
|
+
A group redirect carries the rest of the URL over to the target: from
|
|
171
|
+
`/forum/questions/` to `/forum/faqs/` sends `/forum/questions/my-post` to
|
|
172
|
+
`/forum/faqs/my-post`. An exact and a group redirect that share a `from` path are
|
|
173
|
+
two different redirects.
|
|
174
|
+
|
|
175
|
+
For a multilingual site, set `language` to apply the redirect to one language
|
|
176
|
+
only; omit it to apply to every language. A language-scoped path is stored
|
|
177
|
+
**without** the language prefix, so `/fr/about` with `language: "fr"` comes back
|
|
178
|
+
as `/about`. Deleting a language-scoped redirect stops it working but it can
|
|
179
|
+
still appear in List Redirects.
|
|
180
|
+
|
|
181
|
+
`from` cannot be the site root, and two paths differing only by a trailing slash
|
|
182
|
+
count as the same path.
|
|
183
|
+
|
|
184
|
+
## Read: List Redirects is the only way to read many
|
|
185
|
+
|
|
186
|
+
**There is no query endpoint and no search endpoint.** Most Wix APIs have one, so
|
|
187
|
+
this is the second place an agent goes wrong. Do not call, construct, or go
|
|
188
|
+
looking for `POST /v1/redirects/query`, a `/search` path, or any filtered variant:
|
|
189
|
+
they do not exist, and trying one wastes a turn and returns nothing useful.
|
|
190
|
+
|
|
191
|
+
- **List Redirects** returns every redirect on the site in one response. It takes
|
|
192
|
+
no filter, sort, cursor, or paging parameter at all. Filter, sort, and slice the
|
|
193
|
+
returned array yourself. It also returns redirects Wix created for the site
|
|
194
|
+
owner, such as when a page's URL slug was renamed in the editor.
|
|
195
|
+
- **Get Redirect** retrieves one by ID.
|
|
196
|
+
|
|
197
|
+
## Change an existing redirect
|
|
198
|
+
|
|
199
|
+
There is **no update method**, and as above no query method. To change a redirect:
|
|
200
|
+
|
|
201
|
+
1. Call **Get Redirect** and keep the whole response.
|
|
202
|
+
2. Call **Delete Redirect** with the same ID.
|
|
203
|
+
3. Call **Create Redirect** with every field you retrieved, with your change applied.
|
|
204
|
+
|
|
205
|
+
Carry the whole redirect across, not only what changed. Create Redirect fills an
|
|
206
|
+
omitted field with its default rather than the previous value, so dropping
|
|
207
|
+
`options` turns a group redirect into an exact one and dropping `language` turns a
|
|
208
|
+
language-scoped redirect into a global one. Keep `id` to preserve the redirect's
|
|
209
|
+
identity, or omit it for a new one.
|
|
210
|
+
|
|
211
|
+
Confirm with the user before step 2: between the delete and the create the
|
|
212
|
+
redirect is not in effect, and if the create fails the old redirect is gone.
|
|
213
|
+
|
|
214
|
+
## Batches
|
|
215
|
+
|
|
216
|
+
**Bulk Create Redirects** and **Bulk Delete Redirects** take 1 to 500 items and
|
|
217
|
+
report each one separately **inside a successful response**:
|
|
218
|
+
|
|
219
|
+
- Read every outcome from `results[].itemMetadata`, matched to your request by
|
|
220
|
+
`originalIndex`. A failed item carries `error.code`, such as `FROM_URL_EXISTS`
|
|
221
|
+
or `REDIRECT_NOT_FOUND`.
|
|
222
|
+
- `bulkActionMetadata.undetailedFailures` counts items whose outcome is
|
|
223
|
+
**unknown**: they carry no error and may or may not have been written. Call
|
|
224
|
+
List Redirects to find out. Never report them as successes.
|
|
225
|
+
- A malformed request, such as an empty list, is rejected as a whole with a 400
|
|
226
|
+
and returns no per-item results.
|
|
227
|
+
|
|
228
|
+
Two more sharp edges to report truthfully:
|
|
229
|
+
|
|
230
|
+
- A successful **Bulk Delete** item means the deletion was found and sent, not
|
|
231
|
+
confirmed. Call List Redirects if the user needs confirmation.
|
|
232
|
+
- Bulk Create is **not atomic**. If an item's conflicting or loop-causing
|
|
233
|
+
redirect is deleted and the write then fails, the deleted redirect is gone and
|
|
234
|
+
nothing replaces it. Repeating the same request recreates it.
|
|
235
|
+
|
|
236
|
+
Creating a redirect identical to one already on the site changes nothing and
|
|
237
|
+
succeeds: Create Redirect echoes the request back without an `id` or
|
|
238
|
+
`createdDate`, and Bulk Create reports success with no `id`. Do not present that
|
|
239
|
+
as a newly created redirect.
|
|
240
|
+
|
|
241
|
+
## Reading errors
|
|
242
|
+
|
|
243
|
+
- On a 400, read `details.validationError.fieldViolations` and report the named
|
|
244
|
+
field rather than guessing.
|
|
245
|
+
- **Known divergence:** the reference documents `REDIRECT_NOT_FOUND` for an
|
|
246
|
+
unknown redirect ID on Get Redirect and Delete Redirect. The API currently
|
|
247
|
+
returns a generic 404 without that code. Treat any 404 on those two methods as
|
|
248
|
+
"no redirect with that ID", and do not tell the user the ID was valid.
|
|
249
|
+
- No webhook or event is emitted when a redirect is created or deleted. Never
|
|
250
|
+
treat the absence of an event as the absence of a change.
|
|
@@ -1,173 +1,58 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: "Query Sites"
|
|
3
|
-
description:
|
|
3
|
+
description: List, count, and find the sites in a Wix account. Covers the namespace filter for headless sites, counting before enumerating, cursor pagination, and resolving a site by name.
|
|
4
4
|
---
|
|
5
5
|
# Query Sites
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
List, count, and find the sites in a Wix account.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
- **Auth**: account-level (a Wix user token, or an account-level API key). `wix token` prints one.
|
|
10
|
+
- **Permission**: `SITE_LIST.READ` (scope `SCOPE.ACC-DC-OS.READ-SITE`).
|
|
11
|
+
- **Endpoints**: list `POST https://www.wixapis.com/site-list/v2/sites/query` · count
|
|
12
|
+
`POST https://www.wixapis.com/site-list/v2/sites/count`.
|
|
10
13
|
|
|
11
|
-
|
|
12
|
-
- Permission `SITE_LIST.READ` (scope `SCOPE.ACC-DC-OS.READ-SITE`)
|
|
14
|
+
## Include headless sites — filter by `namespace`
|
|
13
15
|
|
|
14
|
-
|
|
16
|
+
Both endpoints see only `WIX`-namespace sites by default; **headless sites** (anything built on a
|
|
17
|
+
connected OAuth app) are silently excluded. Filter on both namespaces to see everything:
|
|
15
18
|
|
|
16
|
-
- **Query Sites API**: [REST](https://dev.wix.com/docs/api-reference/account-level/sites/sites/query-sites)
|
|
17
|
-
|
|
18
|
-
> Returns up to **100** sites per request. Use cursor paging (below) to retrieve more.
|
|
19
|
-
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
## Query Sites
|
|
23
|
-
|
|
24
|
-
**Endpoint**: `POST https://www.wixapis.com/site-list/v2/sites/query`
|
|
25
|
-
|
|
26
|
-
The request takes a `query` object that supports `filter`, `sort`, and `cursorPaging`.
|
|
27
|
-
|
|
28
|
-
**Request Body**:
|
|
29
|
-
```json
|
|
30
|
-
{
|
|
31
|
-
"query": {
|
|
32
|
-
"filter": { "editorType": "EDITOR" },
|
|
33
|
-
"sort": [{ "fieldName": "createdDate", "order": "ASC" }],
|
|
34
|
-
"cursorPaging": { "limit": 50 }
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
All three fields are optional — `{ "query": { "cursorPaging": { "limit": 50 } } }` lists every site.
|
|
40
|
-
|
|
41
|
-
**Request**:
|
|
42
19
|
```bash
|
|
43
|
-
curl -X POST \
|
|
44
|
-
'
|
|
45
|
-
-
|
|
46
|
-
-H 'Content-Type: application/json' \
|
|
47
|
-
-d '{
|
|
48
|
-
"query": {
|
|
49
|
-
"filter": { "editorType": "EDITOR" },
|
|
50
|
-
"sort": [{ "fieldName": "createdDate", "order": "ASC" }],
|
|
51
|
-
"cursorPaging": { "limit": 50 }
|
|
52
|
-
}
|
|
53
|
-
}'
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
---
|
|
57
|
-
|
|
58
|
-
## Response Structure
|
|
59
|
-
|
|
60
|
-
The response has the sites array plus **two** paging objects: a top-level `cursorPaging`
|
|
61
|
-
(echoes the applied limit and the next cursor) and `metadata` (count, `cursors.next`, `hasNext`).
|
|
62
|
-
|
|
63
|
-
> ⚠️ There is **no** `pagingMetadata` field. Read paging info from `metadata`.
|
|
64
|
-
|
|
65
|
-
```json
|
|
66
|
-
{
|
|
67
|
-
"sites": [
|
|
68
|
-
{
|
|
69
|
-
"id": "f6061c5f-6aa3-42f8-8822-36a4981dabb2",
|
|
70
|
-
"htmlAppId": "70df538d-906c-44ca-9f27-c186b62f2b2b",
|
|
71
|
-
"name": "my-site-47",
|
|
72
|
-
"displayName": "My Site 47",
|
|
73
|
-
"createdDate": "2023-02-01T14:56:09.831Z",
|
|
74
|
-
"updatedDate": "2026-06-22T03:55:49.031Z",
|
|
75
|
-
"published": true,
|
|
76
|
-
"premium": false,
|
|
77
|
-
"viewUrl": "https://username.wixsite.com/my-site-47",
|
|
78
|
-
"editUrl": "/editor/f6061c5f-6aa3-42f8-8822-36a4981dabb2?editorSessionId=...",
|
|
79
|
-
"thumbnail": "/site-thumbnail/f6061c5f-6aa3-42f8-8822-36a4981dabb2",
|
|
80
|
-
"ownerAccountId": "e6a89eda-d100-4b2d-8a47-3040e2134497",
|
|
81
|
-
"contributorAccountIds": [],
|
|
82
|
-
"editorType": "EDITOR",
|
|
83
|
-
"blocked": false,
|
|
84
|
-
"namespace": "WIX",
|
|
85
|
-
"domainConnected": false,
|
|
86
|
-
"parentChildRole": "NONE"
|
|
87
|
-
}
|
|
88
|
-
],
|
|
89
|
-
"cursorPaging": {
|
|
90
|
-
"limit": 50,
|
|
91
|
-
"cursor": "<cursor-for-next-page>"
|
|
92
|
-
},
|
|
93
|
-
"metadata": {
|
|
94
|
-
"count": 50,
|
|
95
|
-
"cursors": {
|
|
96
|
-
"next": "<cursor-for-next-page>"
|
|
97
|
-
},
|
|
98
|
-
"hasNext": true
|
|
99
|
-
}
|
|
100
|
-
}
|
|
20
|
+
curl -X POST 'https://www.wixapis.com/site-list/v2/sites/query' \
|
|
21
|
+
-H 'Authorization: <ACCOUNT_TOKEN>' -H 'Content-Type: application/json' \
|
|
22
|
+
-d '{ "query": { "filter": { "namespace": { "$in": ["WIX", "HEADLESS"] } }, "cursorPaging": { "limit": 100 } } }'
|
|
101
23
|
```
|
|
102
24
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
Each entry in `sites` has these fields (from the `Site` schema):
|
|
106
|
-
|
|
107
|
-
| Field | Type | Notes |
|
|
108
|
-
|---|---|---|
|
|
109
|
-
| `id` | string | Site ID — use for site-level API calls |
|
|
110
|
-
| `htmlAppId` | string | Internal HTML app ID |
|
|
111
|
-
| `name` | string | URL slug / internal name |
|
|
112
|
-
| `displayName` | string | Human-readable site name |
|
|
113
|
-
| `createdDate` / `updatedDate` | datetime | |
|
|
114
|
-
| `trashedDate` | datetime | Present only if the site is in the trash |
|
|
115
|
-
| `published` | boolean | Whether the site is published |
|
|
116
|
-
| `premium` | boolean | Whether the site has a Wix Premium (paid) plan |
|
|
117
|
-
| `viewUrl` | string | Public site address; empty string when unpublished. **There is no `siteUrl` field.** |
|
|
118
|
-
| `editUrl` | string | Relative editor path; prefix with `https://manage.wix.com` to open |
|
|
119
|
-
| `thumbnail` | string | Relative thumbnail path |
|
|
120
|
-
| `ownerAccountId` | string | |
|
|
121
|
-
| `contributorAccountIds` | string[] | |
|
|
122
|
-
| `editorType` | string | e.g. `EDITOR`, `ODEDITOR` — also a valid `filter` field |
|
|
123
|
-
| `blocked` | boolean | |
|
|
124
|
-
| `folderId` / `parentId` | string | Set for sites organized in folders / parent-child setups |
|
|
125
|
-
| `namespace` | string | e.g. `WIX` |
|
|
126
|
-
| `domainConnected` | boolean | |
|
|
127
|
-
| `parentChildRole` | string | e.g. `NONE` |
|
|
25
|
+
`query` takes optional `filter`, `sort` (e.g. `[{ "fieldName": "createdDate", "order": "DESC" }]`),
|
|
26
|
+
and `cursorPaging` (max `limit` 100).
|
|
128
27
|
|
|
129
|
-
|
|
28
|
+
## Count before you enumerate
|
|
130
29
|
|
|
131
|
-
|
|
30
|
+
An account can hold thousands of sites. To find one by name, search (see "Find a site by name")
|
|
31
|
+
rather than enumerate. To walk the whole list, count first and decide whether that's worth it:
|
|
132
32
|
|
|
133
|
-
|
|
134
|
-
|
|
33
|
+
```bash
|
|
34
|
+
curl -X POST 'https://www.wixapis.com/site-list/v2/sites/count' \
|
|
35
|
+
-H 'Authorization: <ACCOUNT_TOKEN>' -H 'Content-Type: application/json' \
|
|
36
|
+
-d '{ "filter": { "namespace": { "$in": ["WIX", "HEADLESS"] } } }' # → { "count": 1335 }
|
|
37
|
+
```
|
|
135
38
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
> want a non-default page size) — do **not** repeat `filter` or `sort`.
|
|
39
|
+
Enumerating costs **~0.7s per 100 sites** (100 → ~0.7s, 500 → ~3.4s, ~1,300 → ~9s). For a large
|
|
40
|
+
count, render the first N sites with a "…and N more" note instead of fetching all of them.
|
|
139
41
|
|
|
140
|
-
|
|
141
|
-
```json
|
|
142
|
-
{
|
|
143
|
-
"query": {
|
|
144
|
-
"filter": { "editorType": "EDITOR" },
|
|
145
|
-
"sort": [{ "fieldName": "createdDate", "order": "ASC" }],
|
|
146
|
-
"cursorPaging": { "limit": 50 }
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
```
|
|
42
|
+
## Paginate
|
|
150
43
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
{
|
|
154
|
-
"query": {
|
|
155
|
-
"cursorPaging": {
|
|
156
|
-
"limit": 50,
|
|
157
|
-
"cursor": "<metadata.cursors.next from previous response>"
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
```
|
|
44
|
+
The next cursor is at `metadata.cursors.next` (there is **no** `pagingMetadata` field); it already
|
|
45
|
+
encodes the filter/sort, so follow-up pages send only the cursor:
|
|
162
46
|
|
|
163
|
-
**Loop**:
|
|
164
47
|
```javascript
|
|
165
|
-
async function listAllSites() {
|
|
48
|
+
async function listAllSites(wixPost) {
|
|
166
49
|
const sites = [];
|
|
167
50
|
let cursor = null;
|
|
168
51
|
do {
|
|
169
|
-
const
|
|
170
|
-
|
|
52
|
+
const query = cursor
|
|
53
|
+
? { cursorPaging: { limit: 100, cursor } }
|
|
54
|
+
: { filter: { namespace: { $in: ["WIX", "HEADLESS"] } }, cursorPaging: { limit: 100 } };
|
|
55
|
+
const res = await wixPost("/site-list/v2/sites/query", { query });
|
|
171
56
|
sites.push(...res.sites);
|
|
172
57
|
cursor = res.metadata.hasNext ? res.metadata.cursors.next : null;
|
|
173
58
|
} while (cursor);
|
|
@@ -175,23 +60,49 @@ async function listAllSites() {
|
|
|
175
60
|
}
|
|
176
61
|
```
|
|
177
62
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
## Common Use Cases
|
|
63
|
+
## Find a site by name
|
|
181
64
|
|
|
182
|
-
|
|
183
|
-
|
|
65
|
+
Substring-search by display name with `GET manage.wix.com/account/sites/api/sites/search`. It
|
|
66
|
+
returns full site records (headless included) and, with `getCount=true`, the total:
|
|
184
67
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
68
|
+
```bash
|
|
69
|
+
curl 'https://manage.wix.com/account/sites/api/sites/search?query=kintsugi&getCount=true' \
|
|
70
|
+
-H 'Authorization: <ACCOUNT_TOKEN>' -H 'accept: application/json'
|
|
71
|
+
# → { "sites": [ { "metaSiteId", "displayName", "namespace", "published", "editUrl", … } ], "totalCount": 5 }
|
|
72
|
+
```
|
|
189
73
|
|
|
190
|
-
|
|
74
|
+
## Response — the `Site` object
|
|
75
|
+
|
|
76
|
+
`sites` is an array of:
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
interface Site {
|
|
80
|
+
id: string; // site ID — use for site-level API calls
|
|
81
|
+
htmlAppId: string;
|
|
82
|
+
name: string; // URL slug / internal name; opaque `headless-<id>` for headless sites
|
|
83
|
+
displayName: string; // human-readable name
|
|
84
|
+
createdDate: string; // ISO datetime
|
|
85
|
+
updatedDate: string; // ISO datetime
|
|
86
|
+
trashedDate?: string; // present only when the site is in the trash
|
|
87
|
+
published: boolean;
|
|
88
|
+
premium: boolean; // has a Wix Premium (paid) plan
|
|
89
|
+
viewUrl: string; // public address; "" when unpublished (there is no `siteUrl` field)
|
|
90
|
+
editUrl: string; // relative; prefix with https://manage.wix.com to open
|
|
91
|
+
thumbnail: string;
|
|
92
|
+
ownerAccountId: string;
|
|
93
|
+
contributorAccountIds: string[];
|
|
94
|
+
editorType: string; // EDITOR | ODEDITOR | STUDIO | EDITORLESS
|
|
95
|
+
blocked: boolean;
|
|
96
|
+
folderId?: string; // set for sites organized in folders / parent-child setups
|
|
97
|
+
namespace: string; // WIX | HEADLESS
|
|
98
|
+
domainConnected: boolean;
|
|
99
|
+
parentChildRole: string; // e.g. NONE
|
|
100
|
+
}
|
|
101
|
+
```
|
|
191
102
|
|
|
192
103
|
## Next Steps
|
|
193
104
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
105
|
+
Use a site's `id` for site-level API calls — derive a site token from the account token
|
|
106
|
+
(`wix token --site <id>`, or the `oauth2/token` refresh-grant in wix-auth `device-flow`), then read
|
|
107
|
+
its context via [Read Site Context](read-site-context.md) or create sites with
|
|
108
|
+
[Create Site from Template](create-site-from-template.md).
|
|
@@ -65,14 +65,14 @@ If any product is missing a price, **do not call the API**. Ask for the missing
|
|
|
65
65
|
- Bulk endpoints accept 1–100 products, so a compatible bulk endpoint is also valid for one product.
|
|
66
66
|
- For multiple products requested as one batch, send one bulk call. Use the with-inventory endpoint when any product needs inventory; include `inventoryItem` only on tracked variants.
|
|
67
67
|
- Never send `inventoryItem` to a no-inventory endpoint. Do not invent inventory.
|
|
68
|
-
- Digital products
|
|
68
|
+
- Digital products use a with-inventory endpoint: an unstocked digital variant is unsellable.
|
|
69
69
|
- Per bulk request, allow at most 100 products, 100 total options, 100 modifiers, 100 info sections, and 1000 variants. Split larger input into compliant batches.
|
|
70
70
|
|
|
71
71
|
## Build each product
|
|
72
72
|
|
|
73
73
|
| Concern | Rule |
|
|
74
74
|
|---|---|
|
|
75
|
-
| Type | `PHYSICAL` uses product- and variant-level `physicalProperties`; `DIGITAL` omits
|
|
75
|
+
| Type | `PHYSICAL` uses product- and variant-level `physicalProperties`; `DIGITAL` omits them and carries `inventoryItem.inStock` plus `digitalProperties.digitalFile` on each variant. |
|
|
76
76
|
| Variants | Include at least one. Price, SKU, barcode, inventory, and digital file are variant-level fields. |
|
|
77
77
|
| Price | Use a string in `price.actualPrice.amount`; add `compareAtPrice` only when supplied. |
|
|
78
78
|
| SKU | Preserve supplied strings exactly, including `#`, punctuation, and leading zeroes. Keep variant SKUs unique unless explicitly requested otherwise. |
|
|
@@ -127,9 +127,20 @@ This inventory-aware physical product is the reusable shape. Remove `inventoryIt
|
|
|
127
127
|
}
|
|
128
128
|
```
|
|
129
129
|
|
|
130
|
-
For a color option, use `SWATCH_CHOICES`; each choice uses `choiceType: ONE_COLOR` and `colorCode`, and the variant reference uses `renderType: SWATCH_CHOICES`.
|
|
130
|
+
For a color option, use `SWATCH_CHOICES`; each choice uses `choiceType: ONE_COLOR` and `colorCode`, and the variant reference uses `renderType: SWATCH_CHOICES`. For a different **image** per colour (not just the swatch), each choice also carries its own `media`:
|
|
131
131
|
|
|
132
|
-
|
|
132
|
+
```json
|
|
133
|
+
"choicesSettings": {"choices": [
|
|
134
|
+
{"choiceType": "ONE_COLOR", "name": "Black", "colorCode": "#000000",
|
|
135
|
+
"media": {"items": [{"url": "https://static.wixstatic.com/media/<black>.jpg"}]}},
|
|
136
|
+
{"choiceType": "ONE_COLOR", "name": "White", "colorCode": "#FFFFFF",
|
|
137
|
+
"media": {"items": [{"url": "https://static.wixstatic.com/media/<white>.jpg"}]}}
|
|
138
|
+
]}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
The image must be in the product gallery first, and the id/ordering has a trap — assign per-choice media via **[Update Product with Options](update-product-with-options.md) → Choice & variant fields** (also the full choice-vs-variant field split: choice `media`/`colorCode`; variant `price`/`sku`/`barcode`/stock).
|
|
142
|
+
|
|
143
|
+
A digital variant is **sellable** only when it carries both a digital file and stock; miss either and the product reads back healthy and is rejected at add-to-cart. Upload the file first ([Upload Media to Wix](../media/upload-media-to-wix.md) → Generate Upload URL, then `PUT` the bytes) and send the returned `file.id` to `POST /stores/v3/products-with-inventory`:
|
|
133
144
|
|
|
134
145
|
```json
|
|
135
146
|
{
|
|
@@ -138,11 +149,15 @@ A digital product uses the smaller shape below. Add the supplied variant-level d
|
|
|
138
149
|
"variantsInfo": {"variants": [{
|
|
139
150
|
"sku": "PDF-FOCUS-01",
|
|
140
151
|
"price": {"actualPrice": {"amount": "9.99"}},
|
|
141
|
-
"visible": true
|
|
152
|
+
"visible": true,
|
|
153
|
+
"inventoryItem": {"inStock": true},
|
|
154
|
+
"digitalProperties": {"digitalFile": {"id": "<FILE_ID>"}}
|
|
142
155
|
}]}
|
|
143
156
|
}
|
|
144
157
|
```
|
|
145
158
|
|
|
159
|
+
With no file supplied, create the product and report it as not sellable until one is attached — [Update Product with Options](update-product-with-options.md) → Attach a digital file.
|
|
160
|
+
|
|
146
161
|
### Generated descriptions and SEO
|
|
147
162
|
|
|
148
163
|
- When copy is generated from an image, every factual claim must be user-supplied or directly visible. Preserve user-supplied facts such as a stated material; do not reject them merely because the image alone cannot prove them. Color, shape, and visible decoration may come from the image. Dimensions, capacity, care instructions, durability, compatibility, performance, and any material the user did not identify must be omitted. For example, never write “dishwasher safe” or “microwave safe” unless the user supplied that fact. Omit uncertain claims instead of turning them into marketing language.
|
|
@@ -270,4 +285,4 @@ Retry only failed transient items, not successful products. If a requested field
|
|
|
270
285
|
- `variantsInfo must not be empty`: include at least one priced variant per product.
|
|
271
286
|
- Option/variant mismatch: create every requested combination and reference every option once per variant.
|
|
272
287
|
- Media not visible: use the uploaded `wixstatic.com` URL in `media.itemsInfo.items`; do not set `media.main`.
|
|
273
|
-
- Digital product rejected:
|
|
288
|
+
- Digital product rejected at add-to-cart: `ITEM_NOT_FOUND_IN_CATALOG` means the variant has no `digitalProperties.digitalFile`; `exceeds available inventory` means it has no `inventoryItem.inStock`. Both read back as a healthy product.
|