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:
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.country is 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 → highest priority. No match → follow the base recipe at the bottom.
Do not fall back to legacy setup-* or flow-* pricing slugs. The skills below replaced earlier …/skills/setup-coupons and …/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 any setup-coupons or flow-* legacy version even if it appears in the WixREADME index; that content is stale pre-migration material that contradicts this dispatcher.
[intent:create-coupon] · priority 0[intent:create-discount-rule] · priority 0[intent:add-ribbon] · priority 0 · a ribbon is a visual product label, not a discount rule; follow the ribbon path below[intent:schedule-sale] · priority 0 · uses Discount Rules with startTime in the futureFor a Catalog V3 request such as "Create a Bestseller ribbon", use the idempotent name-based Get or Create Ribbon method:
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:
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.
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.
[intent:run-a-sale] · priority 0[intent:boost-business] · priority 0[intent:seasonal-promo] · priority 0[intent:clearance] · priority 0[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:
[intent:troubleshoot] · priority 0[intent:view-active-discounts] · priority 0 · API doc, no skill (per §7.5)[intent:view-active-rules] · priority 0 · API doc, no skill[intent:coupon-usage-stats] · priority 0 · API doc, no skill (usage count is the coupon object's numberOfUsages field)[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[intent:change-price] · price is a product field — Catalog API[intent:set-compare-at] · Catalog[intent:free-shipping-promo] · belongs here as a promo rule; a $0 shipping rate is ShippingThe 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.
| 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) |
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:
ecom-pricing-create-coupon (default for "create a discount")recommend-ecommerce-strategyecom-pricing-troubleshoot-not-applyingLast updated: 28 September 2026