Canonical Shipment Information Implementation Guide and Specifications

Modified on Tue, May 26 at 9:38 AM

ECGrid Simplify

Canonical Shipment Information Format Specification

Version: 1.0   Date: May 26, 2026   Owner: ECGrid Product

 

1. Purpose

This document defines the canonical Shipment Information format used by ECGrid Simplify. It is the single source of truth for shipment information structure, field definitions, data types, length limits, required fields, and serialization rules across XML and JSON.

The Shipment Information (990) document provides detailed logistics and transportation data for shipments in transit or completed. It includes shipment references, equipment details, party information, measurements, and line-item level shipment details including hazardous material information. Both XML and JSON representations convey the same logical shipment data. A JSON Schema (Simplify_Shipment_Information.schema.json) provides machine-enforceable validation. This document is the human-readable companion.

2. Scope

In scope:

  • Shipment information document structure (header and detail lines).
  • Field-level definitions, data types, length limits, and validation rules.
  • Canonical XML and JSON representations.
  • Shipment references, equipment details, and weight/volume measurements.
  • Party identification and contact information for all shipment parties.
  • Hazardous material information, certifications, and regulatory compliance.

Out of scope:

  • Transport (HTTPS, AS2, SFTP). Covered in ECGrid Simplify API docs.
  • Real-time GPS tracking and location updates.
  • Carrier-specific tracking systems and proprietary formats.
  • Customs documentation and international border crossing procedures.

3. Document Structure

A Shipment Information payload contains one or more shipments. Each shipment has a header section with shipment metadata, party information, measurements, and one or more detail records representing delivery stops or line-item shipment information.

  • Top-level shape:

shipments

└── shipment (required, one or more)

     ├── header (required information)

     │     ├── tradingPartnerID

     │     ├── documentId / shipmentId

     │     ├── sender / receiver

     │     ├── billOfLading / masterBillOfLading

     │     └── shipment references & charges

     ├── billTo (party receiving freight charges)

     ├── shipmentMeasurements (total)

     ├── equipmentDetails (trailers, containers)

     └── detail[] (1..n delivery stops or line items)

4. Header Fields

The header section contains shipment-level information and 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 shipment information document.

SI-2026-05-001

userId

string

1–35

No

User ID of the person creating the shipment information.

USER789

sender

string

2–17

Yes

Sender ID (typically carrier) 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 (typically shipper/buyer) in 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

vendorID

string

1–35

No

Vendor/supplier identifier.

VEND12345

scac

string

2–4

No

Standard Carrier Alpha Code.

SAIA

shipmentId

string

1–35

Yes

Unique shipment identifier for tracking.

SHIP-2026-05-001

billofLading

string

1–35

No

Bill of Lading number.

BOL-2026-0001

masterBillofLading

string

1–35

No

Master BOL number (for consolidated shipments).

MBIL-2026-001

invoiceNumber

string

1–22

No

Associated invoice number.

INV-2026-001

purchaseOrderNumber

string

1–22

No

Associated purchase order number.

123456

quoteNumber

string

1–35

No

Associated quote or rate quote number.

QUOTE-2026-001

loadPlaningNumber

string

1–35

No

Load planning or consolidation number.

LOAD-2026-001

paymentMethod

string

1–35

No

Freight payment method (e.g., Prepaid, Collect).

Prepaid

purposeCode

string

1–3

Yes

Purpose of shipment (e.g., 00=Original, 01=Replacement).

00

applicationtype

string

1–3

No

Application type code (e.g., 01=Order, 02=Quote).

01

totalCharges

number

1–17

No

Total freight charges for the shipment.

500.00

servicePerformedCode

string

1–3

No

Service performed code (e.g., 01=Standard, 02=Expedited).

01

shipperId

string

1–35

No

Shipper ID or reference number.

SHIP-ID-001

5. Shipment Measurements and Equipment

Field

Type

Length

Req

Description

Example

shipmentMeasurements.ladingQuantity

integer

1–8

No

Number of shipping units (pieces, pallets, etc.).

15

shipmentMeasurements.weight

number

1–15

No

Total weight of shipment.

5500.50

shipmentMeasurements.weightQualifier

string

1–2

No

Weight qualifier (e.g., B=Billable Weight).

B

shipmentMeasurements.weightUOM

string

2–3

No

Unit of measure (e.g., LB=Pounds, KG=Kilograms).

LB

shipmentMeasurements.volume

number

1–15

No

Volume of shipment.

125.75

shipmentMeasurements.volumeUOM

string

2–3

No

Unit of measure (e.g., CF=Cubic Feet).

CF

equipmentDetails.equipmentInitial

string

1–4

No

Equipment prefix/company code.

SCAC

equipmentDetails.equipmentID

string

1–20

No

Equipment identifier (e.g., trailer number).

54321

equipmentDetails.equipmentDescriptionCode

string

1–3

No

Equipment type code (e.g., TL=Trailer).

TL

equipmentDetails.equipmentType

string

1–35

No

Detailed equipment type description.

53-foot Dry Van

equipmentDetails.sealInfo.sealNumber

string

1–35

No

Seal number applied to equipment.

SEAL-123456

equipmentDetails.sealInfo.sealingParty

string

1–35

No

Organization that applied the seal.

Carrier XYZ

6. Party Address Block

Multiple party types are used in shipment information: billTo (freight recipient), and detail-level parties (shipFrom, shipTo, shipper, ultimateConsignee).

Field

Type

Length

Req

Description

Example

partyIdentification

string

1–80

Yes

Party identifier (DUNS, GLN, internal code, etc.).

12345

partyIdentificationTypeCode

string

1–5

Yes

Qualifier for identifier (92=internal, 1=DUNS).

92

name

string

1–60

Yes

Legal name of the party.

Acme Logistics

streetAddress1

string

1–55

Yes

Street address line 1.

789 Warehouse Way

city

string

2–30

Yes

City.

Newark

stateCode

string

2

No

State or province code.

NJ

postalCode

string

3–15

Yes

Postal/ZIP code.

07101

countryCode

string

2

Yes

ISO 3166-1 alpha-2 country code.

US

dockNumber

string

1–10

No

Dock number at location.

DOCK-A1

storeNumber

string

1–10

No

Store or location number.

STORE-001

governmentRefNumber

string

1–35

No

Government reference number (passport, license, etc.).

GOV-REF-001

tradeRefNumber

string

1–35

No

Trade reference number.

TRADE-REF-001

7. Detail Line - Delivery Stop Information

The detail array contains one or more delivery stops or shipment line items with stop-specific information and measurements.

Field

Type

Length

Req

Description

Example

stopSequenceNumber

integer

1–6

No

Sequence number of delivery stop.

1

stopReasonCode

string

1–3

No

Reason code for stop (e.g., 01=Pickup, 02=Delivery).

02

carrierRefNumber

string

1–35

No

Carrier reference number for the stop.

CARR-REF-001

customerOrderNumber

string

1–22

No

Customer order number.

CUST-ORD-001

detail.orderDetail.refId

string

1–35

No

Reference ID for order.

REF-001

detail.orderDetail.poNum

string

1–22

No

Purchase order number.

123456

detail.orderDetail.quantity

number

1–15

No

Quantity for this order.

100.0

detail.orderDetail.quantityUOM

string

2–3

No

Unit of measure (e.g., EA, CS).

EA

8. Shipment Details and Hazardous Materials

Line-level shipment details including product descriptions, measurements, and hazardous material information.

Field

Type

Length

Req

Description

Example

shipmentDetails.packagingCode

string

1–5

No

Packaging code (e.g., BOX, PLT, BAG).

BOX

shipmentDetails.ladingLineItemNumber

integer

1–6

No

Lading line item number.

1

shipmentDetails.ladingDescription

string

1–255

No

Description of contents being shipped.

Blue widgets, assorted sizes

shipmentDetails.ladingQuantity

number

1–15

No

Quantity at this line.

100.0

shipmentDetails.weight

number

1–15

No

Weight of this line.

550.0

shipmentDetails.weightUOM

string

2–3

No

Unit of measure (e.g., LB, KG).

LB

shipmentDetails.nmfcCode

string

1–6

No

NMFC (National Motor Freight Classification) code.

050000

shipmentDetails.marks

string

1–255

No

Marks or identifying information.

Handle With Care

shipmentDetails.hazardousInformation.ladingQuantity

number

1–15

No

Quantity of hazardous material.

10.0

shipmentDetails.hazardousInformation.classification.id

string

1–10

No

Hazard class ID.

3

shipmentDetails.hazardousCertification.certificationName

string

1–60

No

Certification name for hazmat.

DOT Compliant

9. Naming Conventions

  • XML: PascalCase for all element names (e.g. ShipmentInformation, ShipmentId, LadingQuantity).
  • JSON: camelCase for all field names (e.g. shipmentInformation, shipmentId, ladingQuantity).
  • Field semantics and length limits are identical across both. Only casing differs.
  • Empty optional values in XML use self-closing tags (e.g. <InvoiceNumber/>). In JSON, use empty string or null.

10. XML Example

<Shipments>
<Shipment>
<TradingPartnerID>SEV2TEST01</TradingPartnerID>
<DocumentId>SI-2026-05-001</DocumentId>
<SenderQualifier>SE</SenderQualifier>
<Sender>SEV2TEST01</Sender>
<ReceiverQualifier>SE</ReceiverQualifier>
<Receiver>SEV2TEST02</Receiver>
<VendorID>VEND12345</VendorID>
<SCAC>SAIA</SCAC>
<ShipmentId>SHIP-2026-05-001</ShipmentId>
<BillofLading>BOL-2026-0001</BillofLading>
<PurchaseOrderNumber>123456</PurchaseOrderNumber>
<TotalCharges>500.00</TotalCharges>
<PurposeCode>00</PurposeCode>
<PaymentMethod>Prepaid</PaymentMethod>
<ShipmentMeasurements>
<LadingQuantity>15</LadingQuantity>
<Weight>5500.50</Weight>
<WeightUOM>LB</WeightUOM>
<Volume>125.75</Volume>
<VolumeUOM>CF</VolumeUOM>
</ShipmentMeasurements>
<EquipmentDetails>
<EquipmentID>54321</EquipmentID>
<EquipmentDescriptionCode>TL</EquipmentDescriptionCode>
<EquipmentType>53-foot Dry Van</EquipmentType>
<SealInfo>
<SealNumber>SEAL-123456</SealNumber>
</SealInfo>
</EquipmentDetails>
<BillTo>
<PartyIdentification>12345</PartyIdentification>
<PartyIdentificationTypeCode>92</PartyIdentificationTypeCode>
<Name>Acme Logistics</Name>
<StreetAddress1>789 Warehouse Way</StreetAddress1>
<City>Newark</City>
<StateCode>NJ</StateCode>
<PostalCode>07101</PostalCode>
<CountryCode>US</CountryCode>
</BillTo>
<Detail>
<StopSequenceNumber>1</StopSequenceNumber>
<StopReasonCode>02</StopReasonCode>
<CustomerOrderNumber>CUST-ORD-001</CustomerOrderNumber>
<ShipFrom>
<PartyIdentification>54321</PartyIdentification>
<PartyIdentificationTypeCode>92</PartyIdentificationTypeCode>
<Name>Widget Supplier</Name>
<StreetAddress1>456 Oak Ave</StreetAddress1>
<City>Springfield</City>
<StateCode>IL</StateCode>
<PostalCode>62701</PostalCode>
<CountryCode>US</CountryCode>
</ShipFrom>
<ShipTo>
<PartyIdentification>12345-001</PartyIdentification>
<PartyIdentificationTypeCode>92</PartyIdentificationTypeCode>
<Name>Acme Store #5</Name>
<StreetAddress1>555 Retail Road</StreetAddress1>
<City>New York</City>
<StateCode>NY</StateCode>
<PostalCode>10001</PostalCode>
<CountryCode>US</CountryCode>
<DockNumber>DOCK-A1</DockNumber>
</ShipTo>
<OrderDetail>
<PONum>123456</PONum>
<Quantity>100.0</Quantity>
<QuantityUOM>EA</QuantityUOM>
</OrderDetail>
<ShipmentDetails>
<PackagingCode>BOX</PackagingCode>
<LadingDescription>Blue widgets, assorted sizes</LadingDescription>
<LadingQuantity>100.0</LadingQuantity>
<Weight>550.0</Weight>
<WeightUOM>LB</WeightUOM>
<NMFCCode>050000</NMFCCode>
<Marks>Handle With Care</Marks>
</ShipmentDetails>
</Detail>
</Shipment>
 </Shipments>

11. JSON Example

{
"shipments": [
{
"shipment": {
"tradingPartnerID": "SEV2TEST01",
"documentId": "SI-2026-05-001",
"senderQualifier": "SE",
"sender": "SEV2TEST01",
"receiverQualifier": "SE",
"receiver": "SEV2TEST02",
"vendorID": "VEND12345",
"scac": "SAIA",
"shipmentId": "SHIP-2026-05-001",
"billofLading": "BOL-2026-0001",
"purchaseOrderNumber": "123456",
"totalCharges": 500.00,
"purposeCode": "00",
"paymentMethod": "Prepaid",
"shipmentMeasurements": {
"ladingQuantity": 15,
"weight": 5500.50,
"weightUOM": "LB",
"volume": 125.75,
"volumeUOM": "CF"
},
"equipmentDetails": {
"equipmentID": "54321",
"equipmentDescriptionCode": "TL",
"equipmentType": "53-foot Dry Van",
"sealInfo": {
"sealNumber": "SEAL-123456"
}
},
"billTo": {
"partyIdentification": "12345",
"partyIdentificationTypeCode": "92",
"name": "Acme Logistics",
"streetAddress1": "789 Warehouse Way",
"city": "Newark",
"stateCode": "NJ",
"postalCode": "07101",
"countryCode": "US"
},
"detail": [
{
"stopSequenceNumber": 1,
"stopReasonCode": "02",
"customerOrderNumber": "CUST-ORD-001",
"shipFrom": {
"partyIdentification": "54321",
"partyIdentificationTypeCode": "92",
"name": "Widget Supplier",
"streetAddress1": "456 Oak Ave",
"city": "Springfield",
"stateCode": "IL",
"postalCode": "62701",
"countryCode": "US"
},
"shipTo": {
"partyIdentification": "12345-001",
"partyIdentificationTypeCode": "92",
"name": "Acme Store #5",
"streetAddress1": "555 Retail Road",
"city": "New York",
"stateCode": "NY",
"postalCode": "10001",
"countryCode": "US",
"dockNumber": "DOCK-A1"
},
"orderDetail": {
"poNum": "123456",
"quantity": 100.0,
"quantityUOM": "EA"
},
"shipmentDetails": {
"packagingCode": "BOX",
"ladingDescription": "Blue widgets, assorted sizes",
"ladingQuantity": 100.0,
"weight": 550.0,
"weightUOM": "LB",
"nmfcCode": "050000",
"marks": "Handle With Care"
}
}
]
}
}
]
 }

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