ABAP Cloud Part 7: Released APIs and Release Contracts
Understand release contracts (C0, C1, C2, C3, C4), API states such as released and deprecated, successor information, and how to release your own objects for other developers or for cloud development.
Explanation
📌 KEY POINTS
✅ An object is usable in ABAP Cloud only if it is released for the right contract.
✅ C1 = use in cloud development / key user apps; C0 = extend; C2 = remote API; C3 = configuration content; C4 = use in AMDP.
✅ Deprecated APIs still work for now but have a successor — plan the switch.
💡 You can release your own objects (e.g. tier 2 wrappers) under C1 in ADT.
━━━━━━━━━━━━━━━━━━━━
▶ WHERE WE ARE
Parts 1–6 kept saying "released". This part explains exactly what that means.
━━━━━━━━━━━━━━━━━━━━
▶ 1. VISIBILITY IS NOT PERMISSION
In a private cloud or on-premise system you can technically see and even call almost everything. In ABAP for Cloud Development, the compiler allows only objects released for the required use. The release status is part of the object's API state.
━━━━━━━━━━━━━━━━━━━━
▶ 2. THE RELEASE CONTRACTS
- C0 — Extend: the object may be extended (e.g. CDS views or tables that allow extension fields, BAdIs/enhancement points for extensions). SAP keeps extension points stable.
- C1 — Use System-Internally: the object may be used in ABAP Cloud code (and/or key user apps) in the same system. Most released CDS views, classes and RAP BO interfaces carry C1.
- C2 — Use as Remote API: the object is a stable remote interface, e.g. an OData or SOAP service, for side-by-side scenarios.
- C3 — Manage Configuration Content: for content used in configuration scenarios.
- C4 — Use in ABAP-Managed Database Procedures and Functions: the object may be accessed in AMDP.
Each contract defines which changes SAP may make: for C1, for example, SAP will not remove released elements or make incompatible changes to them.
━━━━━━━━━━━━━━━━━━━━
▶ 3. API STATES
- Released — use it.
- Deprecated — still released, but a successor exists; ADT shows a warning and the successor. Migrate before it is removed.
- Not released — not usable in ABAP Cloud (compiler error).
In ADT: open the object → Properties → API State; or look at the "Released Objects" tree in the Project Explorer.
━━━━━━━━━━━━━━━━━━━━
▶ 4. FINDING RELEASED APIS
- ADT Project Explorer → Released Objects (by type).
- SAP Business Accelerator Hub (api.sap.com).
- Cloudification Repository for successors of classic objects.
━━━━━━━━━━━━━━━━━━━━
▶ 5. RELEASING YOUR OWN OBJECTS
You can release your own objects:
- C1 for tier 2 wrappers so ABAP Cloud code can call them.
- C1/C0 for reusable components shared across teams (with stable interfaces).
In ADT: object Properties → API State → Add release contract; choose visibility (use in cloud development, key user apps). Once released, you commit to compatibility — treat it like a public API.
━━━━━━━━━━━━━━━━━━━━
▶ STEP BY STEP
- Open I_SalesOrder in ADT → Properties → API State: see the contracts.
- Browse Released Objects for a class you need (e.g. number range, HTTP).
- Release your wrapper ZCL_PR_REQUISITION_WRAPPER for C1 (use in cloud development).
- Call it from an ABAP Cloud class — the syntax check now accepts it.
✅ CHECKPOINT: you understand release contracts and can publish your own stable APIs. RAP ABAP Cloud series complete.
Code example
" ===== Reading the API state in ADT =====" Object: I_SALESORDER (CDS view) Properties -> API State" C1 Use System-Internally Released (cloud development, key user apps)" C0 Extend Released (extension fields allowed)"" Object: BAPI_PO_CREATE1 (FM) API State: Not released for ABAP Cloud" Successor (example): released RAP BO interface for purchase orders"" Object: <some class> API State: Deprecated" Successor: <new class> -> ADT warning + quick info " ===== Contract summary =====" C0 Extend extension points, extensible views/tables" C1 Use system-internally use in ABAP Cloud / key user code" C2 Use as remote API OData/SOAP services for side-by-side" C3 Manage configuration content configuration scenarios" C4 Use in AMDP access in ABAP-managed DB procedures " ===== Releasing your own tier 2 wrapper (ADT) =====" ZCL_PR_REQUISITION_WRAPPER -> Properties -> API State -> Use System-Internally (C1)" [x] Use in Cloud Development" [ ] Use in Key User Apps" -> ABAP Cloud code may now call it; its public interface is now a contract " ===== Consumer in ABAP Cloud =====" DATA(number) = NEW zcl_pr_requisition_wrapper( )->create( items ). " accepted" CALL FUNCTION 'BAPI_PR_CREATE' ... " rejectedReal project scenario
Developers in a private cloud project argued that "we can see the table in SE11, so we may use it". The ABAP Cloud syntax check disagreed, and some developers started moving code to Standard ABAP to avoid the errors.
The architect explained release contracts with ADT's API State view, created a short list of commonly needed released objects, and released three tier 2 wrappers under C1 for real gaps. Code stayed in ABAP Cloud, and when SAP deprecated one API later, ADT showed the successor, and the switch took an afternoon.
Common mistakes
- Equating technical visibility with permission.
- Confusing C1 (local use) with C2 (remote API).
- Ignoring deprecation warnings until removal.
- Releasing own objects without committing to compatibility.
- Moving code to Standard ABAP to bypass release checks.
Best practices
- Check API state and contract before using any SAP object.
- Use ADT Released Objects, the Accelerator Hub and the Cloudification Repository.
- Migrate deprecated APIs to successors early.
- Release your own wrappers and reusable components deliberately (C1), with stable interfaces.
- Document released own objects and their consumers.
Interview angle
Questions: "What are release contracts?", "What does C1 mean?", "How do you release your own object for ABAP Cloud?"
Strong answer: release contracts define allowed usage and SAP's stability promise: C0 extend, C1 use system-internally (ABAP Cloud/key user), C2 remote API, C3 configuration content, C4 use in AMDP; API states include released, deprecated (with successor) and not released; own objects such as tier 2 wrappers are released via ADT API State (C1, use in cloud development), making their interface a contract.
Practice this lesson
Quick check
1. A custom wrapper selects an unreleased SAP table and is used by many programs. What is the main clean-core concern?
2. A deprecated released API is used in ABAP Cloud code. What does "deprecated" mean?
3. What does release contract C1 allow?
Interview questions
1. After an upgrade, an ABAP Cloud class shows warnings about a deprecated API. What do you do?
Answer it in your own words first, then compare.
2. Explain release contracts C0 to C4 and how you release your own object for ABAP Cloud.
Answer it in your own words first, then compare.
Reference-verified: the steps are checked against official SAP documentation and tutorials, and object and field names in the sample code are checked for consistency. The code has not been compiled or run on an SAP system by ERPClimb. Syntax marked release-dependent varies by SAP release, so check it in your own system.
More lessons in this topic
- ABAP Cloud Part 1: Released APIs, ATC and Clean Core
- ABAP Cloud Part 2: RAP and ABAP Cloud Architecture for Clean-Core Extensions
- ABAP Cloud Part 3: Replacing Direct Table and Classic API Dependencies
- ABAP Cloud Part 4: ATC Readiness — Finding and Fixing Unreleased Usage
- ABAP Cloud Part 5: On-Stack Developer Extension vs BTP Side-by-Side
- ABAP Cloud Part 6: Language Version, Syntax Restrictions and API Checks