Categories
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: https://careers.bjs.com/job/Chicopee-Cashier-Job-MA-01020/634239700/. 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 does not require any sort of 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": "https://career4.successfactors.com/careers",
  "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.

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.