X12 997 — Functional Acknowledgment
The historic syntactic acknowledgment in X12: confirms receipt of a GS/GE functional group, segment by segment, and lists any errors. Still massively deployed on releases ≤ 5010.
Purpose
The 997 confirms the syntactic receipt of an X12 functional group: it attests that the GS/GE was received, that the inner ST/SE are consistent, and that the X12 grammar was respected. It is not a business acknowledgment: it does not confirm that a PO has real products or that an ASN makes sense — only that the format is syntactically correct.
Envelope and structure
The 997 uses the standard triple X12 envelope with GS01 = FA
(Functional Acknowledgment). The 997 is usually carried in a separate
functional group from the one it acknowledges to avoid infinite loops. Below are an
accept and a reject 997:
ISA*00* *00* *ZZ*RECEIVER01 *ZZ*SENDER02 *260513*1500*U*00401*000000997*0*P*>~
GS*FA*RECEIVER01*SENDER02*20260513*1500*1*X*004010~
ST*997*0001~
AK1*PO*1~
AK2*850*0001~
AK5*A~
AK9*A*1*1*1~
SE*6*0001~
GE*1*1~
IEA*1*000000997~ ISA*00* *00* *ZZ*RECEIVER01 *ZZ*SENDER02 *260513*1505*U*00401*000000998*0*P*>~
GS*FA*RECEIVER01*SENDER02*20260513*1505*1*X*004010~
ST*997*0001~
AK1*PO*2~
AK2*850*0002~
AK3*N1*5***8~
AK4*1*98*7~
AK5*R*5~
AK9*R*1*1*0~
SE*8*0001~
GE*1*1~
IEA*1*000000998~ Common segments (concept)
- Header —
AK1Functional Group Response Header references the acknowledged group (functional ID, control number). - Detail — per acknowledged transaction:
AK2Transaction Set Response Header identifies ST01 and ST02,AK3Data Segment Note flags a segment-level error (with its error code),AK4Data Element Note pinpoints an element-level error (qualifier, position).AK5Transaction Set Response Trailer carries the verdict (A Accepted, E Accepted with errors, P Partially accepted, R Rejected). - Summary —
AK9Functional Group Response Trailer gives the group-level verdict (A, E, P, R), the number of included ST, the count of accepted ST, and the group-level error list.SEcloses the transaction.
997 vs 999 — the migration
The 997 was designed in 1991 and has not evolved with the syntactic improvements of recent X12 releases: it encodes composite errors poorly, lacks loop-level granularity, and its error vocabulary is sparse. Starting with release X12 6020 (2008) the standard introduces 999 Implementation Acknowledgment, which is richer: composite/loop granularity, extended error vocabulary, and validation against the implementation guide. HIPAA 5010 requires 999 rather than 997 for healthcare transactions (270/271/276/277/278/834/835/837). On supply-chain and finance non-HIPAA flows, the 997 is still massively deployed and accepted in practice.
When you'll see it
The 997 is still ubiquitous in US supply-chain retail and manufacturing: Walmart, Target, Home Depot, Costco, Lowe's, Kohl's, Macy's all exchange tens of millions of 997s per day. Traditional VANs (OpenText GXS, IBM Sterling, SPS Commerce, TrueCommerce) support both, but their historical partners stay on 4010 + 997.
Related transactions
- 999 — Implementation Acknowledgment (the successor). See 999 page →
- 824 — Application Advice (business acknowledgment beyond syntax).
- TA1 — Interchange Acknowledgment (at the ISA/IEA level, below the 997).
- All acknowledged transaction sets: 210 · 214 · 821 · 823 · 990
Documentation
- x12.org/products/transaction-sets — public index, name and code 997.
- stedi.com/edi/x12/transaction-set/997 — public editorial reference, examples.
- Implementation Guide (TR3) — available for purchase on x12.org or via DISA.