What Is Available-to-Promise and How It Differs From Available-to-Sell
It is Tuesday at 10:42 a.m. A wholesale rep just keyed a 480-unit reorder for a department store on a 14-day ship window. At the same moment, the DTC site is showing 312 units of the same SKU as in stock, because the Shopify product page reads the 3PL feed and the 3PL feed does not know about the wholesale order that landed two minutes ago. By Friday the warehouse will pick the DTC orders first because they ship faster, the wholesale PO will short by 168 units, the retailer will issue a fill-rate chargeback, and someone in operations will spend Monday morning explaining what happened in a spreadsheet. None of this is a warehouse problem. It is an inventory math problem.
What is the difference between available to promise vs available to sell apparel brands actually need to understand?
The question of available to promise vs available to sell apparel operators face is not a vocabulary exercise. It is the difference between a number you can ship and a number you are willing to expose. Most ERPs treat them as the same field with a different label. Most spreadsheets do not distinguish them at all. The result is that a wholesale order, a DTC cart, and a marketplace listing all draw from the same pool with no priority logic, and the brand discovers the conflict at pick time.
Available-to-promise, or ATP, is the quantity of a specific SKU you can commit to a specific order on a specific date. It is calculated as on-hand inventory, minus already-allocated units, plus inbound POs that will land before the requested ship date, minus any safety stock you have ringfenced. ATP is a forward-looking, time-bound number. It answers the question: if a buyer asks for 480 units on the 28th, can I say yes.
Available-to-sell, or ATS, is the quantity you are willing to publish to a sales channel right now. It is usually ATP minus a channel buffer, minus a wholesale reservation pool, minus any units held back for VIP allocations or marketing drops. ATS answers the question: how many units should the Shopify product page show as in stock for the next refresh cycle.
ATP is a commitment math. ATS is an exposure policy. Conflating them is the root of oversell.
Why does the distinction matter for apparel specifically?
Apparel breaks general ecommerce logic in three ways that make the ATP/ATS distinction load-bearing rather than academic.
First, the SKU count is high and the size curve is uneven. A single style ships in 6 to 10 size-color combinations, and the inventory truth has to hold at the size level, not the style level. A wholesale buyer ordering a size run of 480 units is committing to a specific 48-24-24-… distribution, and ATP has to evaluate each size independently. ATS to the DTC site has to reflect the same size-level reality without exposing the wholesale-committed sizes.
Second, lead times are long and POs are layered. At any given week, an apparel brand has on-hand inventory, units in transit from the factory, units at the freight forwarder, units at the 3PL inbound dock, and units already allocated to open wholesale POs with future ship windows. ATP has to do real arithmetic across these states. A static feed from the 3PL of “on-hand” misses three of the five buckets.
Third, the channels have different cost-of-failure economics. A DTC oversell costs you a refund and a customer complaint. A wholesale short-ship costs you a fill-rate chargeback that is often 2 to 5 percent of the order value, plus a markdown allowance, plus the risk of being deranked in next season’s buy. Across the comparison conversations I have run this quarter, the brands that lump wholesale and DTC into one ATS number are the same brands paying retailer compliance fees they cannot explain.
This is Breakpoint 3 of the 6 Breakpoints framework, inventory truth gets weaker, expressed in concrete math. The breakpoint is not that the warehouse miscounts. It is that the math the rest of the business runs on assumes a single number where there should be two.
How is ATP actually calculated in an apparel environment?
The textbook formula is on-hand plus scheduled receipts minus committed orders. The apparel version has more terms.
ATP for a given SKU on a given date equals on-hand at the 3PL, plus units in-transit with an ETA on or before the requested date, plus units at the inbound dock not yet putaway, minus units allocated to open wholesale orders with a ship window on or before the requested date, minus units reserved for confirmed DTC orders not yet picked, minus any safety stock or VIP allocation pool, minus a confidence haircut on in-transit if the factory has a history of late shipments.
The last term is where most systems fall down. A PO that is supposed to land on the 20th but has a 30 percent historical late rate from that factory should not be treated as a clean ATP contributor for a 22nd ship date. Either the math discounts it or the rep promising the order is gambling. Most brands gamble, because the system does not give them the discounted number.
ATP also has to be recalculated continuously. Every new order, every PO update, every inbound putaway, every cancellation changes the number. A nightly batch refresh, which is what spreadsheet-driven brands run on, means the number is wrong from 6 a.m. onward.
How is ATS different in practice?
ATS is a policy layer on top of ATP. The policy answers questions the math cannot answer on its own.
How much of the ATP pool do we expose to DTC right now. How much do we hold back for wholesale orders we expect this week. Do we expose the full size run to Shopify, or do we cap the size 2 and size 4 at lower numbers because we know they will sell through and create a stockout perception on the larger sizes. Do we expose any inventory to the marketplace channel, or do we only list there after wholesale ship windows close.
A brand running drops will set ATS at zero for a SKU until the drop time, then expose 100 percent of ATP, then pull ATS down once a threshold is hit. A brand running evergreen replenishment will hold ATS at 80 percent of ATP and refresh weekly. A brand running both, which is most of the ICP, needs ATS rules that can flip per style per channel.
The POV here is direct. Wholesale should not run through Shopify’s native flow. Shopify’s inventory model is single-pool with optional locations. It does not natively understand a wholesale-committed reservation that sits inside the same physical location as DTC stock. The moment you try to make it understand, you are bolting logic onto a system that was not built for it, and the seams show up at peak.
What does the cost of conflating them look like for a $15M brand?
The back-of-envelope numbers are consistent. For a $15M apparel brand running wholesale plus DTC with a 3PL, the operations team spends 6 to 9 hours per week reconciling inventory across Shopify, the 3PL feed, and the wholesale system. The oversell rate at peak runs 2 to 3 percent of orders. One FTE is effectively doing data plumbing rather than operations work.
Those are the visible costs. The invisible costs are larger. A 2 percent oversell rate on the DTC side translates to refund processing, customer service tickets, and a retention hit on the customers who oversold. A 5 percent fill-rate miss on a wholesale order translates to a chargeback line on the next remittance and a conversation with the buyer that costs goodwill. A misallocation that ships DTC inventory the wholesale team had verbally promised translates to a key account being short on a launch week.
When I am sitting across from a buyer comparing vendors, the conversation that lands is not about features. It is about which system can hold ATP and ATS as separate, channel-aware numbers on a single inventory record, and which system makes the operations team rebuild that logic in a spreadsheet on Sunday night.
What architecture actually fixes this?
The architectural fix has four properties.
One, a single inventory record per SKU per location, owned by the operations system, not the channel. Shopify reads from it. The 3PL reads from it. The wholesale order entry reads from it. None of them owns it.
Two, ATP calculated in real time, with all the apparel-specific terms in the formula, including in-transit with confidence haircuts and size-level allocation against open wholesale orders.
Three, ATS as a configurable policy layer per channel per style, not a global setting. A brand should be able to say “expose 70 percent of ATP to DTC for this style, hold the rest for the wholesale ship window closing on the 30th” without writing a script.
Four, allocation logic that respects channel priority when a conflict arises. If two orders draw from the same pool, the rule for which one wins should be explicit, configurable, and consistent with how the commercial team has promised the inventory.
This is what “channel-aware ATS on a unified inventory record” means in practice. It is not a feature in a product comparison sheet. It is the foundation that prevents the Tuesday morning scene from becoming Friday afternoon chargebacks.
When does a brand cross the threshold where this matters?
The predictable breakpoint zone is $10M to $20M in revenue, running wholesale plus DTC, with a 3PL in the mix. Below $10M, a careful operations lead can hold ATP and ATS in their head and in a spreadsheet, and the order volume is low enough that the conflicts are rare. Above $20M, the conflicts are constant, the spreadsheet is a liability, and the brand has typically already paid for the lesson once or twice.
The symptoms that show up at the threshold are recognizable. The wholesale team asks the operations team to confirm availability before promising anything, which slows reps down. The DTC team starts buffering inventory exposure by 15 or 20 percent because they have been burned. The warehouse picks in the order that orders arrived rather than the order of commercial priority, because nobody has told them otherwise. Reconciliation moves from Monday morning to a daily standup. The CFO starts asking why returns are not posting to inventory for 11 days, because returns should post to inventory in days, not weeks, and the receiving team is queueing them behind outbound.
What this means for an apparel operations team
The two numbers are not interchangeable, and treating them as one is the most common source of inventory pain in the $10M to $20M zone. ATP is what you can ship. ATS is what you choose to expose. The math underneath them is different, the policy on top of them is different, and the cost of getting them wrong shows up in different places for different channels.
The diagnostic is simple. Ask the operations lead to pull, for a single SKU, the on-hand at the 3PL, the in-transit with ETA, the units committed to open wholesale orders, the units reserved for unpicked DTC orders, and the current Shopify inventory feed. If those five numbers do not reconcile in under two minutes, the brand is at Breakpoint 3, and the conflict between ATP and ATS is already costing real money. It is showing up somewhere, in reconciliation hours, oversell rates, or chargeback lines, and the work is to name where.
The architectural answer is not a better spreadsheet or a tighter Shopify app. It is a single inventory record with channel-aware logic sitting on top, calculating ATP in real time and exposing ATS by policy. Whether a brand builds that or buys it is a separate decision. Pretending the distinction does not matter is not a decision, it is a deferred cost.
How accurate is your inventory really?
Nine questions estimate where your operation sits on the inventory-truth curve and how much revenue is at risk. Takes about three minutes.
Frequently asked questions
Shubham writes about evaluating ERP fit, assessing operational complexity, and how apparel brands can tell whether their current systems are helping or holding them back. As a Solutions Consultant at Uphance, he runs discovery conversations and fit assessments for apparel brands moving off patchwork stacks of PLM, PIM, inventory, and B2B tools. His articles cover ERP selection, vendor RFPs, comparison frameworks, and the operational signals that tell a brand it has outgrown spreadsheets and point solutions. He focuses on how mid-market apparel teams evaluate connected platforms against the cost of staying with what they have.
Venkat is the Founder and CEO of Uphance and the author of the 6 Breakpoints of Apparel Operations framework. He writes about operational clarity for apparel brands as complexity grows across channels, warehouses, partners, and teams. His work focuses on why disconnected operations, not growth itself, create the chaos most mid-market brands feel between $5M and $100M in revenue, and on the operating-model patterns that decide whether scaling a brand strengthens execution or fractures it. He argues that the status quo is the real competitor in apparel software, and that the right move is fewer systems with deeper connection, not more dashboards.
