The Product Gap
Product Gap: There is currently no standard (out-of-the-box) option to map Position Matrix Relationships from SAP SuccessFactors Employee Central to SmartRecruiters Hiring Team roles. This limitation applies when a job requisition is created from a Position in SmartRecruiters — the matrix relationships (e.g., HR Manager, Dotted-Line Manager) defined on the source Position are not automatically resolved and assigned as Hiring Team members.
This feature is on the SAP product roadmap but is not yet generally available.
In SAP SuccessFactors, the Position Matrix Relationship is a powerful feature that allows organizations to define secondary or indirect reporting relationships alongside the primary line hierarchy. Common examples include HR Business Partners, Dotted-Line Managers, or Functional Leads assigned to a position. These relationships are defined at the Position level and, by extension, apply to the incumbent employee.
In SmartRecruiters, the Hiring Team on a job requisition controls who can view, manage, and collaborate on the requisition. Typical roles include Recruiter, Coordinator, and Hiring Manager. When a requisition is created from a Position in SuccessFactors, it is expected that the right stakeholders — as defined by matrix relationships — would be automatically added to the Hiring Team with the correct roles. This does not happen today via standard integration.
Solution Architecture
Component Role in the Solution
SmartRecruiters Webhook (job.created) |
Triggers the automation when a job is created from a Position |
| EC OData – Job / Position link | Retrieves the Position code tied to the new job |
EC OData – PositionMatrixRelationship |
Returns all matrix relationships defined on the Position |
EC OData – EmpJob |
Finds the current incumbent on the related/matrix Position |
| SmartRecruiters Users API | Resolves the SuccessFactors user to a SmartRecruiters user ID |
| SmartRecruiters Hiring Team API | Upserts the resolved user with the correct Hiring Team role |
Note: The integration layer (webhook listener and orchestration logic) can be implemented on SAP BTP using Integration Suite, Cloud Integration, or a custom Node.js / Python function. The focus of this blog is on the API interactions rather than the middleware implementation.
Step-by-Step Implementation
Subscribe to the job.created Webhook in SmartRecruiters
Configure a webhook subscription in SmartRecruiters for the job.created event. Whenever a recruiter creates a new job requisition — particularly one initiated from a Position in SuccessFactors — SmartRecruiters fires this event with the new Job ID in the payload.
Figure 1: The job.created webhook payload containing the SmartRecruiters Job ID
From the payload, extract the Job ID (e.g., 2a9e277c-275e-42ad-9749-2137a3a2e9f8). This ID will be used throughout the subsequent steps.
Retrieve the Associated Position Code from SmartRecruiters / EC
Using the Job ID returned by the webhook, query the SmartRecruiters or Employee Central API to retrieve the Position code associated with the job. In the standard SuccessFactors–SmartRecruiters integration, the Position code is stored against the job requisition and can be retrieved via the SR Job details endpoint or the EC job requisition linkage.
The Position code is the key that unlocks the matrix relationship query in the next step. Example Position code: 3001511
Query Position Matrix Relationships in Employee Central
With the Position code, call the EC OData API endpoint for PositionMatrixRelationship, filtering by the Position code and expanding the related position navigation:
GET https://apisalesdemo8.successfactors.com/odata/v2/PositionMatrixRelationship
?$filter=Position_code eq '3001511'
&$expand=relatedPositionNav
The response contains the matrix relationship type (e.g., hr manager) and the related Position code, which identifies the Position held by the matrix relationship incumbent.
Figure 2: EC OData API response for PositionMatrixRelationship — showing matrixRelationshipType: hr manager and the related Position
Note the matrixRelationshipType field — this can later be mapped to the corresponding Hiring Team role in SmartRecruiters (e.g., “hr manager” → RECRUITER or a custom role).
Identify the Incumbent on the Related Position
Once you have the related Position code from Step 3, query the EmpJob entity in EC to find the current incumbent (employee) holding that position:
GET https://apisalesdemo8.successfactors.com/odata/v2/EmpJob
?$filter=position eq '3000775'
&$select=userId,userNav/displayName
&$expand=userNav
The response provides the userId of the incumbent in Employee Central (e.g., Tworkshop) along with their display name.
Resolve the SmartRecruiters User ID
SmartRecruiters maintains its own internal user IDs that are different from SuccessFactors user IDs. To upsert a user to the Hiring Team, you need the SR-specific user ID. There are two approaches to resolve this mapping:
Option A — Query the SR Users API: Call the SmartRecruiters Users endpoint and match the employee by email address or name to retrieve their SR user ID.
GET https://api.smartrecruiters.com/users
Figure 3: SmartRecruiters Users API response — SR user ID: 6943a4116e5fce00ab01c71c
Option B — Maintain a Custom MDF in SuccessFactors: Run a daily synchronization job that queries the SR Users API and stores the SR user IDs in a custom Metadata Framework (MDF) object in BizX, keyed by the SuccessFactors userId. At runtime, a simple lookup on this MDF returns the SR ID without making an additional API call to SmartRecruiters, reducing latency.
Recommendation: Option B (custom MDF with daily sync) is preferred for production scenarios as it reduces runtime API dependencies and improves reliability. Option A is simpler to implement for proof-of-concept or low-volume scenarios.
Upsert the User to the SmartRecruiters Hiring Team
With the SR Job ID (from Step 1) and the SR User ID (from Step 5), make a POST request to the SmartRecruiters Hiring Team endpoint to add the user with the appropriate role:
POST https://api.smartrecruiters.com/jobs/{jobId}/hiring-team
Body:
{
"id": "6943a4116e5fce00ab01c71c",
"role": "RECRUITER"
}
The role value should be mapped from the matrixRelationshipType retrieved in Step 3. A suggested mapping is:
EC matrixRelationshipType SmartRecruiters Hiring Team Role
| hr manager | RECRUITER |
| dotted line manager | COORDINATOR |
| (custom) | (custom mapping as per your configuration) |
Figure 4: POST to the SmartRecruiters Hiring Team API — 200 OK confirms the user was successfully added
Result
After executing the upsert in Step 6, the SmartRecruiters Hiring Team section on the job requisition is automatically populated with the correct members derived from the Position Matrix Relationships in Employee Central.
In the example below, the hiring team has been updated with two members:
- Kunal Hasija — Coordinator
- Test Workshop — Recruiter (added via the API upsert)
Figure 5: SmartRecruiters Hiring Team before the upsert — only one member is present
Figure 6: SmartRecruiters Hiring Team after the upsert — the matrix relationship incumbent has been added as Recruiter
Outcome: The Hiring Team in SmartRecruiters is now automatically populated based on the Position Matrix Relationships defined in SAP SuccessFactors Employee Central — without any manual intervention from the recruiter.
Key Considerations and Recommendations
- Role Mapping: Define a clear and agreed mapping between EC matrix relationship types and SR Hiring Team roles before implementation. This mapping should be configurable, not hardcoded.
- User ID Synchronization: Maintaining SR user IDs in a custom MDF in BizX reduces runtime latency and avoids failures caused by SR API rate limits.
- Multiple Matrix Relationships: A single Position may have multiple matrix relationships. Ensure your implementation iterates over all returned relationships and calls the upsert for each resolved incumbent.
- Error Handling: If a matrix relationship incumbent is not found in SmartRecruiters (e.g., they are an external contractor not in SR), implement graceful error handling and alerting rather than failing the entire process.
- Webhook Reliability: Use retry logic and idempotent upsert calls to handle cases where the webhook fires multiple times for the same job creation event.
- Future Native Support: This gap is on the SAP product roadmap. Monitor SAP release notes and the SAP SuccessFactors Community for updates. Once native support is delivered, the custom solution should be retired to reduce maintenance overhead.
Summary
The absence of a standard mapping between Position Matrix Relationships in SAP SuccessFactors and the SmartRecruiters Hiring Team is a recognized product gap that affects customers using the integrated SuccessFactors–SmartRecruiters talent acquisition setup. Until native support is delivered, the six-step custom solution described in this blog provides a reliable, event-driven workaround:
- Subscribe to the SmartRecruiters
job.createdwebhook - Retrieve the Position code associated with the new job
- Query EC
PositionMatrixRelationshipOData API - Identify the incumbent via EC
EmpJobOData API - Resolve the SmartRecruiters User ID (via SR Users API or custom MDF)
- Upsert the user to the SmartRecruiters Hiring Team with the mapped role
Thanks
Kunal
Product Success
RIG APJ



