Recruitment (Job boards)

Automation job applications

Job posts are 'mined' for their questions, these questions are returned as JSON to create a form and the form is used to collect the data required for application

  1. Mining Job Application Questions: The process starts by sending an HTTP request to the UBIO API with the URL of the job post form and a unique jobPostId. This request "mines" the job application questions from the web page and adds them to the UBIO database.

  2. Retrieving Job Application Questions: Once the job post questions are mined and stored in the database, you can retrieve them using another API call. You provide the jobPostId to fetch the corresponding questions.

    • The service to mine job questions may have a few different states along its run: queued, processing, failed and mined answers/questions.

    • When status is failed, jobs should be recreated (possibly, with new params) manually, as the mining service doesn't have a mechanism for auto-retry.

    • When answers/questions are present in response retrieved, the service succeeded mining questions for job post.

  3. Creating a Job Post Application: To make a job post application on behalf of a user, you need to initiate an automation job using the AutomationCloud API. The inputs required for the application are obtained from the retrieved job application questions. These inputs should be passed to the API endpoint as key-value pairs.

  4. Terms and Conditions: Before submitting the application, the user must consent to the terms and conditions specified.

  5. Submission: The application has been submitted, and you can confirm its status.

This process enables the automation of job applications by extracting application questions, retrieving them when needed, and using the obtained information to create job post applications through the AutomationCloud API.

Authentication

To access the API, authenticate your requests using basic HTTP authentication. Include a APP_SECRET_KEY value as the username, which will be provided by UBIO.

Example

Use the Base64 encoded format of APP_SECRET_KEY: (secret key value followed by colon) in the Basic HTTP Auth header, as follows:

curl <URL> \
    -H 'Authorization: Basic JEFQUF9TRUNSRVRfS0VZOg=='

More instructions for authentication.


Mining a job post (gathering questions)

In order to allow your users to apply for job posts, they need to be added to the UBIO database. This process ensures that the job application questions are β€œmined” from the job post web page so that you are able to use them to build the application forms on your website.

The mining process is performed by sending an HTTP request to the UBIO API with the URL of the job post form on the ATS and your jobPostId, which you will use to refer to the job post going forward.

The jobPostId is confirmed in the response - as well as the status of the related mining job. When mining a new job this will be queued or processing.

Making a further submission with the same jobPostId will result in overriding the previous results once the mining is complete.

Code sample

POST/v1/recruitment/job-posts/mine/
curl -X POST 'https://services.automation.cloud/v1/recruitment/job-posts/mine/' \
    -H 'Authorization: Basic <credentials>' \
    -H 'Content-Type: application/json' \
--data '{
  "jobPostId": "example123",
  "url": "https://careers.employer.com/jobs/EXAMPLE",
  "category": "test",
  "employer": "Company ABC",
  "country": "gb"
}'

Success Responses

Status 200

{
  "status": "queued",
  "jobPostId": "example123"
}

πŸ‘† The "jobPostId" and "status" of the related mining job, confirmed in the response.


Find the questions for a job post

Once a job post has been "mined", its questions can be retrieved from the database with the following API call. The jobPostId must be the same value as the jobPostId value used when initally mining the job post questions.

The response returned depends upon the status of the "mining" job. It may be queued, processing, failed or will return the complete list of questions when complete as per the example below.

Mining jobs with answers/questions/succeededAt or status failed in response, means they reached a final state. When status is failed, jobs should be recreated (possibly, with new params) manually, as the mining service doesn't have a mechanism for auto-retry.

The response includes a serviceId value. This will be used when making an automation - and is required to ensure the correct automation service is used when the job application is made.

Also included in the response are the answers used when 'mining' the job post. This can be useful when preparing test applications.

Code sample

GET/v1/recruitment/job-posts/find/
curl -X GET 'https://services.automation.cloud/v1/recruitment/job-posts/find/' \
    -H 'Authorization: Basic <credentials>' \
    -G \
    -d 'jobPostId=example123' 

Success Responses

Status 200

{
  "status": "queued"
}

πŸ‘† Mining in queued state

{
  "status": "processing"
}

πŸ‘† Mining in processing state

{
  "status": "failed",
  "errorCode": "GenericWebsiteError"
}

πŸ‘† Mining failed. Note that, error code may be "JobErrorEarlyFail" which is temporary, and a definitive code will be placed soon.

{
  "jobPostId": "example123",
  "serviceId": "50730bd2-fe6c-4c16-9650-249b2bb6460d",
  "answers": [
    {
      "value": "Yes",
      "id": "do-you-have-right-to-work-in-the-uk"
    },
    {
      "value": "No",
      "id": "are-you-resident-in-the-uk"
    },
    {
      "value": "No",
      "id": "do-you-have-a-car-that-you-can-use-for-w"
    },
    "...",
    {
      "value": "90210",
      "id": "what-is-your-postcode"
    }
  ],
  "questions": [
    {
      "key": "availableDynamicQuestions:682df196b4b5e860e2ee842ea38415085f46cefd",
      "data": [
        {
          "question": "Do you have β€˜right to work’ in the UK?",
          "id": "do-you-have-right-to-work-in-the-uk",
          "inputType": "SelectOne",
          "options": [
            {
              "answer": "Yes",
              "conditionalQuestions": []
            },
            {
              "answer": "No",
              "conditionalQuestions": []
            }
          ],
          "label": "Apply now",
          "mandatory": true
        },
        {
          "question": "Are you resident in the UK?",
          "id": "are-you-resident-in-the-uk",
          "inputType": "SelectOne",
          "options": [
            {
              "answer": "Yes",
              "conditionalQuestions": []
            },
            {
              "answer": "No",
              "conditionalQuestions": []
            }
          ],
          "label": "Apply now",
          "mandatory": true
        },
        {
          "question": "Do you have a car that you can use for work?",
          "id": "do-you-have-a-car-that-you-can-use-for-w",
          "inputType": "SelectOne",
          "options": [
            {
              "answer": "Yes",
              "conditionalQuestions": []
            },
            {
              "answer": "No",
              "conditionalQuestions": []
            }
          ],
          "label": "Apply now",
          "mandatory": true
        },
        "..."
      ]
    },
    {
      "key": "availableDynamicQuestions:25e8dbc7a4cef3b2f5a85ad9b36557e9ffb01338",
      "data": [
        {
          "question": "What is your postcode?",
          "id": "what-is-your-postcode",
          "inputType": "Text",
          "label": "New form",
          "mandatory": true
        }
      ]
    }
  ],
  "succeededAt": 1721315141741
}

πŸ‘† Response after mined questions for Job Post


Making a job post application

Using the questions fetched in the previous step you will build a applicant facing form for the user to provider answers to complete the job application.

The answers to these questions are then submitted to the Automation Cloud API and are used to complete the application process on the third-party website.

The application payload will include

  • jobPostId - the post ID that matches the originally mined job. This is used to ensure the application is processed using the correct service.

  • candidate - this is basic standard information about the applicant.

  • files - this key is used to include any files required for the application, most notably the cv file. This should be a URL to the document.

  • answers - this key contains the value/id pairs that provide answers to questions return in the JSON response.

  • submit - this is a boolean value (set to false for testing purposes) determines if the application is actually submitted. If set to false the automation will run up until the final point of submission.

  • country (optional) - For use when Geofencing is in place. This allows you to use a 2 digit ISO code to set the country of the proxy used as per the mining endpoint also. If a country is used when mining (for geofenced jobs) the same country should be here.

The response will include the status and importantly the applicationId.

The applicationId is used to check and confirm the status of the application.

Code sample

POST/v1/recruitment/job-posts/apply/
curl -X POST 'https://services.automation.cloud/v1/recruitment/job-posts/apply/' \
    -H 'Authorization: Basic <credentials>' \
    -H 'Content-Type: application/json' \
--data '{
  "jobPostId": "example123",
  "candidate": {
    "email": "janedoe548453@gmail.com",
    "password": "123QWEasd-",
    "phone": {
      "number": "7123456789",
      "countryCode": "gb"
    },
    "firstName": "John",
    "lastName": "Doe",
    "middleName": ""
  },
  "files": {
    "cv": {
      "url": "https://mag.wcoomd.org/uploads/2018/05/blank.pdf",
      "filename": "jiji-Jacob_27407655_cv-library.pdf",
      "type": "File"
    }
  },
  "answers": [
    {
      "value": "Yes",
      "id": "do-you-have-right-to-work-in-the-uk"
    },
    {
      "value": "No",
      "id": "are-you-resident-in-the-uk"
    },
    {
      "value": "No",
      "id": "do-you-have-a-car-that-you-can-use-for-w"
    },
    {
      "value": "No",
      "id": "do-you-have-a-full-uk-driving-licence"
    },
    {
      "value": "No",
      "id": "do-you-have-experience-working-in-health"
    },
    {
      "value": "No",
      "id": "do-you-have-experience-working-with-chil"
    },
    {
      "value": "90210",
      "id": "what-is-your-postcode"
    }
  ],
  "submit": false,
  "country": "gb"
}'

Success Responses

Status 200

{
  "status": "processing",
  "applicationId": "d5bd3534-a7cb-44c7-822b-2ef7dbb6c7f3"
}

πŸ‘† Application in "processing" state


Check Application Status

Once an application has been submitted the automation process begin in Automation Cloud. We navigate to the job post URL and fill in the application with the details provided in the application payload.

Applications will vary in the time that they take to complete based upon factors such as length and complexity.

Using applicationId you can query the status of an application (likely on a polling basis) to check if it is processing, has ended in success or in some instances resulted in a failed status.

Code sample

GET/v1/recruitment/job-posts/application/
curl -X GET 'https://services.automation.cloud/v1/recruitment/job-posts/application/' \
    -H 'Authorization: Basic <credentials>' \
    -G \
    -d 'applicationId=9904d53d-9767-4f8b-9ad7-5756a309b736' 

Success Responses

Status 200

{
  "status": "processing"
}

πŸ‘† Application in "processing" state

{
  "status": "success"
}

πŸ‘† Application in "success" state


Troubleshooting

Failed to mine job post

  • When status is failed, a mine request should be reissued (possibly, with new params), as the mining service doesn't have a mechanism for auto-retry.
  • When error code is JobExpired, most likely it's not worth to retry mining the same job post, as it means its application page is unreachable (e.g. link is expired) or that is not possible to mine its data.

Failed to apply to job post

  • Same procedure as when mining a job post fails. There's no auto-retry in place, so the application request should be reissued.

Known limitations

We always aim to improve this service to its best shape. Although, there are some limitations that we're aware of and they might change overtime (whether it's up to us or not).

Possibly slow service availability

  • Job boards might get lot of traffic at some point which can slow down mining/application service
  • Mining queue takes a maximum (global) amount of 100 requests per minute

Mined applications forms

  • We mirror the exact data/inputs available in the job board application page. Which means, non extra modifications are applied to mined questions.

GDPR

  • We delete all data that is considered PII (email, credentials, files references, etc.) after 2 weeks.

Development tools