How To Integrations Recruiting Management Recruiting Marketing SAP SuccessFactors

How to map an SAP SuccessFactors job id to the corresponding req id

Most SAP SuccessFactors Recruiting Marketing sites do not show the job requisition id anywhere on the job page. Even the job page url only contains what is usually referred to as the job id. A quick example: The highlighted number is the job id, which is only used by Recruiting Marketing. So, what can you do if need to find the corresponding job requisition id for, say, your custom SAP cloud app integration?

Recruiting Marketing actually provides an on-board solution: When a user clicks “Apply” on any job, a request is sent to an ajax endpoint ([rmk-domain]/services/cas/createpayload/) to find the job requisition id which is then sent to Recruiting Management in order to start the application process. The request is sent as JSON, the response is sent as JSON and the endpoint only requires a session id cookie an a CSRF token header as authentication. Let’s take a quick look at the request and response for the above mentioned job.

Request JSON

  "context": {
    "action": "apply",
    "locale": "en_US",
    "source": "",
    "categoryID": "",
    "jobID": 634239700,
    "brand": "",
    "email": ""
  "sourceData": "",
  "agent": {
    "keywords": "",
    "location": "",
    "q": "",
    "locationSearch": "",
    "geoLocation": "",
    "longitude": "",
    "latitude": "",
    "distance": "",
    "units": "",
    "country": "",
    "frequency": 7,
    "filterString": ""

As you can see, most of the request fields are empty. The only fields you actually need to retrieve the job req id are the action and jobId fields under context. And yes, the retrieval works just fine if you omit the other fields entirely and send something like this:

  "context": {
    "action": "apply",
    "jobID": 634239700

Response JSON

  "success": true,
  "targetUrl": "",
  "correlation_Id": 22101986300,
  "company": "BJSProd",
  "lang": "en_US",
  "clientId": "jobs2web",
  "socialApply": false,
  "career_ns": "job_application",
  "navBarLevel": "",
  "login_ns": "",
  "career_job_req_id": "97495",
  "externalApply_correlation_Id": null,
  "jobPipeline": "Direct",
  "ucc_firstname": "",
  "ucc_lastname": "",
  "ucc_email": "",
  "ucc_partnerProfile": "",
  "site": "",
  "isInternalUser": false

And there you have it: The response delivers, among other details, the career_job_req_id.


SAP recently started requiring a session id cookie as well as a csrf token header as a form of authentication. If either one is missing or incorrect, you will receive a 404 Not Found error. However, both values are easy enough to retrieve. Simply fetch any part of the RMK site with a GET request and you will receive the JSESSIONID cookie and the X-CSRF-Token, which is contained in the HTML.

A few quick notes on using this technique

When working with multiple Recruiting Marketing brands, you need to set the brand parameter in the request in order to retrieve the correct site id for the brand. You will still get the job req id for custom brands if you don’t provide the parameter, but the site field (which would contain the brand’s site id) will be empty.

Recruiting Marketing often returns expired jobs in the search as well as in various feeds. You can easily detect that when making the request, since you will get an HTTP 410 Gone status code and the success field in the response body will be false. However, the endpoint returns 410 Gone regardless of whether the provided jobId actually ever existed, so keep that in mind.

If you don’t feel like implementing this lookup process yourself, you can deploy it as an AWS Lambda function. You can find the source code for the Lambda on my GitHub.