SAP S/4HANA Cloud – Gotchas
SAP S/4HANA Cloud is SAP's intelligent cloud ERP suite covering finance, procurement, sales, and more, exposed via OData v2/v4 APIs through the SAP API Business Hub.
12 gotchas across 7 resources
These are connector-specific behaviors and limitations to be aware of when integrating.
Bill Payments1 gotcha
billPaymentsAddSAP S/4HANA Cloud creates a pure FI accounting document. This is a standalone outgoing payment posting, not a triggered run of the Automatic Payment Program (F110). company_id, supplier.id and account.id are required.
Bills2 gotchas
billsAddSAP S/4HANA Cloud creates supplier invoices via the API_SUPPLIERINVOICE_PROCESS_SRV OData service. A CSRF token handshake is performed automatically before each create request.
Line items are routed to one of two SAP navigation properties based on whether a purchase order reference is present:
- Lines with
line_items[].purchase_order.idset go into the PO-based property (to_SuplrInvcItemPurOrdRef). Optionally provideline_items[].purchase_order.line_numberfor the SAPPurchaseOrderItem. - Lines without a purchase order reference go into the GL-account property (
to_SupplierInvoiceItemGLAcct);line_items[].ledger_account.id(or.code) is required on these lines. A non-PO line with no ledger account causes a 400 error.
Required fields on create: company_id, bill_date, supplier.id, currency, total, and line_items. PostingDate defaults to bill_date; override it via pass_through[posting_date].
line_items[].tax_rate.code maps to the SAP TaxCode (e.g. V1). SAP S/4HANA Cloud does not expose readable tax-rate master data, so the SAP tax code string must be supplied directly.
billsDeleteCancellation is supported and reverses the posted supplier invoice. By default, reversal reason 01 is used and the posting date is set to today (UTC). Override via pass_through is supported.
Customers3 gotchas
customersAddSAP S/4HANA Cloud requires CorrespondenceLanguage and BusinessPartnerGrouping when creating a Business Partner. These default to EN and BP01 respectively, and can be overridden per request via pass_through.
Address with country is required. SAP creates a customer master record (KNA1) when the FLCU00
role is assigned, and KNA1 requires LAND1 (country). Therefore addresses[0] MUST be provided with
at least a country value (e.g. US, DE). Without it, SAP returns
400 Country/Region Key (KNA1-LAND1) is a required entry field. The connector emits the address as
to_BusinessPartnerAddress.results[0] in the deep insert; line1/line2/city/state/postal_code/country
map to SAP StreetName/HouseNumber/CityName/Region/PostalCode/Country.
External vs internal number assignment. Some tenants configure BP groupings for external
number assignment, meaning the caller must supply the BusinessPartner ID rather than SAP
auto-generating it. Symptom: 400 Grouping <code> has external number assignment. Please enter a valid number. Supply via pass_through[business_partner]=99980001 (8–10 digit numeric ID,
unique on the tenant). If the chosen grouping is configured for internal assignment, omit
pass_through[business_partner] and SAP will auto-generate the ID.
customersUpdateOnly top-level Business Partner fields are updatable: first_name, last_name, company_name,
display_name, status (maps to BusinessPartnerIsBlocked).
Nested-field updates are hard-rejected with a 400. SAP OData V2 does not support deep update;
the connector returns a clear error if the update payload includes any of addresses,
bank_accounts, emails, phone_numbers, or websites. To change those values, either supply
them on the create operation (deep-insert is POST-only on SAP) or modify the records directly in
SAP. This is a fail-fast guard, chosen over silent drop so consumers don't ship broken update
flows undetected.
customersDeleteSAP Business Partners cannot be physically deleted once used in transactions (SAP KBA 2742388). Delete
performs a soft-delete by setting BusinessPartnerIsBlocked = true; the record remains in SAP and
subsequent reads return status: inactive.
Invoices1 gotcha
invoicesAddSAP S/4HANA Cloud creates a pure FI accounting document. This is not an SD billing document — no pricing conditions, output determination, or billing workflow is triggered. company_id and customer.id are required.
Journal Entries1 gotcha
journalEntriesAddcompany_id is required and maps to SAP CompanyCode. The following header fields are hardcoded with SAP-standard defaults and cannot be overridden: BusinessTransactionType=RFBU, OriginalReferenceDocumentType=BKPFF, AccountingDocumentType=SA.
Payments1 gotcha
paymentsAddSAP S/4HANA Cloud creates a pure FI accounting document. This is an FI payment posting, not a bank statement import or a result of the Automatic Payment Program (F110). company_id, customer.id and account.id are required.
Suppliers3 gotchas
suppliersAddSAP S/4HANA Cloud requires CorrespondenceLanguage and BusinessPartnerGrouping when creating a Business Partner. These default to EN and BP01 respectively, and can be overridden per request via pass_through.
Address with country is required. SAP creates a supplier master record (LFA1) when the FLVN00
role is assigned, and LFA1 requires LAND1 (country). Therefore addresses[0] MUST be provided with
at least a country value (e.g. US, DE). Without it, SAP returns
400 Country/Region Key (LFA1-LAND1) is a required entry field. The connector emits the address as
to_BusinessPartnerAddress.results[0] in the deep insert; line1/line2/city/state/postal_code/country
map to SAP StreetName/HouseNumber/CityName/Region/PostalCode/Country.
External vs internal number assignment. Some tenants configure BP groupings for external
number assignment, meaning the caller must supply the BusinessPartner ID rather than SAP
auto-generating it. Symptom: 400 Grouping <code> has external number assignment. Please enter a valid number. Supply via pass_through[business_partner]=99980001 (8–10 digit numeric ID,
unique on the tenant). If the chosen grouping is configured for internal assignment, omit
pass_through[business_partner] and SAP will auto-generate the ID.
suppliersUpdateOnly top-level Business Partner fields are updatable: first_name, last_name, company_name,
display_name, status (maps to BusinessPartnerIsBlocked).
Nested-field updates are hard-rejected with a 400. SAP OData V2 does not support deep update;
the connector returns a clear error if the update payload includes any of addresses,
bank_accounts, emails, phone_numbers, or websites. To change those values, either supply
them on the create operation (deep-insert is POST-only on SAP) or modify the records directly in
SAP. This is a fail-fast guard, chosen over silent drop so consumers don't ship broken update
flows undetected.
suppliersDeleteSAP Business Partners cannot be physically deleted once used in transactions (SAP KBA 2742388). Delete
performs a soft-delete by setting BusinessPartnerIsBlocked = true; the record remains in SAP and
subsequent reads return status: inactive.