Available to promiseAvailable to Promise (ATP)
The quantity of stock that can be promised to new orders right now — what's on hand, minus what's already allocated, plus what's confirmed inbound within the promise window.
By Oana Bradulet
Available to Promise (ATP) is the quantity of stock that can be promised to new orders right now — taking into account what's already committed and what's reliably inbound.
It's the answer to "can I sell this to the customer who's about to checkout?"
The basic formula:
ATP = On hand − Allocated − Reserved − Safety stock + Inbound (within promise window)
Each term changes the answer in a real way:
- On hand — physical units in the warehouse
- − Allocated — units already committed to existing orders (see allocated stock)
- − Reserved — units held without a specific order (e.g. for an upcoming promo)
- − Safety stock — the buffer you don't want to dip into
- + Inbound — confirmed POs arriving within the promise window the customer is willing to accept
Skip any of these and ATP misrepresents reality.
Why ATP exists separately from on-hand
Two reasons:
- Customer-facing answer. The website needs to show "in stock" to the next visitor. That has to mean available to them, not "exists in the warehouse."
- Order acceptance. Sales operations need a single number to decide whether to confirm a B2B order. Confirming based on on-hand alone causes overselling.
ATP is the metric that gets exposed in checkout flows, sales dashboards, and customer-service screens. On-hand is for warehouse and finance.
ATP windows
The "+ Inbound" term depends on what window you're willing to promise to. Examples:
- D2C "in stock" badge. Usually no inbound — only stock physically on hand counts. Customers expect 1–3 day delivery; promising against arriving stock is risky.
- Made-to-order or pre-order flow. Inbound counts heavily; the customer has accepted a longer lead time at checkout.
- Wholesale order entry. Inbound within the customer's accepted ship window counts. A retailer ordering for delivery in 6 weeks doesn't care whether stock is in the warehouse today.
- Backorder acceptance. All inbound counts; the customer is explicitly waiting.
The same SKU can have several ATP figures simultaneously — one per channel, one per delivery window. Most modern OMS platforms let you configure these.
ATP vs CTP
Two related but distinct concepts:
- ATP (Available to Promise). Based on existing inventory plans — answers "with what we already have or have on order, can I serve this?"
- CTP (Capable to Promise). Goes further — "can we make the inventory in time to serve this?" Used in build-to-order manufacturing.
Most consumer brands operate ATP. Manufacturers and configured-to-order businesses use CTP.
Worked example
A SKU's status:
- On hand: 1,000 units
- Allocated to existing orders: 600
- Reserved for tomorrow's promo: 200
- Safety stock target: 50
- Inbound PO arriving in 3 days: 800
- Inbound PO arriving in 21 days: 1,200
For a D2C 1-day-shipping promise (no inbound):
ATP = 1,000 − 600 − 200 − 50 = 150 units
For a wholesale 14-day-ship promise (3-day inbound counts):
ATP = 1,000 − 600 − 200 − 50 + 800 = 950 units
For a backorder explicitly accepting 4-week ship (both inbounds count):
ATP = 1,000 − 600 − 200 − 50 + 800 + 1,200 = 2,150 units
Same SKU. Three very different ATPs depending on the promise window.
Where ATP breaks
Common operational failures:
- Out-of-date allocation. Cancelled orders not releasing allocations means ATP shows lower than reality.
- Inbound POs trusted that are actually slipping. A PO marked as arriving in 3 days that actually arrives in 10 promises stock the customer can't get on time.
- Multi-location confusion. Total ATP across all warehouses can be high while the warehouse that ships to a specific customer is empty.
- Channel-allocation conflicts. Single ATP pool shared across channels means D2C can sell out the wholesale buffer (or vice versa).
Each of these is solved with policy: explicit channel splits, conservative inbound trust windows, location-aware ATP, automated allocation release.
ATP in promotional periods
ATP is most stressed during promos because the rate of change is fastest. A flash sale can drop ATP from 500 to 0 in minutes; if the system isn't updating in near-real-time, customers continue to see "in stock" and get cancellation emails an hour later.
The defence: real-time ATP propagation, explicit allocation rules, automatic safety-stock buffers that prevent the headline ATP from going negative even when demand spikes.
Formula
- On hand
- = Sellable physical stock at the location
- Allocated
- = Units committed to existing customer orders
- Reserved
- = Units ring-fenced without a specific order (e.g. for promo)
- Safety stock
- = Buffer you don't want to dip into
- Inbound
- = Confirmed POs arriving within the customer's accepted ship window
Worked example
On hand 1,000, allocated 600, reserved 200, safety 50. D2C 1-day-ship ATP = 1,000 − 600 − 200 − 50 = 150. Wholesale 14-day-ship ATP, with a 3-day inbound of 800 = 150 + 800 = 950. Same SKU, different ATPs per promise window.
Common mistakes
- →Reporting one ATP figure across all channels and promise windows. ATP depends on what the customer is willing to wait for.
- →Trusting inbound POs without a delivery confidence threshold. POs that slip turn confirmed orders into customer-service problems.
- →Slow ATP updates during promos. Customers see in-stock at minute 1 and a cancellation at minute 30. Real-time matters most when demand is moving fast.
- →Forgetting safety stock in the formula. The headline ATP shouldn't include the buffer you don't actually want to draw down.
How Lumina handles available to promise for scaling brands
Lumina uses available stock — not just what's on hand — as the starting point of your forward projection, so your plan draws down from what you can genuinely sell, not stock that's already spoken for.
Frequently asked questions
What is available to promise (ATP)?
How is ATP calculated?
What's the difference between ATP and on-hand stock?
What's the difference between ATP and CTP?
Can the same SKU have different ATPs?
Related terms
Allocated stock
Stock that's physically on hand but already promised to specific orders — present in the warehouse, but not available to sell to anyone else.
On-hand inventory
The total physical units in your warehouses right now — the starting point for every other inventory state, but never the sellable answer on its own.
In-transit inventory
Inventory you own but isn't at your location yet — moving between supplier and warehouse, or between two warehouses you control.
Safety stock
Extra stock held above expected demand to absorb forecast error and lead-time variability without stocking out — expressed either as units or as time (days/weeks of cover). Same buffer, two units.
Backorder
An order a customer places for an item that's currently out of stock — to be fulfilled when stock arrives.