ECGrid Simplify
Canonical Purchase Order Acknowledgment (POA) Format Specification
Version: 1.0 Date: May 26, 2026 Owner: ECGrid Product
1. Purpose
This document defines the canonical Purchase Order Acknowledgment (POA) format used by ECGrid Simplify. It is the single source of truth for POA structure, field definitions, data types, length limits, required fields, and serialization rules across XML and JSON.
The Purchase Order Acknowledgment enables suppliers to confirm receipt of purchase orders, indicate acceptance or rejection, provide availability information, and commit to delivery dates. Both XML and JSON representations convey the same logical acknowledgment. A JSON Schema (Simplify_Purchase_Order_ACK.schema.json) provides machine-enforceable validation. This document is the human-readable companion.
2. Scope
In scope:
- Purchase order acknowledgment document structure (header, line items, and status).
- Field-level definitions, data types, length limits, and validation rules.
- Canonical XML and JSON representations.
- Line-item acknowledgment with action codes (accept, reject, defer).
- Pricing, delivery commitment, and party information.
- Payment terms, freight, and fulfillment instructions.
Out of scope:
- Transport (HTTPS, AS2, SFTP). Covered in ECGrid Simplify API docs.
- Functional acknowledgments (997) and technical responses.
- Supply chain planning and inventory allocation.
- Order fulfillment and shipment execution.
3. Document Structure
A Purchase Order Acknowledgment payload contains a single acknowledgment. The acknowledgment has a header section with PO references, trading partner information, and order metadata, followed by one or more line item acknowledgments representing the supplier's response to each ordered item.
- Top-level shape:
orderAckMessage
└── orderAck (required, exactly one)
├── header (required information)
│ ├── tradingPartnerId
│ ├── documentId
│ ├── purchaseOrderNumber / purchaseOrderDate
│ ├── acknowledgementType
│ ├── documentStatusCode
│ └── creationDateTime
├── buyer, seller, shipTo, shipFrom (party blocks)
├── paymentTerms, currency, dateInformation
└── orderLineItem[] (1..n line item acknowledgments)
4. Header Fields
The header section contains acknowledgment metadata and purchase order references.
Field | Type | Length | Req | Description | Example |
tradingPartnerId | string | 1–35 | Yes | ECGrid trading partner identifier. Routes the document. | SEV2TEST01 |
documentId | string | 1–35 | Yes | Unique identifier for this PO acknowledgment document. | POA-2026-05-001 |
userId | string | 1–35 | No | User ID of the person creating the acknowledgment. | USER456 |
sender | string | 2–17 | Yes | Sender ID (supplier/vendor) in the qualifier namespace. | SEV2TEST01 |
senderQualifier | string | 1–4 | Yes | Qualifier for sender ID (e.g. SE, ZZ, 01, 14). | SE |
receiver | string | 2–17 | Yes | Receiver ID (buyer) in the qualifier namespace. | SEV2TEST02 |
receiverQualifier | string | 1–4 | Yes | Qualifier for receiver ID. | SE |
groupSender | string | 1–9 | No | EDI functional group sender ID. | 1 |
groupReceiver | string | 1–9 | No | EDI functional group receiver ID. | 1 |
creationDateTime | string | 14–17 | Yes | Date/time POA was created. YYYYMMDDHHMMSS. | 20260526143001 |
documentStatusCode | string | 1–3 | Yes | Status code (e.g., 00=Original, 01=Replace, 04=Void). | 00 |
documentOrderType | string | 2 | Yes | Document type code (e.g., 02=Purchase Order, 16=Purchase Order Ack). | 16 |
acknowledgementType | string | 1–2 | Yes | Ack type (e.g., 00=Not Ordered, 01=Accept, 02=Reject, 03=Defer). | 01 |
purchaseOrderNumber | string | 1–22 | Yes | Purchase order number being acknowledged. | 123456 |
purchaseOrderDate | string | 8 | Yes | Original PO issue date. YYYYMMDD. | 20260520 |
customerOrderNumber | string | 1–22 | No | Buyer's internal order number. | CUST-789 |
vendorID | string | 1–35 | No | Vendor/supplier identifier. | VEND12345 |
revisionNumber | string | 1–6 | No | Revision sequence number for this ack. | 1 |
lastUpdateDateTime | string | 14–17 | No | Last update date/time. YYYYMMDDHHMMSS. | 20260526143001 |
totalLines | integer | 1–5 | No | Total count of line item acknowledgments. | 25 |
totalOrderAmount | number | 1–17 | No | Total monetary amount of the acknowledged order. | 12500.00 |
5. Party Address Block
The same party structure is used for buyer, seller, shipTo, shipFrom, and ultimateConsignee. These identify the parties involved in the order and its fulfillment.
Field | Type | Length | Req | Description | Example |
partyIdentification | string | 1–80 | Yes | Party identifier value (DUNS, GLN, internal code, etc.). | 12345 |
partyIdentificationTypeCode | string | 1–5 | Yes | Qualifier for the identifier (e.g. 92=internal, 1=DUNS, UL=GLN). | 92 |
name | string | 1–60 | Yes | Legal name of the party. | Acme Corp |
name2 | string | 1–60 | No | Secondary name line. | Purchasing Department |
name3 | string | 1–60 | No | Tertiary name line. |
|
streetAddress1 | string | 1–55 | Yes | Street address line 1. | 123 Main St |
streetAddress2 | string | 1–55 | No | Street address line 2. | Suite 500 |
streetAddress3 | string | 1–55 | No | Street address line 3. |
|
city | string | 2–30 | Yes | City. | Albany |
cityCode | string | 1–10 | No | City code if applicable. |
|
stateCode | string | 2 | No | State or province code. 2 chars for US/CA. | NY |
postalCode | string | 3–15 | Yes | Postal/ZIP code. | 12207 |
countryCode | string | 2 | Yes | ISO 3166-1 alpha-2 country code. 2 chars exact. | US |
vatNumber | string | 1–20 | No | VAT/Tax ID number for the party. |
|
dockNumber | string | 1–10 | No | Dock number or receiving location code. | DOCK-A1 |
storeNumber | string | 1–10 | No | Store number or retail location code. | STORE-001 |
6. Order-Level Information
Currency, payment terms, and date information at the order level.
Field | Type | Length | Req | Description | Example |
currency.currencyId | string | 1–2 | Yes | Currency qualifier. | SE |
currency.currency | string | 3 | Yes | ISO 4217 currency code. 3 chars exact. | USD |
paymentTerms.paymentTermsTypeCode | string | 1–3 | No | Payment terms type (e.g., 01=Fixed, 02=Percentage). | 01 |
paymentTerms.paymentTermsDiscountPercent | number | 1–5 | No | Discount percentage for early payment. | 2.0 |
paymentTerms.paymentTermsNetDays | integer | 1–4 | No | Number of days for net payment. | 30 |
paymentTerms.paymentTermsDescription | string | 1–80 | No | Text description of payment terms. | Net 30 - 2/10 |
fobRelatedInstructions.shipMethodOfPayment | string | 1–3 | No | Shipping payment method (e.g., 01=Prepaid, 02=Collect). | 01 |
fobRelatedInstructions.incotermsCode | string | 1–3 | No | INCOTERMS code (e.g., FOB, CIF, DDP). | FOB |
dateInformation.requestedDeliveryDateRange.beginDate | string | 8 | No | Requested delivery period start. YYYYMMDD. | 20260601 |
dateInformation.requestedDeliveryDateRange.endDate | string | 8 | No | Requested delivery period end. YYYYMMDD. | 20260615 |
dateInformation.requestedShipDateRange.beginDate | string | 8 | No | Requested ship period start. YYYYMMDD. | 20260525 |
dateInformation.requestedShipDateRange.endDate | string | 8 | No | Requested ship period end. YYYYMMDD. | 20260531 |
7. Line Item Acknowledgment
The orderLineItem array contains one or more line item acknowledgments. Each represents the supplier's response to a line item on the purchase order.
Field | Type | Length | Req | Description | Example |
lineItemNumber | integer | 1–6 | Yes | Sequential line number within the acknowledgment. | 1 |
lineItemActionCode | string | 1–3 | Yes | Action code (e.g., 01=Accept, 02=Reject, 03=Defer, 04=Substitute). | 01 |
orderedQuantity | number | 1–15 | Yes | Quantity ordered. Decimals allowed up to 15 digits. | 500.0 |
quantityUnitOfMeasure | string | 2–3 | Yes | Unit of measure (e.g. EA=Each, CS=Case, LB=Pound). | EA |
netUnitPrice | number | 1–17 | No | Net unit price offered by supplier. | 45.99 |
grossUnitPrice | number | 1–17 | No | Gross unit price (including tax if applicable). | 50.50 |
supplierAssignedPartNumber | string | 1–48 | No | Supplier's part number for the item. | VN123456789 |
buyerAssignedPartNumber | string | 1–48 | No | Buyer's part number for the item. | BY123456789 |
sku | string | 1–48 | No | Stock keeping unit identifier. | SKU-ABC-001 |
gtin14 | string | 14 | No | Global Trade Item Number (GTIN-14). | 01234567890123 |
modelNumber | string | 1–35 | No | Product model number. | MODEL-XYZ-2026 |
brandName | string | 1–60 | No | Brand or trade name. | Acme Brand |
productType | string | 1–35 | No | Product type classification. | Widget |
buyerColor | string | 1–35 | No | Color from buyer's perspective. | Blue |
netAmount | number | 1–17 | No | Line item net amount (quantity x unit price). | 22995.00 |
purchaseOrderNumber | string | 1–22 | No | Reference to the original PO number. | 123456 |
promotionDealNumber | string | 1–35 | No | Promotion or deal number if applicable. | PROMO-2026-05 |
shipCompleteFlag | string | 1 | No | Flag indicating if line must ship complete (Y/N). | Y |
8. Line Item Date and Delivery Information
Field | Type | Length | Req | Description | Example |
shipmentTransportationInformation.transportationMethod | string | 1–3 | No | Transportation method (e.g., OTR=Over-the-Road, AIR=Air). | OTR |
shipmentTransportationInformation.serviceLevelCode | string | 1–3 | No | Service level (e.g., GND=Ground, EXP=Express). | GND |
shipmentTransportationInformation.scac | string | 2–4 | No | Standard Carrier Alpha Code. | SAIA |
shipmentMeasurements.shipmentGrossWeight | number | 1–15 | No | Gross weight of line item shipment. | 550.0 |
shipmentMeasurements.shipmentGrossWeightUOM | string | 2–3 | No | Unit of measure (e.g., LB=Pounds, KG=Kilograms). | LB |
shipmentMeasurements.shipmentVolume | number | 1–15 | No | Volume of line item shipment. | 50.0 |
shipmentMeasurements.shipmentVolumeUOM | string | 2–3 | No | Unit of measure (e.g., CF=Cubic Feet). | CF |
partDescription.partDescription | string | 1–255 | No | Text description of the product line item. | Blue nylon widget, 5-inch, pre-drilled |
notes.orderLineInstructions | string | 1–255 | No | Special handling or delivery instructions. | Handle with care - fragile |
9. Naming Conventions
- XML: PascalCase for all element names (e.g. OrderAck, LineItemActionCode, QuantityUnitOfMeasure).
- JSON: camelCase for all field names (e.g. orderAck, lineItemActionCode, quantityUnitOfMeasure).
- Field semantics and length limits are identical across both. Only casing differs.
- Empty optional values in XML use self-closing tags (e.g. <PromoDealtNumber/>). In JSON, use empty string or null.
10. XML Example
<OrderAckMessage>
<OrderAck>
<TradingPartnerId>SEV2TEST01</TradingPartnerId>
<DocumentId>POA-2026-05-001</DocumentId>
<SenderQualifier>SE</SenderQualifier>
<Sender>SEV2TEST01</Sender>
<ReceiverQualifier>SE</ReceiverQualifier>
<Receiver>SEV2TEST02</Receiver>
<CreationDateTime>20260526143001</CreationDateTime>
<DocumentStatusCode>00</DocumentStatusCode>
<DocumentOrderType>16</DocumentOrderType>
<AcknowledgementType>01</AcknowledgementType>
<PurchaseOrderNumber>123456</PurchaseOrderNumber>
<PurchaseOrderDate>20260520</PurchaseOrderDate>
<VendorID>VEND12345</VendorID>
<RevisionNumber>1</RevisionNumber>
<TotalLines>2</TotalLines>
<TotalOrderAmount>12500.00</TotalOrderAmount>
<Currency>
<CurrencyId>SE</CurrencyId>
<Currency>USD</Currency>
</Currency>
<PaymentTerms>
<PaymentTermsTypeCode>01</PaymentTermsTypeCode>
<PaymentTermsDiscountPercent>2.0</PaymentTermsDiscountPercent>
<PaymentTermsNetDays>30</PaymentTermsNetDays>
<PaymentTermsDescription>Net 30 - 2/10</PaymentTermsDescription>
</PaymentTerms>
<FobRelatedInstructions>
<ShipMethodOfPayment>01</ShipMethodOfPayment>
<IncotermsCode>FOB</IncotermsCode>
</FobRelatedInstructions>
<DateInformation>
<RequestedDeliveryDateRange>
<BeginDate>20260601</BeginDate>
<EndDate>20260615</EndDate>
</RequestedDeliveryDateRange>
<RequestedShipDateRange>
<BeginDate>20260525</BeginDate>
<EndDate>20260531</EndDate>
</RequestedShipDateRange>
</DateInformation>
<Buyer>
<PartyIdentification>54321</PartyIdentification>
<PartyIdentificationTypeCode>92</PartyIdentificationTypeCode>
<Name>Acme Corp</Name>
<StreetAddress1>123 Main St</StreetAddress1>
<City>Albany</City>
<StateCode>NY</StateCode>
<PostalCode>12207</PostalCode>
<CountryCode>US</CountryCode>
</Buyer>
<Seller>
<PartyIdentification>12345</PartyIdentification>
<PartyIdentificationTypeCode>92</PartyIdentificationTypeCode>
<Name>Widget Supplier Inc</Name>
<StreetAddress1>456 Oak Ave</StreetAddress1>
<City>Springfield</City>
<StateCode>IL</StateCode>
<PostalCode>62701</PostalCode>
<CountryCode>US</CountryCode>
</Seller>
<ShipTo>
<PartyIdentification>54321-001</PartyIdentification>
<PartyIdentificationTypeCode>92</PartyIdentificationTypeCode>
<Name>Acme Distribution Center</Name>
<StreetAddress1>999 Warehouse Dr</StreetAddress1>
<City>Newark</City>
<StateCode>NJ</StateCode>
<PostalCode>07101</PostalCode>
<CountryCode>US</CountryCode>
<DockNumber>DOCK-A1</DockNumber>
</ShipTo>
<OrderLineItem>
<LineItemNumber>1</LineItemNumber>
<LineItemActionCode>01</LineItemActionCode>
<OrderedQuantity>500.0</OrderedQuantity>
<QuantityUnitOfMeasure>EA</QuantityUnitOfMeasure>
<NetUnitPrice>45.99</NetUnitPrice>
<SupplierAssignedPartNumber>VN123456789</SupplierAssignedPartNumber>
<BuyerAssignedPartNumber>BY123456789</BuyerAssignedPartNumber>
<Sku>SKU-ABC-001</Sku>
<Gtin14>01234567890123</Gtin14>
<ModelNumber>MODEL-XYZ-2026</ModelNumber>
<BrandName>Acme Brand</BrandName>
<ProductType>Widget</ProductType>
<BuyerColor>Blue</BuyerColor>
<NetAmount>22995.00</NetAmount>
<PurchaseOrderNumber>123456</PurchaseOrderNumber>
<ShipCompleteFlag>Y</ShipCompleteFlag>
<PartDescription>
<PartDescription>Blue nylon widget, 5-inch, pre-drilled</PartDescription>
</PartDescription>
<ShipmentTransportationInformation>
<TransportationMethod>OTR</TransportationMethod>
<ServiceLevelCode>GND</ServiceLevelCode>
<Scac>SAIA</Scac>
</ShipmentTransportationInformation>
<ShipmentMeasurements>
<ShipmentGrossWeight>550.0</ShipmentGrossWeight>
<ShipmentGrossWeightUOM>LB</ShipmentGrossWeightUOM>
<ShipmentVolume>50.0</ShipmentVolume>
<ShipmentVolumeUOM>CF</ShipmentVolumeUOM>
</ShipmentMeasurements>
<Notes>
<OrderLineInstructions>Handle with care - fragile items</OrderLineInstructions>
</Notes>
</OrderLineItem>
<OrderLineItem>
<LineItemNumber>2</LineItemNumber>
<LineItemActionCode>01</LineItemActionCode>
<OrderedQuantity>250.0</OrderedQuantity>
<QuantityUnitOfMeasure>CS</QuantityUnitOfMeasure>
<NetUnitPrice>120.00</NetUnitPrice>
<SupplierAssignedPartNumber>VN987654321</SupplierAssignedPartNumber>
<BuyerAssignedPartNumber>BY987654321</BuyerAssignedPartNumber>
<Sku>SKU-XYZ-002</Sku>
<Gtin13>1234567890123</Gtin13>
<ModelNumber>MODEL-ABC-2026</ModelNumber>
<BrandName>Acme Brand</BrandName>
<ProductType>Super Widget</ProductType>
<BuyerColor>Red</BuyerColor>
<NetAmount>29880.00</NetAmount>
<PurchaseOrderNumber>123456</PurchaseOrderNumber>
<PartDescription>
<PartDescription>Red super widget, case of 10 units</PartDescription>
</PartDescription>
</OrderLineItem>
</OrderAck>
</OrderAckMessage>
11. JSON Example
{
"orderAckMessage": {
"orderAck": {
"tradingPartnerId": "SEV2TEST01",
"documentId": "POA-2026-05-001",
"senderQualifier": "SE",
"sender": "SEV2TEST01",
"receiverQualifier": "SE",
"receiver": "SEV2TEST02",
"creationDateTime": "20260526143001",
"documentStatusCode": "00",
"documentOrderType": "16",
"acknowledgementType": "01",
"purchaseOrderNumber": "123456",
"purchaseOrderDate": "20260520",
"vendorID": "VEND12345",
"revisionNumber": "1",
"totalLines": 2,
"totalOrderAmount": 12500.00,
"currency": {
"currencyId": "SE",
"currency": "USD"
},
"paymentTerms": {
"paymentTermsTypeCode": "01",
"paymentTermsDiscountPercent": 2.0,
"paymentTermsNetDays": 30,
"paymentTermsDescription": "Net 30 - 2/10"
},
"fobRelatedInstructions": {
"shipMethodOfPayment": "01",
"incotermsCode": "FOB"
},
"dateInformation": {
"requestedDeliveryDateRange": {
"beginDate": "20260601",
"endDate": "20260615"
},
"requestedShipDateRange": {
"beginDate": "20260525",
"endDate": "20260531"
}
},
"buyer": {
"partyIdentification": "54321",
"partyIdentificationTypeCode": "92",
"name": "Acme Corp",
"streetAddress1": "123 Main St",
"city": "Albany",
"stateCode": "NY",
"postalCode": "12207",
"countryCode": "US"
},
"seller": {
"partyIdentification": "12345",
"partyIdentificationTypeCode": "92",
"name": "Widget Supplier Inc",
"streetAddress1": "456 Oak Ave",
"city": "Springfield",
"stateCode": "IL",
"postalCode": "62701",
"countryCode": "US"
},
"shipTo": {
"partyIdentification": "54321-001",
"partyIdentificationTypeCode": "92",
"name": "Acme Distribution Center",
"streetAddress1": "999 Warehouse Dr",
"city": "Newark",
"stateCode": "NJ",
"postalCode": "07101",
"countryCode": "US",
"dockNumber": "DOCK-A1"
},
"orderLineItem": [
{
"lineItemNumber": 1,
"lineItemActionCode": "01",
"orderedQuantity": 500.0,
"quantityUnitOfMeasure": "EA",
"netUnitPrice": 45.99,
"supplierAssignedPartNumber": "VN123456789",
"buyerAssignedPartNumber": "BY123456789",
"sku": "SKU-ABC-001",
"gtin14": "01234567890123",
"modelNumber": "MODEL-XYZ-2026",
"brandName": "Acme Brand",
"productType": "Widget",
"buyerColor": "Blue",
"netAmount": 22995.00,
"purchaseOrderNumber": "123456",
"shipCompleteFlag": "Y",
"partDescription": {
"partDescription": "Blue nylon widget, 5-inch, pre-drilled"
},
"shipmentTransportationInformation": {
"transportationMethod": "OTR",
"serviceLevelCode": "GND",
"scac": "SAIA"
},
"shipmentMeasurements": {
"shipmentGrossWeight": 550.0,
"shipmentGrossWeightUOM": "LB",
"shipmentVolume": 50.0,
"shipmentVolumeUOM": "CF"
},
"notes": {
"orderLineInstructions": "Handle with care - fragile items"
}
},
{
"lineItemNumber": 2,
"lineItemActionCode": "01",
"orderedQuantity": 250.0,
"quantityUnitOfMeasure": "CS",
"netUnitPrice": 120.00,
"supplierAssignedPartNumber": "VN987654321",
"buyerAssignedPartNumber": "BY987654321",
"sku": "SKU-XYZ-002",
"gtin13": "1234567890123",
"modelNumber": "MODEL-ABC-2026",
"brandName": "Acme Brand",
"productType": "Super Widget",
"buyerColor": "Red",
"netAmount": 29880.00,
"purchaseOrderNumber": "123456",
"partDescription": {
"partDescription": "Red super widget, case of 10 units"
}
}
]
}
}
}
Was this article helpful?
That’s Great!
Thank you for your feedback
Sorry! We couldn't be helpful
Thank you for your feedback
Feedback sent
We appreciate your effort and will try to fix the article