ediverse Explore the platform

Spotlight PEPPOL BIS Billing 3.0 The EU e-invoicing mandate is here — France Sept 2026, Belgium Jan 2026, Germany 2025.

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:

x12 accept-997.x12
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~
x12 reject-997.x12
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)

  • HeaderAK1 Functional Group Response Header references the acknowledged group (functional ID, control number).
  • Detail — per acknowledged transaction: AK2 Transaction Set Response Header identifies ST01 and ST02, AK3 Data Segment Note flags a segment-level error (with its error code), AK4 Data Element Note pinpoints an element-level error (qualifier, position). AK5 Transaction Set Response Trailer carries the verdict (A Accepted, E Accepted with errors, P Partially accepted, R Rejected).
  • SummaryAK9 Functional 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. SE closes 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.

  • 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