cXML OrderRequest
The formal cXML purchase order. Sent from the buyer's ERP to the supplier after internal approval of the cart — whether the cart came from a punchout, a local catalog, or manual entry. Functional equivalent of a paper PO or an EDIFACT ORDERS message.
Purpose
The OrderRequest is the formal purchasing instruction: the buyer
commits to paying if the supplier delivers the ItemOut entries at the
price and terms transmitted. Three lifecycle variants exist via the
type attribute on OrderRequestHeader: new
(default), update (modify a previously emitted order),
delete (cancel an order).
The orderType attribute on the same header introduces five usage
regimes: regular (default), release (release order
against an existing master agreement), blanket (blanket / framework
order), stockTransport (stock transfer between sites),
stockTransportRelease (release of a transport scheduling agreement).
XML structure
OrderRequest
The DTD is terse: OrderRequest (OrderRequestHeader, ItemOut+). The
header holds everything that applies to the order globally; ItemOut
repeats, with at least one item.
OrderRequestHeader
The full content model: OrderRequestHeader (Total, ShipTo?, BillTo,
BusinessPartner*, LegalEntity?, OrganizationalUnit*, Shipping?, Tax?, Payment?,
PaymentTerm*, Contact*, Comments*, Followup?, ControlKeys?, DocumentReference?,
SupplierOrderInfo?, TermsOfDelivery?, DeliveryPeriod?, IdReference*,
OrderRequestHeaderIndustry?, Extrinsic*). Two elements are mandatory by
cardinality: Total and BillTo.
On attributes: orderID and orderDate are
#REQUIRED. type and orderType have default
values (new, regular). Everything else is
#IMPLIED: orderVersion, requisitionID,
shipComplete, effectiveDate, expirationDate,
agreementID, parentAgreementID, pickUpDate,
requestedDeliveryDate, etc.
ItemOut
The DTD: ItemOut (ItemID, Path?, (ItemDetail|BlanketItemDetail)?,
(SupplierID | SupplierList)?, ShipTo?, Shipping?, Tax?, SpendDetail?,
Distribution*, Contact*, TermsOfDelivery?, Comments*, Indicator*, Tolerances?,
ControlKeys?, ScheduleLine*, (MasterAgreementReference | MasterAgreementIDInfo)?,
ItemOutIndustry?, Packaging*, ReleaseInfo?, Batch?). Only
ItemID is strictly required by content; ItemDetail is
optional but almost always present.
On attributes: quantity and lineNumber are required in
practice (the DTD declares them #REQUIRED in most contexts outside
blanket orders).
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.069/cXML.dtd">
<cXML payloadID="260513.160000.order@buyer.example"
timestamp="2026-05-13T16:00:00+00:00"
version="1.2.069">
<Header>
<From>
<Credential domain="DUNS"><Identity>123456789</Identity></Credential>
</From>
<To>
<Credential domain="DUNS"><Identity>987654321</Identity></Credential>
</To>
<Sender>
<Credential domain="DUNS">
<Identity>123456789</Identity>
<SharedSecret>shared-secret-here</SharedSecret>
</Credential>
<UserAgent>ediverse-buyer/1.0</UserAgent>
</Sender>
</Header>
<Request>
<OrderRequest>
<OrderRequestHeader orderID="PO-2026-00789"
orderDate="2026-05-13T16:00:00+00:00"
type="new">
<Total>
<Money currency="USD">129.97</Money>
</Total>
<ShipTo>
<Address>
<Name xml:lang="en">Acme Corp — London site</Name>
<PostalAddress>
<Street>10 Cheapside</Street>
<City>London</City>
<PostalCode>EC2V 6AA</PostalCode>
<Country isoCountryCode="GB">United Kingdom</Country>
</PostalAddress>
</Address>
</ShipTo>
<BillTo>
<Address>
<Name xml:lang="en">Acme Corp — Accounts Payable</Name>
<PostalAddress>
<Street>1 Cornhill</Street>
<City>London</City>
<PostalCode>EC3V 3ND</PostalCode>
<Country isoCountryCode="GB">United Kingdom</Country>
</PostalAddress>
</Address>
</BillTo>
<Contact role="buyer">
<Name xml:lang="en">Jane Smith</Name>
<Email>jane.smith@acme.example</Email>
</Contact>
</OrderRequestHeader>
<ItemOut quantity="3" lineNumber="1">
<ItemID>
<SupplierPartID>SKU-A100</SupplierPartID>
</ItemID>
<ItemDetail>
<UnitPrice><Money currency="USD">29.99</Money></UnitPrice>
<Description xml:lang="en">Ergonomic office chair, black</Description>
<UnitOfMeasure>EA</UnitOfMeasure>
<Classification domain="UNSPSC">56101504</Classification>
</ItemDetail>
</ItemOut>
<ItemOut quantity="2" lineNumber="2">
<ItemID>
<SupplierPartID>SKU-B200</SupplierPartID>
</ItemID>
<ItemDetail>
<UnitPrice><Money currency="USD">20.00</Money></UnitPrice>
<Description xml:lang="en">Adjustable footrest</Description>
<UnitOfMeasure>EA</UnitOfMeasure>
<Classification domain="UNSPSC">56121601</Classification>
</ItemDetail>
</ItemOut>
</OrderRequest>
</Request>
</cXML> Required vs optional
Minimal valid OrderRequest:
cXMLroot withpayloadID,timestamp,version.Header>From,To,Sender(each withCredential+).Request>OrderRequest.OrderRequestHeaderwithorderIDandorderDateattributes,TotalandBillToin the content.- At least one
ItemOutwithquantity,lineNumberand anItemID>SupplierPartID.
ShipTo at header level is optional (it can be defined per
ItemOut), but in practice it sits at the header by default.
Common patterns
The pair orderID (buyer side) + SupplierOrderInfo/orderID
(supplier side, optional) is the correlation key. For orders that originated from a
punchout, SupplierOrderInfo lets the supplier ERP find the original
cart.
UNSPSC codes in Classification: while the DTD allows
any domain, the Ariba / SAP Business Network convention mandates UNSPSC
for product categories. That is what lets buyers roll up spend by family.
Post-emission changes: use type="update" with a
DocumentReference pointing to the previous version's
payloadID. The content must be complete — the new version
replaces the previous one, it does not merge.
Documentation
- cXML.dtd — current version
— search for
ELEMENT OrderRequestandELEMENT OrderRequestHeader. - cXML Reference Guide (PDF) — OrderRequest chapter, mappings to EDIFACT and X12.
- ConfirmationRequest — the business-level acknowledgment.