# X12 855 Purchase Order Acknowledgment Skeleton Generator

> Source: https://netray.co/tools/x12-855-po-acknowledgment-skeleton-generator
> Publisher: Netray (netray.co), AI and integration engineering for ERP and manufacturing systems.
> Section: Free Tools

## Short answer

Builds a correctly structured X12 855 PO acknowledgment (ISA through IEA) with BAK, PO1 and ACK loops so you can test with a trading partner.

## Category

developer

## Audience

- EDI analyst
- Customer service
- ERP integrator

## Tool

**Kind:** template

**Output:** code

**Language:** edi

**Fields:**

#### Your ISA sender ID (seller)

**Key:** sender_id

**Type:** text

**Default:** NETRAYSELLER

**Help:** 15 characters in the real ISA, padded with spaces. Your VAN or AS2 setup decides the qualifier.

#### Partner ISA receiver ID (buyer)

**Key:** receiver_id

**Type:** text

**Default:** BUYERPARTNER

#### Date (YYMMDD)

**Key:** date6

**Type:** text

**Default:** 261020

#### Date (CCYYMMDD)

**Key:** date8

**Type:** text

**Default:** 20261020

#### Interchange control number (9 digits)

**Key:** ctrl

**Type:** text

**Default:** 000000101

#### Buyer PO number

**Key:** po_number

**Type:** text

**Default:** 4500123456

#### PO date (CCYYMMDD)

**Key:** po_date

**Type:** text

**Default:** 20261015

#### BAK02 acknowledgment type

**Key:** ack_type

**Type:** select

**Options:**

- AD
- AC
- AE
- AK
- RD
- RJ

**Default:** AC

**Help:** AD = with detail, no change. AC = with detail and change. AE = exceptions only. AK = no detail or change. RD = reject with detail. RJ = reject, no detail.

#### Your sales order number (REF*VN)

**Key:** so_number

**Type:** text

**Default:** SO-778120

#### Line 1 quantity ordered

**Key:** line1_qty

**Type:** number

**Default:** 100

#### Line 1 unit price

**Key:** line1_price

**Type:** text

**Default:** 12.40

#### Line 1 buyer part number

**Key:** line1_buyer_pn

**Type:** text

**Default:** BRK-1001-A

#### Line 1 your part number

**Key:** line1_vendor_pn

**Type:** text

**Default:** HX-48213

#### Line 1 ACK01 status

**Key:** line1_status

**Type:** select

**Options:**

- IA
- IC
- IQ
- IP
- IB
- IR

**Default:** IA

#### Line 1 promised ship date (CCYYMMDD)

**Key:** line1_ship

**Type:** text

**Default:** 20261105

#### Line 2 quantity ordered

**Key:** line2_qty

**Type:** number

**Default:** 40

#### Line 2 unit price

**Key:** line2_price

**Type:** text

**Default:** 88.00

#### Line 2 buyer part number

**Key:** line2_buyer_pn

**Type:** text

**Default:** SHF-2200-C

#### Line 2 your part number

**Key:** line2_vendor_pn

**Type:** text

**Default:** HX-77310

#### Line 2 ACK01 status

**Key:** line2_status

**Type:** select

**Options:**

- IA
- IC
- IQ
- IP
- IB
- IR

**Default:** IB

#### Line 2 promised ship date (CCYYMMDD)

**Key:** line2_ship

**Type:** text

**Default:** 20261203

**Blocks:**

#### X12 855 message (4010 style, tilde segment terminator)

**Body:** ISA*00*          *00*          *ZZ*{{sender_id}}*ZZ*{{receiver_id}}*{{date6}}*0930*U*00401*{{ctrl}}*0*T*>~
GS*PR*{{sender_id}}*{{receiver_id}}*{{date8}}*0930*101*X*004010~
ST*855*0001~
BAK*00*{{ack_type}}*{{po_number}}*{{po_date}}~
REF*VN*{{so_number}}~
PO1*1*{{line1_qty}}*EA*{{line1_price}}**BP*{{line1_buyer_pn}}*VP*{{line1_vendor_pn}}~
ACK*{{line1_status}}*{{line1_qty}}*EA*068*{{line1_ship}}~
PO1*2*{{line2_qty}}*EA*{{line2_price}}**BP*{{line2_buyer_pn}}*VP*{{line2_vendor_pn}}~
ACK*{{line2_status}}*{{line2_qty}}*EA*068*{{line2_ship}}~
CTT*2~
SE*9*0001~
GE*1*101~
IEA*1*{{ctrl}}~

#### Segment guide

**Body:** BAK01 00 = original. BAK02 is the acknowledgment type. BAK03 is the buyer PO number echoed back. PO1 repeats the buyer line, ACK carries your line status and the promised date (qualifier 068 = current schedule ship date). CTT01 counts PO1 lines. SE01 counts segments from ST to SE inclusive (9 here). If you add or remove lines, update CTT and SE.

**Notes:** Starting skeleton only. Most partners publish an implementation guide that fixes the X12 version, qualifiers, required REF and N1 loops, and date formats, so always validate against that guide and your translator before sending. ISA element widths must be exact in production (ISA06 and ISA08 are 15 characters padded). Confirm 855 versus 865 usage with the buyer: 855 acknowledges a PO, 865 is seller-initiated changes.

## Content

**Intro:** The 855 is how a supplier tells a customer 'we received your PO, here is what we will ship and when.' This generator produces a structurally correct 855 you can drop into your translator or send to a trading partner for first-round testing.

**Sections:**

#### How to use the generator

**Body:** Enter your and the buyer's ISA IDs, the buyer's PO number and date, and the two example lines. Pick the BAK02 type and an ACK01 status for each line. The message updates live. Copy it to a text file for your translator test harness, or export it with the page export buttons. For more than two lines, duplicate the PO1 and ACK pair and increment the line number, then update CTT01 and SE01.

**Bullets:**

- Keep one PO1 and one ACK per line
- ACK02 quantity is what you commit to ship
- Use ACK05 for the promised ship date, not the requested date

#### How the 855 is structured

**Body:** An X12 interchange wraps a functional group, which wraps one or more transaction sets. The 855 set runs ST, BAK, optional REF/DTM/N1 header segments, a PO1 loop with ACK detail, CTT totals and SE. BAK02 tells the buyer whether you accepted without change (AD), accepted with changes (AC), sent exceptions only (AE) or rejected (RD or RJ). ACK01 then qualifies each line. Partners often use 855 data to update promise dates in their planning system.

#### Reading line status codes

**Body:** IA means the line was accepted as ordered. IC means accepted with changes, usually a date or quantity. IQ means quantity changed and IP means price changed. IB means backordered, which should carry a new ship date. IR rejects the line. If any line is not IA, set BAK02 to AC or AE so the buyer's system routes the acknowledgment for review instead of auto-accepting it.

#### Common mistakes

**Body:** Wrong segment count in SE01 is the most frequent reason a translator rejects a hand-built file. Others are echoing the wrong PO number, sending a changed price without IP, and using dates in YYMMDD where the partner wants CCYYMMDD. A 997 functional acknowledgment from the partner confirms syntax only. It does not mean the buyer accepted your dates.

**Cta:** If your sales orders already live in an ERP, we can help generate 855s directly from order and promise-date data with a human approval step. This tool works fine on its own.

**Faq:**

#### What is the difference between an 855 and an 865?

**Answer:** An 855 is the seller's acknowledgment of a buyer's purchase order. An 865 is a seller-initiated change or a response to a buyer's 860 change request. Many partners want the 855 for the first response and an 865 for later changes, so confirm in their guide.

#### Do I have to send an 855 for every PO?

**Answer:** Only if the trading partner requires it. Many OEMs and distributors mandate it within 24 to 48 hours and measure compliance. Even when optional, it reduces order status calls to your customer service team.

#### Which X12 version should I use?

**Answer:** Use the version in your partner's implementation guide. 004010 is still very common in manufacturing and distribution, but some partners require 005010. The segment names are largely the same, though element requirements differ.

#### Does this tool validate my message?

**Answer:** It builds a structurally consistent skeleton, but it is not a certified X12 validator. Run the output through your translator or a partner test environment and review the 997 or error reports it returns.

## Search terms

x12 855 example, edi 855 purchase order acknowledgment sample, 855 edi format, edi 855 segments, x12 855 generator, edi order acknowledgment sample file, 855 ack status codes

---
Talk to an engineer: https://netray.co/contact?intent=erp_ai | Machine catalog: https://netray.co/agent/catalog.json
