The 997 Functional Acknowledgment is one of the most common EDI documents you will see, but it is also one of the most misunderstood. Think of it as a delivery receipt for EDI documents. When you send a document to a retailer, their system automatically sends back a 997 to confirm it arrived and could be read.
What a 997 Does (and Does Not) Mean
A 997 tells you one thing: the receiving system was able to accept and parse your document. It confirms that:
- The document was successfully delivered to the trading partner's system
- The document structure was valid and could be read
- The required segments and data elements were present
A 997 does not tell you:
- Whether the content of the document was correct (e.g., right prices, valid PO number)
- Whether the retailer agrees with or approves the document
- Whether the order will be fulfilled or the invoice will be paid
Important: Think of it this way — a 997 is like a mail carrier confirming a letter was delivered. It does not mean the recipient read the letter, agreed with it, or plans to respond favorably.
997 Accepted vs. 997 Rejected
When you receive a 997, it will have one of two outcomes:
Accepted (Code A): Your document was received and parsed without errors. This is what you want to see. The document made it through the front door of the retailer's system. Content-level review happens separately.
Rejected (Code R): Your document could not be parsed or had structural errors. The retailer's system could not read it properly. This needs immediate attention because the retailer essentially never received a usable document from you.
Common 997 Rejection Reasons
If you receive a rejected 997, the error details will usually point to one of these issues:
- Invalid segment or segment out of order: The document structure did not match the expected EDI format. This is usually a configuration issue.
- Wrong EDI version: Your document was sent in a version the retailer does not support. For example, you sent version 4010 but they require 5010.
- Missing required data element: A field that the retailer requires was left blank or omitted. For instance, a missing ship-to address or missing UPC code.
- Invalid qualifier or code: A code value in the document was not recognized. This often happens with ID qualifiers or unit-of-measure codes.
- Duplicate control number: The interchange or group control number was the same as a previously received document. Each transmission must have a unique control number.
What to Do When You Get a 997 Rejection
- Open the rejected document in RetailReady and look at the error details. The 997 will include specific error codes pointing to the problem segment.
- Check the error code against the descriptions above. RetailReady translates most error codes into plain-English explanations.
- Fix the underlying issue. If it is a data problem (missing field, wrong code), correct the document and resend. If it is a structural problem (wrong version, segment order), this may require a configuration change — contact support.
- Resend the document after the fix. Monitor for a new 997 to confirm the corrected version was accepted.
Tip: If you are seeing repeated 997 rejections for the same error, it is likely a configuration issue with your trading partner setup. Check the connection settings in Trading Partners, or reach out to RetailReady support for help.
997 Status Codes Explained
When a trading partner receives your EDI document, they send back a 997 Functional Acknowledgment with one of these status codes:
| Status | What It Means | Action Required |
|---|---|---|
| Accepted (A) | Your document was received and passed all validation. Everything is good. | None — document processed successfully |
| Accepted With Errors (E) | Your document was received and will be processed, but the trading partner found minor issues. | Review the error details for future improvements |
| Rejected (R) | Your document was rejected entirely. It will NOT be processed. | Fix all errors and resend the complete document |
Note: These are the status codes that RetailReady actively processes. Other X12 997 codes exist in the standard but are extremely rare in retail EDI.
Segment-Level Errors (AK3)
If a 997 comes back with segment-level errors, it means specific sections of your document had problems. Here's what each error means:
- Unrecognized Segment — Your document contains a segment the trading partner doesn't recognize. This usually means a non-standard extension was included.
- Unexpected Segment — A segment appeared in the wrong location. Segment order matters in X12.
- Mandatory Segment Missing — A required segment is not present. Check that all required fields are filled in.
- Loop Exceeded Maximum — A repeating group (like line items) exceeded the allowed count. You may need to split into multiple documents.
- Segment Exceeds Maximum Use — A segment appeared more times than allowed. Check for duplicates.
- Segment Not In Transaction Set — A segment was included that doesn't belong in this document type.
- Segment Out Of Sequence — Segments are in the wrong order. Regenerate to fix.
- Segment Has Element Errors — The segment itself is fine, but one or more fields within it have issues. See element errors below.
Element-Level Errors (AK4)
Element errors are the most specific — they pinpoint exactly which field within a segment has a problem:
- Required Field Missing — A mandatory field was left empty. Fill in all required fields.
- Conditional Field Missing — A field that becomes required based on other field values is missing.
- Too Many Data Elements — More fields than expected in a segment.
- Field Too Short — A value doesn't meet the minimum length. Common with IDs that require padding.
- Field Too Long — A value exceeds the maximum length. Trim it down.
- Invalid Character — EDI only allows certain characters (typically alphanumeric). Remove special characters.
- Invalid Code Value — A field contains a code that isn't in the allowed list.
- Invalid Date — Date must be in CCYYMMDD format (e.g., 20260315).
- Invalid Time — Time must be in HHMM or HHMMSS format.
- Exclusion Condition Violated — Two mutually exclusive fields both have values. Remove one.
Group-Level Errors (AK9)
Group errors affect the entire functional group (the container that holds your transaction sets):
- Functional Group Not Supported — The trading partner doesn't accept this type of document group.
- Version Not Supported — The X12 version you're using isn't supported. Check with your trading partner.
- Group Trailer Missing — The GE segment is missing. Regenerate to fix the envelope.
- Control Number Mismatch — The GS and GE control numbers don't match. Regenerate to fix.
- Transaction Set Count Mismatch — Declared count doesn't match actual. Regenerate.
- Control Number Syntax Error — Invalid control number format. Regenerate.