Canonical Purchase Order Acknowledgement Implementation Guide and Specifications

Modified on Tue, May 26 at 9:36 AM

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

Let us know how can we improve this article!

Select at least one of the reasons
CAPTCHA verification is required.

Feedback sent

We appreciate your effort and will try to fix the article