Understand integration

Punchout explained

OCI, cXML and openTRANS: how your catalog gets rendered inside your customer's procurement system, and why these projects fail on data rather than on protocol.

At some point a procurement lead at one of your large customers tells your Innendienst that from January, orders will come through Coupa, and asks whether you support punchout. The honest translation of that question is: can we keep buying from you without anyone having to leave our system? If the answer is no, the contract moves.

What punchout is

Punchout is a connection between your customer's procurement system and your shop. Look at it from the buyer's side, because that is the side that matters.

A buyer at a company with a few thousand employees does not open a browser and search for suppliers. They open SAP Ariba, Coupa, JAGGAER, Onventis or the purchasing module of their SAP ERP, because that is where their budget, their cost centres and their approval workflow live. There they see a list of approved suppliers, and they click yours.

At that moment the procurement system "punches out": it opens your shop, in a frame or a new window, and the buyer is already logged in. The identity came across in the call, so nobody types a password. They see the assortment their company negotiated, at their contract prices, with your live stock figures. They search, compare, and fill a cart the way they would in any shop.

Then, instead of checking out, they transfer the cart. It is handed back into the procurement system as a requisition, the BANF of the SAP world. Approval, cost-centre assignment, budget check and the purchase order all happen there. The order reaches you afterwards as a regular order.

The buyer never left their system. From their point of view, your catalog is a feature of Coupa.

Why large customers insist on it

Purchasing organisations above a certain size have one goal: see all spend in one place and steer it onto suppliers with negotiated contracts. They bought a procurement system to enforce that, and every order placed outside it is spend they cannot see, on terms they did not negotiate.

The consequence for you is hard. A supplier reachable from inside the system is on the standard path. A supplier who is not becomes an exception somebody handles by hand: a PDF quote, a manual requisition, an email to the Einkauf. Exceptions get cleaned up. Over one or two purchasing cycles a supplier without punchout is designed out, and it is rarely announced as a decision about you.

This is why most punchout projects are defensive ones, with a date attached.

The three standards

Three appear in practice. Your customer decides which one you need: it follows from the procurement system they already run.

StandardOriginMechanismWhere you meet it
OCI (Open Catalog Interface)SAPHTML form POST of NEW_ITEM-* fields back to the calling systemGerman SAP shops. By far the most common case in the Mittelstand. Versions 4.0 and 5.0 both still in the field
cXMLAriba (now SAP Ariba); also used by CoupaXML documents: PunchOutSetupRequest / PunchOutSetupResponse, then PunchOutOrderMessageAriba, Coupa, most international procurement platforms
openTRANSBME (Bundesverband Materialwirtschaft, Einkauf und Logistik)XML business documents: ORDER, ORDERRESPONSE, DISPATCHNOTIFICATION, INVOICEGerman-speaking market, usually as the return leg that completes an OCI punchout

OCI is deliberately simple. The catalog data comes back as ordinary HTML form fields: NEW_ITEM-DESCRIPTION[1], NEW_ITEM-MATNR[1], NEW_ITEM-QUANTITY[1], NEW_ITEM-UNIT[1], NEW_ITEM-PRICE[1], NEW_ITEM-CURRENCY[1], NEW_ITEM-VENDORMAT[1], NEW_ITEM-MANUFACTMAT[1]. That simplicity is why it spread, and also why nearly every SAP customer has their own small deviation from it.

cXML carries more: supplier part numbers with an auxiliary ID, classification codes, unit-of-measure codes from UN/CEFACT Recommendation 20 (C62 for piece, EA for each, MTR for metre), and a BuyerCookie that ties the session together.

openTRANS is the missing half of an OCI punchout rather than a competitor to it: OCI hands over a cart, openTRANS carries the order, order response and invoice that follow.

Level 2 punchout goes further: you also push a slim index of your articles into the procurement system, so the buyer searches your products from their own search box and lands on your product page. It raises the data-quality bar rather than lowering it.

The round trip, step by step

  1. Setup request. The procurement system calls your punchout endpoint with credentials: in OCI a URL with username and password parameters, in cXML a PunchOutSetupRequest carrying an identity and shared secret.
  2. Session URL. You verify the credentials, resolve which customer this is, create a session and answer with a URL. In cXML that is a PunchOutSetupResponse containing a browserFormPost address; in OCI you redirect straight into the shop.
  3. The buyer shops. Inside your storefront, in their session: their assortment, their prices, your live availability. This is the part that looks like a normal shop and is the reason punchout is worth having.
  4. Cart transfer. The buyer transfers the cart. OCI posts the line items back as form fields; cXML posts a PunchOutOrderMessage. Either way, the cart crosses the boundary and your session ends.
  5. Approval in their system. The lines become a requisition. Cost centres, budgets and approvers apply. Lines can be changed or deleted here, and often are.
  6. Order transmission. The approved requisition becomes a purchase order and is sent to you as a cXML OrderRequest, an openTRANS ORDER, an EDI message or, more often than anyone admits, an email. This is a separate message from the punchout. Building steps 1–5 and forgetting step 6 leaves you with orders arriving as PDFs to be retyped, which was the problem you were solving.

Why punchout projects fail

Almost never on the protocol. The protocol is a week of work. These are the things that stop projects, roughly in order of how often they do it:

Prices. Customer-specific conditions live in the ERP, sometimes in a spreadsheet in the Vertrieb. If the shop cannot reach the same price the ERP would calculate, the punchout shows numbers that do not match the contract. Somebody notices on the first order, and it costs trust that took years to build. A punchout project starts at pricing, not at OCI.

Data quality. Procurement systems are stricter than a web page. Five fields cause most rejected lines:

FieldWhat goes wrongConsequence in their system
Unit of measureMissing, or free text like Stk. where a code is expectedLine rejected, or quantity interpreted wrongly: 10 boxes ordered as 10 pieces
Manufacturer part numberEmpty, or the same value as your own article numberThe buyer's system cannot match the article to their material master
Tax indicator / rateMissing or wrong per countryRequisition fails the tax check and stops in approval
Long descriptionHTML markup, or 4,000 characters where the field takes 200Truncated, or the transfer fails outright
ClassificationeCl@ss or UNSPSC required by the customer and not maintainedLine cannot be assigned to a material group, so it fails their controlling

These are catalog problems, not integration problems. Fix them in the catalog; see Measurements and units and Completeness and readiness.

Session and authentication handling. Credentials per customer, sessions that expire mid-basket, buyers who open two punchouts at once, a cart posted back to a system that has already timed out. Unglamorous and responsible for most of the support tickets in year one.

Testing against the real system. Your endpoint validating against your own test harness proves very little; every procurement installation is customised. Test against the customer's system, with their credentials and their buyer, before you call it live. That test needs a slot in their IT queue, which is a schedule risk you do not control. Do not promise a go-live date before the slot exists.

The assortment is customer-specific. A punchout is a contract, and the contract names a range. Showing your whole catalog to a punchout buyer breaks what was agreed, and it exposes articles and prices that were never negotiated for them.

The default in most systems is that a product with no channel assignment is visible everywhere, punchout included. That means a fresh punchout channel shows your entire catalog until somebody closes it. Decide the visibility policy before the first buyer connects.

What punchout replaces

The alternative is static catalog exchange: you export your range as a BMEcat file or an Excel sheet, the customer imports it into their system, and their buyers shop from that copy.

Static catalogPunchout
Data ageAs old as the last importLive
PricesFixed at export timeCalculated per customer at display time
AvailabilityNot included, or already wrongReal stock
New articlesNext exchange cycleImmediately
Effort per customerAn export, an import, a correction round, repeatedlyOnce, at setup
Cross-selling, accessories, searchNoneYour shop

Static catalogs are still normal for small ranges and for customers whose system cannot punch out. But every cycle is manual work on both sides, and between cycles the data is wrong. Punchout removes the cycle.

How this works in the Revenue Cloud

A punchout is modelled as a channel, and that is more than a label:

  • In Configuration › Channels you create a channel with type PunchOut and your own code — punchout-acme for one customer, punchout-konzern-x for the next. One channel per punchout customer is the normal setup, because the assortment and the presentation differ per contract.
  • Each channel belongs to a market, which carries the currency, the locales and the tax classes that apply. See Languages and markets.
  • Unassigned rows decides the visibility policy; in the channel detail the setting reads Products with no assignment to this channel are. Set it to Hidden until assigned (closed) on a punchout channel and only products explicitly assigned to it appear, which is what a punchout contract describes. Your storefront channel can stay open at the same time.
  • Attributes that are scopable can hold a different value per channel, so the short, plain description a procurement system needs is not the marketing prose your shop shows. See Channels, locales and completeness.
  • Completeness is calculated per channel, so you can ask the only question that matters before go-live: how many of the 2,400 articles in this punchout channel carry a unit of measure, a manufacturer part number and a tax class?
Punchout setup screens: planned. The channel, the assortment, the prices and the completeness check above are on your tenant today. The OCI/cXML round trip itself (endpoint, session handling, cart return) is planned as a punchout connector with its own setup screens. Set up a punchout describes the setup in the order it runs once that ships.

Next