An EDI 945 is an X12 warehouse shipping advice: the document a warehouse or 3PL sends back to the shipper confirming what actually shipped against a 940 shipping order — line by line, in the units actually picked. The 940 says what should ship; the 945 says what did. The distance between those two statements is where inventory accuracy, ASN quality and invoice disputes are decided, and it is the least watched distance in retail EDI.
Where the 945 sits in the chain
The retail warehouse flow runs: 850 purchase order to the seller, 940 shipping order to the warehouse, pick and pack, then the 945 back to the shipper. Downstream, the physical shipment is announced to the receiver with an 856 advance ship notice, and the chain settles with an 810 invoice.
The 945 is the only document in that chain that reports reality. The 940 is a plan. The 856 and 810 are usually generated from plan-shaped data — the order, the expected quantities — unless something forces them to use the confirmed shipment instead. That "something" is the 945 being received, parsed and reconciled. In most operations it is received, archived, and never read.
What an EDI 945 carries
The document is short, and its value is entirely in the join back to the 940.
W06 — shipment identification. Carries the shipment reference, date and time, and the shipping order number from the 940's W05. This is the join key: a 945 that cannot be matched to its 940 is an orphan confirmation, and orphan confirmations are how shipments get doubled or lost in the shipper's ERP.
N1 loop — reporting warehouse. Which facility shipped, identified by the partner's location code. Matters when one partner runs several DCs and the shipper's system books receipts by warehouse.
W12 — line detail. Per line: the quantity actually shipped in the ordering unit of measure, and the product ID pair. This is where short-ships, over-ships and substitutions become visible — one W12 per line, quantities as picked, not as planned.
W10 — pallet detail.
CTT/SE — counts and envelope. Line count, segment count, control numbers. As always, control-number discipline is what lets the shipper's system detect that a 945 never arrived at all.
Element positions follow the X12 945 definition; which elements each partner requires is in the partner's guide, and the guide decides the shape of the map.
Why the 945 disagrees with what shipped
A 945 that differs from the 940 is not an error. Warehouse operations produce differences routinely; the 945 exists to report them. Four patterns cover production experience.
Short-ships. The order said 100 cases; damage, shortage or allocation found 96 at pick. The 945 reports 96. If the shipper's system books the 940 quantity instead, its inventory is now wrong by four cases, and the re-order math inherits the error.
Substitutions. The ordered item was unavailable; the warehouse shipped the approved substitute. The 945 carries the shipped item ID, which is not the ordered item ID. Unreconciled, this reads as "ordered item still owed, substitute unexplained" — two errors from one correct decision.
Damages pulled at staging. Carton damaged at the dock, pulled from the pallet minutes before departure. The 945 is supposed to reflect the final state; when the ASN and the 945 are generated at different moments, one of them carries the stale count. This is the same failure class as the 856's pack-level drift, seen from the other side.
The 945 that never arrived. The confirmation was rejected, or the transmission failed, or it sits unacknowledged in a queue. The shipper's ERP never sees a shipment for the order, re-ships it, or customer service starts answering questions about freight that already left. The absence of monitoring, not the absence of capability, is what makes a lost 945 expensive.
The 945 is the source of truth for the 856
Here is the connection almost nobody documents. The 856 advance ship notice must describe the physical pallet, and the physical pallet is described — accurately, after all staging changes — by the 945. Yet in most setups the ASN pipeline reads from the order, not from the confirmed shipment.
The consequence is mechanical: any gap between plan and actual at pick becomes a gap between the ASN and the pallet, which becomes a dock exception and a chargeback at the receiver. The fix is architectural, not procedural: generate the ASN from the confirmed shipment data — the same event that produces the 945 — so the document and the pallet match by construction. The 945 and the 856 stop being two documents that can disagree.
The 945 and the 856: two confirmations, two readers
A common confusion, so it deserves an explicit answer. Both documents report what shipped, but they report to different readers with different jobs. The 856 goes to the receiving customer and describes the load for the dock inspection: hierarchy, labels, timing. The 945 goes back to the shipper and describes the fulfillment of the order: line-level shipped quantities against the 940. One is a compliance document; the other is a reconciliation document.
When an operation treats them as the same feed — generating one from the other, or generating both from snapshots taken at different moments — it introduces drift: the customer's dock and the shipper's ERP end up told different stories about the same pallet. The clean design generates both from the same pick-confirmation event, so the two readers receive one truth in two formats.
What a reconciled operation runs
The discipline is small and unglamorous:
- A daily three-way match — 940 (planned) against 945 (confirmed) against 856 (announced), per order and per line. Differences become a queue with owners, not surprises on a remittance.
- Every short-ship gets a disposition — backorder, substitute, or cancel — recorded where the ERP can see it, so replenishment and customer service work from reality.
- Orphan 945s alert the same day. A confirmation that matches no 940 is usually a control-number mismatch or a misrouted document; both are cheap to fix early and expensive once the order has aged.
- The match rate itself is a metric. The program that measured ASN discrepancy at about 4% before the rebuild could only act on it because the match was defined; after the rebuild the same measurement read 0.3% (case C05). What is not matched is not known.
Monitoring a confirmation document
The 945 fails in two ways: wrong content, or no arrival. Content failures are catchable at reconciliation; arrival failures need acknowledgment tracking — a response timeout on every outbound 945, with rejections surfaced to operations within minutes rather than discovered by a customer call. That is the same monitoring pattern used for 997 functional acknowledgments.
At scale this becomes an SLO, not a habit. At one fulfillment hub moving 35,000+ shipments a day, EDI flow health is tracked as a business signal — order throughput, scan frequency, and the 945 success rate, with its own SLO and error budgets reviewed with the client every month (case C09). Before that operating model existed, an interrupted EDI feed was discovered two to four hours later, when orders stopped moving.
What an unreconciled 945 costs
The costs stack by layer: the shipper's inventory drifts by every unbooked short-ship; ASNs built from plan data generate dock chargebacks at published rates against cost of goods; invoices billed against ordered quantities produce deductions; and lost confirmations produce duplicate shipments and support volume.
The 945 is the document where that discipline starts, because it is the first record of what actually happened.
If your confirmations are not reconciled, the two-week diagnostic maps the gap between your 940s, your 945s and your ASN pipeline — $7,500, fixed scope, findings yours.
Written by the CrunchCode engineering team — the people who ran these integrations in production.