Assessment Providers
How it works
The first step is for Workable and the Assessments Provider to be authenticated. Then, the user can select one from the available/configured tests from the Provider and push a candidate's information over to create a new assessment. When the candidate completes the assessment, the Provider should inform Workable about the results.
There are 2 endpoints that should be provided, with ${BASE_URL} being the root path for both of them:
https://${BASE_URL}/testswhich allows theGETmethod and lists the available testshttps://${BASE_URL}/assessmentswhich allows thePOSTmethod and creates an invitation for a candidate
Workable provides an endpoint for receiving the results, see creating an assessment for more info.
Authentication
1. Workable to Assessments Provider
Every call from Workable towards the Assessments Provider is authenticated using an access token contained in the Authentication HTTP Header. e.g. Authorization: Bearer 78e3be68d98268509ea304a506ed6362d. This token should be provided to the user from the Assessments Provider and configured in the respective Workable account.
2. Assessments Provider to Workable
Regarding the requests originating from the Assessments Provider, an access token will be generated and communicated upon the integration creation. This token should be included in the Authorization Header as well.
The Bearer token is the standard authorization scheme used in OAuth 2
Listing available tests
Workable needs access to the available/configured tests; an authenticated GET is triggered towards the Assessments Provider to fetch them. The endpoint should be formatted as https://${BASE_URL}/tests and the response should be a JSON document with an array of tests. Each test is described through identification and name.
Response
{
"tests": [
{
"id": 1,
"name": "Aptitude Test"
},
{
"id": 2,
"name": "Accounting Test"
}
]
}One test per job can be selected. See below where the identification becomes handy.
Creating an Assessment
Workable provides users with the ability to create an assessment for a candidate on demand. If the action is called, Workable will POST the Assessments Provider on https://${BASE_URL}/assessments with a payload that looks as follows:
{
"test_id": "12345",
"job_shortcode": "GROOV005",
"job_title": "Operations Manager",
"callback_url": "https://groove-tech.workable.com/assessments/8823119",
"candidate": {
"first_name": "Lakita",
"last_name": "Marrero",
"phone": "(785)991-6256",
"email": "[email protected]",
},
}test_id: The identification provided in the previous stepjob_shortcode: (Optional) The job identified in the list jobs stepjob_title: The job that the candidate applied to. Can be contained in the invitation email.callback_url: The URL in which the Assessment Provider should publish the results (see below)candidate: Candidate info. Can be used in the invitation email.
The Assessment Provider should respond with a
201status and an identifier for the created assessment.{ "assessment_id": "2044922" }
Results collection
1. Publishing the Results to Workable
There are 4 statuses for an assessment. The initial status is pending and then the assessment can be completed, rejected or expired. The status depends on the actions of the candidate regarding the assessment. Whenever the status changes, the Assessments Provider should publish the new status to Workable using PUT on the callback_url provided in the assessment creation step.
When the status is completed, the request should include the assessment results.
2. Publishing the Results on an API
Another alternative is for Workable to poll the endpoint https://${BASE_URL}/assessments/:id with the assessment identifier returned in the assessment creation step. This method however is suboptimal since it requires more than one requests until the results are finally fetched. Moreover, a failsafe mechanism should be created in case the invitation was rejected by the candidate.
In both cases the payload provided by the Assessments Provider should be as follows:
{
"results_url": "https://acme.com/assessments/2044922",
"status": "completed",
"assessment": {
"score": "78",
"grade": "excelled",
"summary": "This candidate is an excellent prospect.",
"details": {
"behavior": {
"Influence": 97,
"conscientiousness": 76
},
"mental_skills": {
"Problem Solving": 82,
"Aptitude": 91
}
},
"duration": "01:01:17"
},
"attachments": [
{
"description": "Assessment Report",
"url": "https://acme.com/assessments/2044922/report.pdf"
}
]
}Mandatory fields
status: This can take any of the valuescompleted,declinedorexpiredresults_url: A link to the fully fledged report on the Provider's site (Mandatory only whenstatusiscompleted)
Optional fields
grade: This is the final conclusion of the assessment, it can take any of the valuesfailed,passedorexcelled. This is respectively mapped tono,yesanddefinitely yesin Workable evaluation system.assessment:score: An overall score, preferably a percentagesummary: Small description/evaluation of the assessmentdetails: This can be used to provide a deeper analysis on the candidate's results. It's a JSON with a maximum of two levels nested objects and is presented to the user with minimum formatting, so keys should be descriptive and readable. The structure should follow thekey: valueformat, no arrays should be included and a first level value may be consisted of more objects itself. Any values holding dates should conform to ISO 8601.duration: How long did it take the candidate to complete the assessment, if available
attachments: Currently only supporting PDF. A results report of the assessment along with a description, if available. The URL should be publicly accessible.
Errors
The endpoints of the Assessments Provider should handle request errors with a status code followed by a readable message. The description message should be short yet verbose enough to facilitate ease of troubleshooting.
| Type | Status | Example messages |
|---|---|---|
| Authentication | 401 | Missing Token |
| Authentication | 401 | Invalid Token |
| Invalid Request | 400 | Invalid JSON |
| Invalid Request | 400 | Invalid field: name should be a string |
| Invalid Request | 422 | Missing field: name should be provided |
| Conflict | 409 | Entity is already updated |
A valid response on an Error would be
{ "status": 401, "message": "Invalid Token" }
3. Retrieving a shared link
This is an optional GET endpoint to be implemented by the Assessments Provider. This endpoint serves assessment links, in case when the system supports sharing public links. The URL should look like https://${BASE_URL}/assessments/:id/shared-link and the assessment-id should be the one returned from the assessment creation call.
Response
{
"url": "https://acme.com/assessments/2044922/link",
"ttl": "120",
"ttl_units": "minutes"
}url: A link to the public shared report on the Provider's sitettl: (Optional) The time this link will be available. If this is not set, the link is assumed to be permanent.ttl_units: The units used for measuring the TTL. Currently supported values:minutes,daysandviews.
