Skip to content

SAP SuccessFactors

A first party connector that imports people, employments and foundation objects from SAP SuccessFactors over the OData API.

Configuration inputs

Input Kind Required Description
baseurl Configuration Yes The SuccessFactors API endpoint for your instance, for example https://api4.successfactors.com/odata/v2.
clientid Configuration Yes The API key registered in SuccessFactors.
companyid Configuration Yes The SuccessFactors company id.
authflow Configuration No Assertion or ClientCredentials. Defaults to Assertion.
userid Configuration Only for Assertion The SuccessFactors user the connector acts as.
privatekey Secret Only for Assertion The X.509 private key used to sign the SAML assertion.
clientsecret Secret Only for ClientCredentials The client secret.

Check which templates your tenant has

Templates are enabled per tenant, so run Get-IAMCoreConnectorTemplate to confirm this one is available to you and to see the exact inputs it expects.

Authentication

SuccessFactors supports two OAuth 2.0 flows, and which one you use decides which inputs are needed.

The connector signs a SAML assertion with your private key and exchanges it for an access token. This is the default, and needs userid and the privatekey secret in addition to the common inputs.

$Connector = New-IAMCoreConnector `
    -Name "SuccessFactors" `
    -TemplateId successfactors `
    -Configuration @{
        baseurl   = "https://api4.successfactors.com/odata/v2"
        clientid  = "your-api-key"
        companyid = "your-company-id"
        authflow  = "Assertion"
        userid    = "the-api-user"
    } `
    -Secrets @{
        privatekey = "<X.509 private key>"
    }

Write-Host "Created with id $($Connector.id)"

A direct client credentials exchange, needing only the clientsecret secret.

$Connector = New-IAMCoreConnector `
    -Name "SuccessFactors" `
    -TemplateId successfactors `
    -Configuration @{
        baseurl   = "https://api4.successfactors.com/odata/v2"
        clientid  = "your-api-key"
        companyid = "your-company-id"
        authflow  = "ClientCredentials"
    } `
    -Secrets @{
        clientsecret = "your-client-secret"
    }

Write-Host "Created with id $($Connector.id)"

If a required input for the chosen flow is missing, the import fails immediately with a message naming it — for example userid is required when authflow is 'Assertion'.

Connector object types

The connector object types are the SuccessFactors entity names, so they keep their original casing.

Object type External id Contents
User userId User accounts
PerPerson personIdExternal People
PerPersonal personIdExternal Personal details, as of the current date
EmpEmployment employmentId Employments
EmpJob userId, startDate and seqNumber combined Job assignments, filtered to the latest effective change
Position code Positions
FOCompany externalCode Companies
FOCostCenter externalCode Cost centres
FOLocation externalCode Locations, including the default address
FOJobFunction externalCode Job functions, including the parent function

EmpJob has a composite key

A job assignment is identified in SuccessFactors by three fields together, so its external id is userId|startDate|seqNumber. Join on it with an anchor built from the same three values, or on userId alone if one relationship per person is enough.

Foundation objects are fetched as of the day the import runs, so future-dated changes appear on the day they take effect rather than in advance.

Example sync rules

The usual mapping is:

  • PerPerson → a CoreIdentity, provisioning enabled, enriched from PerPersonal and User
  • FOCompany (or another foundation object matching your structure) → a CoreOrgUnit
  • EmpEmployment or EmpJob → a CoreRelationship

Because person data is split across PerPerson, PerPersonal and User, more than one rule usually writes to the same identity. Give each a distinct priority so it is clear which one wins where they overlap.

See sync rules for complete worked examples.