Inventory & Channel Sync

Available-to-Promise, explained: telling customers a ship date you can actually hit.

Giving customers a ship date you can actually meet based on stock, labor, and carrier cutoffs.

Last updated September 16, 2026

The ATP date is when this order can leave the building. Not when you wish it could. It is the day the qty becomes pickable at the fulfilling location, plus pick and pack, plus the carrier cutoff, plus any QC or warehouse transfer still in front of the pick.

Location, cutoff, and pickable stock

On-hand at that location, before cutoff, ships today or tomorrow. After the 3PL or carrier cutoff, it is the next ship day. Qty at the other warehouse is not on-hand here. Publishing a two-day promise on a SKU that is only pickable in California when the order routed to New Jersey is the miss. The customer sees a date. The 3PL sees a backorder. Quarantine, returns QC, and exchange holds are not pickable either. On-hand that cannot leave is not a ship date.

When you are short of on-hand

Short of on-hand, you have three honest options: promise the next named inbound (ETA plus receive and putaway days), split the order, or refuse the line. A split is two dates. Do not print one date and ship half. Do not promise a date against an unconfirmed PO. Do not promise against 3PL Incoming that has not goods-received. Incoming is a file, not a pick face. Add the 3PL's receive-to-pick days after GRC before you call inbound pickable. A weekend or a no-ship day is not a ship day.

Named inbound can set a ship date on an order you already took. It does not publish those units to Shopify, and it is not a rule for selling wholesale against water stock. That sell-the-water decision is a different policy. This piece is only the date you print.

Wholesale windows versus DTC promises

Wholesale and DTC use the same math and different windows. A retailer ship window is a start and end they will charge back if you miss. A DTC promise is the date on the confirmation email. Do not reuse the wholesale window as the Shopify promise. Do not give a retailer a DTC "ships in two days" when the 850 needs a week. If you must transfer West to East before the pick, the ATP date includes that transit. The truck is not a ship date.

Name the location. Name the inbound if you are using it. Add labor and cutoff. Then publish that date, or do not take the order. Shopify does not know your dock calendar, your 3PL cutoff, or that the unit is sitting at the other warehouse. The date you print is the date the fulfilling node can actually leave.

Pickable, plus labor, plus cutoff. That is the ship date.

Run this with AI

Connect Claude or ChatGPT to your Fulfil data with the Fulfil MCP, then run this prompt on your own numbers.

You are ops promising a ship date on this Shopify or wholesale order.
Here is: order_id, channel (dtc/wholesale), sku, order_qty, fulfill_location, on_hand_at_location, other_location_on_hand, carrier_cutoff_passed (y/n), named_inbound_po, inbound_confirmed (y/n), inbound_eta, receive_putaway_days, transfer_days, split (y/n), promised_ship_date, 3pl_incoming_not_received (y/n).
[paste]

Produce:
1. Promised dates against unconfirmed POs or 3PL Incoming that is not received.
2. On-hand-today lines that missed cutoff or are pickable only at the other warehouse.
3. Shorts that need a named inbound + receive/putaway date, a split (two dates), or a refuse.
4. Wholesale windows reused as DTC promises, or one date printed on a split.
ATP is pickable plus labor plus cutoff. Shopify does not know your dock calendar.

See it run on
your data.

Fulfil runs inventory, fulfillment, purchasing, and accounting for scaling DTC brands in one system.