// |
| name | sap-btp-service-manager |
| description | This skill provides comprehensive knowledge for SAP Service Manager on SAP Business Technology Platform (BTP). It should be used when managing service instances, bindings, brokers, and platforms across Cloud Foundry, Kyma, Kubernetes, and other environments. Use when provisioning services via SMCTL CLI, BTP CLI, or REST APIs, configuring OAuth2 authentication, working with the SAP BTP Service Operator in Kubernetes, troubleshooting service consumption issues, or implementing cross-environment service management. Keywords: SAP Service Manager, BTP, service instances, service bindings, SMCTL, service broker, OSBAPI, Cloud Foundry, Kyma, Kubernetes, service-manager, service-operator-access, subaccount-admin, OAuth2, X.509, service marketplace, service plans, rate limiting, cf create-service, btp create services/instance, ServiceInstance CRD, ServiceBinding CRD |
| license | GPL-3.0 |
| metadata | {"version":"1.1.0","last_verified":"2025-11-27T00:00:00.000Z","documentation_source":"https://github.com/SAP-docs/sap-btp-service-manager","documentation_files_analyzed":"80+","reference_files":6,"template_files":5,"status":"production"} |
Comprehensive skill for managing services across SAP BTP environments using SAP Service Manager.
Use this skill when working on tasks involving:
Service Instance Management:
Service Binding Management:
Platform & Broker Management:
Authentication & Authorization:
Kubernetes/Kyma Integration:
API & CLI Operations:
Troubleshooting:
# Download from: https://github.com/Peripli/service-manager-cli/releases/latest
tar -xzf smctl-*.tar.gz && chmod +x smctl
sudo mv smctl /usr/local/bin/ && smctl --version
# Interactive login
smctl login -a https://service-manager.cfapps.<region>.hana.ondemand.com \
--param subdomain=<subdomain>
# Client credentials
smctl login -a https://service-manager.cfapps.<region>.hana.ondemand.com \
--param subdomain=<subdomain> --auth-flow client-credentials \
--client-id <id> --client-secret <secret>
# Browse services
smctl marketplace
# Create instance (async)
smctl provision my-instance <service> <plan>
# Create binding
smctl bind my-instance my-binding
SAP Service Manager is the central registry for service brokers and platforms in SAP BTP.
Primary Resources:
| Plan | Purpose | Scopes |
|---|---|---|
| subaccount-admin | Full management | 10 scopes (manage + read) |
| subaccount-audit | Read-only monitoring | 6 scopes |
| container | Isolated management | 7 scopes |
Via Cockpit: Services > Instances > Create > Select service/plan > Cloud Foundry runtime
Via CF CLI:
# Create instance
cf create-service <service> <plan> <instance-name>
# Bind to app
cf bind-service <app-name> <instance-name>
# Create service key (external access)
cf create-service-key <instance-name> <key-name>
1. Install cert-manager:
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.12.0/cert-manager.yaml
2. Create Service Manager resources:
smctl provision sm-operator service-manager service-operator-access --mode sync
smctl bind sm-operator sm-operator-binding --mode sync
smctl get-binding sm-operator-binding -o json
3. Deploy operator:
helm repo add sap-btp-operator https://sap.github.io/sap-btp-service-operator/
helm install sap-btp-operator sap-btp-operator/sap-btp-operator \
--namespace sap-btp-operator --create-namespace \
--set manager.secret.clientid=<id> \
--set manager.secret.clientsecret=<secret>
ServiceInstance:
apiVersion: services.cloud.sap.com/v1alpha1
kind: ServiceInstance
metadata:
name: my-service-instance
spec:
serviceOfferingName: <service-offering>
servicePlanName: <plan-name>
ServiceBinding:
apiVersion: services.cloud.sap.com/v1alpha1
kind: ServiceBinding
metadata:
name: my-binding
spec:
serviceInstanceName: my-service-instance
Reference: See references/kubernetes-operator.md for complete guide.
Alternative to SMCTL using the unified BTP CLI:
# Create instance
btp create services/instance \
--subaccount <subaccount-id> \
--service <service-name> \
--plan <plan-id> \
--parameters '{"key":"value"}' \
--labels '{"env":["dev"]}'
# Get instance details
btp get services/instance <instance-id> \
--subaccount <subaccount-id> \
--show-parameters
# Create binding
btp create services/binding \
--subaccount <subaccount-id> \
--binding <binding-name> \
--service-instance <instance-id>
# Platform management
btp list services/platform --subaccount <id>
btp register services/platform --subaccount <id> --name <name> --type <type>
btp unregister services/platform <platform-id> --subaccount <id>
curl '<uaa_url>/oauth/token' -X POST \
-H 'Accept: application/json' \
-d 'grant_type=client_credentials&client_id=<clientid>&client_secret=<clientsecret>'
Response:
{
"access_token": "<token>",
"token_type": "bearer",
"expires_in": 43199,
"scope": "<xsappname>.job.read <xsappname>.event.read"
}
https://service-manager.cfapps.<region>.hana.ondemand.com/v1/
Three concurrent tiers enforced:
HTTP 429 returned with Retry-After header when limits exceeded.
Query parameters:
fieldQuery - Filter by resource attributeslabelQuery - Filter by resource labelseq, ne, in, contains, etc.Reference: See references/rate-limiting-filtering.md for complete rate limits and filtering details.
| Category | Commands | Description |
|---|---|---|
| Authentication | login, logout | Manage sessions |
| Instances | provision, deprovision, list-instances | Service instance lifecycle |
| Bindings | bind, unbind, list-bindings | Service binding management |
| Brokers | register-broker, update-broker | Service broker operations |
| Platforms | register-platform, list-platforms | Platform registration |
| Marketplace | marketplace | Browse service offerings |
--mode sync/async - Execution mode (default: async)-c, --parameters - JSON configuration-o, --output - Output format (json, yaml, text)-v, --verbose - Detailed outputReference: See references/smctl-commands.md for complete command reference with all flags and examples.
# Get operation URL from provision/bind response
smctl status /v1/service_instances/<id>/operations/<op-id>
API:
GET /v1/{resourceType}/{resourceID}/operations/{operationID}
Response states: in progress, succeeded, failed
Prerequisites:
# Force delete without confirmation
smctl deprovision my-instance -f
# Sync mode
smctl deprovision my-instance --mode sync
Note: Kyma/Kubernetes instances cannot be deleted from BTP cockpit.
Check:
Check:
Debug:
smctl get-instance <name> -o json
# Check "last_operation" for error details
Solution:
Retry-After headerCheck:
# SMCTL
smctl get-binding <name> -o json
# Kubernetes
kubectl get secrets <binding-name> -o yaml
Check:
smctl provision my-instance service plan --mode sync
smctl provision my-instance service plan \
-c '{}' \
--labels '{"environment":"production","team":"platform"}'
Instead of binding to apps, create service keys for external clients.
For async operations, poll status with exponential backoff.
subaccount-admin: Full managementsubaccount-audit: Read-only monitoringcontainer: Isolated per-instance accessReady-to-use templates in templates/ directory:
Detailed documentation in references/ directory:
https://service-manager.cfapps.<region>.hana.ondemand.com/swaggerui/swagger-ui.htmlWhen using this skill:
For Cloud Foundry: Use cf CLI or cockpit
For Kubernetes: Use ServiceInstance/ServiceBinding CRDs
For Other environments: Use SMCTL or BTP CLI
For API access: Retrieve OAuth2 token first
When troubleshooting:
License: GPL-3.0 Version: 1.0.0 Maintained by: SAP Skills Maintainers Repository: https://github.com/secondsky/sap-skills