DBC: cXML Punchout
cXML PunchOut Workflow Summary
The cXML PunchOut process allows a buyer’s procurement system (like Ariba, Coupa, or Jaggaer) to "punch out" to a supplier’s website to shop, then bring the cart back into their system to complete the purchase.

Main Steps:
- PunchOutSetupRequest
- The buyer sends a PunchOutSetupRequest to the supplier.
- The supplier responds with a login URL to start a session.
- PunchOut Shopping Session
- The user is redirected to the supplier site (via the URL in the response).
- The user shops and builds a cart.
- PunchOutOrderMessage
- When the user "checks out", the supplier sends a PunchOutOrderMessage (the cart) back to the buyer's system.
- OrderRequest (optional)
- If the buyer completes the order, they send an OrderRequest (purchase order) to the supplier.
📥 1. PunchOutSetupRequest (Buyer ➜ Supplier)
<cXML payloadID="123456" timestamp="2025-06-23T15:00:00">
<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>mypassword</SharedSecret>
</Credential>
<UserAgent>MyERP</UserAgent>
</Sender>
</Header>
<Request deploymentMode="production">
<PunchOutSetupRequest operation="create">
<BuyerCookie>cookie-abc-123</BuyerCookie>
<BrowserFormPost>
<URL>https://buyer-system.com/receiveCart</URL>
</BrowserFormPost>
<SupplierSetup>
<URL>https://supplier.com/punchout</URL>
</SupplierSetup>
<ShipTo>
<Address addressID="123">
<Name xml:lang="en">Acme Corp</Name>
<PostalAddress>
<Street>1 Main St</Street>
<City>Townsville</City>
<State>CA</State>
<PostalCode>12345</PostalCode>
<Country isoCountryCode="US">United States</Country>
</PostalAddress>
</Address>
</ShipTo>
</PunchOutSetupRequest>
</Request>
</cXML>
📤 2. PunchOutOrderMessage (Supplier ➜ Buyer)
Sent when the user checks out from the supplier site. It contains the selected items.
<cXML payloadID="abc123" timestamp="2025-06-23T15:15:00">
<Message>
<PunchOutOrderMessage>
<BuyerCookie>cookie-abc-123</BuyerCookie>
<PunchOutOrderMessageHeader operationAllowed="create">
<Total>
<Money currency="USD">199.99</Money>
</Total>
</PunchOutOrderMessageHeader>
<ItemIn quantity="1">
<ItemID>
<SupplierPartID>ABC-1001</SupplierPartID>
<SupplierPartAuxiliaryID>SKU12345</SupplierPartAuxiliaryID>
</ItemID>
<ItemDetail>
<UnitPrice>
<Money currency="USD">199.99</Money>
</UnitPrice>
<Description xml:lang="en">Widget A</Description>
<UnitOfMeasure>EA</UnitOfMeasure>
<Classification domain="UNSPSC">12345678</Classification>
<ManufacturerPartID>XYZ-001</ManufacturerPartID>
<ManufacturerName>Acme</ManufacturerName>
</ItemDetail>
</ItemIn>
</PunchOutOrderMessage>
</Message>
</cXML
🧾 3. OrderRequest (Buyer ➜ Supplier)
If the buyer submits an actual purchase order, this is sent outside of the PunchOut session.
<cXML payloadID="order123" timestamp="2025-06-23T15:30:00">
<Request>
<OrderRequest>
<OrderRequestHeader orderID="PO-10001" orderDate="2025-06-23T15:30:00" type="new">
<Total>
<Money currency="USD">199.99</Money>
</Total>
<ShipTo>
<Address addressID="123">
<Name xml:lang="en">Acme Corp</Name>
<PostalAddress>
<Street>1 Main St</Street>
<City>Townsville</City>
<State>CA</State>
<PostalCode>12345</PostalCode>
<Country isoCountryCode="US">United States</Country>
</PostalAddress>
</Address>
</ShipTo>
<BillTo>
<Address addressID="456">
<Name xml:lang="en">Acme Billing</Name>
<PostalAddress>
<Street>100 Billing Rd</Street>
<City>Townsville</City>
<State>CA</State>
<PostalCode>54321</PostalCode>
<Country isoCountryCode="US">United States</Country>
</PostalAddress>
</Address>
</BillTo>
</OrderRequestHeader>
<ItemOut quantity="1" lineNumber="1">
<ItemID>
<SupplierPartID>ABC-1001</SupplierPartID>
</ItemID>
<ItemDetail>
<UnitPrice>
<Money currency="USD">199.99</Money>
</UnitPrice>
<Description xml:lang="en">Widget A</Description>
<UnitOfMeasure>EA</UnitOfMeasure>
</ItemDetail>
</ItemOut>
</OrderRequest>
</Request>
</cXML>