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.
<?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.
| Element | Meaning |
|---|---|
| <!DOCTYPE cXML … 1.2.050 …> | Version of the cXML DTD the message is validated against. |
| payloadID, timestamp | Unique 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. |
| deploymentMode | test 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
-
Credentials and shared secret
domain and identity in From, To and Sender must arrive exactly as the platform expects, down to the capitalisation of the domain value. A wrong or expired shared secret gets the message rejected.
-
Changes and cancellations
An order change arrives as a complete new OrderRequest with the same orderID and type="update", a cancellation with type="delete". If you only expect “new”, you create duplicate orders.
-
Unit codes
UnitOfMeasure expects UN/CEFACT codes. A “pcs” from your own ERP is not a valid value and strict systems will reject it.
-
Test and production mode
deploymentMode="test" marks test messages. If they aren’t filtered out, test orders end up in your live order book.
-
Extra fields per platform and buyer
Cost centres, project numbers or approval notes often sit in Extrinsic fields that each platform and buyer uses differently. Which of them your ERP needs belongs in the mapping.
-
Time zones
Dates in cXML carry a time zone. An order placed shortly after midnight can land on the previous day once your ERP converts it.
What every-edi does with it
- Read: cXML OrderRequests are processed directly, rule-based and without AI, and translated into the format your ERP understands.
- Write: PDF, email, CSV or EDIFACT orders become a cXML OrderRequest when a system expects cXML.
- Incomplete or implausible orders go to the review dashboard.
- We agree the transport (file, email, SFTP, or an HTTPS interface on request) with you and your customer’s platform.
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