Wholesale & EDI
How do I allocate inventory between Shopify DTC and wholesale so I don't chargeback a Target or Nordstrom PO?
Splitting stock between Shopify DTC and wholesale so a retailer PO never gets shorted.
Last updated September 16, 2026
Hold the retailer's units first. Then sell what is left on Shopify. Chargebacks are an inventory problem that shows up as EDI.
Match every document to what shipped
An 850 is a promise. Confirm it as an 855 only when you can ship. The 856 has to match what you actually shipped, in the window, to the routing guide, and the 810 has to match that shipment. If DTC ate the pile on Tuesday, the Thursday ASN is fiction. Do not send the 855 against a display number the floor can still steal.
Display pools versus real wholesale holds
A display pool is a number the channel can see. It does not stop the warehouse from allocating. A 20-unit DTC wave will still take the 20 you showed Nordstrom as 7 if those units sit in the primary sellable zone. A wholesale hold is different: a reservation, or units parked outside primary sellable, that the floor cannot steal. Fund that hold for open POs plus the next receipt that is already sold. Pick wholesale against the hold, in the retailer's unit of measure. DTC publishes the remainder, after a buffer. Do not lower Shopify on-hand by hand to "save" the retailer. The next inventory export writes the warehouse count back and the hold vanishes. Case-pack and inner-pack quantities belong on the hold, not just eaches. A PO for 12 cases is 12 cases, not 144 units you can nibble for DTC. Confirm the 856 quantity in the retailer's unit of measure.
Running both channels from one warehouse
One warehouse can do both. Pallet vs parcel is a work queue, not a second inventory system. Default the wholesale channel to the site that has case-pack. Do not split a retail PO across nodes unless the routing guide allows it. Next-available-warehouse that refuses to split is the usual setting for wholesale. DTC can overflow. Retail rarely can. One 850 wants one 856 from one building. Receive inbound into the hold that funded the buy, or remainder math lies until you re-import the holds.
Promising inbound on the water
Inbound on the water can be promised only if you sell against that named purchase order on purpose and the retailer accepts the date. Do not publish water stock to Shopify. That is wholesale ATP on a named inbound, not storefront available-to-sell.
When the 856 fails, reconstruct allocation by SKU and timestamp before you blame the VAN. Most chargebacks are "we sold it twice," not a missing segment. Routing-guide misses (wrong DC, late pickup, carton labels) are real too, but they start after allocation is already wrong. Chargeback dollars are cheaper to prevent on Monday's hold than to argue on the remittance.
Connect Claude or ChatGPT to your Fulfil data with the Fulfil MCP, then run this prompt on your own numbers.
You are the wholesale ops lead. Here is: sku, on_hand, shopify_published, wholesale_pool, open_850_qty, ship_window_start, ship_window_end, inbound_eta, dtc_last_7d_units. [paste] Produce: 1. POs that will short if DTC keeps selling at the current rate. 2. Units to hold (not display) for each open 850. 3. Whether inbound-on-the-water is safe to promise. 4. Orders that would split a retail PO. Flag any SKU where the pool is display-only and allocation can still steal it.
Explore this in Fulfil
More on Wholesale & EDI
EDI to big-box retail: 3PL vs your own warehouse
How the EDI document flow to big-box retailers works whether a 3PL or you run the warehouse.
How do I stop EDI chargebacks from Target / Costco / Nordstrom?
Why most EDI chargebacks trace back to inventory, and how to keep them from happening.
Can I fulfill wholesale and DTC from the same warehouse? How do I set that up?
Running wholesale and DTC out of one warehouse with different pack rules and availability.
See it run on
your data.
Fulfil runs inventory, fulfillment, purchasing, and accounting for scaling DTC brands in one system.