Setting Up EDI 943 and 944 for 3PL Stock Transfers

Step-by-step guide to implementing EDI 943 and 944 for warehouse stock transfers, from mapping segments to reconciling receipt discrepancies with a 3PL.

Setting Up EDI 943 and 944 for 3PL Stock Transfers

What EDI 943 and 944 Actually Do (And What They Don't)

The EDI 943/944 pair moves stock transfer data between a manufacturer or depositor and the 3PL warehouse holding their inventory. It's not the same job as an 856 Advance Ship Notice, and treating it as interchangeable is where a lot of implementations go sideways in week one.

The EDI 944 Warehouse Stock Transfer Receipt Advice transaction set is an acknowledgement to a manufacturer that its transfer shipment has been received, and this transaction is typically used by third-party logistics providers or warehouses, since communications regarding shipments from a manufacturer to its own warehouses can typically be handled within the company's own business or warehouse management system. In general, third-party warehouses store products for manufacturers who then instruct the warehouse to ship to other locations. That's the whole relationship in one sentence: you're not messaging a customer, you're messaging your own inventory custodian.

Here's the distinction that trips people up. While an EDI 943 document seems similar to an EDI 856 Advanced Ship Notice, the EDI 856 transaction is sent to customers, such as retailers, while EDI 943 is only used for remote warehouses, so these two documents cannot replace one another. If your ERP team tries to reuse the 856 map for the 943 because "it's basically the same data," stop them. The trading partner IDs, the qualifiers, and the downstream expectations are different.

The document flow, in order: the depositor sends the 943, the 3PL returns a 997 functional acknowledgment confirming transmission, the goods get physically checked in, and the 3PL sends back the 944. The warehouse will respond to the Warehouse Stock Transfer Shipment Advice with a 997 Functional Acknowledgment to indicate that the EDI transaction was received, and after physically reviewing the product and verifying the accuracy of the shipment information, the warehouse may then respond back to the supplier with a 944. From there, downstream transactions like the 945 (Warehouse Shipping Advice), 856, and 810 pick up when the warehouse later ships that stock out to a customer.

Before You Start: Prerequisites Checklist

You need four things in place before a single test file moves. Skip any of these and you'll spend your go-live week debugging connectivity instead of data.

  • A signed trading partner agreement with the 3PL that specifies the X12 version (4010 is still common in warehouse EDI, though newer 5010 implementations exist), segment delimiters, and the ISA/GS qualifiers for both test and production environments.
  • AS2 or VAN connectivity already certified for at least one transaction type, ideally the 997, so you're not debugging transport-layer issues and mapping issues at the same time.
  • An ERP or WMS capable of generating the 943's shipment identification and party loops, and parsing the 944's receipt confirmation loops on the way back in.
  • The 3PL's companion guide. Most 3PLs bundle 943/944 into a larger warehouse document set. Warehouse teams should check the documents, partner rules, field validation and system posting points that affect their workflow, which for a platform like 3PL Central usually means aligning 856, 940, 943, 944, 945 and 947 with operational ownership.

Don't underestimate the scope of the 944 side. The X12 944 specification defines 27 segments carrying 139 data elements, 50 of which are mandatory. That's not a five-field acknowledgment. Budget mapping time accordingly, especially if your ERP's native EDI module wasn't built with warehouse transaction sets in mind.

Implementing the 943/944 Loop, Step by Step

This is the sequence I've used across manufacturer-side implementations. It assumes you're the depositor sending the 943 and receiving the 944, which is the more common direction for a manufacturer working with a contract warehouse.

  1. Pin down the companion guide version and qualifiers first. Get the exact ISA06/ISA08 sender/receiver IDs and GS02/GS03 application codes from the 3PL before you build anything. Get these wrong and your test file bounces at the interchange envelope, before your map even runs.
  2. Build the outbound 943 map. Populate the shipment identification segment with a unique reference number, the N1 loops for ship-from and ship-to parties, and the item detail loops carrying lot/batch numbers and quantities. The 943 gives a warehouse advance notice that a supplier is shipping product into the facility, typically a stock transfer into a 3PL, and it carries item identifiers, quantities, carrier details, and shipment dates so the warehouse can plan receiving labor and dock capacity before the freight arrives.
  3. Send a test 943 and confirm the 997 comes back. This is your first checkpoint. If the 3PL's translator can't parse your envelope, you'll get a rejection or silence instead of an acknowledgment. The warehouse acknowledges receipt of the document with a 997 and, after physically verifying the shipment, typically reports what actually arrived on a 944.
  4. Have the 3PL simulate a physical receipt and transmit a test 944. Check that the shipment reference on the 944 matches the one you sent on the 943 exactly. A mismatched reference number here is the single most common reason reconciliation breaks later.
  5. Validate the 944 against your expected values. Line up received quantities against what you shipped. This isn't optional QA, it's the entire point of the transaction: in a 3PL Warehouse Management System, the EDI 944 is generated after the warehouse receives and processes an incoming shipment, and upon arrival, the WMS records the received items, compares them to the EDI 943, and logs any discrepancies such as receiving 490 units instead of 500 due to damage.
  6. Confirm the 944 triggers an inventory posting. Don't just check that the file parses, check that your ERP actually updates on-hand quantity. The 944 is the warehouse's confirmation of what was physically received on an inbound stock transfer, sent after the goods are checked in, and the depositor uses it to post the received quantity into available inventory at that location and to reconcile the receipt against the 943 shipment advice, closing the inbound loop the 943 opened.
  7. Run at least one full cycle before going to production. A 943 that gets acknowledged, a 944 that comes back with matched quantities, and zero manual corrections needed. If step 6 required someone to fix numbers by hand, you're not ready.

How You Know It Worked

Success looks like matched quantities, a receipt date that lands inside your SLA window, and inventory that flips to available-to-sell status without anyone touching a spreadsheet. The reason this matters more than it sounds: suppliers require it because inventory at a 3PL is not sellable until the receipt is confirmed in their own system. Until the 944 posts, that stock is a shipment, not inventory.

Run a short production burn-in, two to four weeks is typical, watching two metrics: 997 turnaround time (should be near-instant if AS2, within a defined batch window if VAN) and 944 latency from physical receipt to transmission. If your 3PL is taking 48 hours to send a 944 after goods hit the dock, that's a service-level conversation, not a mapping problem.

Failure Mode: Quantity and UOM Mismatches

This is where most 943/944 implementations break after go-live, not before. The pattern: received quantities differ from shipped quantities on the 944, with no explanation attached, leaving your reconciliation team staring at a variance with no context.

Two variants show up constantly:

  • Unit-of-measure conversion errors. Your ERP ships in cases, the warehouse's WMS counts in eaches, and if the conversion factor isn't validated on both sides, your on-hand count inflates or deflates without anyone noticing until a cycle count catches it.
  • Broken reference numbers. The 944 comes back with a depositor order or shipment reference that doesn't match the originating 943, so there's no way to tie the receipt back to the transfer that generated it. This shows up as logged discrepancies like receiving 490 units instead of 500 due to damage, and if that variance isn't carried with a reason code, it just looks like an unexplained shortfall.

The fix isn't clever, it's discipline. Enforce UOM validation in the map before transmission rather than trusting the 3PL to catch it on their end. Require an exception or reason segment for any variance instead of letting the 944 post silent differences. And put alerting on unmatched reference numbers so a broken link surfaces in your monitoring dashboard the same day, not during month-end reconciliation.

Where This Fits in a Broader Integration Stack

You don't need to build 943/944 support from scratch if you're already running a mid-market EDI platform. SPS Commerce, TrueCommerce, Cleo, and IBM Sterling all treat warehouse transaction sets as standard offerings, and WMS platforms like Manhattan Active and Blue Yonder expose 943 outbound and 944 inbound as native flows rather than custom builds.

Once the 944 posts and the loop closes, the physical transfer leg, actually moving the truck between your plant and the 3PL's dock, typically gets booked and tracked through a separate transport management layer. That's a different system talking to a different set of carriers, and platforms like Cargoson, MercuryGate, and Descartes sit downstream of this EDI exchange, consuming the shipment data to tender the actual move. Worth understanding that boundary clearly: your 943/944 pair confirms what moved and what arrived, it doesn't book the truck.

Quick Reference: Segments and System Tie-Ins

DocumentKey segmentsTypically originates fromCommon 3PL trading partners
943 (Shipment Advice)Shipment ID, N1 party loops, item/quantity detailManufacturer/depositor ERPDot Foods, Inc., Americold Logistics, LLC., Lineage, Inc.
944 (Receipt Advice)Receipt confirmation, quantity received, discrepancy/reason codes3PL WMS
997 (Functional Ack)Control number matching, segment countWhichever system receives the transmissionNot published

Start with the trading partner agreement, not the map. Every mapping error I've seen traced back to a qualifier or version mismatch that a five-minute conversation with the 3PL's EDI team would have caught before the first test file went out.