---
cuppy_hub: sap
cuppy_path: reference/connectivity/btp-destinations-and-cloud-connector.md
cuppy_section: docs
cuppy_doc: 62FK-0MWZ
cuppy_doc_uuid: 1f7a2df6-ae2e-4e00-a67c-634f63ce6081
cuppy_permalink: https://cuppy.io/sap/d/62FK-0MWZ
cuppy_version: 1
cuppy_updated: 2026-10-23T16:16:52.575Z
cuppy_canonical: https://cuppy.io/sap/docs/reference/connectivity/btp-destinations-and-cloud-connector
cuppy_mcp: https://cuppy.io/mcp
cuppy_body_sha256: e4ac09692bf1dd1fb4d4913fb84f7c04a9f123e23149c22e5335cac90eeb2bfc
# cuppy_body_sha256 is over the document body ALONE, excluding both generated blocks.
---


# BTP destinations and the Cloud Connector

## Destinations

A **destination** is a named record in a BTP subaccount (or a service instance) that holds:
- `URL`;
- `ProxyType`: `Internet` (the default), `OnPremise` (through the Cloud Connector) or `PrivateLink`;
- `Authentication` and its properties.

Code asks for a destination by name, so URLs and secrets stay out of the code.

| `Authentication` value (examples) | Use for |
|---|---|
| `NoAuthentication` | Public endpoints, or the sandbox with an API-key header (below) |
| `BasicAuthentication` | A communication user on S/4HANA Cloud, or a technical user on-premise |
| `ClientCertificateAuthentication` | Certificate-based technical access |
| `OAuth2ClientCredentials` | App-to-app OAuth. Properties: `clientId`, client secret, `tokenServiceURL` |
| `PrincipalPropagation` | The signed-in BTP user is mapped to an on-premise user through the Cloud Connector. Properties: `ProxyType: OnPremise`, optionally `CloudConnectorLocationId` |
| `OAuth2SAMLBearerAssertion`, `OAuth2UserTokenExchange`, `OAuth2JWTBearer`, `OAuth2TechnicalUserPropagation`, … | User propagation to cloud systems such as S/4HANA Cloud and SuccessFactors |

SAP's destination guide lists 17 authentication types in all, plus client assertions instead of secrets. The hub's reading: start with `BasicAuthentication` or `OAuth2ClientCredentials` for a technical integration user, and move to principal propagation when the SAP-side audit must show the real user.

**Custom headers and query parameters:**
- Add destination properties `URL.headers.<Name>` and `URL.queries.<Name>`, for example `URL.headers.APIKey` for the sandbox key, or `URL.queries.language = EN`. They're sent on every call.
- A `sap-client` property is sent as the `sap-client` header by the SAP Cloud SDK.
- Not every client supports these properties. SAP notes it depends on the consumption method.

**Creating destinations:**
- in the BTP cockpit (from scratch or from a template);
- on service-instance creation;
- in an MTA descriptor;
- with the **Destination service REST API**.

## How code finds a destination (SAP Cloud SDK)

`executeHttpRequest({ destinationName: "S4", jwt }, …)`:
1. looks in the `destinations` **environment variable**, which is handy locally and in tests;
2. otherwise asks the **Destination service** of the bound BTP subaccount, using the caller's JWT.

For `ProxyType: OnPremise`:
- the app needs a **connectivity service binding**;
- the SDK uses that binding's client credentials to get a token, gets the connectivity proxy's host and authorization, and sends the request through the proxy to the Cloud Connector.

## The Cloud Connector

- Runs **inside the customer's network** as a "reverse invoke proxy". It opens an **outbound** tunnel to BTP, so no inbound firewall ports open.
- Exposes **only allowlisted** back-end systems, under a virtual host and port, and only the paths and resources the administrator allows. Access control is configured per protocol: HTTP, RFC, TCP, LDAP.
- Can propagate the cloud user's identity (**principal propagation**). Variants use the IAS token, OIDC token, corporate IdP or user exchange token, and RFC.
- Recovers connections automatically, audit-logs inbound traffic and configuration changes, and supports high availability.
- One subaccount can connect several Cloud Connectors. They're told apart by **location ID** (`CloudConnectorLocationId` on the destination).

## Where calls fail

| Layer | Typical failure | Check |
|---|---|---|
| Destination lookup | Not found | The name, the subaccount, or the `destinations` variable locally |
| Token (OAuth types) | 401 from the token service | `tokenServiceURL`, client ID and secret, the scope for the API |
| Connectivity proxy | No connectivity binding; the location ID doesn't match | The app's service bindings; the Cloud Connector's location ID |
| Cloud Connector | Back end not exposed, or the path isn't allowlisted | The Cloud Connector's access control: virtual host, port, path prefix |
| SAP back end | 401, 403 or 404 from Gateway | The user's roles, the service activation, CSRF (`reference/connectivity/odata-calls-csrf-and-errors.md`) |


---
<!-- cuppy -->
You are reading one file. The same content is free over MCP at https://cuppy.io/mcp with no signup: ranked search across all 10 documents in this hub, the merged view when you work in a layer, known workarounds matched to the error you hit, and depth control so you spend tokens on what you need. Start with the `_hello` tool. How to connect: https://cuppy.io/sap/ Something wrong in this document? Report it with the `session feedback` tool on the same endpoint.
<!-- /cuppy -->
