EDI guide: document 997
Every 850, 856 and 810 expects a 997 in return. It is a technical receipt: the file arrived and could be read. It says nothing about whether the order will ship or the invoice will be paid, and confusing the two is an expensive habit.
What it is
An EDI 997 is the functional acknowledgment. When a trading partner receives an EDI functional group (say, an 850 purchase order), its translator checks the envelope, the segment structure and the mandatory elements, then sends back a 997 that reports what it received and whether each transaction set passed. The 997 references the control numbers of the original file so the sender can tie the two together.
The 997 exists so that neither side has to guess. A brand that sends an 856 and gets no 997 within the agreed window knows to resend or to call. A retailer that receives an 850 acknowledgment with an R (rejected) code knows the supplier's translator choked on something before a human ever saw the order. Most trading partner agreements require a 997 for every inbound group within 24 hours and treat its absence as non-receipt.
What the 997 does not do is accept the business content. A 997*A on an 850 means the order file was readable; the 855 is where the brand accepts the order. A 997*A on an 856 means the ASN parsed; the retailer can still fine the shipment when the pallet scan does not match. For a 3PL this matters when a client says 'the ASN was accepted': ask which document said so.
Sample layout
Illustrative values. Each retailer or carrier publishes an implementation guide with the exact subset of segments and codes it accepts.
| Segment | What it carries | Example |
|---|---|---|
| ST | Start of the transaction set | ST*997*0001 |
| AK1 | Functional group response header: the functional ID of what is being acknowledged (PO for 850, PR for 855, SH for 856, IN for 810, QM for 214) and its group control number | AK1*SH*000012045 |
| AK2 | Transaction set response header: the set ID (856) and its control number, one AK2 loop per transaction set in the group | AK2*856*0001 |
| AK3 | Data segment note: which segment had a problem, its position, the loop, and an error code (1 unrecognized segment, 2 unexpected segment, 3 mandatory segment missing, 8 segment has data element errors) | AK3*MAN*14**8 |
| AK4 | Data element note: the element position, the data element reference, and an error code (1 mandatory element missing, 4 too short, 5 too long, 6 invalid character, 7 invalid code value, 8 invalid date) | AK4*2*87*7*XX |
| AK5 | Transaction set response trailer: A accepted, E accepted with errors, R rejected, plus up to five syntax error codes | AK5*E*5 |
| AK9 | Functional group response trailer: A accepted, E accepted with errors, P partially accepted, R rejected; number of sets included, received and accepted | AK9*E*1*1*1 |
| SE | End of the transaction set | SE*8*0001 |
How it flows
Common rejection reasons
The failures that show up in 997s, exception queues and retailer chargebacks.
Before you sign
Warehouses with monitored EDI connections that return and reconcile 997s.
Questions
Retailer asking for EDI?
3PL Hub matches brands with warehouses already exchanging this document with the retailers and carriers you sell through. Free for brands, commission-free, from a directory of 5,400+ providers.
Free for brands. No commissions. Your details go only to the 3PLs you match with.
Get matched to 3PLs
The commission-free 3PL directory and matchmaking platform. 5,000+ 3PLs, 200+ verified members, and 3PLs never pay us to be recommended.
3PL, fulfillment, M&A, eCommerce and trade, written by a human. Read by 3,000+ operators and the logistics ecosystem.
Subscribe to Taking Inventory Free. Every two weeks. Unsubscribe any time.