Pricing & Promotions
Discount rules, coupon codes, sales, ribbons, bundles, tiered pricing, and the strategic side of "run a promotion to grow revenue".
Routing rule (READ FIRST). Any merchant query that mentions BOTH a Pricing-side topic (discount, coupon, sale, ribbon, bundle, promotion strategy) AND a NON-pricing-side topic (refunding a past order, processing a payment, editing the product's base price, shipping rates) MUST be answered by loading this dispatcher first AND the relevant other category (refunds → Get Paid / Dashboard; price → Catalog; shipping rates → Shipping). Do NOT route mixed queries from the WixREADME index alone; the binding decision lives here.
Pricing & promotions is NOT:
- The product price itself or its description/image → see Catalog (those are product fields).
- A standing $0 shipping option/region rate → see Shipping & fulfillment.
- Refunding a previous discounted order → route to verified Get Paid/payment docs or Dashboard guidance.
Ribbon-only requests — go directly to the ribbon path below; skip MerchantContext and promotion-strategy discovery.
Before dispatching promotion requests — confirm MerchantContext is loaded. If
siteData.countryis not in your conversation context, load it via Load Merchant Context. Skip if already loaded.Promotion dispatch. Score each entry below by (a) the merchant's query →
intent:*tags, (b) MerchantContext → context tags. Load the highest-scoring entry. Ties → highestpriority. No match → follow the base recipe at the bottom.Do not fall back to legacy
setup-*orflow-*pricing slugs. The skills below replaced earlier…/skills/setup-couponsand…/skills/flow-<name>articles during the routing-tree migration. If a slug below returns a transient 404 (rawdocs ingestion delay), retry the same URL after a brief pause — do NOT load anysetup-couponsorflow-*legacy version even if it appears in the WixREADME index; that content is stale pre-migration material that contradicts this dispatcher.
Actions — concrete operations
- Create coupon — tags:
[intent:create-coupon]· priority 0- Create discount rule (auto-apply) — tags:
[intent:create-discount-rule]· priority 0- Create or reuse a Catalog V3 ribbon — tags:
[intent:add-ribbon]· priority 0 · a ribbon is a visual product label, not a discount rule; follow the ribbon path below- Schedule a future sale — tags:
[intent:schedule-sale]· priority 0 · uses Discount Rules withstartTimein the future
Ribbon path
For a Catalog V3 request such as "Create a Bestseller ribbon", use the idempotent name-based Get or Create Ribbon method:
POST https://www.wixapis.com/stores/v3/ribbons/get-or-create
Content-Type: application/json
{"ribbonName":"Bestseller"}Read the returned ribbon.id. If the user requested only the ribbon definition, report that result and stop. If they also requested assignment to a product, read the product's current revision with GET https://www.wixapis.com/stores/v3/products/{productId}, as in Update Product with Options. Then send only the ribbon with that revision through Update Product; fields you omit are left unchanged:
PATCH https://www.wixapis.com/stores/v3/products/{productId}
Content-Type: application/json
{"product":{"id":"<PRODUCT_ID>","revision":"<CURRENT_REVISION>","ribbon":{"id":"<RIBBON_ID>"}}}This path covers Catalog V3.
Do not create a coupon, discount rule, or price change just because a ribbon says "Sale". Those require a separate discount request. An explicit ribbon creation or assignment request authorizes that operation; otherwise confirm the intended change first. Merchant context needed for promotion recommendations is not a prerequisite to creating a named visual ribbon.
Business flows — the orchestrator
The single business-flow orchestrator (recommend-ecommerce-strategy) handles all strategic discount intents. It classifies internally (SEASONAL / UPSELL_BOOST / STOCK_MOVER / BUNDLE_AND_SAVE / ABANDONED_CART) and loads its goal-* / flow-* support files from the kept ecommerce-root siblings.
- Run a sale / promotion strategy — tags:
[intent:run-a-sale]· priority 0- Boost my business / increase sales — tags:
[intent:boost-business]· priority 0- Seasonal / holiday promotion — tags:
[intent:seasonal-promo]· priority 0- Clearance / move slow stock — tags:
[intent:clearance]· priority 0- Increase AOV (bundle / upsell) — tags:
[intent:increase-aov]· priority 0If the orchestrator above returns a 404 — do not stop. Classify the merchant intent directly and load the matching goal skill via
ReadFullDocsArticle, then follow its routing chain into the flow skill:
- Holiday / event / date mentioned (SEASONAL — takes priority over all other signals) → Goal: Seasonal Revenue
- "Boost sales", "increase AOV", "upsell", "spend more" (UPSELL_BOOST) → Goal: Increase AOV
- "Clearance", "slow stock", "overstock", "move inventory" (STOCK_MOVER) → Goal: Clear Inventory
- "Bundle", "cross-sell", "buy together", "more items per order" (BUNDLE_AND_SAVE) → Goal: Drive Cross-Sells
Info / troubleshoot / recommendation
- Discount not applying — diagnose — tags:
[intent:troubleshoot]· priority 0- View active discounts (Coupons API) — tags:
[intent:view-active-discounts]· priority 0 · API doc, no skill (per §7.5)- View active discounts (Discount Rules API) — tags:
[intent:view-active-rules]· priority 0 · API doc, no skill- Coupon usage stats — tags:
[intent:coupon-usage-stats]· priority 0 · API doc, no skill (usage count is the coupon object'snumberOfUsagesfield)- Competitive pricing check (how do my prices compare?) — tags:
[intent:competitive-pricing]· no Wix API for competitor data — advise the merchant to benchmark externally (Google Shopping / market research); Wix only exposes their own catalog prices via Catalog API
Cross-category routes (handled in another category)
- Change product price — tags:
[intent:change-price]· price is a product field — Catalog API- Set compare-at price — tags:
[intent:set-compare-at]· Catalog- Free shipping over $X (promo rule) — tags:
[intent:free-shipping-promo]· belongs here as a promo rule; a $0 shipping rate is Shipping
Tag matching
The agent matches the merchant's natural-language query to an intent:* tag (cues are in each promotion file's description), AND matches MerchantContext to any context tags. A promotion's tags must ALL be satisfied for it to be eligible. Among eligible promotions, the one with the highest tag-count wins; ties broken by priority.
Worked examples
| Merchant query | MerchantContext | Match |
|---|---|---|
| "Create a 20% off coupon" | any | ecom-pricing-create-coupon via [intent:create-coupon] |
| "Run a Black Friday sale" | any | recommend-ecommerce-strategy via [intent:run-a-sale] (orchestrator classifies as SEASONAL internally) |
| "Help me boost my sales" | any | recommend-ecommerce-strategy via [intent:boost-business] |
| "My coupon code XMAS isn't working" | any | ecom-pricing-troubleshoot-not-applying |
| "Show me my active discounts" | any | query-coupons API doc (no skill — per §7.5) |
| "Change the price of product Y" | any | Catalog cross-route (re-dispatch to Catalog when that category exists) |
Base recipe (fallback)
If nothing matches, the merchant query is too vague. Ask one clarifying question:
"Do you want to (a) create a specific discount/coupon now, (b) strategize a sale or promotion campaign, or (c) fix a discount that isn't applying?"
Map the answer → re-dispatch:
- (a) →
ecom-pricing-create-coupon(default for "create a discount") - (b) →
recommend-ecommerce-strategy - (c) →
ecom-pricing-troubleshoot-not-applying