Skip to content

Format · Read and write

cXML orders from Coupa and Ariba

Customers who buy through Coupa or SAP Ariba provide orders as cXML, or have you pick them up in the portal and retype them. every-edi reads cXML purchase orders (OrderRequest) and also generates them when your system or a partner expects cXML.

At a glance

Standard
cXML (commerce eXtensible Markup Language)
Document
OrderRequest (purchase order)
Typical source
Coupa, SAP Ariba and other procurement platforms
every-edi
Read and write
Processing
Rule-based, no AI

What cXML is for

cXML is an XML format for exchanging procurement documents between purchasing systems and suppliers. Unlike EDIFACT it is human-readable, is usually sent over HTTPS, and carries the sender’s credentials in the header of every message.

In cXML the purchase order is called OrderRequest. It consists of a header with order number, date, total, and delivery and billing address, plus a list of ItemOut lines.

Who requires cXML

Suppliers mostly meet cXML through their customers’ procurement platforms. Large companies that buy through Coupa or SAP Ariba place their orders there. The supplier can view them in the portal and copy them into their own ERP by hand, or get connected so the order flows into their system as cXML.

This is a typical bottleneck for suppliers with a few large portal customers: on the customer’s side the orders have long been electronic, yet for the supplier they still mean retyping.

Example

A fictitious OrderRequest with three lines. The shared secret is masked: in real messages it is a password and belongs in neither emails nor tickets.

OrderRequest_4500012345.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.050/cXML.dtd">
<cXML payloadID="20261008093000.4711@einkauf.example"
      timestamp="2026-10-08T09:30:00+02:00" xml:lang="de-DE">
  <Header>
    <From>
      <Credential domain="NetworkID"><Identity>AN01000000001</Identity></Credential>
    </From>
    <To>
      <Credential domain="NetworkID"><Identity>AN01000000002</Identity></Credential>
    </To>
    <Sender>
      <Credential domain="NetworkID">
        <Identity>AN01000000001</Identity>
        <SharedSecret>********</SharedSecret>
      </Credential>
      <UserAgent>Beschaffungssystem</UserAgent>
    </Sender>
  </Header>
  <Request deploymentMode="production">
    <OrderRequest>
      <OrderRequestHeader orderID="4500012345"
          orderDate="2026-10-08T09:30:00+02:00" type="new">
        <Total><Money currency="EUR">1499.00</Money></Total>
        <ShipTo>
          <Address addressID="HB-LAGER-NORD">
            <Name xml:lang="de-DE">Beispiel Haustechnik GmbH</Name>
            <PostalAddress>
              <DeliverTo>Lager Nord, Tor 3</DeliverTo>
              <Street>Hafenstraße 40</Street>
              <City>Bremen</City>
              <PostalCode>28217</PostalCode>
              <Country isoCountryCode="DE">Deutschland</Country>
            </PostalAddress>
          </Address>
        </ShipTo>
        <BillTo>
          <Address addressID="HB-ZENTRALE">
            <Name xml:lang="de-DE">Beispiel Haustechnik GmbH</Name>
          </Address>
        </BillTo>
      </OrderRequestHeader>
      <ItemOut quantity="4" lineNumber="1" requestedDeliveryDate="2026-10-15">
        <ItemID><SupplierPartID>ART-7720</SupplierPartID></ItemID>
        <ItemDetail>
          <UnitPrice><Money currency="EUR">285.00</Money></UnitPrice>
          <Description xml:lang="de-DE">Hydraulikzylinder HZ-200/100</Description>
          <UnitOfMeasure>PCE</UnitOfMeasure>
          <Classification domain="UNSPSC">40151500</Classification>
        </ItemDetail>
      </ItemOut>
      <ItemOut quantity="4" lineNumber="2" requestedDeliveryDate="2026-10-15">
        <ItemID><SupplierPartID>ART-3381</SupplierPartID></ItemID>
        <ItemDetail>
          <UnitPrice><Money currency="EUR">42.50</Money></UnitPrice>
          <Description xml:lang="de-DE">Dichtungsset DS-200</Description>
          <UnitOfMeasure>SET</UnitOfMeasure>
          <Classification domain="UNSPSC">31411700</Classification>
        </ItemDetail>
      </ItemOut>
      <ItemOut quantity="10" lineNumber="3" requestedDeliveryDate="2026-10-15">
        <ItemID><SupplierPartID>ART-9910</SupplierPartID></ItemID>
        <ItemDetail>
          <UnitPrice><Money currency="EUR">18.90</Money></UnitPrice>
          <Description xml:lang="de-DE">Hydraulikschlauch 2m DN10</Description>
          <UnitOfMeasure>MTR</UnitOfMeasure>
          <Classification domain="UNSPSC">40142000</Classification>
        </ItemDetail>
      </ItemOut>
    </OrderRequest>
  </Request>
</cXML>

All names, numbers and GLNs in the example are fictitious.

ElementMeaning
<!DOCTYPE cXML … 1.2.050 …>Version of the cXML DTD the message is validated against.
payloadID, timestampUnique ID and timestamp of the message. If the same payloadID arrives twice, it is the same message.
<From>, <To>Buyer and supplier, each identified by a credential with domain and identity (here a network ID).
<Sender> with <SharedSecret>The system that technically sends the message, and the password it uses to authenticate with the recipient.
deploymentModetest or production. Test orders must not end up in your live order book.
<OrderRequestHeader … type="new">Order header with order number and date. new = new order, update = change, delete = cancellation.
<Total>Order total.
<ShipTo>, <BillTo>Delivery and billing address; addressID is the address key in the buyer’s system.
<ItemOut quantity lineNumber …>Line with quantity, line number and requested date.
<SupplierPartID>Your item number.
<UnitOfMeasure>Unit of measure as a UN/ECE Recommendation 20 code: PCE = piece (some platforms use EA), SET = set, MTR = metre.
<Classification domain="UNSPSC">Commodity code per UNSPSC; illustrative only in this example. The buyer usually sets the value.

Common pitfalls

What every-edi does with it

What is not included (yet)

For cXML, every-edi handles purchase orders (OrderRequest). Order confirmations (ConfirmationRequest), ship notices (ShipNoticeRequest), invoices (InvoiceDetailRequest) and PunchOut catalogues are not currently in scope.

Other formats

every-edi also handles GEVIS XML (GEVISEDI01), CSV with header and line records (HDR/POS), free-form CSV tables via learned CSV profiles, and JSON over a REST interface.

Send us a real file.

The quickest way to find out whether every-edi fits your customers is with real examples: three orders and, if you have one, your partner’s specification. You get the result back in the target format.

Request a demo