ediverse Explore the platform

Spotlight PEPPOL BIS Billing 3.0 The EU e-invoicing mandate is here — France Sept 2026, Belgium Jan 2026, Germany 2025.

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 order-request.cxml.xml
<?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:

  • cXML root with payloadID, timestamp, version.
  • Header > From, To, Sender (each with Credential+).
  • Request > OrderRequest.
  • OrderRequestHeader with orderID and orderDate attributes, Total and BillTo in the content.
  • At least one ItemOut with quantity, lineNumber and an ItemID > 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