Business rationale

At StepStone, we care not only about quantity but also about the quality of applicants delivered to our clients. We’d like to build our stronger partnerships with ATSes and Clients and receive feedback on Application Status and be able to provide this feedback to jobseekers using our services.

We’d like to:

  • show job seekers information about their applications in one place for all jobs they applied to
  • get some data proving the quality of applicants we send to clients and their ATSes in order to improve our services

Technical implementation

Candidate Status flow for ATSes that implement ATSi Apply API:

  1. ATS receives an apply request and saves the value of ATSI application ID (an ‘Id’ field in the Header section) with the job application.
  2. Any change in the job application status on the ATS side should trigger sending a message to the ATSi Application Status service with a status change information and ATSi application ID correlated with the application (field called ‘Id’ in the Header section).


Authorization to ATSi Application Status service is done by setting a token value into the request header. To get a token and ATS_ID values contact ATSi support team (please see CONTACTS tab).
A token value must be set under a request header key: X-AtsiToken.

Below is a sample curl request with an authorization token and an application status change body.

curl -X POST https://atsi-prod/qs-api/public/atsi/v1/ATS_ID \
  -H 'Content-Type: application/json' \
  -H 'X-AtsiToken: 1nwh2px2exa8a1d7006h0cnbof7' \
  -d '{
    "AtsiApplicationId": "string",
    "Status": "CONTACT",
    "RawStatus": "1st phone interview",

Please contact ATSi Support team to get details of the test and production environments and tokens.

Application status change message

Every change of a job application status should trigger sending an ApplicationStatus message to the ATSi Application Status service. The message must have a format as below and contain X-AtsiToken in the request header.

   "AtsiApplicationId": "Id from apply request body Header section", 
   "Status": "one of the standardized statuses",
   "RawStatus": "your raw status",
   "BusinessDate":"business date of the status change"

“Status” field is optional.

“AtsiApplicationId”, “RawStatus” and “BusinessDate” are mandatory fields.

If you decide to send us the “Status” field, you need to handle the mapping on your side. However, if you provide “Status” field then you have full control over how we present this information to the jobseeker.

Available statuses:
IN_REVIEW – Candidate has successfully applied – Application is received by the ATS and is under review
CONTACT – Application has successfully passed the review and recruiter has scheduled for a call (contact) with the applicant (including phone screening)
INTERVIEW – Candidate has passed the initial screening and recruiter arranged for an interview, background check or competence test with the applicant.
OFFER – Recruiter created an offer for an applicant
HIRED – Candidate was hired
REJECTED – Candidate was rejected/has withdrawn interest

API Responses

Successfull response – HTTP 200 OK

   "Status": "OK"

Invalid status or ATS_ID – HTTP 400 BAD REQUEST

   "Status": "ERROR",
   "Message": "Invalid Status value, supported values are [IN_REVIEW, CONTACT, INTERVIEW, OFFER, HIRED, REJECTED]"

Invalid X-AtsiToken – HTTP 401 Unauthorized

   "Status": "ERROR",
   "Message": "Unauthorized, invalid token"