Date: 2026-04-17 Status: Research complete across five parallel streams (product landscape + middleware, S/4HANA Cloud APIs, ECC & on-premise, master data, Business One + ByDesign). Several items flagged "needs live verification" — see Unresolved Questions.
"SAP" is not a single integration target — it is a family of distinct ERP products with materially different APIs, authentication models, and deployment patterns. For AP automation the relevant products are SAP S/4HANA Cloud (public and private editions), SAP S/4HANA on-premise, SAP ECC 6.0 (legacy, mainstream support ends 2027-12-31, paid extended maintenance through 2030), SAP Business One (SMB), and SAP Business ByDesign (delisted for new customers from 2026-04-20, but existing customers continue). Each has its own supplier invoice API surface. S/4HANA exposes API_SUPPLIERINVOICE_PROCESS_SRV (OData v2); ECC requires classic BAPI (BAPI_INCOMINGINVOICE_CREATE) or IDoc (INVOIC02) over RFC/HTTP; Business One uses the Service Layer (OData v4) or DI API/DI Server; Business ByDesign uses ManageSupplierInvoiceIn A2X SOAP.
Middleware alert for Orcha. Maesn and Chift — the two European unified-API players most relevant to Orcha's existing DACH footprint — do not list any SAP product. SAP connectivity via middleware means Celigo, Workato, Boomi, or SAP's own Integration Suite / PI-PO — all of which require customer-side admin, licensing, and infrastructure involvement. No shortcut exists via existing Orcha intermediaries.
Attachments are always a second API call. Across all SAP products, uploading the PDF of the invoice is separate from creating the invoice record (API_CV_ATTACHMENT_SRV on S/4HANA, ArchiveLink / ARCHIV_CREATE_HTTP on ECC, Attachments2 on Business One, Document BO on ByDesign). Design for this.
Sandbox availability is limited. S/4HANA Cloud's public sandbox on api.sap.com is read-only. ECC has no public trial. Business One and ByDesign require SAP PartnerEdge partner status or a customer-provided tenant. Customer-by-customer onboarding is the realistic integration model.
Capabilities for invoice posting and master data read, per SAP product. "Available?" describes what's there, not yes/no.
| Capability | S/4HANA Cloud Public | S/4HANA Cloud Private / On-prem | SAP ECC 6.0 | SAP Business One (HANA) | SAP Business One (SQL) | SAP Business ByDesign |
|---|---|---|---|---|---|---|
| Post supplier invoice (structured) | OData v2 API_SUPPLIERINVOICE_PROCESS_SRV |
Same + SOAP A2X + BAPI/RFC/IDoc | BAPI BAPI_INCOMINGINVOICE_CREATE, IDoc INVOIC02, SOAP enterprise services |
OData v4 PurchaseInvoices via Service Layer |
DI API (COM) or DI Server (SOAP) | SOAP A2X ManageSupplierInvoiceIn; OData staging alternative |
| Park (draft) invoice | Same API, parking variant | Same | BAPI_INCOMINGINVOICE_PARK (requires PO reference) |
Via Status field |
Same | DataEntryProcessingStatusCode=2 |
| PO-based vs non-PO | Both, via to_SuplrInvcItemPurOrdRef / to_SupplierInvoiceItemGLAcct |
Same | Both; non-PO parking needs workaround | Both, via DocType item/service |
Same | Create_SI_With_Reference (PO) vs Maintain_Bundle |
| Upload PDF attachment | API_CV_ATTACHMENT_SRV (separate call, CSRF-protected, BusinessObjectTypeName=BUS2081) |
Same + ArchiveLink | ArchiveLink (ARCHIV_CREATE_HTTP + ARCHIV_CONNECTION_INSERT); GOS alternative |
Attachments2 entity, multipart upload; network-share caveat |
Same via DI API | Document BO, linked by UUID; or inline BLOB via staging OData |
| Read suppliers / business partners | API_BUSINESS_PARTNER (OData v2) |
Same | BAPI BAPI_VENDOR_GETDETAIL + LFA1/LFB1/LFBK tables; IDoc CREMAS |
BusinessPartners |
Via DI API | khbusinesspartner custom OData; SOAP ManageSupplierIn |
| Read chart of accounts | API_GLACCOUNTINCHARTOFACCOUNTS_SRV |
Same | SKA1/SKB1 via BAPI_GL_ACC_GETLIST or RFC |
ChartOfAccounts |
Via DI API | Custom OData (tenant-configurable) |
| Read cost centers | API_COSTCENTER_SRV |
Same | CSKS via BAPI_COSTCENTER_GETLIST |
CostingCodes / DistributionRules |
Via DI API | khcostcentre custom OData |
| Read company codes | API_COMPANYCODE_SRV |
Same | T001 via RFC | Per CompanyDB login |
Same | Per-payload CompanyID |
| Read tax codes | No released public OData API. Must expose I_TaxCode CDS view as custom OData |
Same workaround, or T007A via RFC | T007A/T007S via RFC | TaxGroups |
Via DI API | Custom OData |
| Read payment terms | No released public API (per 2024 SAP Community). Available as string on supplier | Same | T052 via RFC | Via BusinessPartners |
Same | Via BP |
| Change events (CDC) | Enterprise Event Enablement → SAP Event Mesh (sap.s4.beh.businesspartner.v1.BusinessPartner.Changed.v1 confirmed; SupplierInvoice not verified) |
Same, or add-on for on-prem | CREMAS change pointers (BD50/BD52/BD53 + RBDMIDOC) | Via B1if middleware | Same | Not researched in depth |
| Historical journal entries | API_GLACCOUNTLINEITEM_SRV |
Same | BAPI_ACC_GETPOSTINGS, BKPF/BSEG via RFC |
JournalEntries endpoint |
Via DI API | Custom OData |
| Idempotency for posting | None documented; duplicate check via SupplierInvoiceIDByInvcgParty |
Same | Same (SAP duplicate-check config) | None documented; caller enforces | Same | None documented; enforce in staging BO |
| Response mode | Synchronous (OData POST returns doc key) | Same; SOAP variant sync, A2A async exists | BAPI sync; IDoc async with ALEAUD feedback | Synchronous | Synchronous | SOAP sync; A2A async for ManageSupplierInvoiceIn |
| Webhooks / push | Event Mesh subscription (customer-licensed, not free) | Same | None native; PI/PO bridge | B1if scenarios | Same | Not researched |
| Public sandbox for write testing | Read-only on api.sap.com |
Customer tenant or CAL-deployed Fully Activated Appliance | No public trial | SAP PartnerEdge or partner-hosted trial | Same | PartnerEdge tenant only |
| Currency limitations | None found | None found | None found | Multi-currency via BP setup | Same | None found |
| Supported by Maesn | No | No | No | No | No | No |
| Supported by Chift | No | No | No | No | No | No |
| Supported by Celigo | Yes (OData) | Partially (OData if exposed) | Not confirmed | Yes (Service Layer) | Not confirmed | Yes (SOAP / Custom OData / Analytics OData) |
| Supported by Workato | Yes (OData) | Yes (OData; RFC connector) | Yes (RFC + OData if Gateway) | Yes (on-prem agent) | Same | Not confirmed |
| Supported by Boomi | Yes (BAPI/RFC/IDoc/OData) | Same | Yes (certified ECC 750 / HANA 2021) | No first-party connector | Same | Yes (SOAP + Basic) |
SAP's current strategic ERP, built on the HANA in-memory database, positioned as the successor to SAP ECC. Three deployment models that are materially different from an integration perspective:
S/4HANA Cloud, Public Edition. Multi-tenant SaaS, SAP-managed, quarterly upgrades, "fit-to-standard" processes. Limited customization through Key User Extensibility only. Upper mid-market to enterprise greenfield customers. Strategic product under the GROW with SAP programme.
S/4HANA Cloud, Private Edition. Single-tenant hosted on hyperscalers inside a customer VPC. SAP-managed as a service, but functionally a full S/4HANA stack — customer keeps ABAP development, industry add-ons, controlled upgrades. Typical destination for brownfield ECC conversions under RISE with SAP.
S/4HANA on-premise. Customer-managed. Large enterprises and regulated industries. Branded successor to on-prem SAP ECC. All classic integration surfaces available (OData, SOAP, BAPI/RFC, IDoc). SAP's "Any-Premise" branding is retired.
"SAP S/4HANA cloud public edition is a multi-tenant service ... The public edition has limited customization (mostly through extensibility layers) ... features quarterly automatic upgrades and limited customisation." — vendor explainer synthesis (Spinnaker, PIKON, Panaya)
"SAP S/4HANA cloud private edition is a single-tenant solution with services offered on a private and secure network ... provides full access to custom ABAP development, industry-specific modifications, and customer-controlled upgrade schedules." — same
"Mainstream support for SAP ECC ends in 2027, specifically by December 31, 2027 ... extended maintenance is available until 2030 and provides continued support for ECC systems at approximately 9% additional cost." — Kellton / ERPResearch / Computer Weekly
On-premise only. Dominant installed base in DACH mid-market manufacturing. Integration surfaces: BAPIs (BAPI_INCOMINGINVOICE_CREATE, BAPI_ACC_DOCUMENT_POST), IDocs (INVOIC02), RFCs. OData only if SAP Gateway is installed. DACH mid-market AP integrations still frequently target ECC.
"SAP Business One is an enterprise resource planning (ERP) application designed for small and medium-sized enterprises ... More than 83,000 customers and 1.2 million users across more than 170 countries rely on SAP Business One." — Wikipedia / SAP
"The DACH region (Germany, Austria, and Switzerland) represents a significant market for SAP Business One." — vendor material
Two distinct database variants with very different API stories:
Strategic; SAP directs new small-business customers here after the ByDesign delisting. Typically 10–250 users. Sold through partners.
"SAP Business ByDesign will be delisted from the SAP pricelist for new customers starting April 20, 2026 ... SAP has confirmed there is no planned end date for maintenance. Existing contracts will be honoured, but SAP is no longer selling new ByDesign licenses." — ERP Research / Walldorf Consulting
"The company is directing new customers toward SAP S/4HANA Cloud and SAP Business One." — same
Multi-tenant SaaS, upper-SMB / mid-market. Commercially wound down; maintenance mode. Finite-lifetime integration target for Orcha.
"SAP Ariba uses cXML (Commerce XML) as its messaging standard ... Invoices can be received from suppliers via Ariba network through InvoiceDetailRequest cXML message type. Supplier invoices received from suppliers via Ariba Network show up as draft invoices in the Supplier Invoices List app and can then be converted into complete supplier invoices." — SAP Help
Not an ERP — SAP's cloud procurement / supplier network. Sits in front of the ERP. In Ariba-enabled shops, a structured channel already exists for supplier-submitted e-invoices. Orcha is relevant for invoices arriving outside the Ariba Network (non-enrolled suppliers sending PDFs). Not itself an integration target for invoice posting.
A large share of active SAP AP integrations in DACH still hit ECC on-premise and Business One. S/4HANA is growing fast (the 2027 deadline drives brownfield conversions) but greenfield Public-Edition deployments are still the minority in the mid-market. Business One is disproportionately common in DACH SME.
Confidence: High for product descriptions and deprecation timelines (multiple sources).
Investigated early because middleware coverage changes the integration approach for everything downstream.
"[Supported systems:] DATEV Unternehmen Online, DATEV Rechnungswesen, Exact Online, Fortnox, Sage Active, Odoo, Xero, sevdesk, QuickBooks, Lexware Office, Xentral, bexio, Twinfield, Weclapp, BuchhaltungsButler, Visma e-conomic, FreshBooks, FreeAgent, Microsoft Dynamics 365 Business Central, Moneybird, Pennylane, SnelStart, Qonto, Holded by Visma, Sage Accounting, Visma eAccounting, Abacus." — maesn.com/integrations
Finding: Maesn does not list any SAP product in its supported connectors as of this research. The catalog is European accounting/ERP systems (DACH + Benelux + Nordics) anchored by DATEV and Business Central. Confidence: High — the full list is enumerated.
"[Connectors list (43):] ACD, AFAS Software, Cegid Loop, Cegid Quadra, Datev, Dynamics 365 Business Central, e-Boekhouden, eAccounting, Exact Online, Fiken, Fulll, Holded, Horus, Inqom, Lexoffice, Minox, Moneybird, MyUnisoft, Netsuite, Octopus, Odoo, Pennylane, QuickBooks Accounting, Reviso, Sage 50 FR, Sage 100 FR, Sage BOB 50, Sage Generation Expert, Sage Intacct, SnelStart, Tiime, Tripletex, Twinfield, Yuki, Winbooks, Xero, and sevdesk." — docs.chift.eu/unified-apis/accounting/connectors
Finding: No SAP product in Chift's catalog. Confidence: High.
"Integrate SAP with supplier portals, procurement platforms, and financial systems to automate the procurement process, including purchase orders, supplier communications, and invoice processing." — celigo.com/integrations/sap
Three separate connector setup articles: S/4HANA Cloud, Business One, Business ByDesign.
"The Celigo SAP S4 HANA connector does not provide prebuilt RFC/BAPI/IDoc connectors ... targets the S/4HANA Cloud HTTP APIs (OData) and comes with prebuilt operations."
"Celigo connects to SAP Business One through the Service Layer (REST/OData over HTTPS). The SAP Business One connector does not use DI API or DI Server."
"You can use the SAP Business ByDesign connector to create SOAP, Custom OData, or Analytics OData connections."
Coverage: S/4HANA Cloud (OData), Business One (Service Layer, HANA only implied), ByDesign (SOAP/OData). No confirmed ECC on-prem coverage via Celigo. Customer-side licenses required (Communication Arrangement for S/4, Service Layer exposure for B1). Confidence: High for product coverage; Medium for AP operation depth.
"You can use the SAP OData connector to connect to on-premise SAP, SAP S/4HANA Cloud Private Edition, and SAP S/4HANA Cloud Public Edition, allowing you to work with hundreds of OData APIs out-of-the-box, enabling interaction with data sources that include purchase orders, requisitions, invoices, and products." — docs.workato.com/connectors/sap-odata.html
Additionally: SAP-certified RFC connector (for ECC / on-prem S/4HANA) and a dedicated Business One connector:
"The SAP Business One connector supports connecting through on-prem agents to support deployments behind the company firewall." — docs.workato.com/connectors/sap-business-one.html
Coverage: S/4HANA Public + Private + on-prem (OData), ECC (RFC + OData-if-Gateway), Business One (Service Layer via OPA). ByDesign not confirmed. Customer-side setup required (Communication Arrangement, OData activation, Service Layer exposure). Confidence: High for connector availability, Medium for out-of-the-box AP richness.
"Extract, transform, and load SAP ECC, SAP S/4HANA, and SAP BW data. Reduce integration time & effort by 40% with unique SAP native integration to the application layer." — boomi.com/solutions/sap
"[Boomi SAP connector methods include] Table Services and Table Service Extract, SAP Events (CDC), Function Modules and BAPIs, IDocs, BW Data Extract." — same
Coverage: S/4HANA (on-prem + cloud via Gateway), ECC 6.0 (certified on 750/HANA 2021), ByDesign (SOAP over Basic). No first-party Business One connector (community-built only). Historically the deepest AP coverage in this set because it calls BAPI/RFC/IDoc directly. Customer-side: requires SAP Java Connector install and SAP user with broad ABAP authorisations. Confidence: High for ECC/S/4; Medium for ByDesign depth.
"SAP Cloud Platform Integration (CPI), now known as SAP Integration Suite, is a cloud-based integration platform-as-a-service (iPaaS)." — vendor / SAP
SAP's first-party iPaaS on SAP BTP. Connects to all SAP products (S/4HANA, ECC, Business One, ByDesign, Ariba, SuccessFactors, Concur). Prebuilt P2P packages (Ariba → S/4, external invoice providers → S/4). Customer must own a BTP subscription. Useful when a customer already licenses it; otherwise adds a SAP-owned cloud hop that Orcha could skip by talking to the ERP directly. Confidence: High.
"SAP Process Integration and SAP Process Orchestration maintenance will be extended in accordance with SAP NetWeaver 7.5, with mainstream maintenance until end of 2027 with option of extended maintenance until end of 2030." — Auritas
Legacy on-premise middleware. Adapter-driven (file, JDBC, JMS, SOAP, EDI, IDoc, RFC). In DACH, many existing AP integrations drop IDocs into ECC via PI/PO. Same 2027 cliff as ECC. Customers actively migrating to Integration Suite. Orcha may encounter PI/PO in the field but should not build new flows on top of it. Confidence: High.
"ERPConnect is the professional solution for .NET developers that require robust ERP interfaces to SAP." — theobald-software.com/en/erpconnect
"ERPConnect Services (ECS Core) allows you to create REST web services" wrapping standard BAPIs. — help.theobald-software.com
.NET-centric, certified for S/4HANA Cloud Private Edition 2023. Uses JCo underneath. Exposes BAPI/IDoc as REST. Deployed on customer premise. Plausible for customers already using it.
Communication Management — the core concept. No APIs are exposed by default. Three artefacts must exist in the tenant, set up by the customer's SAP admin:
Relevant scenarios for AP:
SAP_COM_0057 — Supplier Invoice Integration. Exposes API_SUPPLIERINVOICE_PROCESS_SRV plus SOAP A2X SUPPLIERINVOICES4REQUEST_IN.SAP_COM_0008 — Business Partner / Supplier / Customer Integration. Exposes API_BUSINESS_PARTNER.SAP_COM_0105 — Attachments (reported across community sources; specific scenario number not re-verified in a primary source this run)."OAuth 2.0 Client Credentials — for outbound connections only; OAuth 2.0 SAML Bearer Assertion — for inbound connections and principal propagation." — SAP-docs/btp-cloud-platform
Supported auth flows:
Public Edition constraint flagged: one SAP Community thread reports "the authentication method for communication scenarios is strictly limited to client credentials via HTTP Authorization Header (authentication_method = 1). The system does not support using form fields (authentication_method = 2)." Confidence: Medium (single source). Default to Authorization header.
Sandbox. api.sap.com sandbox is live, protected by an apikey header any SAP ID user can generate. Critical: it allows only read operations. "The SAP S/4HANA Cloud sandbox system for API Business Hub can only be used for testing purposes and not for productive application development or use cases, and allows only read operations with write operations not allowed against the sandbox system." For supplier invoice POST validation, a customer tenant or a PartnerEdge test system is required.
Rate limits. No published hard rate limits per OData service in productive tenants. Sandbox has apikey-level throttling, numbers not published. Confidence: Low (absence of evidence).
Auth methods available to external callers:
| Method | Transport | Typical use |
|---|---|---|
| Basic auth (user + password) | HTTP/HTTPS & RFC (JCo) | Default |
| SAP Logon Ticket (MYSAPSSO2) | HTTP cookie | SSO |
| X.509 client certificates | HTTPS, RFC + SNC | Preferred for production |
| SNC (Secure Network Communication) | RFC | Mutual auth + encryption over RFC |
| Kerberos / SPNEGO | HTTP, RFC + SNC | Windows domains |
| OAuth 2.0 | HTTP (NetWeaver Gateway / ICF ≥ 7.40 SP08) | OData services; not RFC |
SAP Cloud Connector (SCC). SAP's reverse tunnel for reaching on-prem ABAP from BTP / Integration Suite.
"With the 5.25.x/6.17.x release, SAP Cloud Integration provides support of Principal Propagation for the RFC adapter." — blogs.sap.com 2021
"Principal Propagation is supported by receiver adapter types including OData V2, HTTP, IDoc, SOAP (1.x), and XI." — SAP KBA 3657871
Typical connectivity for reaching on-prem ECC from cloud:
Sandbox. The SAP Cloud Appliance Library (CAL) deploys the S/4HANA Fully Activated Appliance to AWS/Azure/GCP in ~2 hours; 30-day license waiver, hosting cost ≈ USD 30–80/day on an m5.xlarge-class instance. No free ECC 6.0 trial exists. Realistic research happens on customer sandboxes or a CAL-deployed S/4HANA on-prem instance (which preserves the legacy BAPIs/IDocs).
Service Layer auth is session-based:
POST https://<host>:50000/b1s/v2/Login
{
"CompanyDB": "DemoDB",
"UserName": "manager",
"Password": "1234abce!"
}
Response sets SessionId and ROUTEID cookies. Sessions last 30 minutes idle by default. ROUTEID pins the session to one Service Layer node in a cluster — must be preserved across requests. Logout via GET /b1s/v2/Logout returning 204.
Key integration nuance: one Service Layer instance can front multiple company databases (CompanyDB selects which). Customers with multiple legal entities will have multiple values.
"SAP Business ByDesign OData services support two authentication protocols: Basic Authentication (user/password) and OAuth 2.0 SAML Bearer authentication." — SAP Community
Customer sets up a Communication Arrangement in the tenant (work center "Application and User Management" → "Communication Arrangements"), chooses authentication (Basic / SSL Client Certificate / OAuth SAML Bearer), and ByD provisions a technical Communication User whose credentials Orcha uses. Services not explicitly assigned to the arrangement return 401.
For AP posting: technical user with Basic Auth over HTTPS is the standard path. OAuth SAML Bearer is only relevant for user-context principal propagation from SAP BTP.
API_SUPPLIERINVOICE_PROCESS_SRVOData v2, service technical name API_SUPPLIERINVOICE_PROCESS_SRV. No OData v4 replacement at time of research.
Tenant endpoint pattern: https://<tenant-host>/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV/A_SupplierInvoice.
A SOAP A2X variant (SUPPLIERINVOICES4REQUEST_IN) ships in the same SAP_COM_0057 scenario. Some docs note it "does not support mixed invoices containing both debit and credit items." For new integrations, OData is the right default.
Entity model (confirmed via SAP Cloud SDK javadoc):
| Entity | Purpose |
|---|---|
A_SupplierInvoice |
Header, key (SupplierInvoice, FiscalYear) |
A_SupplierInvoiceItemGLAcct |
Non-PO G/L item |
A_SuplrInvcItemPurOrdRef |
PO-reference item |
A_SupplierInvoiceTax |
Header-level tax lines |
A_SuplrInvcHeaderWhldgTax |
Withholding tax at header |
Item shell for a header must sum to InvoiceGrossAmount minus tax, via one or more of: to_SupplierInvoiceItemGLAcct, to_SuplrInvcItemPurOrdRef, to_SuplrInvcItemAsset, plus to_SupplierInvoiceTax when TaxIsCalculatedAutomatically = false.
Commonly required header fields (this is "commonly required in practice", not a certified SAP list — validate against live $metadata):
| Field | Type | Notes |
|---|---|---|
CompanyCode |
4-char | Required |
DocumentDate |
Edm.DateTime | Vendor invoice date |
PostingDate |
Edm.DateTime | FI posting date |
InvoicingParty |
10-char | Supplier BP number |
SupplierInvoiceIDByInvcgParty |
≤16 | Vendor's invoice number — duplicate-check key |
DocumentCurrency |
5-char ISO | Required |
InvoiceGrossAmount |
Edm.Decimal | Header total incl. tax |
DocumentType |
2-char | e.g. RE invoice, KR credit memo |
BusinessPlace |
Optional | Required in BR, IN, PH |
TaxIsCalculatedAutomatically |
Boolean | Changes required fields |
Park vs Post. POST /A_SupplierInvoice with valid data creates a posted invoice by default. Parking is a variant of Create; the API title is "Supplier Invoice - Create, Read, Release, Reverse". Parking header-only is error-prone (SAP KBA 3095839). Function imports:
Release(fiscalYear, supplierInvoice, discountDaysHaveToBeShifted) — parked → posted.Cancel(supplierInvoice, fiscalYear, reversalReason, postingDate) — reverse posted invoice.Tax and multi-currency. Tax codes on A_SupplierInvoiceTax or on items (TaxCode, 2-char, FTXP-resolved). TaxIsCalculatedAutomatically=true triggers server calculation. Multi-currency: header DocumentCurrency + ExchangeRate / DirectQuotedExchangeRate (else pulled from TCURR at posting date). Withholding tax on A_SuplrInvcHeaderWhldgTax at header level; per-item WHT not exposed on the public API (Confidence: Medium).
Attachments — separate API. Use API_CV_ATTACHMENT_SRV:
SupplierInvoice + FiscalYear.GET the attachment service with x-csrf-token: fetch to get a CSRF token + session cookie.POST /sap/opu/odata/sap/API_CV_ATTACHMENT_SRV/AttachmentContentSet with:
x-csrf-token: <token>BusinessObjectTypeName: BUS2081 (supplier invoice)LinkedSAPObjectKey: <invoice-key> — format not fully verified (some examples use just the 10-digit invoice number, others concatenate SupplierInvoice and FiscalYear — test both)Slug: <filename.pdf>Content-Type: application/pdfKnown pitfall: sending through the SAP Cloud Integration OData adapter JSON-wraps the content and corrupts the PDF; use the HTTP adapter or a direct HTTP client.
Custom/extension fields. Public Edition supports Key User Extensibility via extensible CDS views (e.g., I_SupplierInvoiceAPI01). Custom fields flow into released OData $metadata. Private Edition additionally supports ABAP Cloud on-stack extensions.
BAPI_INCOMINGINVOICE_CREATE (synchronous, RFC-callable)
"BAPI_INCOMINGINVOICE_CREATE ... has the same functionality as transaction MIRO." — multiple SAP Community sources
| Parameter | Kind | Purpose |
|---|---|---|
HEADERDATA |
Import struct | Company code, dates, currency, vendor, gross, INVOIC_IND (X=invoice, blank=credit memo), reference, doc type |
ADDRESSDATA |
Import struct | One-time vendor / alternative payee |
ITEMDATA |
Table | PO-referenced items |
ACCOUNTINGDATA |
Table | Account assignment splits (CC, WBS) |
GLACCOUNTDATA |
Table | Direct G/L (non-PO) |
MATERIALDATA, TAXDATA, WITHTAXDATA, VENDORITEMSPLITDATA |
Tables | Each per name |
EXTENSIONIN / EXTENSIONOUT |
Table | Customer/CI_ include fields (SAP KBA 2149315) |
RETURN |
Export table | Messages |
INVOICEDOCNUMBER, FISCALYEAR |
Export | Posted document key |
"When passing on the header data, the INVOIC_IND field is used to determine whether the system posts a credit memo or an invoice. If an X is entered, the system posts an invoice." — sapmm.wordpress.com
Commit required: call BAPI_TRANSACTION_COMMIT after — the BAPI does not commit internally.
BAPI_INCOMINGINVOICE_PARK caveat: "requires a PO reference as part of its validation and does not work for parking invoices without referring to a PO." For non-PO parking, use BAPI_ACC_INVOICE_RECEIPT_POST (FI side) or custom BTE/BAdI.
How external systems call BAPIs:
pyrfc (Python bindings over NW RFC SDK)JCo is SAP proprietary; redistribution is forbidden. Bundling products link to SAP download; customer accepts license.
IDoc INVOIC02 (basic type for inbound AP)
Inbound handler: IDOC_INPUT_INVOIC_MRM (MM logistics invoice verification, triggers MIRO). Also IDOC_INPUT_INVOIC_FI for FI-only variant.
Key segments:
| Segment | Purpose |
|---|---|
E1EDK01 |
Header general data (currency, exchange rate, totals) |
E1EDKA1 |
Header partner (supplier PARVW=LI) |
E1EDK03 |
Header dates (doc date, posting date, baseline) |
E1EDK04 |
Header tax (codes, jurisdiction) |
E1EDK14 |
Org data (company code, purch. org.) |
E1EDKT1 / E1EDKT2 |
Header text IDs / lines |
E1EDP01 |
Line-item general data |
E1EDP02 |
Item reference (PO, delivery note, supplier doc) |
E1EDP04 |
Item tax |
E1EDP19 |
Item object ID (material number) |
E1EDS01 |
Summary/totals |
Transmission options: ALE/tRFC (partner profile WE20 → SM59 RFC destination), file port, HTTP port (ICF /sap/bc/idoc_xml), PI/PO IDoc adapter.
SOAP Enterprise Services. The Enterprise Services Bundle for ERP includes SupplierInvoiceERPCreateRequestConfirmation_In, SupplierInvoiceERPCancelRequestConfirmation_In, and SupplierInvoiceERPByIDQueryResponse_In. Confidence: Medium — primary docs are on help.sap.com (JS-rendered) and could not be re-verified this run. Validate per customer via SOAMANAGER.
Attachments on ECC — ArchiveLink, not GOS.
"ArchiveLink is a service that links archived documents (usually stored on an external content server) to SAP business objects, typically used for high-volume scenarios like incoming PDF invoices that are scanned and automatically attached to accounting documents." — SAP Integration Hub / SAP Community
Pattern for Orcha:
BELNR + GJAHR.ARCHIV_CREATE_HTTP uploads PDF bytes to customer's Content Server → returns ARC_DOC_ID.ARCHIV_CONNECTION_INSERT links ARC_DOC_ID to SAP object BKPF-BUKRS+BELNR+GJAHR, object type BKPF, document type (e.g., FIIINVOICE).Customer-specific: many DACH customers use Kofax or OpenText VIM (Vendor Invoice Management) as the PDF + metadata front door, which handles ArchiveLink plumbing itself. For those customers Orcha may hand off to VIM rather than posting directly.
PurchaseInvoices (Service Layer)Minimal POST body:
POST /b1s/v2/PurchaseInvoices
{
"CardCode": "c001",
"DocumentLines": [
{ "ItemCode": "i001", "Quantity": "100", "TaxCode": "T1", "UnitPrice": "50" }
]
}
Key fields:
CardCode — vendor BP code (required)DocDate, DocDueDate, TaxDateDocumentLines[]: ItemCode (item-based) or AccountCode (service-type, direct GL posting); Quantity, UnitPrice, LineTotal; TaxCode; CostingCode…CostingCode5; BaseEntry + BaseType=22 (PO) + BaseLine for PO-matchedDocType: dDocument_Items vs dDocument_Service — hard split at header levelAttachmentEntry — FK into Attachments2DI API equivalent on SQL Server deployments: COM oPurchaseInvoices with same object model.
Attachments — Attachments2.
"The Attachment2 entity supports file types: .pdf, .doc, .docx, .jpg, .jpeg, .png, .txt, .xls, .ppt. It can handle an attachment size up to 50 MB."
Upload flow: POST /b1s/v2/Attachments2 (multipart) → response AbsoluteEntry → set on invoice's AttachmentEntry.
Operational concern: B1 stores attachments on a network share configured in General Settings, not in the DB. Remote Service Layer uploads have had path-translation quirks (community reports files needing manual copy to the share). Must validate per customer deployment.
ManageSupplierInvoiceIn (A2X SOAP)Namespace http://sap.com/xi/A1S/Global. Operations: Check_Maintain_Bundle, Maintain_Bundle, Read_SI, Create_SI_With_Reference (PO follow-on).
Mandatory fields:
BusinessTransactionDocumentTypeCode: 004 invoice, 005 credit memo, 539 customs invoice, 817 down payment requestDate, ReceiptDate, TransactionDateGrossAmount (with currencyCode) + DocumentItemGrossAmountIndicator (gross vs net pricing)BuyerParty (PartyTypeCode=200), SellerParty (PartyTypeCode=147), plus BillToParty / BillFromPartyQuantity, QuantityTypeCode, NetAmount/GrossAmount, ProductKeyDataEntryProcessingStatusCode: 2 draft, 3 postedOData alternative exists as a staging BO pattern:
"Creates supplier invoicing staging object ... Updates supplier invoicing staging object with BLOB ... Processes supplier invoice staging object using XSLT transformation to create relevant supplier invoice." — SAP-samples/byd-api-samples Postman collection
Staging is attractive because it bundles attachment + invoice in fewer round-trips, but requires the staging BO to be active in the tenant.
Attachments on ManageSupplierInvoiceIn do not sit on the invoice payload directly; post to the Document BO separately and link via the invoice's UUID. Additional round-trip. The OData staging path attaches inline via BLOB update.
Recommended default: ManageSupplierInvoiceIn A2X SOAP. OData staging where available.
S/4HANA (all editions): API_BUSINESS_PARTNER (OData v2, scenario SAP_COM_0008).
Entity tree: A_BusinessPartner root, navigations to A_BusinessPartnerAddress, A_BusinessPartnerBank, A_BusinessPartnerTaxNumber, A_BusinessPartnerRole, A_Supplier, A_SupplierCompany (company-code-specific data), A_Customer.
Confirmed field samples (Cloud SDK javadoc):
| Entity | Field | Notes |
|---|---|---|
A_BusinessPartner |
BusinessPartner (10) |
Primary key |
A_BusinessPartner |
BusinessPartnerCategory (1) |
1=Person, 2=Organization, 3=Group |
A_BusinessPartner |
OrganizationBPName1 |
Org name |
A_BusinessPartnerBank |
BankIdentification (4), BankControlKey (2), BankAccount (18), IBAN (34), SWIFTCode |
— |
A_SupplierCompany |
PaymentTerms (4), ReconciliationAccount (10), PaymentMethodsList (10) |
Nullable fields |
Base path /sap/opu/odata/sap/API_BUSINESS_PARTNER/, metadata at $metadata.
ECC: BAPIs + tables.
Primary tables:
BAPIs: BAPI_VENDOR_GETDETAIL, BAPI_VENDOR_FIND, BAPI_VENDOR_CREATE, BAPI_VENDOR_EDIT. RFC_READ_TABLE for generic table reads.
RFC_READ_TABLE has a 512-byte total column width limit. Reading LFA1 in one call typically exceeds it; customers commonly deploy a custom Z-RFC (e.g., Z_RFC_READ_TABLE) to circumvent. Theobald, CData, and UiPath-SAP ship their own.
IDoc path: message type CREMAS (vendor master). Segments E1LFA1M, E1LFB1M, E1LFBKM, E1LFM1M, E1WYT3M. Reduced message types via BD53; change-pointer fields via BD52; generation via MASTER_IDOC_CREMAS_SMD / program RBDMIDOC.
S/4HANA: API_GLACCOUNTINCHARTOFACCOUNTS_SRV. Entity A_GLAccountInChartOfAccounts, composite key (ChartOfAccounts, GLAccount). GLAccountType values: X balance sheet, N non-op P&L, P primary cost P&L, S secondary cost. Full field list not verified — pull $metadata. Exposed via SAP_COM_0087 (SAP Business Objects Cloud Planning Integration) per Cloud SDK docs. Related: API_GLACCOUNTLINEITEM_SRV for transactional line items.
ECC: tables SKA1 (chart-level), SKB1 (company code), SKAT (texts). BAPIs BAPI_GL_ACC_GETLIST, BAPI_GL_ACC_GETDETAIL.
S/4HANA: API_COSTCENTER_SRV. Keys (ControllingArea, CostCenter, ValidityEndDate) (time-dependent). Confirmed fields: ValidityStartDate, CompanyCode, BusinessArea, CostCenterCategory, Department, FunctionalArea, ProfitCenter, plus posting-block booleans and audit fields.
ECC: table CSKS (keyed KOKRS + KOSTL + DATBI), CSKT (texts). BAPIs BAPI_COSTCENTER_GETLIST, BAPI_COSTCENTER_GETDETAIL1.
S/4HANA: API_COMPANYCODE_SRV. Read-only. Fields: CompanyCode (4), CompanyCodeName, City, Country, Currency, ChartOfAccounts, FiscalYearVariant, Company, CreditControlArea.
ECC: table T001; no single canonical BAPI. Typically RFC_READ_TABLE or SQ01 extract.
"Table 'Tax Code Names' (T007S), the recommended CDS Views are: I_TaxCode, I_TaxCodeText and I_TaxCodeValueHelp." — SAP Community (S/4HANA Public Cloud)
"The I_TaxCode CDS view is available as a data source that can be added to custom CDS views in SAP S/4HANA Cloud ... These APIs are always read-only."
Practical options:
I_TaxCode via a Custom CDS View (External API scenario). Customer-side config.Rates live in the condition technique (KONP/KONH) keyed by country, jurisdiction, tax code. Messy to read externally. SAP's recommendation: post with tax code and let the system calculate.
"The CDS View for your scenario are I_PaymentTerms & I_PaymentTermsConditions which are not yet released." — SAP Community, 2024
No released public OData API. On ECC / on-prem: tables T052 (terms), T052U (texts), T052S (installments). Workaround: the PaymentTerms key appears as a string attribute on A_SupplierCompany so callers can see which terms are in use, even without the full catalog.
BusinessPartners — CardType=cSupplier for vendorsChartOfAccounts — segmented Code string like _SYS00000000123CostingCodes + DistributionRules (multi-dimension allocation)TaxGroupsManageSupplierIn; OData custom service khbusinesspartnerkhcostcentre custom OData sampleCompanyIDS/4HANA Cloud — Enterprise Event Enablement + SAP Event Mesh.
"The topic name of the outbound event is: sap/s4/beh/businesspartner/v1/BusinessPartner/Changed/v1." — SAP Community
Topic pattern: sap.s4.beh.<object>.v1.<ObjectName>.<Created|Changed|Deleted>.v1 (dotted on S/4, forward-slash variant on Event Mesh). BusinessPartner.Created, BusinessPartner.Changed, BusinessPartner.Deleted confirmed.
"Standard S/4HANA events cover approximately 40% of typical business processes ... 60% of their integrations had no corresponding standard events." — Khomyk, Medium
SupplierInvoice events: existence not verified against api.sap.com (catalog requires JavaScript). Naming convention predicts sap.s4.beh.supplierinvoice.v1.SupplierInvoice.Created.v1 — verify against Business Accelerator Hub before committing.
Events carry IDs, not full records — consumer must call API_BUSINESS_PARTNER etc. to hydrate.
ECC / on-prem: change pointers. BD50 activates per message type, BD52 per field, BD53 reduces segments per receiver; RBDMIDOC scheduled to process. Near-real-time push to systems registered in ALE distribution model.
SAP Master Data Integration (MDI) — BTP-based hub. Customers with MDI across multiple SAP systems may prefer subscribing there rather than per-tenant. Primarily SOAP today, moving toward REST/OData.
SAP Master Data Governance (MDG) — governance/workflow layer; exposes its own services for approved golden records. Customers with MDG-centric master data typically prefer integration at MDG level.
Less-researched area this round; headline findings:
API_GLACCOUNTLINEITEM_SRV exposes posted line items via OData.BAPI_ACC_GETPOSTINGS, tables BKPF (header) and BSEG (items) via RFC. Open items specifically via BSIK (open AP) and BSAK (cleared AP). Note: BSEG is cluster in ECC, not directly accessible via RFC_READ_TABLE — use BAPI or CDS views via Gateway.JournalEntries endpoint on Service Layer / oJournalEntries in DI API.Confidence: Medium — each deserves dedicated deep research if Orcha needs to read historical bookings as a feature.
OData POST A_SupplierInvoice is synchronous. Success: HTTP 201, Location header, response body with SupplierInvoice + FiscalYear.
Error envelope (OData v2):
{
"error": {
"code": "M8476",
"message": { "lang": "en", "value": "Item 00001: ..." },
"innererror": { "errordetails": [{ "code": "...", "message": "...", "severity": "error" }] }
}
}
Typical status codes: 400 validation, 403 missing scope/role, 404 referenced PO/supplier not found, 500 gateway exception, 503/429 throttling (not formally documented).
Idempotency — not built in. No idempotency header. Duplicate protection relies on SAP's native duplicate check (CompanyCode, InvoicingParty, DocumentCurrency, SupplierInvoiceIDByInvcgParty, optionally DocumentDate).
Implication: Orcha must build its own idempotency (local hash → (SupplierInvoice, FiscalYear) mapping) because a 500 could mean "posted but response lost." Always populate SupplierInvoiceIDByInvcgParty with the extracted vendor invoice number.
BAPI path — synchronous. RETURN table with TYPE=S/W/E/A/I plus INVOICEDOCNUMBER + FISCALYEAR.
IDoc path — async with ALEAUD.
Outbound IDoc statuses: 03 passed to port, 12 dispatched, 16 functional ack positive, 17 functional ack negative, 41 application doc posted in receiver. Inbound: 51 error, 52 partial, 53 posted OK, 64 ready, 68 no further processing. Transactions: WE02 (list), WE05 (monitor), BD87 (manual reprocess), SLG1 (app log).
"ALEAUD is a standard message type ... the status of the IDoc should have been changed to 41 (Final Status of any Outbound IDoc) as the IDoc has been posted successfully in the target system." — SAP Wiki
Expect 15-minute to hourly lag for ALEAUD feedback depending on RBDSTATE job schedule. This is the only standard async posted/failed feedback path for INVOIC02 — factor into Orcha's UX.
Synchronous; Service Layer returns the created entity body with DocEntry + DocNum. Error body is JSON with error code + message.
ManageSupplierInvoiceIn is a synchronous A2X service (per SAP's help.sap.com page title). An async A2A variant exists for inter-SAP flows, callback-based.
A_SupplierInvoice?$filter=CreationDate ge … before adopting.| Question | Why It Matters | What Was Tried | Next Step |
|---|---|---|---|
Does sap.s4.beh.supplierinvoice.v1.SupplierInvoice.Created.v1 exist as a published Event Mesh topic? |
Determines whether Orcha can subscribe to invoice-lifecycle events versus polling | Searched community and help pages; couldn't verify against api.sap.com SAPS4HANABusinessEvents catalog (JS-rendered) |
Log into Business Accelerator Hub with an SAP ID and inspect the live event catalog, or query an active S/4 Cloud tenant's Event Enablement config |
Exact LinkedSAPObjectKey format for attachments on supplier invoice |
Gets PDF linked to the correct invoice the first time | Community examples are inconsistent | Test both <SupplierInvoice> (10 digits) and <SupplierInvoice><FiscalYear> against a customer-provided tenant |
Is authentication_method = 2 (form-field client secret) really forbidden in Public Edition? |
Affects every Orcha OAuth client configuration | Single SAP Community thread flags it; SAP docs silent | Default to Authorization header and test form-field against a sandbox tenant during first customer onboarding |
Whether BAPI_VENDOR_GETDETAIL is deprecated in S/4HANA on-prem 2023+ releases |
Chooses master-data read path for customers on recent on-prem | SAP notes imply newer function modules; not confirmed | Read SAP Note search in a customer support portal, or test live on CAL-deployed S/4HANA FAA |
Is I_PaymentTerms CDS view released as a standard API in 2026 releases? |
Would remove the need for custom CDS view per tenant | Latest community signal (2024) says "not yet released" | Check api.sap.com for API_PAYMENTTERMS* publications, or on-tenant check in Custom CDS View app |
| Does Boomi or any other iPaaS provide a first-party Business One connector? | Would reduce Orcha's direct implementation for B1 | Celigo, Workato confirmed; Boomi confirmed absent; others not exhausted | Check MuleSoft, Tray.io, n8n, Make.com connector libraries |
| Are attachments via Service Layer multipart actually reliable on partner-hosted B1 Cloud? | Network-share caveat is a known source of field problems | Community reports mixed; official docs claim it works | Schedule a partner-hosted B1 demo tenant test with a real PDF upload on Service Layer /b1s/v2/Attachments2 |
| Does SAP Business One have an official sandbox for Service Layer via SAP PartnerEdge? | Dev-time validation for B1 integration | Multiple partner-hosted trials exist; SAP's own self-service trial not found | Apply to SAP PartnerEdge or contact an SAP partner (e.g., Ingold, Cloudiax) for a time-boxed Service Layer tenant |
S/4HANA Cloud public sandbox is read-only; Business One and ByDesign require partner/customer tenants. Realistic hands-on plan:
apikey on Business Accelerator Hub.API_SUPPLIERINVOICE_PROCESS_SRV: GET /$metadata, GET /A_SupplierInvoice?$top=10&$expand=to_SupplierInvoiceItemGLAcct,to_SuplrInvcItemPurOrdRef,to_SupplierInvoiceTax to inspect real entity shapes and field nullabilities.API_BUSINESS_PARTNER, API_COSTCENTER_SRV, API_GLACCOUNTINCHARTOFACCOUNTS_SRV, API_COMPANYCODE_SRV: pull $metadata and sample payloads.SAPS4HANABusinessEvents catalog for supplier-invoice event topics.SAP_COM_0057 (Supplier Invoice) with a test Communication User.API_CV_ATTACHMENT_SRV with BusinessObjectTypeName=BUS2081. Test both LinkedSAPObjectKey formats.Release function import on a parked invoice; Cancel on a posted one./b1s/v2/Login, preserve SessionId + ROUTEID cookies.PurchaseInvoices (service-type line with AccountCode) and an item-type with ItemCode + BaseEntry referencing an existing PO.Attachments2 multipart upload and link via AttachmentEntry.BAPI_INCOMINGINVOICE_CREATE via JCo.API_SUPPLIERINVOICE_PROCESS_SRV — none found. V2 remains current.help.sap.com / api.sap.com raw HTTP fetch — both are JavaScript-rendered. Plain HTTP fetch returns empty bodies. For verification, a browser with an SAP ID session is required.No claims retracted during self-audit. Several fields and behaviours are explicitly marked as Medium or Low confidence or "not verified" rather than retracted — these are signals to validate against a live tenant before building on them, not removed from the report.
The most important are:
LinkedSAPObjectKey format for attachmentsauthentication_method=2 is forbidden in Public Edition$metadata for API_COMPANYCODE_SRV, API_COSTCENTER_SRV, API_GLACCOUNTINCHARTOFACCOUNTS_SRV — pull from a live tenant or the official EDMX before codifying field lists