Who sends it
Sent by the receiving side back to the sender, in place of or alongside a 997, for partners (often larger shippers) that enforce a HIPAA-style or guideline-bound implementation.
When it fires
Immediately after a transaction is received, same as the 997 — but the 999 checks the message against the partner’s guideline, not just the base standard.
What it carries
- The control numbers of the group and transaction sets being acknowledged.
- An acknowledgment status, with the same accept/reject meaning as the 997.
- Guideline-level error detail — the specific rule, loop, segment, or element that failed the partner’s implementation, which is more precise than a 997 rejection.
Where it breaks
- A transaction that passes a 997 but fails the 999 — it was valid X12 but broke a partner-specific rule (a required loop, a code not on the partner’s list).
- Mapping to the base standard instead of the partner’s guideline, so every transaction round-trips a 999 rejection until the map is corrected.
- A partner that expects a 999 receiving only a 997, and treating the exchange as non-conforming.
How Trailflow handles it
Trailflow EDI (beta) handles the 999 as an acknowledgment type alongside the 997, so guideline-level rejections from partners that require implementation acknowledgments are visible as errors rather than silent failures.
See Trailflow EDI for the product. It is in beta; supported behavior may change.