TL;DR
A REST API is a way for software to ask questions and make requests over HTTP. Resources (participants, plans, results) are identified by URLs. HTTP methods (GET, POST, PUT, DELETE) say what you're doing to that resource.
Requests and responses are usually JSON. Status codes (200, 201, 400, 401, 404, 429, 500) tell you what happened. You'll test APIs with curl, Postman, or Python requests.
The SAP SuccessFactors IM REST API lets you read/write participants, plans, credits, results, quotas, and trigger pipeline runs. It's the integration backbone for CRM, HR, payroll, and BI systems.

Imagine you want to ask SAP SuccessFactors Incentive Management: "Give me all active participants in the APAC region" or "Post 500 credit transactions from this month's sales" or "Get me the calculated results for Q1 so I can pass them to payroll." That's what a REST API does — it's a conversation between your code and the platform, over HTTP, using structured data (JSON).

What is REST?

REST stands for Representational State Transfer. It's an architectural style for web APIs that uses HTTP verbs and resource identifiers (URLs) to perform operations. You've used REST before without thinking about it — when your browser fetches a webpage, it's using REST.

The core idea: everything in the system is a resource (a participant, a plan, a credit transaction, a calculation result). Each resource has a unique URL (an endpoint). You perform actions on that resource using HTTP methods — GET to read, POST to create, PUT to replace, DELETE to remove, PATCH to partially update.

HTTP Methods: The Four Operations

REST uses standard HTTP verbs to define what you're doing:

MethodMeaningCommon Use in ICM APIIdempotent?
GETRetrieve (read-only)Fetch participants, plans, results, quotasYes — calling it multiple times is safe
POSTCreate (submit new data)Post credits, trigger pipeline runsNo — each POST creates a new record
PUTReplace entire resourceUpdate quota allocationsYes — replacing the same data is safe
DELETERemove resourceRarely used in ICMYes — deleting again is safe
PATCHPartial updateUpdate fields without replacing whole recordSometimes

Idempotent means doing it once or doing it 10 times has the same effect. GET and PUT are safe to retry; POST can create duplicates if you retry without checking.

Resources and Endpoints

A resource is a noun (participant, plan, result). An endpoint is the URL where you reach that resource:

Example endpoints
// Reading
GET /participants                         Fetch all participants (paginated)
GET /participants/P001234                 Fetch one specific participant
GET /comp-plans                           Fetch all compensation plans
GET /results                              Fetch calculated results

// Writing
POST /credits                             Post a single credit
POST /credits/batch                       Post multiple credits at once
PUT /quotas/QUOTA-4567                    Update a quota
POST /pipeline-runs                       Trigger a calculation pipeline run

Request and Response: JSON

REST APIs use JSON (JavaScript Object Notation) for data. JSON is human-readable, language-agnostic, and easy to parse. A JSON object is a collection of key-value pairs wrapped in curly braces.

Request Format

When you POST a credit transaction to SAP SuccessFactors IM, you send:

JSON — POST /credits body
{
  "participantId": "P001234",
  "transactionDate": "2026-03-15",
  "amount": 45000.00,
  "currencyCode": "USD",
  "periodId": "Q1-2026",
  "sourceRef": "CRM-ORDER-98765"
}

Response Format

When you GET participants, the API returns:

JSON — GET /participants response
{
  "value": [
    {
      "id": "P001234",
      "name": "Alice Johnson",
      "position": "Senior Sales Manager",
      "managerId": "P000999",
      "status": "ACTIVE",
      "region": "APAC"
    },
    {
      "id": "P001235",
      "name": "Bob Smith",
      "position": "Sales Representative",
      "managerId": "P001234",
      "status": "ACTIVE",
      "region": "APAC"
    }
  ],
  "@odata.nextLink": "https://api.sap.com/.../participants?skip=100"
}

The response is an object with a value array (the actual records) and pagination info. More on pagination in Lesson 3.

HTTP Status Codes: What Happened?

Every HTTP response includes a status code. These codes tell you whether the request succeeded, and if not, why:

CodeMeaningWhat It Means for Your API Call
200 OKSuccessGET/PUT worked. You got what you asked for.
201 CreatedSuccess — resource createdPOST created a new record (credit, pipeline run, etc.)
204 No ContentSuccess — no bodyDELETE worked. Nothing to return.
400 Bad RequestYour request is malformedJSON syntax error, missing required field, invalid value format
401 UnauthorizedAuthentication failedToken expired or missing. Refresh and retry.
403 ForbiddenYou don't have permissionYour API client doesn't have write access to this endpoint
404 Not FoundResource doesn't existParticipant ID you're looking for doesn't exist
429 Too Many RequestsRate limit exceededYou've made too many requests too fast. Back off and retry.
500 Server ErrorServer-side problemThe API is broken. Retry later with backoff.
503 Service UnavailableTemporary outageThe service is down for maintenance. Retry later.

Headers: Metadata About the Request

HTTP headers are key-value pairs that travel with your request or response. They provide metadata — what kind of data you're sending, what kind you expect back, who you are, etc.

Common Request Headers for SAP SuccessFactors IM

HeaderPurposeExample Value
AuthorizationProve who you are (covered in Lesson 2)Bearer eyJhbGc...
Content-TypeTell the server what format you're sendingapplication/json
AcceptTell the server what format you want backapplication/json
X-Request-IDUnique ID for debugging (optional but good practice)req-2026-04-09-a1b2c3

Common Response Headers

HeaderMeaning
Content-TypeFormat of the response body (always application/json for SAP SuccessFactors IM)
Retry-AfterSeconds to wait before retrying (sent on 429)
X-Rate-Limit-RemainingHow many API calls you have left before hitting the limit (if provided)

Tools for Testing APIs

You'll test APIs in three ways: shell scripts with curl, GUI tools like Postman, and Python code. Each has its place.

curl: Quick One-Off Tests

curl is a command-line tool pre-installed on macOS and Linux (Windows 10+). Perfect for quick checks:

Shell — curl test
# Fetch a single participant by ID
curl -X GET \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/json" \
  "https://api.sap.com/successfactors/im/participants/P001234"

# Pretty-print the JSON response
curl -s https://api.sap.com/successfactors/im/participants/P001234 \
  | python3 -m json.tool

Postman: Visual Request Builder

Postman (postman.com, free) is a GUI application for building and testing API requests. Click through the UI to set URL, method, headers, and body. It shows the response, gives you syntax highlighting, and lets you save requests as collections. Excellent for exploring an API you're learning.

Python: Programmatic Integration Testing

Once you know what you're doing, write Python with the requests library:

Python — API request with requests library
import requests
import json

url = "https://api.sap.com/successfactors/im/participants/P001234"
headers = {
    "Authorization": "Bearer YOUR_TOKEN",
    "Accept": "application/json"
}

# Make the request
resp = requests.get(url, headers=headers)

# Check status code
print(f"Status: {resp.status_code}")

# Parse JSON response
data = resp.json()
print(json.dumps(data, indent=2))

The SAP SuccessFactors IM REST API: What Can You Do?

The SAP SuccessFactors IM REST API covers the full breadth of the platform's operations. Here's what you can do:

Reading Data

  • Participants: Fetch all participants, filter by status/region/manager, get hierarchy
  • Plans: List all comp plans, get plan details and assignments
  • Results: Extract calculated incentive amounts by participant, period, or status
  • Quotas: Read quota allocations, compare actual to target
  • Statements: Get statement data, check generation status
  • Pipeline Runs: Query run history, check status and logs

Writing Data

  • Credits: Post individual transactions or batch uploads from CRM/ERP systems
  • Quota Updates: Write new quota allocations from planning tools
  • Pipeline Runs: Trigger calculation runs programmatically (instead of manual UI click)

Typical Integration Scenarios

ScenarioHTTP MethodEndpointUse Case
Daily CRM credit pushPOST /credits/batchPush 1000s of daily sales as creditsSalesforce → IM pipeline
Participant sync from HRGET /participantsFetch all active participants monthlySAP HCM → IM directory
Results extraction for payrollGET /resultsPull approved results with filterIM → ADP/Workday payroll
Quota updates from planningPUT /quotas/{id}Update quota allocationsPlanning system → IM
Trigger calculationPOST /pipeline-runsStart calc without UI clickAutomation/workflow → IM
BI reporting pullGET /results, GET /statementsExtract data for dashboardsIM → Tableau/SAC

Why APIs Matter for ICM

Incentive compensation isn't an island. It's embedded in a system:

  • CRM feeds sales data: Your Salesforce CRM generates orders and transactions daily. Those need to flow into IM as credits to feed the compensation calculation. The API is how that happens — no manual exports/imports.
  • HR feeds participant data: When someone is hired, promoted, or leaves, that change in HR needs to update the IM participant list. The API enables automated sync.
  • Payroll consumes results: After calculation completes, results need to be extracted and passed to your payroll system. The API lets you pull approved results on a schedule and feed them directly to ADP or Workday.
  • BI tools need reporting data: Executives want dashboards showing compensation payouts, attach rates, plan performance. The API lets BI platforms (Tableau, SAC, Power BI) pull this data automatically.

Without APIs, all of this would be manual: export from CRM, format it, import to IM, export results, import to payroll. With APIs, it's automated, real-time, and trackable.

ℹ️API vs UI: The UI is for humans — dashboards, forms, reports. The API is for systems. They both talk to the same database, so if you POST credits via the API, they show up in the UI, and vice versa. The API just lets you do it programmatically at scale.

Next Steps

Now that you understand what REST APIs are, how they work, and what SAP SuccessFactors IM can do via API, you're ready to learn how to authenticate. Move to Lesson 2.