Install any skill in seconds. Free to start, no credit card required.
Get Started Free →This skill provides comprehensive guidance for SAP BTP Job Scheduling Service development, configuration, and operations. It should be used when creating, managing, or troubleshooting scheduled jobs on SAP Business Technology Platform. The skill covers service setup, REST API usage, schedule types and formats, OAuth 2.0 authentication, multitenancy, Cloud Foundry tasks, Kyma runtime integration, and monitoring with SAP Cloud ALM and Alert Notification Service. Keywords: SAP BTP, Job Scheduling
.claude/skills/secondsky-sap-btp-job-scheduling/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 153% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 72% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 205% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 102% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 205% | 0% |
SAP Job Scheduling Service is a runtime-agnostic platform service for defining and managing one-time and recurring jobs or Cloud Foundry tasks on SAP BTP. It operates across multiple hyperscalers (AWS, Azure, GCP) without requiring application modifications.
Documentation Source: https://help.sap.com/docs/job-scheduling
Last Verified: 2025-11-27
Use this skill when:
Setup & Configuration
├─ Initial setup prerequisites → references/setup-guide.md
├─ Create service instance
│ ├─ BTP Cockpit → references/setup-guide.md#cockpit
│ ├─ CF CLI → references/setup-guide.md#cf-cli
│ └─ Kyma Dashboard → references/setup-guide.md#kyma
└─ Configure XSUAA scopes → references/security.md
Job Management
├─ Create jobs → references/rest-api.md#create-job
├─ Configure schedules → references/rest-api.md#schedules
├─ Run logs & monitoring → references/rest-api.md#run-logs
└─ Dashboard operations → references/operations.md#dashboard
Schedule Configuration
├─ One-time vs recurring → references/concepts.md#schedule-types
├─ Cron format → references/concepts.md#cron-format
├─ Date/time formats → references/concepts.md#date-formats
└─ Human-readable → references/concepts.md#human-readable
Asynchronous Execution
├─ Async mode flow → references/concepts.md#async-mode
├─ Callback implementation → references/rest-api.md#update-run-log
└─ CF tasks → references/concepts.md#cf-tasks
Security & Authentication
├─ OAuth 2.0 setup → references/security.md#oauth
├─ XSUAA configuration → references/security.md#xsuaa
└─ Credential rotation → references/security.md#rotation
Integrations
├─ SAP Cloud ALM → references/integrations.md#cloud-alm
└─ Alert Notification → references/integrations.md#alert-notification
Troubleshooting
├─ Common errors → references/troubleshooting.md#errors
├─ FAQ → references/troubleshooting.md#faq
└─ Support: BC-CP-CF-JBS
Version History & Updates
└─ What's New (2021-2025) → references/changelog.mdA collection of schedules with an action endpoint. Jobs invoke a configured URL at specified times synchronously (short operations) or asynchronously (long processes).
A one-time or recurring entity within a job. Supports multiple formats (cron, date/time, human-readable) and has three lifecycle states: SCHEDULED → RUNNING → COMPLETED.
An HTTP/REST endpoint exposed by your application that the service invokes when schedules trigger. Must be OAuth 2.0 protected in production.
An app or script that runs independently in its own container. Always executes asynchronously with configurable memory allocation.
| Constraint | Value | |------------|-------| | Minimum schedule interval | 5 minutes | | Synchronous request timeout | 15 seconds | | Asynchronous timeout (default) | 30 minutes (configurable up to 7 days) | | POST request body limit | 100 KB | | Run log retention | 15 days | | Service SLA | ~20 minutes from scheduled time |
| Format | Example | Use Case | |--------|---------|----------| | Cron | * * * * 10:12 0,30 0 | Every 30 min between 10:00-12:00 | | Date/Time | 2025-10-20T04:30:00Z | ISO-8601 one-time execution | | Human-readable | tomorrow at 4pm | Natural language scheduling | | repeatInterval | 2 hours, 5 minutes | Recurring at fixed intervals | | repeatAt | 4.40pm, 18:40 | Daily at specific time |
Year Month Day DayOfWeek Hour Minute Second
* * * * * * *| Field | Values | Special | |-------|--------|---------| | Year | 4-digit (2025) | = any | | Month | 1-12 | /a = every a-th | | Day | -31 to 31 | negative = from end | | DayOfWeek | mon, tue, wed... | a.y = a-th occurrence | | Hour | 0-23 | a:b = range | | Minute | 0-59 | a:b/c = step in range | | Second | 0-59 | a,b,c = multiple values |
| Phase | States | Description | |-------|--------|-------------| | SCHEDULED | SCHEDULED | Queued for future run | | RUNNING | TRIGGERED, ACK_RECVD, ACK_NOT_RECVD | Executing | | COMPLETED | SUCCESS, ERROR, REQUEST_ERROR, UNKNOWN | Finished |
| Method | Endpoint | Purpose | |--------|----------|---------| | POST | /scheduler/jobs | Create job | | GET | /scheduler/jobs | List all jobs | | GET | /scheduler/jobs/{id} | Get job details | | PUT | /scheduler/jobs/{id} | Update job | | DELETE | /scheduler/jobs/{id} | Delete job |
Avoid Peak Times:
Use Irregular Times:
01:12:17 instead of 01:00:0001:38:37 instead of 01:30:00x-sap-job-id, x-sap-job-schedule-id, x-sap-job-run-id, x-sap-scheduler-host"time": "now" for immediate executionbash# Get access token curl -X POST "<uaa_url>/oauth/token" \ -H "Authorization: Basic $(echo -n '<clientid>:<clientsecret>' | base64)" \ -d "grant_type=client_credentials" # Use token in API calls curl -X GET "https://jobscheduler-rest.<landscape>/scheduler/jobs" \ -H "Authorization: Bearer <access_token>" \ -H "Content-Type: application/json"
json{ "xsappname": "<app-name>", "scopes": [{ "name": "$XSAPPNAME.JOBSCHEDULER", "description": "Job Scheduler Scope", "grant-as-authority-to-apps": ["$XSSERVICENAME(<jobscheduler-instance>)"] }] }
jsonPOST /scheduler/jobs { "name": "myJob", "description": "Process daily reports", "action": "https://myapp.cfapps.eu10.hana.ondemand.com/api/process", "active": true, "httpMethod": "POST", "schedules": [{ "active": true, "description": "Daily at 6 AM", "repeatAt": "6.00am", "startTime": {"date": "2025-01-01", "format": "YYYY-MM-DD"} }] }
Requirements: Node.js 14.x or later
bashnpm install @sap/jobs-client@1.8.6
javascriptconst JobSchedulerClient = require('@sap/jobs-client'); const scheduler = new JobSchedulerClient.Scheduler(); // Create job scheduler.createJob({ url: vcapServices.jobscheduler[0].credentials.url }, { name: 'myJob', action: 'https://myapp.../process', active: true, httpMethod: 'GET', schedules: [{ cron: '* * * * 0 0 0', active: true }] }, (err, result) => { /* handle */ });
| Limit Type | Response Code | Header | |------------|---------------|--------| | Client limit exceeded | 429 | retry-after (seconds) | | Absolute limit exceeded | 503 | throttling (milliseconds) |
Limits stack - both can apply simultaneously.
| Outage Duration | Behavior | |-----------------|----------| | < 20 minutes | All missed executions run immediately | | >= 20 minutes | Only last missed execution runs |
Setup:
grant-as-authority-to-appsScheduling:
Async Jobs:
Multitenancy:
tenantId filter with SaaS tenant tokens (returns 400)Source: SAP BTP Job Scheduling Service Documentation
To Update This Skill:
Quarterly Review Recommended: Check for updates every 3 months
Next Review: 2026-02-27
License: GPL-3.0 Maintainer: Eduard Jiglau | hello@sap-ai-skills.com | sap-ai-skills.com | https://github.com/secondsky/sap-skills
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 14,077 | 9,753 | -31% | 1 | 1 | 0% | 2,278 | 5,774 | +153% | 0 | 0 | — |
case-02 | pass→pass | 14,658 | 11,328 | -23% | 1 | 1 | 0% | 2,640 | 6,019 | +128% | 0 | 0 | — |
case-03 | fail→pass | 21,806 | 12,806 | -41% | 1 | 1 | 0% | 3,538 | 6,068 | +72% | 0 | 0 | — |
case-04 | fail→pass | 10,421 | 7,151 | -31% | 1 | 1 | 0% | 1,681 | 5,130 | +205% | 0 | 0 | — |
case-05 | fail→pass | 14,615 | 6,134 | -58% | 1 | 1 | 0% | 2,464 | 4,968 | +102% | 0 | 0 | — |
case-06 | pass→pass | 10,053 | 5,145 | -49% | 1 | 1 | 0% | 1,936 | 4,603 | +138% | 0 | 0 | — |
case-07 | fail→pass | 9,098 | 2,690 | -70% | 1 | 1 | 0% | 1,390 | 4,244 | +205% | 0 | 0 | — |
case-08 | fail→pass | 14,097 | 6,401 | -55% | 1 | 1 | 0% | 2,490 | 4,923 | +98% | 0 | 0 | — |
case-09 | pass→pass | 12,235 | 7,080 | -42% | 1 | 1 | 0% | 2,137 | 5,074 | +137% | 0 | 0 | — |
case-10 | pass→pass | 3,662 | 3,906 | +7% | 1 | 1 | 0% | 572 | 4,534 | +693% | 0 | 0 | — |
case-11 | fail→pass | 10,454 | 2,999 | -71% | 1 | 1 | 0% | 1,658 | 4,284 | +158% | 0 | 0 | — |
case-12 | fail→pass | 9,407 | 2,880 | -69% | 1 | 1 | 0% | 1,631 | 4,296 | +163% | 0 | 0 | — |
case-13 | fail→pass | 10,448 | 3,832 | -63% | 1 | 1 | 0% | 1,801 | 4,156 | +131% | 0 | 0 | — |
case-14 | pass→pass | 7,504 | 4,145 | -45% | 1 | 1 | 0% | 1,262 | 4,476 | +255% | 0 | 0 | — |
case-15 | fail→pass | 11,464 | 3,358 | -71% | 1 | 1 | 0% | 2,056 | 4,412 | +115% | 0 | 0 | — |
case-16 | fail→pass | 9,841 | 3,401 | -65% | 1 | 1 | 0% | 1,614 | 4,330 | +168% | 0 | 0 | — |
case-17 | pass→pass | 7,439 | 3,108 | -58% | 1 | 1 | 0% | 1,367 | 4,327 | +217% | 0 | 0 | — |
case-18 | fail→pass | 11,616 | 5,733 | -51% | 1 | 1 | 0% | 1,799 | 4,728 | +163% | 0 | 0 | — |
case-19 | pass→fail | 11,342 | 6,563 | -42% | 1 | 1 | 0% | 2,061 | 5,006 | +143% | 0 | 0 | — |
case-20 | pass→pass | 9,044 | 6,602 | -27% | 1 | 1 | 0% | 1,645 | 5,064 | +208% | 0 | 0 | — |
case-21 | pass→pass | 15,584 | 13,117 | -16% | 1 | 1 | 0% | 2,977 | 6,464 | +117% | 0 | 0 | — |
case-22 | pass→pass | 9,916 | 7,193 | -27% | 1 | 1 | 0% | 1,727 | 5,013 | +190% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +50 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.