# SAP S4HANA (/integrations/sap_s4hana)





{/* MANUAL-CONTENT-START:intro */}

[SAP S4HANA](https://www.sap.com/products/erp/s4hana.html) exposes business records through OData services. Use this integration to work with master data, sales and purchasing documents, deliveries, invoices, and stock records. Select the deployment mode and authentication method that match your tenant; the setup details below cover Cloud Public Edition, Cloud Private Edition, and on-premise deployments.

{/* MANUAL-CONTENT-END */}

## Use the block [#usage-instructions]

{/* MANUAL-CONTENT-START:usage */}

The block uses OData v2 services. Availability depends on your tenant’s enabled services, communication arrangements, authentication, and network access.

## Deployment modes [#deployment-modes]

Pick the deployment that matches your tenant in the **Deployment** dropdown:

* **S4HANA Cloud Public Edition** — provide your **BTP subaccount subdomain** and **region** (e.g., `eu10`, `us10`). Sim derives the API host as `{subdomain}-api.s4hana.ondemand.com` and the BTP UAA token endpoint from those fields. Use this mode only when both derived endpoints match your tenant’s configuration; a BTP subaccount name alone does not prove the S4HANA API hostname. Confirm the API URL in your Communication Arrangement and provision client credentials for the matching token service.
* **S4HANA Cloud Private Edition (RISE)** — provide your **OData Base URL** (e.g., `https://my-tenant.s4hana.cloud.sap`). Authenticate with **OAuth 2.0 client credentials** (provide the tenant's UAA `tokenUrl`, `clientId`, `clientSecret`) or **HTTP Basic** with a Communication User (`username`, `password`).
* **On-premise S4HANA** — provide your **OData Base URL** (e.g., `https://sap.internal.company.com:44300`). Authenticate with **OAuth 2.0 client credentials** issued by your on-prem identity provider, or **HTTP Basic** with a service user.

## What you can do [#what-you-can-do]

Read and create business partners, customers, suppliers, sales orders, deliveries (inbound/outbound), billing documents, products, stock and material documents, purchase requisitions, purchase orders, and supplier invoices. Update business partners, customers, suppliers, products, sales orders, purchase orders, and purchase requisitions with HTTP `MERGE` (OData v2 partial updates). Run OData v2 queries against services enabled for the connected account. An enabled Communication Scenario does not grant access to unrelated services.

## Optimistic concurrency [#optimistic-concurrency]

All update tools accept an optional `ifMatch` ETag. When omitted, `If-Match` defaults to a wildcard (unconditional). For safe concurrent updates, fetch the entity first, capture its ETag from the response, and pass it as `ifMatch` to detect lost updates.

{/* MANUAL-CONTENT-END */}

Connect SAP S4HANA Cloud Public Edition, Cloud Private Edition, or an on-premise tenant using the deployment and authentication settings for that tenant. Read and manage business records through the listed OData operations.

## Actions [#actions]

### SAP S/4HANA List Business Partners [#sap-s4hana-list-business-partners]

List business partners from SAP S/4HANA Cloud (API\_BUSINESS\_PARTNER, A\_BusinessPartner) with optional OData $filter, $top, $skip, $orderby, $select, $expand.

<ReferenceDetails>
  #### Input [#input]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `filter` | string | No | OData $filter expression (e.g., "BusinessPartnerCategory eq '1'") |
  | `top` | number | No | Maximum results to return ($top) |
  | `skip` | number | No | Number of results to skip ($skip) |
  | `orderBy` | string | No | OData $orderby expression |
  | `select` | string | No | Comma-separated fields to return ($select) |
  | `expand` | string | No | Comma-separated navigation properties to expand ($expand) |

  #### Output [#output]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP |
  | `data` | json | OData v2 envelope `\{ d: \{ results: \[...\], __count?, __next? \} \}`. Properties listed below describe each element of `data.d.results`. |
  | ↳ `BusinessPartner` | string | Business partner key (up to 10 chars) |
  | ↳ `BusinessPartnerFullName` | string | Full name (concatenated first/last or organization name) |
  | ↳ `BusinessPartnerCategory` | string | "1" Person, "2" Organization, "3" Group |
  | ↳ `BusinessPartnerGrouping` | string | Grouping / number range (tenant-configured) |
  | ↳ `BusinessPartnerType` | string | Business partner type (tenant-configured) |
  | ↳ `BusinessPartnerUUID` | string | GUID identifier for the business partner |
  | ↳ `BusinessPartnerIsBlocked` | boolean | Whether the business partner is centrally blocked |
  | ↳ `FirstName` | string | First name (Person) |
  | ↳ `LastName` | string | Last name (Person) |
  | ↳ `OrganizationBPName1` | string | Organization name line 1 |
  | ↳ `SearchTerm1` | string | Search term 1 |
  | ↳ `CreationDate` | string | Date the partner was created (OData /Date(...)/ literal) |
  | ↳ `CreatedByUser` | string | User who created the business partner |
  | ↳ `LastChangeDate` | string | Date of last change (OData /Date(...)/ literal) |
  | ↳ `LastChangedByUser` | string | User who last changed the business partner |
</ReferenceDetails>

### SAP S/4HANA Get Business Partner [#sap-s4hana-get-business-partner]

Retrieve a single business partner by BusinessPartner key from SAP S/4HANA Cloud (API\_BUSINESS\_PARTNER, A\_BusinessPartner).

<ReferenceDetails>
  #### Input [#input-1]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `businessPartner` | string | Yes | BusinessPartner key (string, up to 10 characters) |
  | `select` | string | No | Comma-separated fields to return ($select) |
  | `expand` | string | No | Comma-separated navigation properties to expand ($expand) |

  #### Output [#output-1]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP |
  | `data` | json | A\_BusinessPartner entity (under d in OData v2) |
  | ↳ `BusinessPartner` | string | Business partner key (up to 10 chars) |
  | ↳ `BusinessPartnerFullName` | string | Full name (concatenated first/last or organization name) |
  | ↳ `BusinessPartnerCategory` | string | "1" Person, "2" Organization, "3" Group |
  | ↳ `BusinessPartnerGrouping` | string | Grouping / number range (tenant-configured) |
  | ↳ `BusinessPartnerType` | string | Business partner type (tenant-configured) |
  | ↳ `BusinessPartnerUUID` | string | GUID identifier for the business partner |
  | ↳ `BusinessPartnerIsBlocked` | boolean | Whether the business partner is centrally blocked |
  | ↳ `FirstName` | string | First name (Person) |
  | ↳ `LastName` | string | Last name (Person) |
  | ↳ `OrganizationBPName1` | string | Organization name line 1 |
  | ↳ `CorrespondenceLanguage` | string | Correspondence language (2-char code, e.g. "EN") |
  | ↳ `SearchTerm1` | string | Search term 1 |
  | ↳ `SearchTerm2` | string | Search term 2 |
  | ↳ `CreationDate` | string | Date the partner was created (OData /Date(...)/ literal) |
  | ↳ `CreatedByUser` | string | User who created the business partner |
  | ↳ `LastChangeDate` | string | Date of last change (OData /Date(...)/ literal) |
  | ↳ `LastChangedByUser` | string | User who last changed the business partner |
</ReferenceDetails>

### SAP S/4HANA Create Business Partner [#sap-s4hana-create-business-partner]

Create a business partner in SAP S/4HANA Cloud (API\_BUSINESS\_PARTNER, A\_BusinessPartner). For Person category 1 provide FirstName and LastName. For Organization category 2 provide OrganizationBPName1.

<ReferenceDetails>
  #### Input [#input-2]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `businessPartnerCategory` | string | Yes | BusinessPartnerCategory: "1" Person, "2" Organization, "3" Group |
  | `businessPartnerGrouping` | string | Yes | BusinessPartnerGrouping (number range / role grouping configured in S/4HANA, e.g. "0001") |
  | `firstName` | string | No | FirstName (required for Person) |
  | `lastName` | string | No | LastName (required for Person) |
  | `organizationBPName1` | string | No | OrganizationBPName1 (required for Organization) |
  | `body` | json | No | Optional additional A\_BusinessPartner fields merged into the create payload |

  #### Output [#output-2]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP (201 on success) |
  | `data` | json | Created A\_BusinessPartner entity (under d in OData v2) |
  | ↳ `BusinessPartner` | string | Generated business partner key (up to 10 chars) |
  | ↳ `BusinessPartnerFullName` | string | Full name (concatenated first/last or organization name) |
  | ↳ `BusinessPartnerCategory` | string | "1" Person, "2" Organization, "3" Group |
  | ↳ `BusinessPartnerGrouping` | string | Grouping / number range used to assign the key |
  | ↳ `BusinessPartnerType` | string | Business partner type (tenant-configured) |
  | ↳ `BusinessPartnerUUID` | string | GUID identifier for the business partner |
  | ↳ `FirstName` | string | First name (Person) |
  | ↳ `LastName` | string | Last name (Person) |
  | ↳ `OrganizationBPName1` | string | Organization name line 1 |
  | ↳ `CreationDate` | string | Date the partner was created (OData /Date(...)/ literal) |
  | ↳ `CreatedByUser` | string | User who created the business partner |
  | ↳ `LastChangeDate` | string | Date of last change (OData /Date(...)/ literal) |
</ReferenceDetails>

### SAP S/4HANA Update Business Partner [#sap-s4hana-update-business-partner]

Update fields on an A\_BusinessPartner entity in SAP S/4HANA Cloud (API\_BUSINESS\_PARTNER). Uses HTTP MERGE (OData v2 partial update) — only the fields you provide are written; existing values are preserved. If-Match defaults to a wildcard (unconditional) — for safe concurrent updates pass the ETag from a prior GET to avoid lost updates. Deep updates on nested associations (e.g. to\_BusinessPartnerAddress) are not supported by SAP (KBA 2833338) — use the dedicated child endpoints.

<ReferenceDetails>
  #### Input [#input-3]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `businessPartner` | string | Yes | BusinessPartner key to update (string, up to 10 characters) |
  | `body` | json | Yes | JSON object with A\_BusinessPartner fields to update (e.g., \{"FirstName":"Jane","SearchTerm1":"VIP"}) |
  | `ifMatch` | string | No | If-Match ETag for optimistic concurrency. Defaults to "\*" (unconditional). |

  #### Output [#output-3]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP (204 on success) |
  | `data` | json | Null on 204 success, or updated A\_BusinessPartner entity if SAP returns one |
  | ↳ `BusinessPartner` | string | Business partner key |
  | ↳ `BusinessPartnerFullName` | string | Full name (concatenated first/last or organization name) |
  | ↳ `BusinessPartnerCategory` | string | "1" Person, "2" Organization, "3" Group |
  | ↳ `BusinessPartnerGrouping` | string | Grouping / number range |
  | ↳ `FirstName` | string | First name (Person) |
  | ↳ `LastName` | string | Last name (Person) |
  | ↳ `OrganizationBPName1` | string | Organization name line 1 |
  | ↳ `LastChangeDate` | string | Date of last change (OData /Date(...)/ literal) |
  | ↳ `LastChangedByUser` | string | User who last changed the business partner |
</ReferenceDetails>

### SAP S/4HANA List Customers [#sap-s4hana-list-customers]

List customers from SAP S/4HANA Cloud (API\_BUSINESS\_PARTNER, A\_Customer) with optional OData $filter, $top, $skip, $orderby, $select, $expand.

<ReferenceDetails>
  #### Input [#input-4]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `filter` | string | No | OData $filter expression (e.g., "CustomerAccountGroup eq 'Z001'") |
  | `top` | number | No | Maximum results to return ($top) |
  | `skip` | number | No | Number of results to skip ($skip) |
  | `orderBy` | string | No | OData $orderby expression |
  | `select` | string | No | Comma-separated fields to return ($select) |
  | `expand` | string | No | Comma-separated navigation properties to expand (e.g., "to\_CustomerCompany,to\_CustomerSalesArea") |

  #### Output [#output-4]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP |
  | `data` | json | Array of A\_Customer entities, or `\{ results, __count?, __next? \}` when pagination metadata is present (the integration unwraps the OData v2 `d` envelope). Properties below describe each customer item. |
  | ↳ `Customer` | string | Customer key (up to 10 characters) |
  | ↳ `CustomerName` | string | Name of customer |
  | ↳ `CustomerFullName` | string | Full name of the customer |
  | ↳ `CustomerAccountGroup` | string | Customer account group |
  | ↳ `CustomerClassification` | string | Customer classification code |
  | ↳ `CustomerCorporateGroup` | string | Corporate group code |
  | ↳ `AuthorizationGroup` | string | Authorization group |
  | ↳ `Supplier` | string | Linked supplier account number |
  | ↳ `FiscalAddress` | string | Fiscal address ID |
  | ↳ `Industry` | string | Industry key |
  | ↳ `NielsenRegion` | string | Nielsen ID |
  | ↳ `ResponsibleType` | string | Responsible type |
  | ↳ `NFPartnerIsNaturalPerson` | string | Natural person indicator |
  | ↳ `InternationalLocationNumber1` | string | International location number 1 |
  | ↳ `TaxNumberType` | string | Tax number type |
  | ↳ `VATRegistration` | string | VAT registration number |
  | ↳ `DeletionIndicator` | boolean | Central deletion flag |
  | ↳ `OrderIsBlockedForCustomer` | string | Central order block reason code |
  | ↳ `PostingIsBlocked` | boolean | Central posting block flag |
  | ↳ `DeliveryIsBlocked` | string | Central delivery block reason code |
  | ↳ `BillingIsBlockedForCustomer` | string | Central billing block reason code |
  | ↳ `CreationDate` | string | Creation date (OData v2 epoch) |
  | ↳ `CreatedByUser` | string | User who created the customer |
</ReferenceDetails>

### SAP S/4HANA Get Customer [#sap-s4hana-get-customer]

Retrieve a single customer by Customer key from SAP S/4HANA Cloud (API\_BUSINESS\_PARTNER, A\_Customer).

<ReferenceDetails>
  #### Input [#input-5]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `customer` | string | Yes | Customer key (string, up to 10 characters) |
  | `select` | string | No | Comma-separated fields to return ($select) |
  | `expand` | string | No | Comma-separated navigation properties to expand (e.g., "to\_CustomerCompany,to\_CustomerSalesArea") |

  #### Output [#output-5]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP |
  | `data` | object | A\_Customer entity |
  | ↳ `Customer` | string | Customer key (up to 10 characters) |
  | ↳ `CustomerName` | string | Name of customer |
  | ↳ `CustomerFullName` | string | Full name of the customer |
  | ↳ `CustomerAccountGroup` | string | Customer account group |
  | ↳ `CustomerClassification` | string | Customer classification code |
  | ↳ `CustomerCorporateGroup` | string | Corporate group code |
  | ↳ `AuthorizationGroup` | string | Authorization group |
  | ↳ `Supplier` | string | Linked supplier account number |
  | ↳ `FiscalAddress` | string | Fiscal address ID |
  | ↳ `Industry` | string | Industry key |
  | ↳ `NielsenRegion` | string | Nielsen ID |
  | ↳ `ResponsibleType` | string | Responsible type |
  | ↳ `NFPartnerIsNaturalPerson` | string | Natural person indicator |
  | ↳ `InternationalLocationNumber1` | string | International location number 1 |
  | ↳ `TaxNumberType` | string | Tax number type |
  | ↳ `VATRegistration` | string | VAT registration number |
  | ↳ `DeletionIndicator` | boolean | Central deletion flag |
  | ↳ `OrderIsBlockedForCustomer` | string | Central order block reason code |
  | ↳ `PostingIsBlocked` | boolean | Central posting block flag |
  | ↳ `DeliveryIsBlocked` | string | Central delivery block reason code |
  | ↳ `BillingIsBlockedForCustomer` | string | Central billing block reason code |
  | ↳ `CreationDate` | string | Creation date (OData v2 epoch) |
  | ↳ `CreatedByUser` | string | User who created the customer |
</ReferenceDetails>

### SAP S/4HANA Update Customer [#sap-s4hana-update-customer]

Update fields on an A\_Customer entity in SAP S/4HANA Cloud (API\_BUSINESS\_PARTNER). Uses HTTP MERGE (OData v2 partial update) — only the fields you provide are written; existing values are preserved. A\_Customer is limited to modifiable fields such as OrderIsBlockedForCustomer, DeliveryIsBlocked, BillingIsBlockedForCustomer (Edm.String reason codes like "01"), PostingIsBlocked, and DeletionIndicator (Edm.Boolean). If-Match defaults to a wildcard - for safe concurrent updates pass the ETag from a prior GET to avoid lost updates.

<ReferenceDetails>
  #### Input [#input-6]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `customer` | string | Yes | Customer key to update (string, up to 10 characters) |
  | `body` | json | Yes | JSON object with A\_Customer fields to update (e.g., \{"OrderIsBlockedForCustomer":"01","DeletionIndicator":false}). Block-reason fields are Edm.String codes, not booleans. |
  | `ifMatch` | string | No | If-Match ETag for optimistic concurrency. Defaults to "\*" (unconditional). |

  #### Output [#output-6]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP (204 on success) |
  | `data` | object | Null on 204 success, or updated A\_Customer entity if SAP returns one |
  | ↳ `Customer` | string | Customer key (up to 10 characters) |
  | ↳ `CustomerName` | string | Name of customer |
  | ↳ `CustomerAccountGroup` | string | Customer account group |
  | ↳ `DeletionIndicator` | boolean | Central deletion flag |
  | ↳ `OrderIsBlockedForCustomer` | string | Central order block reason code |
  | ↳ `PostingIsBlocked` | boolean | Central posting block flag |
  | ↳ `DeliveryIsBlocked` | string | Central delivery block reason code |
  | ↳ `BillingIsBlockedForCustomer` | string | Central billing block reason code |
</ReferenceDetails>

### SAP S/4HANA List Suppliers [#sap-s4hana-list-suppliers]

List suppliers from SAP S/4HANA Cloud (API\_BUSINESS\_PARTNER, A\_Supplier) with optional OData $filter, $top, $skip, $orderby, $select, $expand.

<ReferenceDetails>
  #### Input [#input-7]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `filter` | string | No | OData $filter expression (e.g., "SupplierAccountGroup eq 'BP02'") |
  | `top` | number | No | Maximum results to return ($top) |
  | `skip` | number | No | Number of results to skip ($skip) |
  | `orderBy` | string | No | OData $orderby expression |
  | `select` | string | No | Comma-separated fields to return ($select) |
  | `expand` | string | No | Comma-separated navigation properties to expand (e.g., "to\_SupplierCompany,to\_SupplierPurchasingOrg") |

  #### Output [#output-7]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP |
  | `data` | json | OData v2 response envelope; collection at output.data.d.results |
  | ↳ `d` | json | OData v2 envelope |
  | ↳ `results` | array | A\_Supplier entities |
  | ↳ `Supplier` | string | Supplier key (up to 10 characters) |
  | ↳ `AlternativePayeeAccountNumber` | string | Account number of the alternative payee |
  | ↳ `AuthorizationGroup` | string | Authorization group |
  | ↳ `BusinessPartner` | string | Linked BusinessPartner key |
  | ↳ `BR_TaxIsSplit` | boolean | Brazil-specific tax split flag |
  | ↳ `CreatedByUser` | string | User who created the supplier |
  | ↳ `CreationDate` | string | Creation date (OData v2 epoch) |
  | ↳ `Customer` | string | Linked customer key (if any) |
  | ↳ `DeletionIndicator` | boolean | Central deletion flag |
  | ↳ `BirthDate` | string | Date of birth (OData v2 epoch) |
  | ↳ `ConcatenatedInternationalLocNo` | string | Concatenated international location number |
  | ↳ `FiscalAddress` | string | Fiscal address number |
  | ↳ `Industry` | string | Industry key |
  | ↳ `InternationalLocationNumber1` | string | International location number, part 1 |
  | ↳ `InternationalLocationNumber2` | string | International location number, part 2 |
  | ↳ `InternationalLocationNumber3` | string | International location number, part 3 |
  | ↳ `IsNaturalPerson` | boolean | Indicates whether the supplier is a natural person |
  | ↳ `PaymentIsBlockedForSupplier` | boolean | Payment block flag |
  | ↳ `PostingIsBlocked` | boolean | Posting block flag |
  | ↳ `PurchasingIsBlocked` | boolean | Purchasing block flag |
  | ↳ `ResponsibleType` | string | Type of business (Brazil) |
  | ↳ `SupplierAccountGroup` | string | Supplier account group |
  | ↳ `SupplierCorporateGroup` | string | Corporate group identifier |
  | ↳ `SupplierFullName` | string | Full name of the supplier |
  | ↳ `SupplierName` | string | Supplier name |
  | ↳ `SupplierProcurementBlock` | string | Procurement block at supplier level |
  | ↳ `SuplrProofOfDelivRlvtCode` | string | Proof of delivery relevance code |
  | ↳ `SuplrQltyInProcmtCertfnValidTo` | string | Quality certification validity end date (OData v2 epoch) |
  | ↳ `SuplrQualityManagementSystem` | string | Quality management system of the supplier |
  | ↳ `TaxNumber1` | string | Tax number 1 |
  | ↳ `TaxNumber2` | string | Tax number 2 |
  | ↳ `TaxNumber3` | string | Tax number 3 |
  | ↳ `TaxNumber4` | string | Tax number 4 |
  | ↳ `TaxNumber5` | string | Tax number 5 |
  | ↳ `TaxNumberResponsible` | string | Tax number of responsible party |
  | ↳ `TaxNumberType` | string | Tax number type |
  | ↳ `VATRegistration` | string | VAT registration number |
  | ↳ `__next` | string | OData skiptoken URL for next page |
</ReferenceDetails>

### SAP S/4HANA Get Supplier [#sap-s4hana-get-supplier]

Retrieve a single supplier by Supplier key from SAP S/4HANA Cloud (API\_BUSINESS\_PARTNER, A\_Supplier).

<ReferenceDetails>
  #### Input [#input-8]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `supplier` | string | Yes | Supplier key (string, up to 10 characters) |
  | `select` | string | No | Comma-separated fields to return ($select) |
  | `expand` | string | No | Comma-separated navigation properties to expand (e.g., "to\_SupplierCompany,to\_SupplierPurchasingOrg") |

  #### Output [#output-8]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP |
  | `data` | json | OData v2 response envelope; entity at output.data.d |
  | ↳ `d` | json | A\_Supplier entity |
  | ↳ `Supplier` | string | Supplier key (up to 10 characters) |
  | ↳ `AlternativePayeeAccountNumber` | string | Account number of the alternative payee |
  | ↳ `AuthorizationGroup` | string | Authorization group |
  | ↳ `BusinessPartner` | string | Linked BusinessPartner key |
  | ↳ `BR_TaxIsSplit` | boolean | Brazil-specific tax split flag |
  | ↳ `CreatedByUser` | string | User who created the supplier |
  | ↳ `CreationDate` | string | Creation date (OData v2 epoch) |
  | ↳ `Customer` | string | Linked customer key (if any) |
  | ↳ `DeletionIndicator` | boolean | Central deletion flag |
  | ↳ `BirthDate` | string | Date of birth (OData v2 epoch) |
  | ↳ `ConcatenatedInternationalLocNo` | string | Concatenated international location number |
  | ↳ `FiscalAddress` | string | Fiscal address number |
  | ↳ `Industry` | string | Industry key |
  | ↳ `InternationalLocationNumber1` | string | International location number, part 1 |
  | ↳ `InternationalLocationNumber2` | string | International location number, part 2 |
  | ↳ `InternationalLocationNumber3` | string | International location number, part 3 |
  | ↳ `IsNaturalPerson` | boolean | Indicates whether the supplier is a natural person |
  | ↳ `PaymentIsBlockedForSupplier` | boolean | Payment block flag |
  | ↳ `PostingIsBlocked` | boolean | Posting block flag |
  | ↳ `PurchasingIsBlocked` | boolean | Purchasing block flag |
  | ↳ `ResponsibleType` | string | Type of business (Brazil) |
  | ↳ `SupplierAccountGroup` | string | Supplier account group |
  | ↳ `SupplierCorporateGroup` | string | Corporate group identifier |
  | ↳ `SupplierFullName` | string | Full name of the supplier |
  | ↳ `SupplierName` | string | Supplier name |
  | ↳ `SupplierProcurementBlock` | string | Procurement block at supplier level |
  | ↳ `SuplrProofOfDelivRlvtCode` | string | Proof of delivery relevance code |
  | ↳ `SuplrQltyInProcmtCertfnValidTo` | string | Quality certification validity end date (OData v2 epoch) |
  | ↳ `SuplrQualityManagementSystem` | string | Quality management system of the supplier |
  | ↳ `TaxNumber1` | string | Tax number 1 |
  | ↳ `TaxNumber2` | string | Tax number 2 |
  | ↳ `TaxNumber3` | string | Tax number 3 |
  | ↳ `TaxNumber4` | string | Tax number 4 |
  | ↳ `TaxNumber5` | string | Tax number 5 |
  | ↳ `TaxNumberResponsible` | string | Tax number of responsible party |
  | ↳ `TaxNumberType` | string | Tax number type |
  | ↳ `VATRegistration` | string | VAT registration number |
</ReferenceDetails>

### SAP S/4HANA Update Supplier [#sap-s4hana-update-supplier]

Update fields on an A\_Supplier entity in SAP S/4HANA Cloud (API\_BUSINESS\_PARTNER). Uses HTTP MERGE (OData v2 partial update) — only the fields you provide are written; existing values are preserved. A\_Supplier is limited to modifiable fields such as PostingIsBlocked, PurchasingIsBlocked, PaymentIsBlockedForSupplier, DeletionIndicator, and SupplierAccountGroup; company-code/purchasing-org segments must be updated via the `to_SupplierCompany` / `to_SupplierPurchasingOrg` deep-update endpoints. If-Match defaults to a wildcard - for safe concurrent updates pass the ETag from a prior GET to avoid lost updates.

<ReferenceDetails>
  #### Input [#input-9]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `supplier` | string | Yes | Supplier key to update (string, up to 10 characters) |
  | `body` | json | Yes | JSON object with A\_Supplier fields to update (e.g., \{"PaymentIsBlockedForSupplier":true,"PostingIsBlocked":true}) |
  | `ifMatch` | string | No | If-Match ETag for optimistic concurrency. Defaults to "\*" (unconditional). |

  #### Output [#output-9]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP (204 on success) |
  | `data` | json | Null on 204 success, or OData v2 envelope with updated entity at output.data.d when SAP returns a representation |
  | ↳ `d` | json | A\_Supplier entity (when SAP returns a representation) |
  | ↳ `Supplier` | string | Supplier key (up to 10 characters) |
  | ↳ `SupplierName` | string | Supplier name |
  | ↳ `SupplierAccountGroup` | string | Supplier account group |
  | ↳ `BusinessPartner` | string | Linked BusinessPartner key |
  | ↳ `PaymentIsBlockedForSupplier` | boolean | Payment block flag |
  | ↳ `PostingIsBlocked` | boolean | Posting block flag |
  | ↳ `PurchasingIsBlocked` | boolean | Purchasing block flag |
  | ↳ `DeletionIndicator` | boolean | Central deletion flag |
</ReferenceDetails>

### SAP S/4HANA List Sales Orders [#sap-s4hana-list-sales-orders]

List sales orders from SAP S/4HANA Cloud (API\_SALES\_ORDER\_SRV, A\_SalesOrder) with optional OData $filter, $top, $skip, $orderby, $select, $expand.

<ReferenceDetails>
  #### Input [#input-10]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `filter` | string | No | OData $filter expression (e.g., "SalesOrganization eq '1010'") |
  | `top` | number | No | Maximum results to return ($top) |
  | `skip` | number | No | Number of results to skip ($skip) |
  | `orderBy` | string | No | OData $orderby expression |
  | `select` | string | No | Comma-separated fields to return ($select) |
  | `expand` | string | No | Comma-separated navigation properties to expand (e.g., "to\_Item,to\_Partner") |

  #### Output [#output-10]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP |
  | `data` | json | OData v2 response envelope; collection at output.data.d.results |
  | ↳ `d` | json | OData v2 envelope |
  | ↳ `results` | array | A\_SalesOrder entities |
  | ↳ `SalesOrder` | string | Sales order number |
  | ↳ `SalesOrderType` | string | Sales document type (e.g., OR) |
  | ↳ `SalesOrganization` | string | Sales organization |
  | ↳ `DistributionChannel` | string | Distribution channel |
  | ↳ `OrganizationDivision` | string | Division |
  | ↳ `SoldToParty` | string | Sold-to business partner |
  | ↳ `TotalNetAmount` | string | Total net amount |
  | ↳ `TransactionCurrency` | string | Document currency |
  | ↳ `CreationDate` | string | Creation date (OData /Date(ms)/) |
  | ↳ `SalesOrderDate` | string | Sales order date (OData /Date(ms)/) |
  | ↳ `RequestedDeliveryDate` | string | Requested delivery date (OData /Date(ms)/) |
  | ↳ `LastChangeDate` | string | Last change date (OData /Date(ms)/) |
  | ↳ `PurchaseOrderByCustomer` | string | Customer purchase order reference |
  | ↳ `OverallSDProcessStatus` | string | Overall sales document process status |
  | ↳ `OverallTotalDeliveryStatus` | string | Overall total delivery status |
  | ↳ `OverallSDDocumentRejectionSts` | string | Overall sales document rejection status |
  | ↳ `__next` | string | OData skiptoken URL for next page |
</ReferenceDetails>

### SAP S/4HANA Get Sales Order [#sap-s4hana-get-sales-order]

Retrieve a single sales order by SalesOrder key from SAP S/4HANA Cloud (API\_SALES\_ORDER\_SRV, A\_SalesOrder).

<ReferenceDetails>
  #### Input [#input-11]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `salesOrder` | string | Yes | SalesOrder key (string, up to 10 characters) |
  | `select` | string | No | Comma-separated fields to return ($select) |
  | `expand` | string | No | Comma-separated navigation properties to expand (e.g., "to\_Item") |

  #### Output [#output-11]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP |
  | `data` | json | OData v2 response envelope; entity at output.data.d |
  | ↳ `d` | json | A\_SalesOrder entity |
  | ↳ `SalesOrder` | string | Sales order number |
  | ↳ `SalesOrderType` | string | Sales document type |
  | ↳ `SalesOrganization` | string | Sales organization |
  | ↳ `DistributionChannel` | string | Distribution channel |
  | ↳ `OrganizationDivision` | string | Division |
  | ↳ `SoldToParty` | string | Sold-to business partner |
  | ↳ `PurchaseOrderByCustomer` | string | Customer purchase order reference |
  | ↳ `SalesOrderDate` | string | Sales order date (OData /Date(ms)/) |
  | ↳ `RequestedDeliveryDate` | string | Requested delivery date (OData /Date(ms)/) |
  | ↳ `PricingDate` | string | Pricing date (OData /Date(ms)/) |
  | ↳ `LastChangeDate` | string | Last change date (OData /Date(ms)/) |
  | ↳ `LastChangeDateTime` | string | Last change timestamp (OData /Date(ms)/) |
  | ↳ `TotalNetAmount` | string | Total net amount |
  | ↳ `TransactionCurrency` | string | Document currency |
  | ↳ `CreationDate` | string | Creation date |
  | ↳ `OverallSDProcessStatus` | string | Overall sales document process status |
  | ↳ `OverallTotalDeliveryStatus` | string | Overall total delivery status |
  | ↳ `OverallSDDocumentRejectionSts` | string | Overall sales document rejection status |
  | ↳ `to_Item` | json | Sales order items (when $expand=to\_Item) |
</ReferenceDetails>

### SAP S/4HANA Create Sales Order [#sap-s4hana-create-sales-order]

Create a sales order in SAP S/4HANA Cloud (API\_SALES\_ORDER\_SRV, A\_SalesOrder) with deep insert of sales order items via to\_Item.

<ReferenceDetails>
  #### Input [#input-12]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `salesOrderType` | string | Yes | SalesOrderType (e.g., "OR" Standard Order) |
  | `salesOrganization` | string | Yes | SalesOrganization (4 chars, e.g., "1010") |
  | `distributionChannel` | string | Yes | DistributionChannel (2 chars, e.g., "10") |
  | `organizationDivision` | string | Yes | OrganizationDivision (2 chars, e.g., "00") |
  | `soldToParty` | string | Yes | SoldToParty business partner key (up to 10 chars) |
  | `items` | json | Yes | Array of sales order items for to\_Item deep insert. Each item should include Material and RequestedQuantity (e.g., \[\{"Material":"TG11","RequestedQuantity":"1"}]). |
  | `body` | json | No | Optional additional A\_SalesOrder fields merged into the create payload |

  #### Output [#output-12]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP (201 on create) |
  | `data` | json | OData v2 response envelope; created entity at output.data.d |
  | ↳ `d` | json | Created A\_SalesOrder entity |
  | ↳ `SalesOrder` | string | Newly assigned sales order number |
  | ↳ `SalesOrderType` | string | Sales document type |
  | ↳ `SalesOrganization` | string | Sales organization |
  | ↳ `DistributionChannel` | string | Distribution channel |
  | ↳ `OrganizationDivision` | string | Division |
  | ↳ `SoldToParty` | string | Sold-to business partner |
  | ↳ `TotalNetAmount` | string | Total net amount |
  | ↳ `TransactionCurrency` | string | Document currency |
  | ↳ `CreationDate` | string | Creation date |
  | ↳ `OverallSDProcessStatus` | string | Overall sales document process status |
  | ↳ `OverallTotalDeliveryStatus` | string | Overall total delivery status |
  | ↳ `to_Item` | json | Deep-inserted sales order items as returned by SAP |
</ReferenceDetails>

### SAP S/4HANA Update Sales Order [#sap-s4hana-update-sales-order]

Update fields on an A\_SalesOrder header in SAP S/4HANA Cloud (API\_SALES\_ORDER\_SRV). Uses HTTP MERGE (OData v2 partial update) — only the fields you provide are written; existing values are preserved. Header-only — deep updates to to\_Item / to\_Partner / to\_PricingElement navigations are not supported (see SAP KBA 2833338); use A\_SalesOrderItem operations for line-level changes. If-Match defaults to a wildcard (unconditional) — for safe concurrent updates pass the ETag from a prior GET to avoid lost updates.

<ReferenceDetails>
  #### Input [#input-13]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `salesOrder` | string | Yes | SalesOrder key to update (string, up to 10 characters) |
  | `body` | json | Yes | JSON object with A\_SalesOrder fields to update (e.g., \{"PurchaseOrderByCustomer":"PO-12345","HeaderBillingBlockReason":"01"}) |
  | `ifMatch` | string | No | If-Match ETag for optimistic concurrency. Defaults to "\*" (unconditional). |

  #### Output [#output-13]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP (204 on success) |
  | `data` | json | Null on 204 success; otherwise OData v2 envelope with the updated entity at output.data.d |
  | ↳ `d` | json | Updated A\_SalesOrder entity (when SAP returns one) |
  | ↳ `SalesOrder` | string | Sales order number |
  | ↳ `SalesOrderType` | string | Sales document type |
  | ↳ `PurchaseOrderByCustomer` | string | Customer purchase order reference |
  | ↳ `OverallSDProcessStatus` | string | Overall sales document process status |
  | ↳ `OverallTotalDeliveryStatus` | string | Overall total delivery status |
</ReferenceDetails>

### SAP S/4HANA Delete Sales Order [#sap-s4hana-delete-sales-order]

Delete an A\_SalesOrder entity in SAP S/4HANA Cloud (API\_SALES\_ORDER\_SRV). Only orders without subsequent documents (deliveries, invoices) can be deleted; otherwise reject items via update instead.

<ReferenceDetails>
  #### Input [#input-14]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `salesOrder` | string | Yes | SalesOrder key to delete (string, up to 10 characters) |
  | `ifMatch` | string | No | If-Match ETag for optimistic concurrency. Defaults to "\*" (unconditional). |

  #### Output [#output-14]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP (204 on success) |
  | `data` | json | Null on successful deletion (SAP returns 204 No Content) |
</ReferenceDetails>

### SAP S/4HANA List Outbound Deliveries [#sap-s4hana-list-outbound-deliveries]

List outbound deliveries from SAP S/4HANA Cloud (API\_OUTBOUND\_DELIVERY\_SRV;v=0002, A\_OutbDeliveryHeader) with optional OData $filter, $top, $skip, $orderby, $select, $expand.

<ReferenceDetails>
  #### Input [#input-15]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `filter` | string | No | OData $filter expression (e.g., "OverallDeliveryStatus eq 'C'") |
  | `top` | number | No | Maximum results to return ($top) |
  | `skip` | number | No | Number of results to skip ($skip) |
  | `orderBy` | string | No | OData $orderby expression |
  | `select` | string | No | Comma-separated fields to return ($select) |
  | `expand` | string | No | Comma-separated navigation properties to expand (e.g., "to\_DeliveryDocumentItem") |

  #### Output [#output-15]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP |
  | `data` | json | OData v2 response envelope; collection at output.data.d.results |
  | ↳ `d` | json | OData v2 envelope |
  | ↳ `results` | array | A\_OutbDeliveryHeader entities |
  | ↳ `DeliveryDocument` | string | Outbound delivery number |
  | ↳ `DeliveryDocumentType` | string | Delivery document type (e.g., LF) |
  | ↳ `SDDocumentCategory` | string | SD document category (e.g., J = outbound delivery) |
  | ↳ `ShippingPoint` | string | Shipping point |
  | ↳ `ShippingType` | string | Shipping type |
  | ↳ `ShipToParty` | string | Ship-to business partner |
  | ↳ `SoldToParty` | string | Sold-to business partner |
  | ↳ `DeliveryDate` | string | Delivery date (Edm.DateTime) |
  | ↳ `ActualGoodsMovementDate` | string | Actual goods issue date (Edm.DateTime) |
  | ↳ `PlannedGoodsIssueDate` | string | Planned goods issue date (Edm.DateTime) |
  | ↳ `OverallSDProcessStatus` | string | Overall SD process (delivery) status |
  | ↳ `OverallGoodsMovementStatus` | string | Overall goods movement status |
  | ↳ `TransactionCurrency` | string | Document currency |
  | ↳ `DocumentDate` | string | Document date (Edm.DateTime) |
  | ↳ `CreationDate` | string | Creation date (Edm.DateTime) |
  | ↳ `LastChangeDate` | string | Last change date (Edm.DateTime) |
  | ↳ `__next` | string | OData skiptoken URL for next page |
  | ↳ `__count` | string | Total count when $inlinecount=allpages is used |
</ReferenceDetails>

### SAP S/4HANA Get Outbound Delivery [#sap-s4hana-get-outbound-delivery]

Retrieve a single outbound delivery by DeliveryDocument key from SAP S/4HANA Cloud (API\_OUTBOUND\_DELIVERY\_SRV;v=0002, A\_OutbDeliveryHeader).

<ReferenceDetails>
  #### Input [#input-16]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `deliveryDocument` | string | Yes | DeliveryDocument key (string, up to 10 characters) |
  | `select` | string | No | Comma-separated fields to return ($select) |
  | `expand` | string | No | Comma-separated navigation properties to expand (e.g., "to\_DeliveryDocumentItem") |

  #### Output [#output-16]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP |
  | `data` | json | OData v2 response envelope; entity at output.data.d |
  | ↳ `d` | json | A\_OutbDeliveryHeader entity |
  | ↳ `DeliveryDocument` | string | Outbound delivery number |
  | ↳ `DeliveryDocumentType` | string | Delivery document type |
  | ↳ `SDDocumentCategory` | string | SD document category (e.g., J = outbound delivery) |
  | ↳ `ShippingPoint` | string | Shipping point |
  | ↳ `ShippingType` | string | Shipping type |
  | ↳ `ShipToParty` | string | Ship-to business partner |
  | ↳ `SoldToParty` | string | Sold-to business partner |
  | ↳ `DeliveryDate` | string | Delivery date (Edm.DateTime) |
  | ↳ `ActualGoodsMovementDate` | string | Actual goods issue date (Edm.DateTime) |
  | ↳ `PlannedGoodsIssueDate` | string | Planned goods issue date (Edm.DateTime) |
  | ↳ `OverallSDProcessStatus` | string | Overall SD process (delivery) status |
  | ↳ `OverallGoodsMovementStatus` | string | Overall goods movement status |
  | ↳ `TransactionCurrency` | string | Document currency |
  | ↳ `DocumentDate` | string | Document date (Edm.DateTime) |
  | ↳ `CreationDate` | string | Creation date (Edm.DateTime) |
  | ↳ `LastChangeDate` | string | Last change date (Edm.DateTime) |
  | ↳ `to_DeliveryDocumentItem` | json | Delivery items (when $expand=to\_DeliveryDocumentItem) |
  | ↳ `to_DeliveryDocumentPartner` | json | Delivery partners (when $expand=to\_DeliveryDocumentPartner) |
</ReferenceDetails>

### SAP S/4HANA List Inbound Deliveries [#sap-s4hana-list-inbound-deliveries]

List inbound deliveries from SAP S/4HANA Cloud (API\_INBOUND\_DELIVERY\_SRV;v=0002, A\_InbDeliveryHeader) with optional OData $filter, $top, $skip, $orderby, $select, $expand.

<ReferenceDetails>
  #### Input [#input-17]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `filter` | string | No | OData $filter expression (e.g., "ReceivingPlant eq '1010'") |
  | `top` | number | No | Maximum results to return ($top) |
  | `skip` | number | No | Number of results to skip ($skip) |
  | `orderBy` | string | No | OData $orderby expression |
  | `select` | string | No | Comma-separated fields to return ($select) |
  | `expand` | string | No | Comma-separated navigation properties to expand (e.g., "to\_DeliveryDocumentItem") |

  #### Output [#output-17]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP |
  | `data` | json | OData v2 response envelope; collection at output.data.d.results |
  | ↳ `d` | json | OData v2 envelope |
  | ↳ `results` | array | A\_InbDeliveryHeader entities |
  | ↳ `DeliveryDocument` | string | Inbound delivery number |
  | ↳ `DeliveryDocumentType` | string | Delivery document type (e.g., EL) |
  | ↳ `SDDocumentCategory` | string | SD document category (e.g., 7 = inbound delivery) |
  | ↳ `ReceivingPlant` | string | Receiving plant |
  | ↳ `Supplier` | string | Supplier business partner |
  | ↳ `ShipToParty` | string | Ship-to business partner |
  | ↳ `DeliveryDate` | string | Delivery date (Edm.DateTime) |
  | ↳ `ActualGoodsMovementDate` | string | Actual goods movement (receipt) date (Edm.DateTime) |
  | ↳ `PlannedGoodsMovementDate` | string | Planned goods movement date (Edm.DateTime) |
  | ↳ `OverallSDProcessStatus` | string | Overall SD process (delivery) status |
  | ↳ `OverallGoodsMovementStatus` | string | Overall goods movement status |
  | ↳ `DocumentDate` | string | Document date (Edm.DateTime) |
  | ↳ `CreationDate` | string | Creation date (Edm.DateTime) |
  | ↳ `LastChangeDate` | string | Last change date (Edm.DateTime) |
  | ↳ `__next` | string | OData skiptoken URL for next page |
  | ↳ `__count` | string | Total count when $inlinecount=allpages is used |
</ReferenceDetails>

### SAP S/4HANA Get Inbound Delivery [#sap-s4hana-get-inbound-delivery]

Retrieve a single inbound delivery by DeliveryDocument key from SAP S/4HANA Cloud (API\_INBOUND\_DELIVERY\_SRV;v=0002, A\_InbDeliveryHeader).

<ReferenceDetails>
  #### Input [#input-18]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `deliveryDocument` | string | Yes | DeliveryDocument key (string, up to 10 characters) |
  | `select` | string | No | Comma-separated fields to return ($select) |
  | `expand` | string | No | Comma-separated navigation properties to expand (e.g., "to\_DeliveryDocumentItem") |

  #### Output [#output-18]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP |
  | `data` | json | OData v2 response envelope; entity at output.data.d |
  | ↳ `d` | json | A\_InbDeliveryHeader entity |
  | ↳ `DeliveryDocument` | string | Inbound delivery number |
  | ↳ `DeliveryDocumentType` | string | Delivery document type |
  | ↳ `SDDocumentCategory` | string | SD document category (e.g., 7 = inbound delivery) |
  | ↳ `ReceivingPlant` | string | Receiving plant |
  | ↳ `Supplier` | string | Supplier business partner |
  | ↳ `ShipToParty` | string | Ship-to business partner |
  | ↳ `DeliveryDate` | string | Delivery date (Edm.DateTime) |
  | ↳ `ActualGoodsMovementDate` | string | Actual goods movement (receipt) date (Edm.DateTime) |
  | ↳ `PlannedGoodsMovementDate` | string | Planned goods movement date (Edm.DateTime) |
  | ↳ `OverallSDProcessStatus` | string | Overall SD process (delivery) status |
  | ↳ `OverallGoodsMovementStatus` | string | Overall goods movement status |
  | ↳ `DocumentDate` | string | Document date (Edm.DateTime) |
  | ↳ `CreationDate` | string | Creation date (Edm.DateTime) |
  | ↳ `LastChangeDate` | string | Last change date (Edm.DateTime) |
  | ↳ `to_DeliveryDocumentItem` | json | Delivery items (when $expand=to\_DeliveryDocumentItem) |
  | ↳ `to_DeliveryDocumentPartner` | json | Delivery partners (when $expand=to\_DeliveryDocumentPartner) |
</ReferenceDetails>

### SAP S/4HANA List Billing Documents [#sap-s4hana-list-billing-documents]

List billing documents (customer invoices) from SAP S/4HANA Cloud (API\_BILLING\_DOCUMENT\_SRV, A\_BillingDocument) with optional OData $filter, $top, $skip, $orderby, $select, $expand.

<ReferenceDetails>
  #### Input [#input-19]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `filter` | string | No | OData $filter expression (e.g., "SoldToParty eq '10100001'") |
  | `top` | number | No | Maximum results to return ($top) |
  | `skip` | number | No | Number of results to skip ($skip) |
  | `orderBy` | string | No | OData $orderby expression |
  | `select` | string | No | Comma-separated fields to return ($select) |
  | `expand` | string | No | Comma-separated navigation properties to expand (e.g., "to\_Item,to\_Partner,to\_PricingElement") |

  #### Output [#output-19]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP |
  | `data` | json | OData v2 response envelope; collection at output.data.d.results |
  | ↳ `d` | json | OData v2 envelope |
  | ↳ `results` | array | A\_BillingDocument entities |
  | ↳ `BillingDocument` | string | Billing document number |
  | ↳ `SDDocumentCategory` | string | SD document category |
  | ↳ `BillingDocumentCategory` | string | Billing document category |
  | ↳ `BillingDocumentType` | string | Billing document type (e.g., F2) |
  | ↳ `BillingDocumentDate` | string | Billing document date (OData /Date(ms)/) |
  | ↳ `BillingDocumentIsCancelled` | boolean | Whether the billing document is cancelled |
  | ↳ `CancelledBillingDocument` | string | Cancelled billing document number |
  | ↳ `TotalNetAmount` | string | Total net amount (Edm.Decimal as string) |
  | ↳ `TaxAmount` | string | Tax amount (Edm.Decimal as string) |
  | ↳ `TotalGrossAmount` | string | Total gross amount (Edm.Decimal as string) |
  | ↳ `TransactionCurrency` | string | Document currency |
  | ↳ `SoldToParty` | string | Sold-to business partner |
  | ↳ `PayerParty` | string | Payer party |
  | ↳ `SalesOrganization` | string | Sales organization |
  | ↳ `DistributionChannel` | string | Distribution channel |
  | ↳ `Division` | string | Division |
  | ↳ `CompanyCode` | string | Company code |
  | ↳ `FiscalYear` | string | Fiscal year |
  | ↳ `OverallBillingStatus` | string | Overall billing status |
  | ↳ `AccountingPostingStatus` | string | Accounting posting status |
  | ↳ `AccountingTransferStatus` | string | Accounting transfer status |
  | ↳ `InvoiceClearingStatus` | string | Invoice clearing status |
  | ↳ `AccountingDocument` | string | Linked accounting document |
  | ↳ `CustomerPaymentTerms` | string | Customer payment terms |
  | ↳ `PaymentMethod` | string | Payment method |
  | ↳ `DocumentReferenceID` | string | Document reference ID |
  | ↳ `CreationDate` | string | Creation date (OData /Date(ms)/) |
  | ↳ `LastChangeDate` | string | Last change date (OData /Date(ms)/) |
  | ↳ `LastChangeDateTime` | string | Last change date-time (Edm.DateTimeOffset) |
  | ↳ `__next` | string | OData skiptoken URL for next page |
  | ↳ `__count` | string | Total count when $inlinecount=allpages is used |
</ReferenceDetails>

### SAP S/4HANA Get Billing Document [#sap-s4hana-get-billing-document]

Retrieve a single billing document (customer invoice) by BillingDocument key from SAP S/4HANA Cloud (API\_BILLING\_DOCUMENT\_SRV, A\_BillingDocument).

<ReferenceDetails>
  #### Input [#input-20]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `billingDocument` | string | Yes | BillingDocument key (string, up to 10 characters) |
  | `select` | string | No | Comma-separated fields to return ($select) |
  | `expand` | string | No | Comma-separated navigation properties to expand (e.g., "to\_Item,to\_Partner,to\_PricingElement") |

  #### Output [#output-20]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP |
  | `data` | json | OData v2 response envelope; entity at output.data.d |
  | ↳ `d` | json | A\_BillingDocument entity |
  | ↳ `BillingDocument` | string | Billing document number |
  | ↳ `SDDocumentCategory` | string | SD document category |
  | ↳ `BillingDocumentCategory` | string | Billing document category |
  | ↳ `BillingDocumentType` | string | Billing document type |
  | ↳ `BillingDocumentDate` | string | Billing document date (OData /Date(ms)/) |
  | ↳ `BillingDocumentIsCancelled` | boolean | Whether the billing document is cancelled |
  | ↳ `CancelledBillingDocument` | string | Cancelled billing document number |
  | ↳ `TotalNetAmount` | string | Total net amount (Edm.Decimal as string) |
  | ↳ `TaxAmount` | string | Tax amount (Edm.Decimal as string) |
  | ↳ `TotalGrossAmount` | string | Total gross amount (Edm.Decimal as string) |
  | ↳ `TransactionCurrency` | string | Document currency |
  | ↳ `SoldToParty` | string | Sold-to business partner |
  | ↳ `PayerParty` | string | Payer party |
  | ↳ `SalesOrganization` | string | Sales organization |
  | ↳ `DistributionChannel` | string | Distribution channel |
  | ↳ `Division` | string | Division |
  | ↳ `CompanyCode` | string | Company code |
  | ↳ `FiscalYear` | string | Fiscal year |
  | ↳ `OverallBillingStatus` | string | Overall billing status |
  | ↳ `AccountingPostingStatus` | string | Accounting posting status |
  | ↳ `AccountingTransferStatus` | string | Accounting transfer status |
  | ↳ `InvoiceClearingStatus` | string | Invoice clearing status |
  | ↳ `AccountingDocument` | string | Linked accounting document |
  | ↳ `CustomerPaymentTerms` | string | Customer payment terms |
  | ↳ `PaymentMethod` | string | Payment method |
  | ↳ `DocumentReferenceID` | string | Document reference ID |
  | ↳ `CreationDate` | string | Creation date (OData /Date(ms)/) |
  | ↳ `LastChangeDate` | string | Last change date (OData /Date(ms)/) |
  | ↳ `LastChangeDateTime` | string | Last change date-time (Edm.DateTimeOffset) |
  | ↳ `to_Item` | json | Billing document items (when $expand=to\_Item) |
  | ↳ `to_Partner` | json | Billing document partners (when $expand=to\_Partner) |
  | ↳ `to_PricingElement` | json | Billing document pricing elements (when $expand=to\_PricingElement) |
</ReferenceDetails>

### SAP S/4HANA List Products [#sap-s4hana-list-products]

List products (materials) from SAP S/4HANA Cloud (API\_PRODUCT\_SRV, A\_Product) with optional OData $filter, $top, $skip, $orderby, $select, $expand.

<ReferenceDetails>
  #### Input [#input-21]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `filter` | string | No | OData $filter expression (e.g., "ProductType eq 'FERT'") |
  | `top` | number | No | Maximum results to return ($top) |
  | `skip` | number | No | Number of results to skip ($skip) |
  | `orderBy` | string | No | OData $orderby expression |
  | `select` | string | No | Comma-separated fields to return ($select) |
  | `expand` | string | No | Comma-separated navigation properties to expand ($expand) |

  #### Output [#output-21]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP |
  | `data` | json | OData v2 response envelope; collection at output.data.d.results |
  | ↳ `d` | json | OData v2 envelope |
  | ↳ `results` | array | A\_Product entities |
  | ↳ `Product` | string | Product (material) number |
  | ↳ `ProductType` | string | Product type (e.g., FERT, HAWA) |
  | ↳ `ProductGroup` | string | Material group |
  | ↳ `BaseUnit` | string | Base unit of measure |
  | ↳ `Brand` | string | Brand |
  | ↳ `Division` | string | Division |
  | ↳ `GrossWeight` | string | Gross weight |
  | ↳ `NetWeight` | string | Net weight |
  | ↳ `WeightUnit` | string | Weight unit of measure |
  | ↳ `CrossPlantStatus` | string | Cross-plant material status |
  | ↳ `IsMarkedForDeletion` | boolean | Deletion flag |
  | ↳ `ProductStandardID` | string | Standard product ID (e.g., GTIN) |
  | ↳ `ItemCategoryGroup` | string | Item category group |
  | ↳ `ProductOldID` | string | Legacy/old product ID |
  | ↳ `CreatedByUser` | string | User who created the product |
  | ↳ `CreationDate` | string | Creation date (OData /Date(ms)/) |
  | ↳ `LastChangedByUser` | string | User who last changed the product |
  | ↳ `LastChangeDate` | string | Last change date |
  | ↳ `LastChangeDateTime` | string | Last change timestamp (Edm.DateTimeOffset) |
  | ↳ `__next` | string | OData skiptoken URL for next page |
  | ↳ `__count` | string | Total count when $inlinecount=allpages is used |
</ReferenceDetails>

### SAP S/4HANA Get Product [#sap-s4hana-get-product]

Retrieve a single product (material) by Product key from SAP S/4HANA Cloud (API\_PRODUCT\_SRV, A\_Product).

<ReferenceDetails>
  #### Input [#input-22]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `product` | string | Yes | Product key (string, up to 40 characters) |
  | `select` | string | No | Comma-separated fields to return ($select) |
  | `expand` | string | No | Comma-separated navigation properties to expand (e.g., "to\_Description") |

  #### Output [#output-22]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP |
  | `data` | json | OData v2 response envelope; entity at output.data.d |
  | ↳ `d` | json | A\_Product entity |
  | ↳ `Product` | string | Product (material) number |
  | ↳ `ProductType` | string | Product type (e.g., FERT, HAWA) |
  | ↳ `ProductGroup` | string | Material group |
  | ↳ `BaseUnit` | string | Base unit of measure |
  | ↳ `Brand` | string | Brand |
  | ↳ `Division` | string | Division |
  | ↳ `GrossWeight` | string | Gross weight |
  | ↳ `NetWeight` | string | Net weight |
  | ↳ `WeightUnit` | string | Weight unit of measure |
  | ↳ `CrossPlantStatus` | string | Cross-plant material status |
  | ↳ `IsMarkedForDeletion` | boolean | Deletion flag |
  | ↳ `ProductStandardID` | string | Standard product ID (e.g., GTIN) |
  | ↳ `ItemCategoryGroup` | string | Item category group |
  | ↳ `ProductOldID` | string | Legacy/old product ID |
  | ↳ `CreatedByUser` | string | User who created the product |
  | ↳ `CreationDate` | string | Creation date (OData /Date(ms)/) |
  | ↳ `LastChangedByUser` | string | User who last changed the product |
  | ↳ `LastChangeDate` | string | Last change date |
  | ↳ `LastChangeDateTime` | string | Last change timestamp (Edm.DateTimeOffset) |
  | ↳ `to_Description` | json | Product descriptions (when $expand=to\_Description) |
  | ↳ `to_Plant` | json | Plant-level data (when $expand=to\_Plant) |
  | ↳ `to_ProductSales` | json | Sales data (when $expand=to\_ProductSales) |
</ReferenceDetails>

### SAP S/4HANA Update Product [#sap-s4hana-update-product]

Update fields on an A\_Product entity in SAP S/4HANA Cloud (API\_PRODUCT\_SRV). Uses HTTP MERGE (OData v2 partial update) — only the fields you provide are written; existing values are preserved. Flat scalar header fields only — deep/multi-entity updates across navigation properties are not supported by API\_PRODUCT\_SRV MERGE/PUT (see SAP KBA 2833338); update child entities (plant, valuation, sales data, etc.) via their own endpoints. If-Match defaults to a wildcard (unconditional) — for safe concurrent updates pass the ETag from a prior GET.

<ReferenceDetails>
  #### Input [#input-23]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `product` | string | Yes | Product key to update (string, up to 40 characters) |
  | `body` | json | Yes | JSON object with A\_Product fields to update (e.g., \{"ProductGroup":"L001","IsMarkedForDeletion":false}) |
  | `ifMatch` | string | No | If-Match ETag for optimistic concurrency. Defaults to "\*" (unconditional). |

  #### Output [#output-23]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP (204 on success) |
  | `data` | json | Null on 204 success, or OData v2 envelope with the updated A\_Product entity at output.data.d |
  | ↳ `d` | json | Updated A\_Product entity (only present if SAP returns a body) |
  | ↳ `Product` | string | Product (material) number |
  | ↳ `ProductType` | string | Product type |
  | ↳ `ProductGroup` | string | Material group |
  | ↳ `BaseUnit` | string | Base unit of measure |
  | ↳ `IsMarkedForDeletion` | boolean | Deletion flag |
  | ↳ `LastChangeDate` | string | Last change date |
</ReferenceDetails>

### SAP S/4HANA List Material Stock [#sap-s4hana-list-material-stock]

List material stock quantities from SAP S/4HANA Cloud (API\_MATERIAL\_STOCK\_SRV, A\_MatlStkInAcctMod). The entity uses an 11-field composite key (Material, Plant, StorageLocation, Batch, Supplier, Customer, WBSElementInternalID, SDDocument, SDDocumentItem, InventorySpecialStockType, InventoryStockType) — query with $filter on these fields instead of a direct key lookup.

<ReferenceDetails>
  #### Input [#input-24]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `filter` | string | No | OData $filter expression (e.g., "Material eq 'TG10' and Plant eq '1010' and InventoryStockType eq '01'") |
  | `top` | number | No | Maximum results to return ($top) |
  | `skip` | number | No | Number of results to skip ($skip) |
  | `orderBy` | string | No | OData $orderby expression |
  | `select` | string | No | Comma-separated fields to return ($select) |
  | `expand` | string | No | Comma-separated navigation properties to expand ($expand) |

  #### Output [#output-24]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP |
  | `data` | json | OData payload containing the array of A\_MatlStkInAcctMod stock entries |
  | ↳ `Material` | string | Material number |
  | ↳ `Plant` | string | Plant identifier |
  | ↳ `StorageLocation` | string | Storage location identifier |
  | ↳ `Batch` | string | Batch identifier |
  | ↳ `Supplier` | string | Supplier business partner key |
  | ↳ `Customer` | string | Customer business partner key |
  | ↳ `WBSElementInternalID` | string | WBS element internal ID |
  | ↳ `SDDocument` | string | SD document number |
  | ↳ `SDDocumentItem` | string | SD document item |
  | ↳ `InventorySpecialStockType` | string | Special stock type indicator |
  | ↳ `InventoryStockType` | string | Stock type (e.g., 01 unrestricted-use, 02 quality inspection, 03 blocked, 04 restricted-use) |
  | ↳ `MatlWrhsStkQtyInMatlBaseUnit` | string | Material warehouse stock quantity in material base unit (Edm.Decimal serialized as string) |
  | ↳ `MaterialBaseUnit` | string | Material base unit of measure |
</ReferenceDetails>

### SAP S/4HANA List Material Documents [#sap-s4hana-list-material-documents]

List material document headers (goods movements) from SAP S/4HANA Cloud (API\_MATERIAL\_DOCUMENT\_SRV, A\_MaterialDocumentHeader) with optional OData $filter, $top, $skip, $orderby, $select, $expand.

<ReferenceDetails>
  #### Input [#input-25]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `filter` | string | No | OData $filter expression (e.g., "MaterialDocumentYear eq '2024' and PostingDate ge datetime'2024-01-01T00:00:00'") |
  | `top` | number | No | Maximum results to return ($top) |
  | `skip` | number | No | Number of results to skip ($skip) |
  | `orderBy` | string | No | OData $orderby expression |
  | `select` | string | No | Comma-separated fields to return ($select) |
  | `expand` | string | No | Comma-separated navigation properties to expand (e.g., "to\_MaterialDocumentItem") |

  #### Output [#output-25]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP |
  | `data` | json | OData payload containing the array of A\_MaterialDocumentHeader entities |
  | ↳ `MaterialDocumentYear` | string | Material document year (4-digit fiscal year) |
  | ↳ `MaterialDocument` | string | Material document number |
  | ↳ `DocumentDate` | string | Document date (OData /Date(...)/ string) |
  | ↳ `PostingDate` | string | Posting date (OData /Date(...)/ string) |
  | ↳ `MaterialDocumentHeaderText` | string | Header text describing the material document |
  | ↳ `ReferenceDocument` | string | Reference document number |
  | ↳ `GoodsMovementCode` | string | Goods movement code (e.g., 01 GR for PO, 03 GI to cost center) |
  | ↳ `InventoryTransactionType` | string | Inventory transaction type indicator |
  | ↳ `CreatedByUser` | string | User who created the material document |
  | ↳ `CreationDate` | string | Creation date (OData /Date(...)/ string) |
  | ↳ `CreationTime` | string | Creation time (OData PT...S string) |
  | ↳ `VersionForPrintingSlip` | string | Version for printing the goods movement slip |
  | ↳ `ManualPrintIsTriggered` | boolean | Indicates whether manual print was triggered for this document |
  | ↳ `CtrlPostgForExtWhseMgmtSyst` | string | Control posting for external warehouse management system |
  | ↳ `to_MaterialDocumentItem` | json | Material document items (only present when $expand=to\_MaterialDocumentItem is supplied) |
</ReferenceDetails>

### SAP S/4HANA Get Material Document [#sap-s4hana-get-material-document]

Retrieve a single material document header by composite key (MaterialDocument + MaterialDocumentYear) from SAP S/4HANA Cloud (API\_MATERIAL\_DOCUMENT\_SRV, A\_MaterialDocumentHeader).

<ReferenceDetails>
  #### Input [#input-26]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `materialDocumentYear` | string | Yes | MaterialDocumentYear (4-character year, e.g., "2024") |
  | `materialDocument` | string | Yes | MaterialDocument key (string, up to 10 characters) |
  | `select` | string | No | Comma-separated fields to return ($select) |
  | `expand` | string | No | Comma-separated navigation properties to expand (e.g., "to\_MaterialDocumentItem") |

  #### Output [#output-26]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP |
  | `data` | json | OData payload containing the A\_MaterialDocumentHeader entity (and optionally to\_MaterialDocumentItem when expanded) |
  | ↳ `MaterialDocumentYear` | string | Material document year (4-digit fiscal year) |
  | ↳ `MaterialDocument` | string | Material document number |
  | ↳ `DocumentDate` | string | Document date (OData /Date(...)/ string) |
  | ↳ `PostingDate` | string | Posting date (OData /Date(...)/ string) |
  | ↳ `MaterialDocumentHeaderText` | string | Header text describing the material document |
  | ↳ `ReferenceDocument` | string | Reference document number |
  | ↳ `GoodsMovementCode` | string | Goods movement code (e.g., 01 GR for PO, 03 GI to cost center) |
  | ↳ `InventoryTransactionType` | string | Inventory transaction type indicator |
  | ↳ `CreatedByUser` | string | User who created the material document |
  | ↳ `CreationDate` | string | Creation date (OData /Date(...)/ string) |
  | ↳ `CreationTime` | string | Creation time (OData PT...S string) |
  | ↳ `VersionForPrintingSlip` | string | Version for printing the goods movement slip |
  | ↳ `ManualPrintIsTriggered` | boolean | Indicates whether manual print was triggered for this document |
  | ↳ `CtrlPostgForExtWhseMgmtSyst` | string | Control posting for external warehouse management system |
  | ↳ `to_MaterialDocumentItem` | json | Material document items (only present when $expand=to\_MaterialDocumentItem is supplied) |
</ReferenceDetails>

### SAP S/4HANA List Purchase Requisitions [#sap-s4hana-list-purchase-requisitions]

List purchase requisitions from SAP S/4HANA Cloud (API\_PURCHASEREQ\_PROCESS\_SRV, A\_PurchaseRequisitionHeader) with optional OData $filter, $top, $skip, $orderby, $select, $expand. Note: API\_PURCHASEREQ\_PROCESS\_SRV is deprecated since S/4HANA Cloud Public Edition 2402; the successor is API\_PURCHASEREQUISITION\_2 (OData v4). This tool still works against tenants where the legacy service is enabled.

<ReferenceDetails>
  #### Input [#input-27]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `filter` | string | No | OData $filter expression (e.g., "PurchaseRequisitionType eq 'NB'") |
  | `top` | number | No | Maximum results to return ($top) |
  | `skip` | number | No | Number of results to skip ($skip) |
  | `orderBy` | string | No | OData $orderby expression |
  | `select` | string | No | Comma-separated fields to return ($select) |
  | `expand` | string | No | Comma-separated navigation properties to expand (e.g., "to\_PurchaseReqnItem") |

  #### Output [#output-27]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP |
  | `data` | json | OData v2 response envelope; collection at output.data.d.results |
  | ↳ `d` | json | OData v2 envelope |
  | ↳ `results` | array | A\_PurchaseRequisitionHeader entities |
  | ↳ `PurchaseRequisition` | string | Purchase requisition number |
  | ↳ `PurchaseRequisitionType` | string | Purchase requisition document type (e.g., NB) |
  | ↳ `PurReqnDescription` | string | Purchase requisition description |
  | ↳ `SourceDetermination` | string | Source-of-supply determination flag |
  | ↳ `__next` | string | OData skiptoken URL for next page |
</ReferenceDetails>

### SAP S/4HANA Get Purchase Requisition [#sap-s4hana-get-purchase-requisition]

Retrieve a single purchase requisition by PurchaseRequisition key from SAP S/4HANA Cloud (API\_PURCHASEREQ\_PROCESS\_SRV, A\_PurchaseRequisitionHeader). Note: API\_PURCHASEREQ\_PROCESS\_SRV is deprecated since S/4HANA Cloud Public Edition 2402; the successor is API\_PURCHASEREQUISITION\_2 (OData v4). This tool still works against tenants where the legacy service is enabled.

<ReferenceDetails>
  #### Input [#input-28]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `purchaseRequisition` | string | Yes | PurchaseRequisition key (string, up to 10 characters) |
  | `select` | string | No | Comma-separated fields to return ($select) |
  | `expand` | string | No | Comma-separated navigation properties to expand (e.g., "to\_PurchaseReqnItem") |

  #### Output [#output-28]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP |
  | `data` | json | OData v2 response envelope; entity at output.data.d |
  | ↳ `d` | json | A\_PurchaseRequisitionHeader entity |
  | ↳ `PurchaseRequisition` | string | Purchase requisition number |
  | ↳ `PurchaseRequisitionType` | string | PR document type (e.g., NB) |
  | ↳ `PurReqnDescription` | string | Purchase requisition description |
  | ↳ `SourceDetermination` | string | Source-of-supply determination flag |
  | ↳ `to_PurchaseReqnItem` | json | Expanded PR items (when $expand=to\_PurchaseReqnItem) |
</ReferenceDetails>

### SAP S/4HANA Create Purchase Requisition [#sap-s4hana-create-purchase-requisition]

Create a purchase requisition in SAP S/4HANA Cloud (API\_PURCHASEREQ\_PROCESS\_SRV, A\_PurchaseRequisitionHeader). PurchaseRequisition is auto-assigned by SAP from the document number range; provide line items via the to\_PurchaseReqnItem deep-insert array. Note: API\_PURCHASEREQ\_PROCESS\_SRV is deprecated since S/4HANA Cloud Public Edition 2402; the successor is API\_PURCHASEREQUISITION\_2 (OData v4). This tool still works against tenants where the legacy service is enabled.

<ReferenceDetails>
  #### Input [#input-29]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `purchaseRequisitionType` | string | Yes | PurchaseRequisitionType (e.g., "NB" Standard PR) |
  | `items` | json | Yes | to\_PurchaseReqnItem deep-insert array (e.g., \[\{"PurchaseRequisitionItem":"10","Material":"TG11","RequestedQuantity":"5","Plant":"1010","BaseUnit":"PC","DeliveryDate":"/Date(1735689600000)/"}]) |
  | `body` | json | No | Additional A\_PurchaseRequisitionHeader fields merged into the create payload (e.g., \{"PurReqnDescription":"Office supplies"}) |

  #### Output [#output-29]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP |
  | `data` | json | OData v2 response envelope; created entity at output.data.d |
  | ↳ `d` | json | Created A\_PurchaseRequisitionHeader entity |
  | ↳ `PurchaseRequisition` | string | Auto-assigned purchase requisition number |
  | ↳ `PurchaseRequisitionType` | string | PR document type (e.g., NB) |
  | ↳ `PurReqnDescription` | string | Purchase requisition description |
  | ↳ `SourceDetermination` | string | Source-of-supply determination flag |
  | ↳ `to_PurchaseReqnItem` | json | Created PR items returned in deep insert |
</ReferenceDetails>

### SAP S/4HANA Update Purchase Requisition [#sap-s4hana-update-purchase-requisition]

Update fields on an A\_PurchaseRequisitionHeader entity in SAP S/4HANA Cloud (API\_PURCHASEREQ\_PROCESS\_SRV; deprecated since S/4HANA 2402, successor is API\_PURCHASEREQUISITION\_2 OData v4). Uses HTTP MERGE (OData v2 partial update) — only the fields you provide are written; existing values are preserved. Header-only — deep updates across navigations are not supported (SAP KBA 2833338); use the A\_PurchaseReqnItem entity directly to modify items. If-Match defaults to a wildcard - for safe concurrent updates pass the ETag from a prior GET to avoid lost updates.

<ReferenceDetails>
  #### Input [#input-30]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `purchaseRequisition` | string | Yes | PurchaseRequisition key to update (string, up to 10 characters) |
  | `body` | json | Yes | JSON object with A\_PurchaseRequisitionHeader fields to update (e.g., \{"PurchaseRequisitionType":"NB"}) |
  | `ifMatch` | string | No | If-Match ETag for optimistic concurrency. Defaults to "\*" (unconditional). |

  #### Output [#output-30]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP (204 on success) |
  | `data` | json | Null on 204 success, or OData v2 envelope with updated A\_PurchaseRequisitionHeader at output.data.d |
  | ↳ `d` | json | Updated A\_PurchaseRequisitionHeader entity (if returned) |
  | ↳ `PurchaseRequisition` | string | Purchase requisition number |
  | ↳ `PurchaseRequisitionType` | string | PR document type |
  | ↳ `PurReqnDescription` | string | Purchase requisition description |
  | ↳ `SourceDetermination` | string | Source-of-supply determination flag |
</ReferenceDetails>

### SAP S/4HANA List Purchase Orders [#sap-s4hana-list-purchase-orders]

List purchase orders from SAP S/4HANA Cloud (API\_PURCHASEORDER\_PROCESS\_SRV, A\_PurchaseOrder) with optional OData $filter, $top, $skip, $orderby, $select, $expand.

<ReferenceDetails>
  #### Input [#input-31]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `filter` | string | No | OData $filter expression (e.g., "CompanyCode eq '1010'") |
  | `top` | number | No | Maximum results to return ($top) |
  | `skip` | number | No | Number of results to skip ($skip) |
  | `orderBy` | string | No | OData $orderby expression |
  | `select` | string | No | Comma-separated fields to return ($select) |
  | `expand` | string | No | Comma-separated navigation properties to expand (e.g., "to\_PurchaseOrderItem") |

  #### Output [#output-31]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP |
  | `data` | json | OData v2 response envelope; collection at output.data.d.results |
  | ↳ `d` | json | OData v2 envelope |
  | ↳ `results` | array | A\_PurchaseOrder entities |
  | ↳ `PurchaseOrder` | string | Purchase order number |
  | ↳ `PurchaseOrderType` | string | PO document type (e.g., NB) |
  | ↳ `CompanyCode` | string | Company code |
  | ↳ `PurchasingOrganization` | string | Purchasing organization |
  | ↳ `PurchasingGroup` | string | Purchasing group |
  | ↳ `Supplier` | string | Supplier business partner key |
  | ↳ `DocumentCurrency` | string | Document currency |
  | ↳ `NetAmount` | string | Net amount of the purchase order |
  | ↳ `CreationDate` | string | Creation date (OData /Date(ms)/) |
  | ↳ `CreatedByUser` | string | User who created the PO |
  | ↳ `PurchaseOrderDate` | string | Purchase order date |
  | ↳ `__next` | string | OData skiptoken URL for next page |
  | ↳ `__count` | string | Total count when $inlinecount=allpages is used |
</ReferenceDetails>

### SAP S/4HANA Get Purchase Order [#sap-s4hana-get-purchase-order]

Retrieve a single purchase order by PurchaseOrder key from SAP S/4HANA Cloud (API\_PURCHASEORDER\_PROCESS\_SRV, A\_PurchaseOrder).

<ReferenceDetails>
  #### Input [#input-32]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `purchaseOrder` | string | Yes | PurchaseOrder key (string, up to 10 characters) |
  | `select` | string | No | Comma-separated fields to return ($select) |
  | `expand` | string | No | Comma-separated navigation properties to expand (e.g., "to\_PurchaseOrderItem") |

  #### Output [#output-32]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP |
  | `data` | json | OData v2 response envelope; entity at output.data.d |
  | ↳ `d` | json | A\_PurchaseOrder entity |
  | ↳ `PurchaseOrder` | string | Purchase order number |
  | ↳ `PurchaseOrderType` | string | PO document type |
  | ↳ `CompanyCode` | string | Company code |
  | ↳ `PurchasingOrganization` | string | Purchasing organization |
  | ↳ `PurchasingGroup` | string | Purchasing group |
  | ↳ `Supplier` | string | Supplier business partner key |
  | ↳ `DocumentCurrency` | string | Document currency |
  | ↳ `NetAmount` | string | Net amount of the purchase order |
  | ↳ `CreationDate` | string | Creation date (OData /Date(ms)/) |
  | ↳ `CreatedByUser` | string | User who created the PO |
  | ↳ `PurchaseOrderDate` | string | Purchase order date |
  | ↳ `ValidityStartDate` | string | Validity start date |
  | ↳ `ValidityEndDate` | string | Validity end date |
  | ↳ `IncotermsClassification` | string | Incoterms classification (e.g., FOB) |
  | ↳ `PaymentTerms` | string | Payment terms key |
  | ↳ `LastChangeDateTime` | string | Last change timestamp (OData /Date(ms)/) |
  | ↳ `to_PurchaseOrderItem` | json | Expanded PO items (when $expand=to\_PurchaseOrderItem) |
</ReferenceDetails>

### SAP S/4HANA Create Purchase Order [#sap-s4hana-create-purchase-order]

Create a purchase order in SAP S/4HANA Cloud (API\_PURCHASEORDER\_PROCESS\_SRV, A\_PurchaseOrder). PurchaseOrder is auto-assigned by SAP from the document number range; provide line items via the body parameter.

<ReferenceDetails>
  #### Input [#input-33]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `purchaseOrderType` | string | Yes | PurchaseOrderType (e.g., "NB" Standard PO) |
  | `companyCode` | string | Yes | CompanyCode (4 chars, e.g., "1010") |
  | `purchasingOrganization` | string | Yes | PurchasingOrganization (4 chars) |
  | `purchasingGroup` | string | Yes | PurchasingGroup (3 chars) |
  | `supplier` | string | Yes | Supplier business partner key (up to 10 chars) |
  | `body` | json | Yes | A\_PurchaseOrder body containing to\_PurchaseOrderItem deep-insert items (required by SAP) plus any additional header fields, e.g., \{"to\_PurchaseOrderItem":\[\{"PurchaseOrderItem":"10","Material":"TG11","OrderQuantity":"5","Plant":"1010","PurchaseOrderQuantityUnit":"PC","NetPriceAmount":"100.00","DocumentCurrency":"USD"}]}. |

  #### Output [#output-33]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP |
  | `data` | json | OData v2 response envelope; created entity at output.data.d |
  | ↳ `d` | json | Created A\_PurchaseOrder entity |
  | ↳ `PurchaseOrder` | string | Auto-assigned purchase order number |
  | ↳ `PurchaseOrderType` | string | PO document type |
  | ↳ `CompanyCode` | string | Company code |
  | ↳ `PurchasingOrganization` | string | Purchasing organization |
  | ↳ `PurchasingGroup` | string | Purchasing group |
  | ↳ `Supplier` | string | Supplier business partner key |
  | ↳ `DocumentCurrency` | string | Document currency |
  | ↳ `NetAmount` | string | Net amount of the purchase order |
  | ↳ `CreationDate` | string | Creation date (OData /Date(ms)/) |
  | ↳ `to_PurchaseOrderItem` | json | Created PO items returned in deep insert |
</ReferenceDetails>

### SAP S/4HANA Update Purchase Order [#sap-s4hana-update-purchase-order]

Update fields on an A\_PurchaseOrder header in SAP S/4HANA Cloud (API\_PURCHASEORDER\_PROCESS\_SRV). Uses HTTP MERGE (OData v2 partial update) — only the fields you provide are written; existing values are preserved. Header-only — line-item changes are not supported via deep update on the header (SAP KBA 2833338); use the A\_PurchaseOrderItem entity directly to modify items. If-Match defaults to a wildcard - for safe concurrent updates pass the ETag from a prior GET to avoid lost updates.

<ReferenceDetails>
  #### Input [#input-34]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `purchaseOrder` | string | Yes | PurchaseOrder key to update (string, up to 10 characters) |
  | `body` | json | Yes | JSON object with A\_PurchaseOrder fields to update (e.g., \{"PurchasingGroup":"002","PurchaseOrderDate":"/Date(1735689600000)/"}) |
  | `ifMatch` | string | No | If-Match ETag for optimistic concurrency. Defaults to "\*" (unconditional). |

  #### Output [#output-34]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP (204 on success) |
  | `data` | json | Null on 204 success, or OData v2 envelope with updated A\_PurchaseOrder at output.data.d |
  | ↳ `d` | json | Updated A\_PurchaseOrder entity (if returned) |
  | ↳ `PurchaseOrder` | string | Purchase order number |
  | ↳ `PurchaseOrderType` | string | PO document type |
  | ↳ `CompanyCode` | string | Company code |
  | ↳ `PurchasingGroup` | string | Purchasing group |
  | ↳ `Supplier` | string | Supplier key |
  | ↳ `NetAmount` | string | Net amount |
  | ↳ `DocumentCurrency` | string | Document currency |
  | ↳ `LastChangeDateTime` | string | Last change timestamp |
</ReferenceDetails>

### SAP S/4HANA List Supplier Invoices [#sap-s4hana-list-supplier-invoices]

List supplier invoices from SAP S/4HANA Cloud (API\_SUPPLIERINVOICE\_PROCESS\_SRV, A\_SupplierInvoice) with optional OData $filter, $top, $skip, $orderby, $select, $expand.

<ReferenceDetails>
  #### Input [#input-35]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `filter` | string | No | OData $filter expression (e.g., "InvoicingParty eq '17300001'") |
  | `top` | number | No | Maximum results to return ($top) |
  | `skip` | number | No | Number of results to skip ($skip) |
  | `orderBy` | string | No | OData $orderby expression |
  | `select` | string | No | Comma-separated fields to return ($select) |
  | `expand` | string | No | Comma-separated navigation properties to expand ($expand) |

  #### Output [#output-35]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP |
  | `data` | json | OData v2 response envelope; collection at output.data.d.results |
  | ↳ `d` | json | OData v2 envelope |
  | ↳ `results` | array | A\_SupplierInvoice entities |
  | ↳ `SupplierInvoice` | string | Supplier invoice number |
  | ↳ `FiscalYear` | string | Fiscal year |
  | ↳ `CompanyCode` | string | Company code |
  | ↳ `DocumentDate` | string | Invoice document date |
  | ↳ `PostingDate` | string | Posting date |
  | ↳ `InvoicingParty` | string | Invoicing party (supplier key) |
  | ↳ `InvoiceGrossAmount` | string | Gross invoice amount |
  | ↳ `DocumentCurrency` | string | Document currency |
  | ↳ `AccountingDocumentType` | string | Accounting document type |
  | ↳ `PaymentTerms` | string | Payment terms key |
  | ↳ `DueCalculationBaseDate` | string | Baseline date for due-date calculation |
  | ↳ `SupplierInvoiceIDByInvcgParty` | string | Reference number used by the invoicing party |
  | ↳ `PaymentMethod` | string | Payment method |
  | ↳ `TaxIsCalculatedAutomatically` | boolean | Whether tax is calculated automatically |
  | ↳ `ManualCashDiscount` | string | Manually entered cash discount amount |
  | ↳ `BusinessPlace` | string | Business place (jurisdiction code) |
  | ↳ `__next` | string | OData skiptoken URL for next page |
</ReferenceDetails>

### SAP S/4HANA Get Supplier Invoice [#sap-s4hana-get-supplier-invoice]

Retrieve a single supplier invoice by composite key (SupplierInvoice + FiscalYear) from SAP S/4HANA Cloud (API\_SUPPLIERINVOICE\_PROCESS\_SRV, A\_SupplierInvoice).

<ReferenceDetails>
  #### Input [#input-36]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `supplierInvoice` | string | Yes | SupplierInvoice key (string, up to 10 characters) |
  | `fiscalYear` | string | Yes | FiscalYear (4-character year, e.g., "2024") |
  | `select` | string | No | Comma-separated fields to return ($select) |
  | `expand` | string | No | Comma-separated navigation properties to expand ($expand) |

  #### Output [#output-36]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP |
  | `data` | json | OData v2 response envelope; entity at output.data.d |
  | ↳ `d` | json | A\_SupplierInvoice entity |
  | ↳ `SupplierInvoice` | string | Supplier invoice number |
  | ↳ `FiscalYear` | string | Fiscal year |
  | ↳ `CompanyCode` | string | Company code |
  | ↳ `DocumentDate` | string | Invoice document date |
  | ↳ `PostingDate` | string | Posting date |
  | ↳ `InvoicingParty` | string | Invoicing party (supplier key) |
  | ↳ `InvoiceGrossAmount` | string | Gross invoice amount |
  | ↳ `DocumentCurrency` | string | Document currency |
  | ↳ `AccountingDocumentType` | string | Accounting document type |
  | ↳ `PaymentTerms` | string | Payment terms key |
  | ↳ `DueCalculationBaseDate` | string | Baseline date for due-date calculation |
  | ↳ `SupplierInvoiceIDByInvcgParty` | string | Reference number used by the invoicing party |
  | ↳ `PaymentMethod` | string | Payment method |
  | ↳ `TaxIsCalculatedAutomatically` | boolean | Whether tax is calculated automatically |
  | ↳ `ManualCashDiscount` | string | Manually entered cash discount amount |
  | ↳ `BusinessPlace` | string | Business place (jurisdiction code) |
</ReferenceDetails>

### SAP S/4HANA OData Query [#sap-s4hana-odata-query]

Make an arbitrary OData v2 call against any SAP S/4HANA Cloud whitelisted Communication Scenario. Use when no dedicated tool exists for the entity. The integration handles auth, CSRF, and OData unwrapping. For write operations (POST/PUT/PATCH/MERGE/DELETE), pass an If-Match ETag obtained from a prior GET to avoid lost updates; misuse will mutate production data.

<ReferenceDetails>
  #### Input [#input-37]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `subdomain` | string | No | SAP BTP subaccount subdomain (technical name of your subaccount, not the S/4HANA host) |
  | `region` | string | No | BTP region (e.g. eu10, us10) |
  | `clientId` | string | No | OAuth client ID from the S/4HANA Communication Arrangement |
  | `clientSecret` | string | No | OAuth client secret from the S/4HANA Communication Arrangement |
  | `deploymentType` | string | No | Deployment type: cloud\_public (default), cloud\_private, or on\_premise |
  | `authType` | string | No | Authentication type: oauth\_client\_credentials (default) or basic |
  | `baseUrl` | string | No | Base URL of the S/4HANA host (Cloud Private / On-Premise) |
  | `tokenUrl` | string | No | OAuth token URL (Cloud Private / On-Premise + OAuth) |
  | `username` | string | No | Username for HTTP Basic auth |
  | `password` | string | No | Password for HTTP Basic auth |
  | `service` | string | Yes | OData service name (e.g., "API\_BUSINESS\_PARTNER", "API\_SALES\_ORDER\_SRV") |
  | `path` | string | Yes | Path inside the service (e.g., "/A\_BusinessPartner" or "/A\_BusinessPartner('1000123')") |
  | `method` | string | No | HTTP method: GET (default), POST, PATCH, PUT, DELETE, MERGE |
  | `query` | json | No | OData query parameters as JSON object or query string (e.g., \{"$filter":"BusinessPartnerCategory eq '1'","$top":10}). $format=json is added automatically when omitted. |
  | `body` | json | No | JSON request body for write operations |
  | `ifMatch` | string | No | ETag value for the If-Match header (required by SAP for PATCH/PUT/DELETE on existing entities) |

  #### Output [#output-37]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | HTTP status code returned by SAP |
  | `data` | json | Parsed OData payload (entity, collection, or null on 204) |
</ReferenceDetails>
