SAP SuccessFactors Component
SAP SuccessFactors is a human resources platform that provides cloud-based solutions to manage various HR functions such as business alignment, people performance, recruitment, and learning activities.
Component key: sap-successfactors · · Changelog ↓Description
SAP SuccessFactors is a cloud based human capital management (HCM) platform that helps organizations manage HR processes including recruiting, onboarding, performance management, and employee development. This component allows you to interact with the SAP SuccessFactors OData API.
API Documentation
This component was built using the SAP SuccessFactors OData V2 API
Connections
API Key Authentication
key: sap-successfactors-api-key-authenticationGenerate X.509 Certificate
First, generate an X.509 certificate and private key pair using OpenSSL:
# Generate private key
openssl genrsa -out private.pem 2048
# Generate certificate signing request
openssl req -new -key private.pem -out cert.csr
# Generate self-signed certificate (valid for 365 days)
openssl x509 -req -days 365 -in cert.csr -signkey private.pem -out public.pem
Save both private.pem (private key) and public.pem (certificate) files for later use.
Register OAuth2 Client Application
- Log into your SAP SuccessFactors instance as an administrator
- Navigate to Admin Center > API Center > OAuth Configuration for OData
- Alternatively, search for
Manage OAuth2 Client Applicationsin Action Search
- Alternatively, search for
- Select Register Client Application
- Configure the OAuth2 client application:
- Application Name: Enter a descriptive name for your application
- Application URL: Enter your application URL
- X.509 Certificate: Upload or paste the contents of your
public.pemcertificate file
- Click Register to create the application
- Copy the API Key (also called Client ID) that is generated - you'll need this for authentication
- From the integration connection fill in the required fields:
- Company ID: Your SAP SuccessFactors company identifier
- User: Your SAP SuccessFactors user ID (e.g.,
sfadmin) - API Key: The OAuth2 API Key from your registered client application
- Issuer: Issuer information of the SAML assertion (e.g.,
www.successfactors.com) - Certificate Private Key: Your private certificate key for OAuth2 authentication (PEM format, including
-----BEGIN PRIVATE KEY-----and-----END PRIVATE KEY-----headers) - Certificate: Your public certificate for OAuth2 authentication (PEM format, including
-----BEGIN CERTIFICATE-----and-----END CERTIFICATE-----headers) - Audiences: Audiences of the SAML assertion (e.g.,
www.successfactors.com) - API Server (optional): Your SAP SuccessFactors API server (defaults to sandbox environment if not specified)
- Protocol: The protocol to use for API connections
| Input | Notes | Example |
|---|---|---|
| API Key | Your OAuth2 Success Factors API Key | YzVjNzI4MTIsdryNmJkOTVkYWJmODBiZjdkYg |
| API Server | Your SAP SuccessFactors api server, if you are not sure, please contact your SAP SuccessFactors administrator. If empty the sandbox environment will be used (sandbox.api.sap.com) | testing.successfactors.com |
| Audiences | Audiences of the SAML assertion | www.successfactors.com |
| Certificate | Your Public Certificate for Success Factors OAuth2 | |
| Company ID | SAP SuccessFactors Company ID | |
| Issuer | Issuer information of the SAML assertion | wwww.successfactors.com |
| Certificate Private Key | Your Private Certificate Key for Success Factors OAuth2 | |
| Protocol | The SAP SuccessFactors protocol to use | |
| User | Enter the SAP SuccessFactors user ID that you use to access the APIs | sfadmin |
Basic Authentication
key: sap-successfactors-basic-authenticationConfiguring Basic Authentication
- Log into your SAP SuccessFactors instance as an administrator
- Ensure you have valid user credentials with appropriate API access permissions
- From the integration connection fill in the required fields:
- Company ID: Your SAP SuccessFactors company identifier
- Username: Your SAP SuccessFactors username
- Password: Your SAP SuccessFactors password
- API Server (optional): Your SAP SuccessFactors API server (defaults to sandbox environment if not specified)
- Protocol: The protocol to use for API connections
| Input | Notes | Example |
|---|---|---|
| API Server | Your SAP SuccessFactors api server, if you are not sure, please contact your SAP SuccessFactors administrator. If empty the sandbox environment will be used (sandbox.api.sap.com) | testing.successfactors.com |
| Company ID | SAP SuccessFactors Company ID | |
| Password | SAP SuccessFactors Password | |
| Protocol | The SAP SuccessFactors protocol to use | |
| Username | SAP SuccessFactors Username |
Triggers
New and Updated Records
Checks for new and updated records in a selected SAP SuccessFactors resource type on a configured schedule. | key: pollChangesTrigger
| Input | Notes | Example |
|---|---|---|
| Connection | ||
| Resource Type | The SAP SuccessFactors resource type to poll for new or updated records. | |
| Show New Records | When true, newly created records are included in the trigger output. | true |
| Show Updated Records | When true, records that were updated after the last poll are included in the trigger output. | true |
This trigger polls the SAP SuccessFactors OData V2 API for new and updated records on a scheduled basis.
How It Works
Polling Lifecycle (5 steps)
- The trigger runs on the configured schedule
- It fetches records from SAP SuccessFactors using a server-side OData
$filterpredicate (lastModifiedDateTime gt datetime'YYYY-MM-DDTHH:mm:ss'), passing the last poll time to retrieve only records modified since the previous execution - Records are categorized as created or updated based on their
createdDateTimerelative to the last poll time — records whosecreatedDateTimeexceeds the last poll time are classified as created; all other records returned by the query are classified as updated - The trigger updates its internal state after each poll
- On the very first execution, the last poll time is initialized to the current time so historical records do not flood the workflow
Configuration
Configure the following inputs:
- Connection: The SAP SuccessFactors connection used to authenticate API requests
- Resource Type: The SAP SuccessFactors resource type to poll for new or updated records — Candidate, Job Application, Job Requisition, or Onboarding Candidate Info
- Show New Records: When enabled, includes newly created records in the results. Defaults to
true - Show Updated Records: When enabled, includes records that were updated after the last poll in the results. Defaults to
true
Returned Data
The trigger returns an object with two arrays — created for new records and updated for modified records.
Example Response (24 lines)
{
"data": {
"created": [
{
"candidateId": "12345",
"firstName": "Jane",
"lastName": "Doe",
"primaryEmail": "jane.doe@example.com",
"createdDateTime": "/Date(1705401000000)/",
"lastModifiedDateTime": "/Date(1705401000000)/"
}
],
"updated": [
{
"candidateId": "67890",
"firstName": "John",
"lastName": "Smith",
"primaryEmail": "john.smith@example.com",
"createdDateTime": "/Date(1704672000000)/",
"lastModifiedDateTime": "/Date(1705493400000)/"
}
]
}
}
Notes
Behavior Notes (5)
- The
$filterpredicate is applied server-side, so only records modified since the last poll are returned — this minimizes data transfer on each execution - SAP SuccessFactors returns timestamps in the Microsoft JSON date format (
/Date(<milliseconds>)/); these values are passed through unchanged in the trigger output - If both Show New Records and Show Updated Records are disabled, the trigger short-circuits and skips the API call entirely
- All four supported resource types expose the
lastModifiedDateTimefield, which drives the server-side filter - Refer to the SAP SuccessFactors OData V2 API documentation for rate limit details and available fields per resource type
Data Sources
Select Candidate
Select a Candidate from the dropdown list | key: selectCandidate | type: picklist
| Input | Notes | Example |
|---|---|---|
| Connection |
Example Payload for Select Candidate⤓
Select Job Application
Select a Job Application from the dropdown list | key: selectJobApplication | type: picklist
| Input | Notes | Example |
|---|---|---|
| Connection |
Example Payload for Select Job Application⤓
Select Job Requisition
Select a Job Requisition from the dropdown list | key: selectJobRequisition | type: picklist
| Input | Notes | Example |
|---|---|---|
| Connection |
Example Payload for Select Job Requisition⤓
Actions
Create a Record
Create a new record in component | key: createRecord
| Input | Notes | Example |
|---|---|---|
| Additional Inputs | Additional inputs to be passed to the action | |
| Connection | ||
| Record Type | The type of record to create | Candidate |
Create Candidate
Add a new entity to Candidate | key: createCandidate
| Input | Notes | Example |
|---|---|---|
| Additional Inputs | Additional inputs to be passed to the action | |
| Connection | ||
| Country | The country where the candidate is located | United States |
| First Name | The first name of the candidate | John |
| Last Name | The last name of the candidate | Doe |
| Primary Email | The primary email address of the candidate | test@test.com |
Example Payload for Create Candidate⤓
Create Job Application
Add a new entity to JobApplication | key: createJobApplication
| Input | Notes | Example |
|---|---|---|
| Additional Inputs | Additional inputs to be passed to the action | |
| Candidate ID | The ID of the candidate to create the job application for | 1234-5678 |
| Connection | ||
| Job Requisition ID | The ID of the job requisition to create the job application for | 1234-5678 |
Example Payload for Create Job Application⤓
Create Job Requisition
Add a new entity to JobRequisition | key: createJobRequisition
| Input | Notes | Example |
|---|---|---|
| Additional Inputs | The required fields for the selected template | |
| Connection | ||
| Template ID | The ID of the job requisition template to use | 1234-5678 |
Create Onboarding Candidate Info
Add a new entity to OnboardingCandidateInfo | key: createOnboardingCandidateInfo
| Input | Notes | Example |
|---|---|---|
| Additional Inputs | Additional inputs to be passed to the action | |
| Connection |
Delete Job Requisition
Delete an entity from JobRequisition | key: deleteJobRequisition
| Input | Notes | Example |
|---|---|---|
| Connection | ||
| Job Requisition ID | The ID of the job requisition to delete | 1234-5678 |
Delete Onboarding Candidate Info
Delete an entity from OnboardingCandidateInfo | key: deleteOnboardingCandidateInfo
| Input | Notes | Example |
|---|---|---|
| Applicant ID | The ID of the applicant to retrieve | 1234-5678 |
| Connection |
Delete Record
Delete an existing record in component | key: deleteRecord
| Input | Notes | Example |
|---|---|---|
| Connection | ||
| Record Type | The type of record to delete | Candidate |
| Record Type ID | The ID of the record to delete | 1234-5678 |
Get Candidate
Get entity from Candidate by key | key: getCandidate
| Input | Notes | Example |
|---|---|---|
| Select | Select properties to be returned | Rating,ReleaseDate |
| Candidate ID | The ID of the candidate to retrieve | 1234-5678 |
| Connection |
Example Payload for Get Candidate⤓
Get Job Application
Get entity from JobApplication by key | key: getJobApplication
| Input | Notes | Example |
|---|---|---|
| Select | Select properties to be returned | Rating,ReleaseDate |
| Connection | ||
| Job Application ID | The ID of the job application to retrieve | 1234-5678 |
Example Payload for Get Job Application⤓
Get Job Requisition
Get entity from JobRequisition by key | key: getJobRequisition
| Input | Notes | Example |
|---|---|---|
| Select | Select properties to be returned | Rating,ReleaseDate |
| Connection | ||
| Job Requisition ID | The ID of the job requisition to retrieve | 1234-5678 |
Get Onboarding Candidate Info
Get entity from OnboardingCandidateInfo by key | key: getOnboardingCandidateInfo
| Input | Notes | Example |
|---|---|---|
| Select | Select properties to be returned | Rating,ReleaseDate |
| Applicant ID | The ID of the applicant to retrieve | 1234-5678 |
| Connection |
Get Record
Retrieve a single record from component | key: getRecord
| Input | Notes | Example |
|---|---|---|
| Select | Select properties to be returned | Rating,ReleaseDate |
| Connection | ||
| Record Type | The type of record to create | Candidate |
| Record Type ID | The ID of the record type to retrieve | 1234-5678 |
List Candidates
Get entities from Candidate | key: listCandidates
| Input | Notes | Example |
|---|---|---|
| Count | Include count of items | false |
| Expand | Expand related entities | Orders($filter=Amount gt 100) |
| Filter | Filter items by property values | Price lt 10.00 |
| Order By | Order items by property values | userId desc |
| Search | Search items by search phrases | NOT clothing |
| Select | Select properties to be returned | Rating,ReleaseDate |
| Skip | The number of records to skip | 20 |
| Top | The number of records to return | 20 |
| Connection | ||
| Custom Query Params | Custom fields filter | key1=value1 |
| Fetch All | If true will fetch all records, otherwise will use the other inputs to fetch the records | false |
Example Payload for List Candidates⤓
List Job Applications
Get entities from JobApplication | key: listJobApplications
| Input | Notes | Example |
|---|---|---|
| Count | Include count of items | false |
| Expand | Expand related entities | Orders($filter=Amount gt 100) |
| Filter | Filter items by property values | Price lt 10.00 |
| Order By | Order items by property values | userId desc |
| Search | Search items by search phrases | NOT clothing |
| Select | Select properties to be returned | Rating,ReleaseDate |
| Skip | The number of records to skip | 20 |
| Top | The number of records to return | 20 |
| Connection | ||
| Custom Query Params | Custom fields filter | key1=value1 |
| Fetch All | If true will fetch all records, otherwise will use the other inputs to fetch the records | false |
Example Payload for List Job Applications⤓
List Job Requisitions
Get entities from JobRequisition | key: listJobRequisitions
| Input | Notes | Example |
|---|---|---|
| Count | Include count of items | false |
| Expand | Expand related entities | Orders($filter=Amount gt 100) |
| Filter | Filter items by property values | Price lt 10.00 |
| Order By | Order items by property values | userId desc |
| Search | Search items by search phrases | NOT clothing |
| Select | Select properties to be returned | Rating,ReleaseDate |
| Skip | The number of records to skip | 20 |
| Top | The number of records to return | 20 |
| Connection | ||
| Custom Query Params | Custom fields filter | key1=value1 |
| Fetch All | If true will fetch all records, otherwise will use the other inputs to fetch the records | false |
Example Payload for List Job Requisitions⤓
List Onboarding Candidate Info
Get entities from OnboardingCandidateInfo | key: listOnboardingCandidateInfo
| Input | Notes | Example |
|---|---|---|
| Count | Include count of items | false |
| Expand | Expand related entities | Orders($filter=Amount gt 100) |
| Filter | Filter items by property values | Price lt 10.00 |
| Order By | Order items by property values | userId desc |
| Search | Search items by search phrases | NOT clothing |
| Select | Select properties to be returned | Rating,ReleaseDate |
| Skip | The number of records to skip | 20 |
| Top | The number of records to return | 20 |
| Connection | ||
| Custom Query Params | Custom fields filter | key1=value1 |
| Fetch All | If true will fetch all records, otherwise will use the other inputs to fetch the records | false |
List Records
Retrieve a list of records from component | key: listRecords
| Input | Notes | Example |
|---|---|---|
| Count | Include count of items | false |
| Expand | Expand related entities | Orders($filter=Amount gt 100) |
| Filter | Filter items by property values | Price lt 10.00 |
| Order By | Order items by property values | userId desc |
| Search | Search items by search phrases | NOT clothing |
| Select | Select properties to be returned | Rating,ReleaseDate |
| Skip | The number of records to skip | 20 |
| Top | The number of records to return | 20 |
| Connection | ||
| Custom Query Params | Custom fields filter | key1=value1 |
| Fetch All | If true will fetch all records, otherwise will use the other inputs to fetch the records | false |
| Record Type | The type of record to create | Candidate |
Raw Request
Send raw HTTP request to the SAP SuccessFactors API | key: rawRequest
| Input | Notes | Example |
|---|---|---|
| Connection | ||
| Data | The HTTP body payload to send to the URL. | {"exampleKey": "Example Data"} |
| Debug Request | Enabling this flag will log out the current request. | false |
| File Data | File Data to be sent as a multipart form upload. | [{key: "example.txt", value: "My File Contents"}] |
| File Data File Names | File names to apply to the file data inputs. Keys must match the file data keys above. | |
| Form Data | The Form Data to be sent as a multipart form upload. | [{"key": "Example Key", "value": new Buffer("Hello World")}] |
| Header | A list of headers to send with the request. | User-Agent: curl/7.64.1 |
| Max Retry Count | The maximum number of retries to attempt. Specify 0 for no retries. | 0 |
| Method | The HTTP method to use. | |
| Query Parameter | A list of query parameters to send with the request. This is the portion at the end of the URL similar to ?key1=value1&key2=value2. | |
| Response Type | The type of data you expect in the response. You can request json, text, or binary data. | json |
| Retry On All Errors | If true, retries on all erroneous responses regardless of type. This is helpful when retrying after HTTP 429 or other 3xx or 4xx errors. Otherwise, only retries on HTTP 5xx and network errors. | false |
| Retry Delay (ms) | The delay in milliseconds between retries. This is used when 'Use Exponential Backoff' is disabled. | 0 |
| Timeout | The maximum time that a client will await a response to its request | 2000 |
| URL | Input the path only (/Candidate), The base URL is already included ({{ YOUR_API_SERVER_URL }}). For example, to connect to {{ YOUR_API_SERVER_URL }}/Candidate, only /Candidate is entered in this field | /Candidate |
| Use Exponential Backoff | Specifies whether to use a pre-defined exponential backoff strategy for retries. When enabled, 'Retry Delay (ms)' is ignored. | false |
Update Candidate
Update an entity in Candidate | key: updateCandidate
| Input | Notes | Example |
|---|---|---|
| Additional Inputs | Additional inputs to be passed to the action | |
| Candidate ID | The ID of the candidate to retrieve | 1234-5678 |
| Connection | ||
| Country | The country where the candidate is located | United States |
| First Name | The first name of the candidate | John |
| Last Name | The last name of the candidate | Doe |
| Primary Email | The primary email address of the candidate | test@test.com |
Example Payload for Update Candidate⤓
Update Job Application
Update an entity in JobApplication | key: updateJobApplication
| Input | Notes | Example |
|---|---|---|
| Additional Inputs | Additional inputs to be passed to the action | |
| Candidate ID | The ID of the candidate to update | 1234-5678 |
| Connection | ||
| Job Application ID | The ID of the job application to retrieve | 1234-5678 |
| Job Requisition ID | The ID of the job requisition to update | 1234-5678 |
Example Payload for Update Job Application⤓
Update Job Requisition
Update an entity in JobRequisition | key: updateJobRequisition
| Input | Notes | Example |
|---|---|---|
| Additional Inputs | The template fields to update | |
| Connection | ||
| Job Requisition ID | The ID of the job requisition to retrieve | 1234-5678 |
Example Payload for Update Job Requisition⤓
Update Onboarding Candidate Info
Update an entity in OnboardingCandidateInfo | key: updateOnboardingCandidateInfo
| Input | Notes | Example |
|---|---|---|
| Applicant ID | The ID of the applicant to retrieve | 1234-5678 |
| Connection |
Update Record
Update an existing record in component | key: updateRecord
| Input | Notes | Example |
|---|---|---|
| Additional Inputs | Additional inputs to be passed to the action | |
| Connection | ||
| Record Type | The type of record to create | Candidate |
| Record Type ID | The ID of the record type to retrieve | 1234-5678 |
Example Payload for Update Record⤓
Changelog
2026-05-05
Added New and Updated Records polling trigger for detecting new and modified records across multiple resource types, with the following capabilities:
- Supports Candidate, Job Application, Job Requisition, and Onboarding Candidate Info records
- Performs server-side filtering by last modified date for efficient change detection
- Works with both Basic Authentication and API Key Authentication connections
2026-04-30
Updated spectral version
2026-02-24
Added inline data sources for Job Application ID and Candidate ID inputs to enhance data selection capabilities
2025-10-02
- Enhanced SAML assertion handling with improved error reporting and promisified authentication flow