SuccessFactors Integration Guide
This technical documentation outlines how Visage integrates with SAP SuccessFactors via Merge.dev's unified API. The integration enables bi-directional data synchronization for candidates, applications, and job requisitions.
Candidate Export Conditions
Visage only creates candidate or application records in SAP SuccessFactors after explicit candidate interest and consent have been confirmed. Candidates who opt out, disengage, or do not respond are never exported to SuccessFactors. This is required for compliance alignment.
Note for Developers
This integration uses the Merge ATS Unified API. All data models described below map to Merge's standardized schema.
Prerequisites
- A valid SAP SuccessFactors instance URL (e.g.,
https://api12.sapsf.eu). - An API User account in SuccessFactors with RBP (Role-Based Permissions) for OData API access.
- Company ID (Company Schema Name).
- Visage Admin access to configure the integration.
Authentication
We use OAuth 2.0 or Basic Auth depending on your SuccessFactors configuration. The connection is handled securely via Merge Link. OAuth 2.0 is used where supported by the tenant; Basic Authentication is only used when required by SuccessFactors configuration.
// Example Connection Object
{
"integration": "sap_successfactors",
"auth_type": "oauth2",
"credentials": {
"client_id": "...",
"client_secret": "...",
"company_id": "...",
"api_url": "https://api12.sapsf.eu"
}
}Candidate Data Mapping
When Visage creates a candidate in SuccessFactors after consent is confirmed, we map the following fields:
| Visage Field | SuccessFactors OData Entity | Direction |
|---|---|---|
| First Name | Candidate.firstName | Write |
| Last Name | Candidate.lastName | Write |
| Candidate.primaryEmail | Write | |
| Resume | Attachment | Write |
Applications
Applications link candidates to specific job requisitions. We support the following operations:
Create Application
When a candidate has confirmed interest in a specific role in Visage, an application is automatically created in SuccessFactors.
Update Status
Status changes in SuccessFactors (e.g., "Interview", "Offer") are synced back to Visage to update the candidate's journey.
Job Requisitions
Visage pulls open job requisitions from SuccessFactors to allow you to start sourcing immediately.
| Visage Field | SuccessFactors OData Entity | Direction |
|---|---|---|
| Job Title | JobRequisition.jobTitle | Read |
| Job ID | JobRequisition.jobReqId | Read |
| Status | JobRequisition.jobReqStatus | Read |
| Department | JobRequisition.department | Read |
Sync Frequency & Limits
Sync frequency and behavior depend on SuccessFactors API limits and configured webhooks.
Standard Sync
By default, Visage syncs data every 60 minutes. This includes checking for new job requisitions and updating candidate statuses.
Rate Limits
We respect SuccessFactors OData API limits. If the limit is reached, syncs will pause and retry with exponential backoff.
Webhooks enable near-real-time updates; otherwise, changes are synchronized during scheduled sync intervals.
Webhooks
For real-time updates, we recommend configuring Intelligent Services events in SuccessFactors to trigger webhooks for critical changes.
Supported Events
- →JobRequisition.created
Triggers when a new job is approved and opened.
- →JobApplication.statusChanged
Triggers when a candidate moves to a new stage.
- →Candidate.updated
Triggers when candidate profile data is modified.