EDI basics for 3PLs

EDI 940 vs 945: the order and the confirmation

Published October 14, 2026 · 6 minute read

The 940 tells the warehouse what to ship. The 945 tells the brand what actually shipped. A lot of 3PL EDI trouble happens in the gap between the two.

The short answer

An EDI 940 (Warehouse Shipping Order) goes from the inventory owner, usually a brand or seller, to the 3PL. It asks the warehouse to pick, pack, and ship an order from stock the 3PL is holding for them.

An EDI 945 (Warehouse Shipping Advice) goes the other way, from the 3PL back to the inventory owner after the order leaves the dock. It reports what shipped, how much, when, and with which carrier.

So the 940 is the request and the 945 is the receipt. In most setups one 940 produces one 945, matched by the depositor order number. Some partners allow several 945s for one order when it ships in parts.

What's inside a 940

A 940 is built around the W05 segment (Shipping Order Identification). It carries the depositor's order number and often the customer's purchase order number. That order number is the thread the whole exchange hangs on.

After that you'll usually see:

  • N1 loops for the ship-to and other parties, with addresses in N3 and N4.
  • G62 for dates, such as the requested ship date or a cancel-after date.
  • W66 for shipping instructions: payment terms, transport method, and the carrier's SCAC code.
  • One LX loop per line, with W01 giving the quantity, unit of measure, and item IDs (UPC, SKU, or both).
  • W76 at the end with total quantities.

What's inside a 945

The 945 mirrors the 940. It opens with W06 (Warehouse Shipment Identification), which repeats the depositor order number from the 940 and adds the actual ship date and the 3PL's shipment ID. Then:

  • W27 (Carrier Detail): transport method, carrier SCAC, and payment method for the shipment that actually went out. This can differ from what the 940 asked for.
  • G62 with the actual ship date, plus N9 references such as the bill of lading or tracking number.
  • One LX loop per line, with W12 (Warehouse Item Detail) showing the quantity ordered, the quantity shipped, and a status code. Ship-complete, short, and backordered lines are all reported here.
  • W03 at the end with total units, weight, and sometimes volume.

Here's a trimmed example of the line-level detail:

W06*N*SO-48213*20261019*SH90177~
W27*M*ODFL*PP~
LX*1~
W12*CC*24*24*0*EA**VN*TBL-4410~
LX*2~
W12*CP*12*8*4*EA**VN*TBL-4415~
W03*32*410*LB~

Line 2 is the one people care about. 12 were ordered, 8 shipped, and the difference is 4. If the 945 doesn't carry that difference correctly, the brand's system will keep thinking 4 units are on the truck. Exact status codes and qualifiers vary by partner, so always follow the trading partner's spec.

940 vs 945 side by side

940 Warehouse Shipping Order945 Warehouse Shipping Advice
Sent byInventory owner (brand, seller)3PL / warehouse
Sent whenBefore the order is pickedAfter the order ships
Key headerW05W06
Line detailW01: what to shipW12: what did ship
Carrier infoW66: requestedW27: actual
TotalsW76W03
Acknowledged by997 from the 3PL997 from the brand

Why the 945 never comes back, or comes back late

When a brand says "we never got the 945," the order usually did ship. The confirmation got stuck somewhere. Here's what we check, roughly in the order we check it:

  1. The order was never closed in the WMS. Many WMS setups only generate the 945 when the order is marked shipped or the load is closed. If the floor ships it but nobody closes it, nothing goes out.
  2. The 940 loaded with a different order number. If the order was keyed in by hand after a failed 940, or the number was trimmed or reformatted on import, the 945 can't be matched to the original order on the brand's side.
  3. The 945 was generated but failed in translation. A missing SCAC, a blank tracking number, or a unit of measure the map doesn't expect can stop the document in the translator's error queue, where nobody is looking.
  4. It was sent, then rejected. Check the 997 that came back. An "R" (rejected) or "E" (accepted with errors) in AK9 means the brand's system didn't take it cleanly, even though your side shows "sent."
  5. Batching and schedules. Some setups send 945s once a day, or only after carrier pickup. The 945 is "late" by design and nobody told the brand.
  6. Partial shipments. Some maps wait for the whole order before sending anything, so a short-shipped order holds its 945 until someone cancels the backorder.

A late 945 causes more trouble than it looks like. Brands often use it to trigger their own customer ASN (856) and invoice. So a 945 stuck for a day can mean a late ASN to a retailer, and that can mean a chargeback.

A simple daily check

Pull every order shipped yesterday in the WMS and compare it to the 945s actually sent, and to the 997s received for them. Any order without both is your exception list. It takes a few minutes once it's set up, and it catches most problems before the brand calls.

FAQ

Is a 945 the same as an 856 ASN?

No. The 945 goes from the 3PL to the inventory owner. The 856 usually goes from the inventory owner (or the 3PL on their behalf) to the retailer or end customer. They carry similar data, but they have different receivers and formats.

Does every 940 need a 945?

In most setups, yes. Every 940 that ships should get a 945 back. How cancellations and split shipments are reported varies, so check the partner's spec.

What's the 997 for?

The 997 Functional Acknowledgment confirms that a document was received and whether it passed syntax checks. It doesn't confirm that the business data is right.

Can a 945 report a short shipment?

Yes. W12 carries both the quantity ordered and the quantity shipped, with a status code for the difference. How backorders are handled after that depends on the partner.

945s going missing?

Send us one problem order and we'll trace where the confirmation stopped. The first 30-minute review is free.

Book a free 30-minute EDI review

← All articles · ReliantShip FAQ