Bundle sets, rewards and upsells for Shopify
Help & how-tosHELP & HOW-TOS · ORDERS IN YOUR ERP · 6 MIN READ

Luxe orders in your ERP, warehouse or 3PL

Luxe orders are standard Shopify orders. Your ERP (Dynamics 365, NetSuite, SAP), order or inventory system (Brightpearl, Cin7, Linnworks), shipping software (ShipStation), 3PL or middleware (Celigo, Pipe17, Patchworks) reads them through the connection it already has. Nothing needs installing. This page shows what the lines look like and the few settings that keep them clean.

Rows of open, empty cardboard boxes

What reaches the order

You soldOn the orderSKUsPrices
Build-your-own or fixed setOne line per item, grouped under the set product. The set product itself is not a lineEach item's own SKU. The set product's SKU arrives on the group (lineItemGroup.variantSku)Each item carries its share of the set's price. With Percent off items, Save more with more or Per-slot rules, each item's own price is its price in the set, so a free slot is a line at 0.00. With Set price, Shopify shares the set's price across the items by their prices
Collection setThe shopper's items as ordinary linesEach item's own SKUFull price, with the set's discount allocated to each line
Gift from a rewards ladderAn ordinary lineThe gift's own SKUIts full price, discounted 100%

Stock comes off the items, never off the set product. Tax, refunds, returns and Shopify's reports all work per item.

Worked example

One order with the Coffee sampler (Per-slot rules, buy 3 get 3 free, 50.00), a candle collection set (any 5 for 40.00) and a gift. Settings > Data and integrations > Order data shows the same order.

LineSKUPriceDiscountTotal
Coffee sampler (group, SKU SET-COFFEE-6)50.00
Ethiopia GujiCOF-ETH-25012.000.0012.00
Colombia HuilaCOF-COL-25012.000.0012.00
Kenya NyeriCOF-KEN-25014.000.0014.00
Brazil CerradoCOF-BRA-2500.000.000.00
Guatemala HuehueCOF-GUA-2500.000.000.00
Peru CajamarcaCOF-PER-2500.000.000.00
Pour-over dripper (included)ACC-DRIP-010.000.000.00
Tasting journal (included)ACC-JRNL-0112.000.0012.00
Any 5 candles for $40 (collection set)40.00
Fig candleCND-FIG-S10.002.317.69
Cedar candleCND-CED-S10.002.317.69
Amber votiveCND-AMB-S9.002.076.93
Tea rose candleCND-TEA-L12.002.779.23
Vetiver candleCND-VET-M11.002.548.46
Gift: Canvas toteGFT-TOTE-0115.0015.000.00

Line totals always add up to the set's price to the cent.

Before your first bundle set order

The bundle set editor's Go live card checks each bundle set under Orders in your ERP and warehouse, and Home flags live bundle sets with items missing a SKU.

  • Give every item a SKU. Most ERPs and 3PLs match order lines by SKU and stop an order they can't match. This is the most common cause of failed imports.
  • Give the set product a SKU (for example SET-COFFEE-6). It names the set on the group and on the rare order where the set could not be expanded.
  • Track stock on the items, not on the set product. Orders take stock from the items. A set product that counts its own stock never goes down, and at zero it stops the set selling. Keep it tracked only if you use it to pause the set.
  • Plan for 0.00 lines. Free slots and free included items arrive at 0.00, and gifts net to 0.00. Some ERPs refuse 0.00 stock lines (NetSuite Connector, for example); map them to a free or promotional item there, or give the item a small price in the set.
  • Import items, not sets. If your ERP also holds the set as a kit, bundle or assembly item, either import the items (recommended: stock and revenue land on what ships) or build that item from the order summary below and skip its items. Never both, or the set counts twice.

Settings > Data and integrations > Order data

Settings > Data and integrations > Order data for your ERP adds two things to paid orders with a Luxe bundle set. Both are off until you turn them on. Both need permission to edit orders, which Luxe asks for on that page only; Luxe reads orders for billing already.

SettingWhat it writesUse it for
Order summaryThe order metafield luxe.kit_summary (JSON): every bundle set with its type, set product SKU, whether it was expanded, total, and each line's SKU, quantity, price, discount and total; every gift with its rung. Any app with order access can read itMapping bundle sets in middleware or an ERP without reading line properties
Order tagA tag you choose, luxe-kit by default, on orders with a bundle setRouting and filters: a Celigo flow, a ShipStation automation rule, a 3PL's special handling

The summary for the example above (trimmed):

{
  "schemaVersion": 1,
  "order": "#1042",
  "currency": "USD",
  "kits": [
    {
      "kitId": "ck_sampler",
      "type": "slot_kit",
      "title": "Coffee sampler",
      "quantity": 1,
      "variantId": "gid://shopify/ProductVariant/100",
      "sku": "SET-COFFEE-6",
      "expanded": true,
      "total": "50.00",
      "lines": [
        { "lineItemId": "gid://shopify/LineItem/9001", "variantId": "gid://shopify/ProductVariant/301", "sku": "COF-ETH-250", "title": "Ethiopia Guji", "quantity": 1, "unitPrice": "12.00", "discount": "0.00", "total": "12.00", "role": "pick" }
      ]
    },
    { "kitId": "ck_candles", "type": "collection_kit", "title": "Any 5 candles for $40", "quantity": 1, "variantId": null, "sku": null, "expanded": true, "total": "40.00", "lines": [] }
  ],
  "gifts": [
    { "lineItemId": "gid://shopify/LineItem/9014", "variantId": "gid://shopify/ProductVariant/501", "sku": "GFT-TOTE-01", "title": "Canvas tote", "quantity": 1, "unitPrice": "15.00", "discount": "15.00", "total": "0.00", "rungId": "rung_tote" }
  ]
}

Amounts are in your store currency, exactly as Shopify allocated them. role is pick for a slot the shopper filled and fixed for an included item. expanded: false means the set product itself is the line; pick its items by hand.

The summary and tag are written when the order is paid. Editing the order afterwards (adding or removing items) does not rewrite them.

Mapping tips

Dynamics 365 Business Central (Shopify connector)

  • Map items by SKU (Item No. or Item No. + Variant Code). Turn on Auto Create Unknown Items only with a template you trust.
  • The connector imports set items as ordinary sales lines and does not import the group, which is the right result for stock. For a set as an assembly item, extend the connector to read luxe.kit_summary and post the set instead of its lines.
  • Gifts import as price and a matching line discount, so they net to zero.
  • The connector skips fulfilment sync on orders with two lines of the same variant. A Per-slot rules set can produce that when the same item fills a paid slot and a free slot. Fulfil those orders in Shopify.
  • _luxe_* values appear under the line's attributes. They are reference ids, safe to ignore.

Dynamics 365 Finance and Operations, SAP

These go through a third-party connector or middleware. Map lines by SKU, and use the order tag to route bundle set orders to a flow that reads luxe.kit_summary when you need the set as a BOM or kit item.

NetSuite (Celigo, NetSuite Connector)

  • Map each line's SKU to the NetSuite item. In Celigo, set a default item for unmatched SKUs so an order never stops.
  • For NetSuite kits or item groups, choose Celigo's price spread (master or member component) or build the NetSuite kit from luxe.kit_summary in a custom flow, and skip the component lines.
  • NetSuite Connector refuses 0.00 inventory lines. Map free slots and gifts to a non-inventory or promotional item.

ShipStation and 3PLs

  • Set items import as their own SKUs, ready to pick. There is no set line to explode, so leave ShipStation's own Product Bundles off for Luxe bundle sets.
  • Hide 0.00 lines on packing slips with a template rule if you prefer, or keep them so the gift is packed.
  • Use the order tag in automation rules, for example to add an insert or route to a kitting station.
  • Line properties appear under Item Options. The Includes line lists a set's picks in words, handy on packing slips.

Middleware (Celigo, Pipe17, Patchworks)

Read luxe.kit_summary from the order metafields and use kits[].lines[].sku and total. Filter on the order tag. The Admin API also exposes the group directly (LineItem.lineItemGroup, or sales_line_item_group_id and line_item_groups in webhooks) if you prefer not to turn on the summary.

Refunds and returns

Refunds and returns are per item, in Shopify and in your ERP. Refunding one item of a set refunds that line's total. Luxe's fee is reversed only when every Luxe line of an order is refunded (billing).

Need a direct integration?

When your ERP, WMS or 3PL needs more than the summary and tag, Settings > Data and integrations > Order data > Need a direct integration? > Contact us sends Luxe the system, the middleware you use, your order volume and what the connection should do. Luxe builds direct connections on request, scoped with you and priced by that scope.