Book a live walkthrough
Blog · Clean Core

Released SAP APIs vs direct-table access: Clean Core the right way

Clean Core is not a slogan. It is a rule about how you write to SAP: through released, SAP-maintained interfaces, never straight into the tables underneath.

Every team modernising SAP eventually hits the same fork. You need to change data or add a behaviour, and there are two ways to do it: call a released interface that SAP maintains, or reach past it and write the underlying tables yourself. The two look similar in a demo. They are worlds apart in production, on upgrade day, and on the road to the cloud. This is the practitioner's version of why.

What is a released SAP API?

A released SAP API is a stable, SAP-maintained contract for reading or changing business data. SAP publishes it, marks it as released, and commits to keeping it stable across releases. You can find released interfaces in the SAP Business Accelerator Hub, still widely called the SAP API Hub, alongside the RAP-based OData services and remote-enabled BAPIs that make up the modern set.

The word that matters is contract. When you build on a released API, you are building on something SAP has promised not to break. When you build on a table structure instead, you are building on an internal detail SAP never promised to keep the same, and that it changes when it needs to.

Why are direct-table writes to SAP wrong and dangerous?

Writing directly to SAP tables skips the business logic that makes the data correct. A single business action in SAP is rarely one row in one table. It is validations, number-range assignment, currency and tax handling, status updates, and several tables that must change together and stay consistent. The released interface runs all of that. A raw table write runs none of it.

There are three failure modes, and they compound:

A released API is a promise SAP keeps across upgrades. A table structure is an internal detail SAP is free to change. Build on the promise, not the detail.

A concrete example: posting a supplier invoice

Say you need to post a supplier invoice. The Clean Core way is to call the released Supplier Invoice interface, historically the BAPI_INCOMINGINVOICE_CREATE BAPI and now also available as a released OData service. You hand it the header, the line items, and the tax data. SAP's posting engine takes it from there.

Behind that one call, SAP writes the invoice header table (RBKP), the invoice item table (RSEG), and the accounting view in the Universal Journal (ACDOCA), all together, in one consistent posting, with every validation and downstream update applied. Number ranges are assigned, the document balances, tax is calculated, and the financial and logistics views agree because the same engine wrote both.

Now picture the wrong way: writing RBKP, RSEG, and ACDOCA directly. You would have to reimplement SAP's posting logic yourself, keep three tables in perfect agreement by hand, and hope the structures never change. Miss one field or one dependency and you have an invoice that looks posted but does not reconcile, a Universal Journal entry that does not tie back, or a document that blocks the next upgrade. The released API exists precisely so you never take that risk.

Posting a supplier invoice two ways. Through the released Supplier Invoice API, SAP's posting engine writes RBKP, RSEG and the Universal Journal ACDOCA together and consistently. Writing those tables directly bypasses SAP's business logic and breaks on upgrades. Post a supplier invoice Direct-table write Writes RBKP, RSEG, ACDOCA by hand Bypasses SAP's posting logic Breaks on upgrade Released Supplier Invoice API SAP's engine writes all tables together Validations and postings applied Upgrade-safe and consistent
Same posting, two paths. One SAP maintains for you; one you maintain forever, and lose on upgrade.

How do released APIs keep you upgrade-safe and cloud-ready?

Released APIs are the interfaces SAP commits to keeping stable, so code built on them survives upgrades that reshape the tables underneath. That same stability is what makes S/4HANA Cloud possible: in the cloud editions, direct table access simply is not on the menu, and released, whitelisted APIs are the supported way in.

This is the heart of Clean Core. Keep your extensions and integrations on released interfaces, whether that is a RAP-based OData service, a released CDS view for reading, or a remote-enabled BAPI, and the standard core stays clean. Upgrades become routine instead of a project, and the same code runs whether the customer is on-premise today or moving to the cloud tomorrow. Build on internal tables and every upgrade is a negotiation with your own past shortcuts.

Where does C16 stand on this?

C16's position follows directly from everything above. Any code C16 generates writes through SAP released APIs. It does not write to underlying tables directly, because that is the practice Clean Core exists to prevent. When the right path is posting through the Supplier Invoice interface, that is what the generated code does.

C16's own analysis is read-only. It reads a system to understand a process, surface the custom code that matters, or explain why something is stuck, without changing anything. And when generated code does make a change, that change goes to a development system, is reviewed by an expert, and is promoted through the customer's own change process. Nothing C16 drafts ships without your approval. Expert-in-the-loop, released APIs, and the customer's own governance are not add-ons here; they are the default.

The short version

Clean Core comes down to one discipline: write through the front door. Released APIs are a contract SAP maintains for you, so your code stays correct, consistent, and upgrade-safe. Direct-table writes borrow against a future upgrade you will eventually have to pay back, with interest. Pick the interface SAP promises to keep.

If you are weighing this as part of a broader move, it connects to the wider readiness picture, from a S/4HANA readiness assessment to a custom-code assessment for S/4HANA and a fit-to-standard analysis.

See what Clean Core looks like on your system. C16 reads your SAP, read-only, and shows where custom code writes past the released APIs, on ECC or S/4HANA. Book a walkthrough.

C16's analysis is read-only by default. Any code C16 generates uses SAP released APIs and does not write to underlying tables directly. Generated changes go to a development system, are reviewed by an expert, and are promoted through the customer's own change process; Nothing C16 drafts ships without your approval. PEOL Technologies is an SAP Partner, ISO 27001 certified and SOC 2 Type II compliant.

← All posts