SAP

Manage my Account SAP Devs YouTube ↗ Learnings ↗ Community ↗ Provide Feedback ↗
Logout
⤢ Open full site

API

developers.sap.com is a developer site. Everything the browser sees is available as an API — query it, script against it, embed it. Below are the surfaces we publish.

Rate limits & abuse. Anonymous endpoints are best-effort and may be throttled without notice. Authenticated endpoints inherit XSUAA quotas from your service key. Don’t hammer them.

HTTP APIs

Public / anonymous read

No token required. Safe to hit from a browser, a Lambda, or curl on a laptop.

PathPurpose
/graphql/publicGraphQL over published content — concepts, tutorials, missions, search. Full page: GraphQL API.
/homepage/*HomepageService — the same feed the homepage islands consume (/api/homepage/events, /api/homepage/videos, /api/homepage/communityBlogs, /api/homepage/news, /api/homepage/shelves?verb=<v>, /api/homepage/redirectsActive, /api/alerts).
/search/*SearchService — word-boundary search across tutorials, missions, groups, concepts.
/graph/*KnowledgeGraphService — published concept projections, /graph/explore-data (bulk graph JSON), /graph/path?from=&to= (shortest-path).
/content/tutorials/{slug}Dynamic tutorial HTML — served from HANA (gzip BLOBs), not the filesystem. AppRouter routes /tutorials/* here.
/build/*Build-time catalog feeds — /build/catalog, /build/navigator, /build/slug-mapping, /build/repo-catalog, /build/concepts, /build/homepage-shelves, /build/verb-definitions, /build/shelf-definitions. Read-only; consumed by Hugo at build time and by the AppRouter.
/api/advocatesList of active Developer Advocates. ETag + max-age=60, stale-while-revalidate=600. Photo bytes via /api/advocates/:slug/photo[?size=thumb].
/healthLiveness + database round-trip probes (/health, /health/db).
/mcp/*Hosted MCP server — anonymous read tier. Per-service mounts: /mcp/search, /mcp/graph, /mcp/homepage. Streamable HTTP; connect any MCP client (Claude Desktop, Claude Code). See the MCP section below.

Every OData service also serves $metadata (EDMX / CSDL) at <path>/$metadata — point a code-gen client at that URL and you’re done.

Signed-in developer surface — Tutorial.API scope

For scripting against your own progress + preferences. Requires an XSUAA bearer with the Tutorial.API scope (granted via the Tutorials API Consumer role collection). See Getting a token on the GraphQL page for the OAuth2 auth-code+PKCE and client-credentials flows.

PathPurpose
/graphqlFull GraphQL — everything in /graphql/public plus user-scoped reads on DeveloperService.
/api/DeveloperService — self-service progress, preferences, tutorial completion state.
/api/v1/ConsolidationService — legacy-shape bulk reads over published entities. Kept for the IMS-migration compatibility layer.
/api/recommendationsPersonalized "what's next" (embedding centroid + co-completion blend).
/auth/userThe current identity's { id, email, name }.
/api/qrcode?url=...QR PNG generation.
/api/codecheckAI code-check (gated on ChatSettings.codeCheckEnabled; 30/hr per user).
/chat/streamJoule chat streaming endpoint (Server-Sent Events).
/mcp-auth/*Hosted MCP — OAuth/JWT tier (scope Tutorial.MCP). Forwards your JWT to the user-scoped mounts (/mcp/api DeveloperService, /mcp/homepage): your progress, missions, events, recommendations. Bridge via mcp-remote with the pre-registered client.
/mcp-pat/*Hosted MCP — Personal Access Token tier for headless / CI clients. Send Authorization: Bearer pat_...; no browser flow. Same user-scoped tools as /mcp-auth/*.
/patsPatService — mint / list / revoke your own Personal Access Tokens. POST /pats/mintPAT returns the plaintext token once. Minting UI: /admin-ui/#pats (Tutorials MCP Users role collection).

Full endpoint inventory + auth scopes: docs/developers/operations/testing-endpoints.md.

Author / admin surfaces

These exist and are documented, but require elevated XSUAA scopes (Tutorial.Author, Admin, KnowledgeGraph.Admin, SuperAdmin) that are only assigned to internal staff and QA channel authors. If you have the scope and want to script against them, see testing-endpoints.md — surfaces include /admin/* (AdminService), /admin/analytics/* (AnalyticsService, allowlisted SELECT-only SQL), /admin/exports/* (ExportsService), /display/* (DisplayService), /content/publish + /content/rollback (bearer-token content push), /graph/publishConcept + /graph/unpublishConcept, and /author/generateOsVariants.

sap-devs CLI

sap-devs is a companion CLI that bundles the same SAP developer content and context this site consumes — CAP / BTP / ABAP tips, canonical code samples, error lookups, tutorial search, event listings, and more — so you can get to it without leaving your terminal.

Install — the CLI ships as a self-contained binary (it’s no longer published to npm). Pick your platform:

Shell
# macOS (Homebrew)
brew tap SAP-samples/sap-devs-cli https://github.com/SAP-samples/sap-devs-cli.git
brew install --cask sap-devs

# Windows (Scoop)
scoop bucket add sap-devs https://github.com/SAP-samples/sap-devs-cli.git
scoop install sap-devs

# Linux / manual — download the archive for your platform from GitHub Releases,
# extract it, and put the binary on your PATH:
# https://github.com/SAP-samples/sap-devs-cli/releases

Then run the first-time setup:

Shell
sap-devs init            # first-time setup wizard
sap-devs sync --force    # pull latest content

Common commands

Shell
sap-devs tip                             # a quick best-practice reminder
sap-devs errors search "No 'default' database configured"
sap-devs samples search "cap handler"    # canonical code samples
sap-devs tutorial search "cap getting started"
sap-devs tutorial show cap-getting-started
sap-devs news                            # recent SAP Developer News episodes
sap-devs learning search "btp architect" # SAP Learning Journeys
sap-devs discovery services search "hana cloud"
sap-devs doctor                          # tool + project health check
sap-devs help                            # full command list

The full command reference lives with the CLI itself: run sap-devs help or see the sap-devs project repository.

MCP server

There are two MCP surfaces here, and they’re different things:

  1. The hosted MCP server — served by this site over HTTP, so an AI client can search tutorials, read missions, query the knowledge graph, and (signed in) read your progress. No SDK, no scraping.
  2. The sap-devs CLI MCP — a local stdio server bundled with the sap-devs CLI that exposes SAP developer knowledge (tips, samples, error lookups) to your agent.

Hosted MCP (over HTTP)

Each CDS service is mounted separately under /mcp/* over the Model Context Protocol Streamable HTTP transport. There is no aggregate /mcp root — point your client at the specific service you want.

MountAuthCurated tools
/mcp/searchnonesearch_tutorials, list_missions, get_mission, get_tutorial
/mcp/graphnonekg_shared_concepts, kg_neighborhood, kg_search_concepts, kg_community
/mcp/homepagesigned-inget_my_recommended_tutorials, get_my_recommended_missions
/mcp/apisigned-inget_my_tutorials, get_my_missions, get_my_events, get_my_completed_steps, get_tutorial_step, complete_step, reset_tutorial_progress

describe and query are auto-generated on every mount. The /mcp/graph mount additionally exposes MCP resources (tutorial://<slug>, mission://<slug>, concept://<id>) and prompt templates (prompts/list).

Anonymous read — just point a Streamable-HTTP client at the mount. Claude Code:

JSON
{
  "mcpServers": {
    "sap-developers-search": { "type": "http", "url": "https://developers.sap.com/mcp/search" },
    "sap-developers-graph":  { "type": "http", "url": "https://developers.sap.com/mcp/graph" }
  }
}

Signed-in tools (your progress, recommendations, marking steps done) live behind two authenticated tiers:

Full connection walkthrough (Claude Desktop, Claude Code, mcp-remote, PATs, troubleshooting): MCP Quickstart. Tool + parameter reference: mcp-server.md.

Local sap-devs CLI MCP (over stdio)

sap-devs mcp serve starts a Model Context Protocol server on stdio that exposes SAP developer knowledge as tools to AI agents (Claude Code, Cursor, Windsurf, and anything else that speaks MCP). This is unrelated to the hosted server above — it ships with the CLI and runs on your machine.

Available toolslist_packs, get_context, get_tip, search_resources, get_known_errors, get_recent_news, get_news_detail, search_tutorials, search_learning_journeys, get_samples, check_tools, check_project, search_events, search_videos, search_discovery, plus cf_* / btp_* inspection tools that surface your local Cloud Foundry and BTP state to the agent.

Claude Code

Shell
claude mcp add sap-devs-server -- sap-devs mcp serve

Cursor / Windsurf — add to your MCP settings JSON:

JSON
{
  "mcpServers": {
    "sap-devs-server": { "command": "sap-devs", "args": ["mcp", "serve"] }
  }
}

Once connected, ask your agent “what’s new in SAP” or paste an SAP error and it will resolve against the live content instead of stale training data.

A2A agent

Alongside the MCP server, this site exposes a first-party A2A protocol agent — so a central SAP Joule instance (or another trusted BTP integration) can consume the platform’s Joule capabilities agent-to-agent, without going through MCP. Same brain as the site’s own Joule; different wire protocol.

MCP and A2A are complementary, not alternatives:

Discovery

The Agent Card is public — no token:

Shell
curl <base>/.well-known/agent-card.json

It advertises the endpoint URL, security scheme, streaming capability, and the five skills below, and links its own consumption guide at <base>/.well-known/a2a-instructions.md. When A2A is disabled by an admin, the card sets metadata.available: false and POST /a2a returns HTTP 503.

Skill (skillId)What it does
tutorial-chatConversational Q&A over tutorials, missions, and learning paths. Runs the full agentic loop (search + graph + progress). Default when no skillId is set; supports streaming.
search-tutorialsSemantic/keyword search over the tutorial catalog.
user-progressThe signed-in developer’s tutorial/mission progress. Needs the end-user’s identity forwarded in the token; returns empty otherwise.
knowledge-graphConcept expansion and learning-path reasoning over the tutorial knowledge graph.
tutorial-stepsReturns the most relevant tutorial step content so a calling agent can quote exact instructions.

Transport

JSON-RPC 2.0 over POST <base>/a2a. Synchronous message/send returns a completed Task with results in result.artifacts; message/stream returns an SSE event stream (used by tutorial-chat). tasks/get and tasks/cancel operate on a task id.

Shell
curl -X POST <base>/a2a \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"message/send",
       "params":{"message":{"role":"user","parts":[{"kind":"text","text":"Find CAP tutorials"}]},
                 "metadata":{"skillId":"search-tutorials"}}}'

Auth

Every /a2a call needs an XSUAA bearer carrying the Tutorial.MCP scope, obtained via OAuth2 client-credentials against the tokenUrl in the card’s securitySchemes.xsuaa. This is a machine-to-machine flow — there is no self-service PAT/PKCE path like the MCP signed-in tools. The Agent Card itself is public; user-progress additionally needs the end-user’s identity forwarded.

Full connection walkthrough (public probe, client-credentials, streaming, errors, Joule wiring): A2A Quickstart. Canonical served guide: /.well-known/a2a-instructions.md.

Feeds

PathFormatContents
/index.xmlRSS 2.0Site-wide feed (Hugo default).
/tutorials/index.xmlRSS 2.0Tutorial listings.
/graphql/schema.graphqlGraphQL SDLPublished every release.
<odata-path>/$metadataEDMX / CSDLMachine-readable schema for every OData service listed above.

Reference documentation

These docs are written for the internal team. They’re public because the repo is public. They can change without notice and aren’t part of any supported contract.

Curated pointers into the developer docs that a curious integrator might find useful:

Feedback & contributions

Bug or gap? Open an issue on the tutorials-ims repo. PRs welcome.

Devtoberfest Scavenger Hunt

Shilpa Shankar
func main() { lettersYouNeed := string(firstName[3]) } More Info: https://url.sap/7afji2