SAP Integration Suite is SAP's enterprise iPaaS running on SAP Business Technology Platform (BTP). It consolidates five previously separate integration tools into a single subscription. The suite is continuously updated (no numbered versions). It replaces SAP PI/PO, which is in maintenance mode. [src1, src4]
| Property | Value |
|---|---|
| Vendor | SAP |
| System | SAP Integration Suite (Cloud, continuously updated) |
| API Surface | REST, SOAP, OData, IDoc, RFC, AMQP, AS2/AS4, SFTP, JDBC, Kafka, Mail, 250+ adapters |
| Current Version | Continuously updated (Q1 2026 latest) |
| Editions Covered | Starter, Standard, Premium (Subscription) / CPEA / BTPEA / PAYG |
| Deployment | Cloud (SAP BTP) + Edge Integration Cell (hybrid on-premise/private cloud) |
| API Docs | SAP Integration Suite Documentation |
| Status | GA (General Availability) |
SAP Integration Suite is organized into five core capabilities. [src1, src4]
| Capability | Purpose | Key Features | Included In |
|---|---|---|---|
| Cloud Integration (CPI) | A2A and B2B message processing | iFlow designer, 250+ adapters, message mapping, routing, transformation, monitoring | All editions |
| API Management | API lifecycle governance | API proxy creation, policies (rate limit, security, caching), developer portal, analytics | All editions |
| Integration Advisor | B2B mapping acceleration | AI-assisted mapping proposals, EDI standards (EDIFACT, X12, cXML), MIGs | Standard, Premium |
| Trading Partner Management | B2B partner onboarding | Partner profiles, communication channels, agreement management, AS2/EDIFACT/X12 | Standard, Premium |
| Open Connectors | Pre-built 3rd-party connectors | 170+ connectors to non-SAP SaaS (being deprecated in favor of native adapters) | All editions |
| Category | Adapters | Direction |
|---|---|---|
| Protocol | HTTP, SOAP (1.x/1.2), REST, OData (V2/V4), AMQP 1.0, AS2, AS4, SFTP, FTP, Mail, XI | Sender + Receiver |
| SAP Connectivity | IDoc, RFC, SuccessFactors, Ariba Network, SAP Concur, S/4HANA OData | Sender + Receiver |
| Messaging | JMS (internal), Kafka, AMQP (external), SAP Event Mesh | Sender + Receiver |
| Database | JDBC (Oracle, SQL Server, PostgreSQL, MySQL, HANA, MariaDB, DB2) | Receiver only |
| Cloud Storage | Amazon S3, Google Cloud Storage, Azure Blob, Box, OneDrive, Dropbox | Receiver |
| B2B/EDI | AS2, AS4, EDIFACT, X12, cXML (via Integration Advisor + TPM) | Sender + Receiver |
| Application | Salesforce, ServiceNow, Slack, MS Teams, Workday, DocuSign, Shopify, HubSpot | Receiver (varies) |
| Internal | ProcessDirect (no message counting), Loopback, Data Store | Internal only |
| Rule | Detail | Impact |
|---|---|---|
| Base unit | 1 message = up to 250 KB combined payload | Larger payloads increase count |
| Oversize calculation | Payload > 250 KB: divide by 250 KB, round up (2 MB = 9 messages) | Large file transfers are expensive |
| Splitter operations | Each split output is a separate outgoing message | 1-to-100 split = 100 messages |
| Retry counting | Each retry attempt counts as a new message | Configure max retries carefully |
| Request-reply | Reply payload in synchronous calls is counted | Both directions consume quota |
| Multi-environment | DEV, QAS, PROD tenants metered independently | Test traffic costs real money |
| Exempt Adapter/Feature | Why It's Free |
|---|---|
| ProcessDirect | Internal in-process communication — no outgoing network call |
| Internal JMS queues | Messages between iFlows via JMS are not counted as outgoing |
| Standard SAP content (unmodified) | Pre-delivered SAP-to-SAP integration packages with no customization |
| Monitoring/logging API calls | Operations API calls for monitoring do not count |
| Resource | Limit | Notes |
|---|---|---|
| Number of JMS queues | 9 (expandable) | Contact SAP for more |
| Queue storage capacity | 4 GB total | Shared across all queues |
| Message retention | 30 days max | Expired messages auto-deleted |
| Max message size | 10 MB | Per individual JMS message |
| Transactions | 1 consumer per queue | No competing consumers |
[src8]
| Monthly Volume | Cost per 10K Block | Notes |
|---|---|---|
| 0–10,000 | Included (free) | Base quota with every subscription |
| 10,001–500,000 | ~€6.08 / 10K | Standard list price |
| 500,001–2,500,000 | ~€4.50 / 10K | Volume discount tier |
| 2,500,001–10,000,000 | ~€2.75 / 10K | High-volume tier |
| 10,000,000+ | Negotiable | Contact SAP for enterprise pricing |
| Edge Integration Cell | 50% of above | Factor 0.5 applied to Edge messages |
| Flow | Use When | Mechanism | Notes |
|---|---|---|---|
| OAuth 2.0 Client Credentials | Programmatic API access | BTP service key with clientId + clientSecret | Standard for automation |
| SAP Cloud Connector | On-premise backend connectivity | Secure tunnel via agent installed on-premise | No inbound firewall ports required |
| Basic Auth | Simple sender adapters (HTTPS, SOAP) | Username/password via credential store | Use only with TLS; prefer OAuth |
| Client Certificate | Mutual TLS for B2B partners | X.509 certificate exchange | Required for AS2 |
| SAP Principal Propagation | User-context operations through to on-prem SAP | SSO token forwarded via Cloud Connector | Maps BTP user to SAP user |
[src1]
START -- User needs to integrate with SAP Integration Suite
|-- What systems are involved?
| |-- SAP-to-SAP --> Check Business Accelerator Hub for pre-built content
| | |-- Pre-built available? YES --> Deploy standard package (free if unmodified)
| | +-- NO --> Build custom iFlow with SAP adapters (IDoc, RFC, OData)
| |-- SAP-to-non-SAP --> Protocol adapters (HTTP, REST, SOAP, OData) or app-specific
| |-- B2B/EDI --> Trading Partner Management + AS2/EDIFACT/X12
| +-- Non-SAP-to-non-SAP --> Possible but not recommended; use dedicated iPaaS
|-- Integration pattern?
| |-- Real-time (<1s) --> Direct HTTP/REST/SOAP adapter; API Mgmt for throttling
| |-- Batch (scheduled) --> Timer-triggered iFlow + SFTP/JDBC/OData
| |-- Event-driven --> SAP Event Mesh + AMQP; or Webhook/Kafka for non-SAP
| +-- File-based --> SFTP/FTP adapter + ProcessDirect internal routing (free)
|-- Need on-premise connectivity?
| |-- Cloud Connector available --> Tunnel (RFC, IDoc, HTTP)
| +-- Latency-sensitive --> Edge Integration Cell (50% message discount)
+-- Cost optimization?
|-- Use ProcessDirect between iFlows (no message counting)
|-- Avoid unnecessary splitters
+-- Monitor consumption monthly in cockpit
| Capability | What It Does | When to Use | Key Metric |
|---|---|---|---|
| Cloud Integration | Process, transform, route messages | All A2A/B2B integrations | Messages/month |
| API Management | Expose, secure, throttle APIs | API productization, partner APIs | API calls/month |
| Integration Advisor | Generate B2B message mappings | EDI onboarding (EDIFACT, X12) | Mapping proposals/month |
| Trading Partner Mgmt | Manage B2B partner relationships | Multi-partner EDI scenarios | Partners managed |
| Open Connectors | Pre-built SaaS connectors (170+) | Quick non-SAP connectivity (being deprecated) | API calls/month |
| Model | Commitment | Best For | Price Range |
|---|---|---|---|
| Subscription (Starter) | Annual/multi-year | Small teams, < 50K messages/month | ~$5,500/month |
| Subscription (Standard) | Annual/multi-year | Mid-market, standard features | Negotiable |
| Subscription (Premium) | Annual/multi-year | Enterprise, all capabilities | Negotiable |
| CPEA/BTPEA | Credit pool commitment | Multi-service BTP customers | Volume-discounted credits |
| Pay-As-You-Go | None | Evaluation, spiky workloads | List price (highest/unit) |
Subscribe to SAP Integration Suite in your BTP subaccount and activate capabilities. [src1]
# Via BTP CLI
btp login --sso
btp subscribe integration-suite --plan=standard --subaccount=<subaccount-id>
btp assign role-collection Integration_Provisioner --to-user <email> --subaccount=<subaccount-id>
Verify: BTP cockpit → Subscriptions → SAP Integration Suite shows "Subscribed"
Create OAuth credentials for programmatic access. [src1]
btp create service-instance --plan=api --service=it-rt --name=cpi-api-access --subaccount=<subaccount-id>
btp create service-key cpi-api-access --name=cpi-api-key --subaccount=<subaccount-id>
btp get service-key cpi-api-access cpi-api-key --subaccount=<subaccount-id>
Verify: Response contains clientid, clientsecret, and tokenurl fields
Design an iFlow in the web UI, then monitor via API. [src1]
TOKEN=$(curl -s -X POST "$TOKEN_URL" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials&client_id=$CLIENT_ID&client_secret=$CLIENT_SECRET" \
| jq -r '.access_token')
curl -s -X GET "https://<tmn-host>/api/v1/IntegrationDesigntimeArtifacts" \
-H "Authorization: Bearer $TOKEN" -H "Accept: application/json"
Verify: HTTP 200 with list of deployed artifacts
Use the Operations API to check message logs. [src1]
curl -s -X GET "https://<tmn-host>/api/v1/MessageProcessingLogs?\$top=50&\$orderby=LogEnd desc" \
-H "Authorization: Bearer $TOKEN" -H "Accept: application/json"
# Failed messages only
curl -s -X GET "https://<tmn-host>/api/v1/MessageProcessingLogs?\$filter=Status eq 'FAILED'" \
-H "Authorization: Bearer $TOKEN" -H "Accept: application/json"
Verify: Response contains MessageProcessingLogs array with Status, LogStart, LogEnd, CorrelationId
# Input: SAP Integration Suite tenant URL, OAuth credentials
# Output: List of deployed integration flows with status
import requests
TOKEN_URL = "https://<auth-host>/oauth/token"
TENANT_URL = "https://<tmn-host>/api/v1"
CLIENT_ID = "<client-id>"
CLIENT_SECRET = "<client-secret>"
token_resp = requests.post(TOKEN_URL,
data={"grant_type": "client_credentials"},
auth=(CLIENT_ID, CLIENT_SECRET), timeout=30)
token_resp.raise_for_status()
access_token = token_resp.json()["access_token"]
headers = {"Authorization": f"Bearer {access_token}", "Accept": "application/json"}
iflows = requests.get(f"{TENANT_URL}/IntegrationRuntimeArtifacts", headers=headers, timeout=30)
iflows.raise_for_status()
for a in iflows.json().get("d", {}).get("results", []):
print(f" {a['Id']} | Status: {a['Status']} | Version: {a['Version']}")
// Input: SAP Integration Suite tenant URL, OAuth credentials
// Output: Recent failed message processing logs
const axios = require('axios'); // [email protected]
async function getFailedMessages(tenantUrl, tokenUrl, clientId, clientSecret) {
const tokenResp = await axios.post(tokenUrl, 'grant_type=client_credentials', {
auth: { username: clientId, password: clientSecret },
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
});
const token = tokenResp.data.access_token;
const logs = await axios.get(`${tenantUrl}/api/v1/MessageProcessingLogs`, {
params: { '$filter': "Status eq 'FAILED'", '$top': 100, '$orderby': 'LogEnd desc' },
headers: { 'Authorization': `Bearer ${token}`, 'Accept': 'application/json' }
});
return logs.data.d.results.map(log => ({
id: log.MessageGuid, iflow: log.IntegrationFlowName,
status: log.Status, error: log.ErrorMessage, timestamp: log.LogEnd
}));
}
# Input: CLIENT_ID, CLIENT_SECRET, TOKEN_URL, TMN_HOST
# Output: Integration flow status and message counts
export TOKEN=$(curl -s -X POST "$TOKEN_URL" \
-u "$CLIENT_ID:$CLIENT_SECRET" -d "grant_type=client_credentials" | jq -r '.access_token')
# List deployed artifacts
curl -s "https://$TMN_HOST/api/v1/IntegrationRuntimeArtifacts" \
-H "Authorization: Bearer $TOKEN" -H "Accept: application/json" \
| jq '.d.results[] | {Id, Status, Version}'
# Count messages processed today
curl -s "https://$TMN_HOST/api/v1/MessageProcessingLogs/\$count" \
-H "Authorization: Bearer $TOKEN"
| Approach | Tool | Best For | Complexity | Reusability |
|---|---|---|---|---|
| Message Mapping | Graphical mapper | Simple field-to-field transformations | Low | Per-iFlow |
| XSLT Mapping | XSLT 2.0/3.0 | Complex XML transformations | Medium | Reusable |
| Groovy Script | Scripting step | Custom logic, API calls during mapping | High | Script collection |
| Integration Advisor MIG | AI-assisted tool | B2B/EDI mappings (EDIFACT, X12) | Low (AI-assisted) | MIG artifact |
| Value Mapping | Key-value lookup | Code translations (country, currency) | Low | Shared |
| Error | Meaning | Cause | Resolution |
|---|---|---|---|
| MPL Status: FAILED | Message processing failed | Unhandled exception in iFlow | Check MPL error details + stack trace |
| HTTP 401 | Authentication failure | Expired token, wrong credentials | Regenerate service key, check roles |
| HTTP 403 | Authorization failure | Missing ESBMessaging.send scope | Assign required role collections |
| HTTP 429 | Rate limit exceeded | API Management policy limit hit | Exponential backoff; increase quota |
| Cloud Connector refused | On-premise unreachable | CC down, wrong virtual host | Check CC admin console status |
| JMS: Queue full | Storage exhausted | 4 GB tenant limit reached | Increase consumption, purge old msgs |
| PKIX path building failed | SSL certificate error | Untrusted CA, expired cert | Import cert into iFlow keystore |
[src1]
Use ProcessDirect for internal fan-out; batch outgoing calls; pre-split files before ingestion. [src2]Monitor MPL FAILED status; automate credential rotation; use SAP Cloud ALM. [src1]Deploy HA mode (primary + shadow on separate hosts). [src1]Implement sequence numbering in payload; or use single-threaded Timer trigger. [src8]Normalize to UTC before mapping; use OData V4 DateTimeOffset. [src1]// BAD -- Each HTTP call between iFlows counts as a billable message
// This doubles or triples your message cost for multi-step processing
def result = new URL("https://tenant.hci.sap/http/internal-step2").text
// GOOD -- ProcessDirect is internal, in-process, NOT counted as a message
// Configure sender iFlow with ProcessDirect sender adapter
// Address: /internal/step2 -- zero message cost
// BAD -- One iFlow with 50+ steps, multiple splitters, complex exception handling
// Impossible to debug, monitor, or maintain
// A single failure in step 47 requires reprocessing all 50 steps
// GOOD -- Break into focused iFlows:
// 1. Receiver: Accept, validate, persist to JMS
// 2. Processor: Transform and enrich (JMS-triggered)
// 3. Sender: Deliver to target (ProcessDirect from #2)
// Each independently deployable, testable, monitorable
// BAD -- Running load tests on QAS with 100K messages
// "It's just test" -- but SAP counts every message
// Surprise: 10x quota overage on monthly invoice
// GOOD -- Check consumption monthly: Settings -> Metering
// Set alerts at 80% quota; use ProcessDirect for internal test routing
// Consider Edge Integration Cell for high-volume tests (50% discount)
Calculate actual count by dividing average payload by 250 KB. Use cockpit metering dashboard. [src2]Always check api.sap.com for existing packages before building custom. [src1]Deploy primary + shadow instances on separate hosts. Test failover quarterly. [src1]Always specify OData version explicitly. Use V4 for new integrations. [src1]Use Content Transport (CTS+) or TMS for structured DEV -> QAS -> PROD promotion. [src1]Follow SAP sizing: min 3 nodes, 8 vCPU + 32 GB RAM each for production. [src5]# Check OAuth token validity
curl -s -X POST "$TOKEN_URL" -u "$CLIENT_ID:$CLIENT_SECRET" \
-d "grant_type=client_credentials" | jq '{access_token: .access_token[:20], expires_in}'
# List deployed iFlows with status
curl -s "https://$TMN_HOST/api/v1/IntegrationRuntimeArtifacts" \
-H "Authorization: Bearer $TOKEN" -H "Accept: application/json" \
| jq '.d.results[] | {Id, Status, Version, DeployedOn}'
# Count messages processed today
curl -s "https://$TMN_HOST/api/v1/MessageProcessingLogs/\$count?\$filter=LogStart gt datetime'$(date -u +%Y-%m-%dT00:00:00)'" \
-H "Authorization: Bearer $TOKEN"
# Check failed messages with errors
curl -s "https://$TMN_HOST/api/v1/MessageProcessingLogs?\$filter=Status eq 'FAILED'&\$top=10" \
-H "Authorization: Bearer $TOKEN" -H "Accept: application/json" \
| jq '.d.results[] | {MessageGuid, IntegrationFlowName, ErrorMessage}'
# Check JMS queue status
curl -s "https://$TMN_HOST/api/v1/JmsResources" \
-H "Authorization: Bearer $TOKEN" -H "Accept: application/json" \
| jq '.d.results[] | {Name, MessageCount, StorageUsage}'
| Quarter | Key Changes | Impact | Migration Notes |
|---|---|---|---|
| Q1 2026 | Edge Integration Cell B2B, Kafka improvements | New B2B scenarios on EIC | Opt-in, no breaking changes |
| Q4 2025 | BTPEA replaces CPEA for new contracts, Google Pub/Sub adapter | Licensing model change | Existing CPEA honored until renewal |
| Q3 2025 | Edge Integration Cell GA, RFC on EIC, 48h offline mode | Hybrid without Cloud Connector | Requires Kubernetes 1.27+ |
| Q2 2025 | Integration Advisor AI mapping, Salesforce Pub/Sub adapter | Faster B2B onboarding | Requires capability activation |
| 2024 | Open Connectors deprecation announced, BTPEA introduced | Plan migration off Open Connectors | Start migrating to native adapters |
SAP communicates deprecations via the Roadmap Explorer and quarterly release notes. Open Connectors deprecation announced 2024 with multi-year migration window. SAP PI/PO mainstream maintenance ends December 2027. Typical deprecation notice: 12-24 months. [src1, src5]
| Use When | Don't Use When | Use Instead |
|---|---|---|
| Integrating SAP-to-SAP (S/4HANA, SF, Ariba) | No SAP systems at all | MuleSoft, Boomi, Workato, or cloud-native integration |
| Need pre-built SAP content (2,500+ packages) | Simple webhook-to-webhook routing | Zapier, Make, or n8n |
| B2B/EDI with trading partners | Only API gateway without transformation | Kong, Apigee, AWS API Gateway |
| Migrating from SAP PI/PO to cloud | Real-time streaming analytics | Apache Kafka + Kafka Streams/Flink |
| Hybrid cloud/on-premise (Edge Integration Cell) | Sub-10ms latency for HFT/IoT | Direct point-to-point or edge compute |
| Consolidated SAP BTP billing | Budget is primary constraint, low volume | Open-source (Apache Camel, WSO2) |