EDI 850: The Purchase Order, Explained in Depth
The EDI 850 is the Purchase Order, and it is one of the most common transactions in all of EDI. It is the document a buyer sends to formally tell a supplier what they want to buy: which items, how many, at what price, shipped to where, and by when. If you work in supply chain, retail, or procurement, the 850 is probably the first transaction you will meet.
Where the 850 fits in the order cycle
The 850 usually starts a chain of related documents that together make up a complete order-to-cash or procure-to-pay cycle:
- 850 Purchase Order - the buyer sends the order.
- 855 Purchase Order Acknowledgment - the supplier confirms which lines are accepted, backordered, or rejected.
- 856 Advance Ship Notice - when the goods ship, the supplier sends details of the shipment and how it is packed.
- 810 Invoice - the supplier bills for the goods.
- 820 Payment / Remittance - the buyer pays and explains which invoices the payment covers.
Understanding this flow helps you read any single document, because each one references the others. The 850 is the anchor that the rest point back to.
The key segments of an 850
ST - Transaction Set Header
Opens the transaction and declares the type. ST*850*0001 means this is an 850, with a control number of 0001 that the closing SE will match.
BEG - Beginning Segment for Purchase Order
This is the heart of the order header. It carries the purpose, the PO type, the PO number, and the date. For example BEG*00*SA*PO-99831**20240115 means a new order (00), of type standalone (SA), numbered PO-99831, dated 2024-01-15. The PO number here is the single most important identifier in the whole document - it is what every downstream document will reference.
REF - Reference Information
Carries additional reference numbers such as a department number, contract number, or vendor number. REF*DP*042 might indicate department 042.
N1 loop - Party Identification
Identifies the parties involved. The qualifier in the first element says who: N1*BY is the buyer, N1*ST is the ship-to location, N1*VN is the vendor, N1*BT is the bill-to. The N1 is often followed by N3 (street address) and N4 (city, state, postal code) segments to give a full address.
PO1 - Baseline Item Data
The line items - the actual products being ordered. This is where the order's substance lives. A line like PO1*1*100*EA*12.50**UP*012345678905 reads: line number 1, quantity 100, unit of measure EA (each), unit price 12.50, product identified by UPC 012345678905. An 850 will have one PO1 segment per ordered item.
PID - Product/Item Description
A human-readable description that usually follows its PO1. PID*F****BLUE WIDGET 12IN provides a free-form (F) description of the item.
CTT - Transaction Totals
A control total near the end, giving the number of line items so the receiver can verify nothing was lost. CTT*2 means two line items.
SE - Transaction Set Trailer
Closes the transaction and states how many segments it contained, matching the control number from the ST.
A complete worked example
ST*850*0001~ BEG*00*SA*PO-99831**20240115~ REF*DP*042~ N1*BY*BIG RETAILER INC*92*0048~ N3*123 COMMERCE ST~ N4*CHICAGO*IL*60601*US~ N1*ST*WAREHOUSE 7~ PO1*1*100*EA*12.50**UP*012345678905~ PID*F****BLUE WIDGET 12IN~ PO1*2*50*EA*8.75**UP*012345678912~ PID*F****RED GADGET SMALL~ CTT*2~ SE*12*0001~
Read in plain English: Big Retailer Inc, ordering on behalf of department 042, is placing purchase order PO-99831 dated January 15, 2024. The goods ship to Warehouse 7. They want 100 blue widgets at $12.50 each and 50 small red gadgets at $8.75 each, for two line items in total.
Common pitfalls when reading an 850
- Confusing buyer and ship-to. The party that placed the order (BY) is not always the place it ships to (ST). A head office may order for many stores.
- Implied decimals. Some implementations send prices and quantities without decimal points, with the decimal position defined in the trading-partner spec. Always confirm against the implementation guide.
- Empty elements. Consecutive delimiters like
**mean an element was intentionally left blank, not that data is missing in error.
Paste a real 850 into the viewer. It labels every segment and writes a plain-English summary of the order - who is buying what from whom, and for how much. Nothing leaves your browser.
Open the X12 viewer