CodeSignal’s integration with Workday allows for a seamless assessment experience. With our assessment integration, recruiters can send CodeSignal assessment invitations to test-takers from Workday’s portal. Once completed, you can both view and report on assessment results within your Workday portal.
In this article, we will review the following:
- Integration capabilities
- Integration options
- Setting up the integration
- Sending assessment options
- Receiving assessment results
For a more detailed overview of our Workday Integration, please consult this CodeSignal <> Workday Integration Guide.
Integration Capabilities
| Assessments | |
| Feature | Workday |
| View list of CodeSignal assessments | ✅ |
| Send test-takers invitations | ✅ |
| Cancel / resend an invitation | ❌ |
| Bulk send test-takers invitations | ✅ |
| View status update from invite to completion | ✅ |
| View total score | ✅ |
| View Maximum Score | ✅ |
| Link to the detailed test report | ✅ |
| View question-specific scores | ❌ |
| View reviewer feedback | ❌ |
| View code | ❌ |
| View coding replay | ❌ |
| Results sharing | ✅ |
| Extend assessment duration for test-taker | ❌ |
Integration Options
There are three potential options to handle the assessment step.
Option |
Method |
Notes / Comments |
Launch into Assessment Platform to Send Invitation |
Individual Invitations – SAML SSO Punch Out |
You can create a To Do step within the Assessment business process which would house a SAML SSO punch-out link to CodeSignal. The SSO link should include the following attributes:
For each assessment invitation, the recruiter is redirected from Workday to CodeSignal to send the invitation with the values prefilled from Workday.
Please Note: This option might not be convenient for a large number of invitations as it has an individual invitation process. |
Integration Step from Assessment Business Process |
Bulk invitations – Workday Studio |
Using an integration step on the assessment business process will allow you to launch an integration using Workday Studio every time a Candidate is in the assessment step. This single processing mode would pass along event and candidate data to Workday Studio which can then be used to pass that data along to CodeSignal. Please Note: Workday Studio requires assistance from a Workday developer to implement |
Continuous Query / Pull Model |
Direct SOAP Web Services |
Continuously querying Workday for active candidate assessment events. Using continuous querying as a pull model can create significant overhead since CodeSignal has to periodically fetch all recent job applications from Workday. Additionally, the assessment invitations will have a delay, with the frequency limited to a few hours for each pull. Therefore invitations will not be near real-time as with other options. |
Setting up the integration
Prerequisites
- In CodeSignal, you will need:
- An Organization Admin account.
- CodeSignal support to enable API Integration and ATS Integration features in your account.
- Webhook Token
- In Workday, you will need:
- An account with admin permissions.
- An account with developer permissions. Specifically, the permission to Workday Studio if you are doing any custom integration work
- API Key / Credentials
CodeSignal Initial Configuration
The CodeSignal implementation team will need to run a series of admin scripts on the CodeSignal platform to activate the integration and load the required configuration data.
You will first need to determine the integration model (studio, punch out, or pull). The script requires the following parameters.
-
Company ID
- Supplied by CodeSignal
-
Workday Endpoint URL
- Supplied by Workday Admin
- Example: https://wd5-impl-services1.workday.com/ccx/service/acme/Recruiting/v35.1?wsdl
-
Workday Username and Password
- Supplied by Workday Admin
- Example: INT-CodeSignal@acme
-
Workday SAML Public Key
- Supplied by Workday Admin
- Only needed for the individual invitation flow using punch-out
-
CodeSignal Webhook Token
- Supplied by CodeSignal
- Used for Bulk invitation workflow
Workday Initial Configuration
CodeSignal uses a specific list of assessment statuses that need to be configured in Workday Recruiting. CodeSignal will use these status objects to store data related to the assessment so that it is visible in Workday
1. Access the tenant and enter Maintain Assessment Statuses within the global search bar for the assessment status setup table.
2. You will need permission to set up Recruiting Domain Access to view this setup table. Below is an example of the table:
3. Create assessment statuses with the following reference ID values:
a. CODESIGNAL_SEND_INVITE
i. The status indicates that the client is sending an assessment Workday
b. CODESIGNAL_SENT
i. The status indicates that the assessment has been sent. You can view a respective pending invitation in CodeSignal.
c. CODESIGNAL_PENDING_MANUAL_SCORE
i. The status indicates that the submitted assessment has questions that require manual review and grading.
d. CODESIGNAL_COMPLETE
i. The status indicates that the assessment has been completed. You can view the results in the candidate’s profile.
4. Ensure assessment statuses are enabled for both Overall Status and Test Status. Here is an example of the configuration:
Assessments Configuration
Note: This step is unnecessary if you choose the Individual Invitations – SAML SSO Punch Out integration option. The SAML SSO Punch Out will prompt you to choose the Assessment Test for each invitation before sending it.
For other integration options, you will need to configure a predefined list of assessment tests in Workday Recruiting. The list of assessment tests can be retrieved manually or programmatically.
Manual retrieval of assessment tests
If you prefer to fetch the list of assessments manually, you will need to periodically maintain and update it to ensure it matches the assessments available in CodeSignal.
To get the required test ID from CodeSignal, navigate to your test and look at the test URL. The part following tests/ is the test ID:
Programmatic retrieval of assessment tests
If you prefer to fetch the list of assessments automatically, you can do so using CodeSignal’s GraphQL API and by making an API call through Workday Studio. Querying the companyTests object will return a list of CodeSignal tests available within your organization. Below is an example of a query to companyTests.
Below is an example of a query to companyTests:
query {
companyTests (companyID: [companyID], first: [first]){
tests {
id
title
externalTitle
labels
}
}
} |
This will return a JSON response like this:
{
"data": {
"companyTests": {
"tests": [
{
"id": "[testId]",
"title": "[test-title]",
"externalTitle": "[external-test-title]",
"labels": [test-labels]
},
{
"id": "[testId]",
"title": "[test-title]",
"externalTitle": "[external-test-title]",
"labels": [test-labels]
}
]
}
}
} |
Depending on your organization’s Workday configuration and workflows, more or less information can be provided in the responses. See CodeSignal’s GraphQL schema documentation for more information.
Setting up CodeSignal Assessments in Workday
The following steps will guide you through how to set up CodeSignal assessments in Workday after you’ve fetched the test ID(s).
-
Access the tenant and enter Maintain Recruiting Assessment Tests within the global search bar to access the assessment status setup table. You will need permission to Set Up: Recruiting domain access to view this setup table.
- After your tests are configured, the related action link to the left of the test will allow quick access to the integration reference ID details for programmatic usage. Ensure you’re using the exact CodeSignal Test ID as the reference ID in Workday.
Recruiting Domain Access Configuration
In order to be able to successfully use this integration despite what option is chosen, the Workday API user will need the following domain security policy permissions.
- GET and PUT Assess Candidate
- GET and PUT Candidate Data: Job Application
- GET and PUT Candidate Data: Assessment Results
Sending Assessment Options
Option 1: SAML SSO Punch Out – Individual Invitations
This workflow in Workday uses SAML requests to initiate a POST redirect to CodeSignal, where the Workday user will be prompted to choose the assessment and send the invitation to the candidate. The process is as follows:
- Based on a Workday action, the recruiter is redirected to CodeSignal via a SAML request. The SAML request should redirect to the following endpoint: https://{{ENVIRONMENT}}.codesignal.com/api/workday/{{COMPANY_ID}}/saml-redirect
- The recruiter is presented with an assessment selection screen on CodeSignal where they can choose and send a specific assessment. Candidate information such as name and email will be prefilled automatically from the Workday candidate record. This will trigger a SAML request message to CodeSignal to create and deliver the assessment invitation.
- CodeSignal will create a test result in Workday associated with the job application where the action was triggered. The test result status will be set to CODESIGNAL_PENDING.
- The candidate will receive an email from CodeSignal to complete the assessment. Once the assessment is completed, CodeSignal will update the test result with additional fields such as score, date, and link to the result. The test result status will change to CODESIGNAL_COMPLETE.
If a test contains questions that require manual scoring, the status will be set to CODESIGNAL_PENDING_MANUAL_SCORE. Once the result has been reviewed and scored by the hiring team, the assessment status will change to CODESIGNAL_COMPLETE
Requirements
Provide the following information to your CodeSignal integration contact via a secure credential-sharing channel.
-
X.509 certificate (SAML Public Key)
-
Workday API credentials
-
SOAP API Endpoint URL
-
API username (including the tenant name, in the {{USERNAME}}@{{TENANT}} format)
-
API password
CodeSignal will send assessment results using the Assess_Candidate method. Below is an example of the assessment results shared to Workday:
{
Assess_Candidate_Data: {
Job_Application_Reference: {
ID: {
attributes: {
'wd:type': 'Job_Application_ID',
},
$value: 'JOB_APPLICATION-1-12345',
},
},
Candidate_Assessment_Data: {
Assess_Candidate_Reference: 'assessmentResultId123',
Assessed_On_Date: '2021-01-01T05:09:46.244Z',
Assessment_Status_Reference: {
ID: {
attributes: {
'wd:type': 'Assessment_Status_ID',
},
$value: 'CODESIGNAL_SEND_INVITE',
},
},
Assess_Candidate_Test_Result_Data: {
Assessment_Test_Reference: {
ID: {
attributes: {
'wd:type': 'Assessment_Test_ID',
},
$value: 'codesignalTestId123',
},
},
Assessment_Test_Status_Reference: {
ID: {
attributes: {
'wd:type': 'Assessment_Status_ID',
},
$value: 'CODESIGNAL_COMPLETE',
},
},
Assessment_Test_Score: 300,
Comment: '300/1000',
Assessment_Test_Date: '2021-01-01T05:09:46.244Z',
Assessment_Test_Results_URL: 'https://{ENVIRONMENT}.codesignal.com/result',
},
},
},
} |
Option 2: Bulk invitations – Workday Studio
Some use cases require sending invitations in bulk, such as for a university recruiting event or hackathons. Workflows designed to support a bulk use case are custom-designed by the Workday admin. However, CodeSignal provides a REST API endpoint designated for bulk requests received from Workday.
A diagram of this flow can be found here.
Building an integration using Workday Studio is beyond the scope of this document. However, the CodeSignal implementation team can assist with discussing, designing, and planning custom integrations. Here is an example workflow for bulk invitations:
-
The desired CodeSignal assessment is added to the Assessment section of the job requisition. This enables automatic assessment assignment for any candidates who apply to that requisition.
-
When a candidate reaches the Assessment stage, they can be invited to take the CodeSignal assessment. To trigger the invite, set the overall status to CODESIGNAL_SEND_INVITE. Your Workday admin can also configure a business process to send invitations automatically.
- A few moments after submission, the overall and test status will update to CODESIGNAL_SENT, indicating that the invitation has been generated and sent to the candidate.
You will see a respective invitation in the Pending tab in CodeSignal.
- Once the candidate completes the test and the result is verified, the score will be automatically fed into their profile. This includes the score, completion status, completion date, and a link to the coding report.
If the result is unverified, it will still appear in the profile, but the score will be recorded as 0. To understand why the result was unverified, you can review the coding report via the provided URL.
Whenever one or more candidates are assigned an assessment trigger status within Workday, CodeSignal will be expecting a POST request to the following endpoint:
https://{ENVIRONMENT}.codesignal.com/api/workday/{COMPANY_ID}/send-assessment
{ENVIRONMENT} will be either sandbox (for testing) or app (for production implementation)
{COMPANY_ID} will be provided by CodeSignal.
The request body should contain an application/JSON-encoded object with the following fields:
- candidateFirstName - First name of the candidate associated with the job application
- candidateLastName - Last name of the candidate associated with the job application
- candidateEmail - Email address of the candidate associated with the job application which will be used by CodeSignal to send an invitation email. This will also be used to uniquely identify candidates within CodeSignal, which is particularly used to link prior certification results.
- jobApplicationId - The Job_ApplicationObjectID used by Workday in the Job_Application_ID format.
- testId - The CodeSignal Test ID to determine which test should be sent to the candidate. Details on how to obtain test IDs can be found in the section, Assessment Test Configuration.
After the request is successfully validated, CodeSignal will respond with a 200 HTTP status. The generated assessment invitation can subsequently be found on CodeSignal, in the tests dashboard under Pending test invitations.
Example Request
|
curl --location --request POST 'https://{ENVIRONMENT}.codesignal.com/api/workday/{COMPANY_ID}/send-assessment' \ --header 'Authorization: Bearer {BEARER_TOKEN}' \ --header 'Content-Type: application/json' \ --data-raw '{ "candidateFirstName": "Test", "candidateLastName": "Candidate", "candidateEmail": "candidate@test.test", "jobApplicationId": "JOB_APPLICATION-3-XXXXXX", "testId": "{CODESIGNAL_TEST_ID}" }' |
Requirements
Provide the following information to your CodeSignal integration contact via a secure credential-sharing channel.
-
Workday API credentials
-
SOAP API Endpoint URL
-
API username (including the tenant name, in the {{USERNAME}}@{{TENANT}} format)
-
API password
Option 3: Continuous Query
Through continuous querying, CodeSignal will pull from Workday via a cron job. CodeSignal will fetch all assessments using the From_Moment and assessment status as request criteria.
It is important to note that the continuous querying pull model can create significant overhead since CodeSignal has to periodically fetch all recent job applications from Workday. Additionally, the assessment invitations will have a delay, with the frequency limited to a few hours for each pull. Therefore invitations will not be near real-time as with other options.
This method will require requests and responses to be sent via a SOAP message through the Assess_Candidate operation. More information on how Workday defines this operation is here.
Example Request
|
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bsvc="urn:com.workday/bsvc"> <soapenv:Header> <bsvc:Workday_Common_Header> <bsvc:Include_Reference_Descriptors_In_Response>true</bsvc:Include_Reference_Descriptors_In_Response> </bsvc:Workday_Common_Header> </soapenv:Header> <soapenv:Body> <bsvc:Get_Assess_Candidate_Request bsvc:version="v43.0"> <bsvc:Request_Criteria> <bsvc:From_Moment>2024-10-09</bsvc:From_Moment> </bsvc:Request_Criteria> <bsvc:Response_Filter> <bsvc:Page>1</bsvc:Page> <bsvc:Count>100</bsvc:Count> </bsvc:Response_Filter> </bsvc:Get_Assess_Candidate_Request> </soapenv:Body> </soapenv:Envelope> |
In response, Workday will send the following data fields per candidate:
- Event_Reference
- Job_Application_Reference
- Candidate_Reference
- Job_Requisition_Reference
- Job_Application_Event_Reference
- Candidate_Assessment_Data
Example Response
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Body>
<wd:Get_Assess_Candidate_Response wd:version="v43.0" xmlns:wd="urn:com.workday/bsvc">
<wd:Request_Criteria>
<wd:From_Moment>2024-10-09T00:00:00.000-07:00</wd:From_Moment>
</wd:Request_Criteria>
<wd:Response_Filter>
<wd:Page>1</wd:Page>
<wd:Count>100</wd:Count>
</wd:Response_Filter>
<wd:Response_Results>
<wd:Total_Results>1</wd:Total_Results>
<wd:Total_Pages>1</wd:Total_Pages>
<wd:Page_Results>1</wd:Page_Results>
<wd:Page>1</wd:Page>
</wd:Response_Results>
<wd:Response_Data>
<wd:Assess_Candidate_Data>
<wd:Event_Reference wd:Descriptor="Assess Candidate: Joe Smith - JR100000 Software Engineer (C100000)">
<wd:ID wd:type="WID">1234567890</wd:ID>
</wd:Event_Reference>
<wd:Job_Application_Reference wd:Descriptor="Joe Smith - JR100000 Software Engineer (C100000)">
<wd:ID wd:type="WID">1234567890</wd:ID>
<wd:ID wd:type="Job_Application_ID">JOB_APPLICATION-9-18</wd:ID>
</wd:Job_Application_Reference>
<wd:Candidate_Reference wd:Descriptor="Joe Smith (C100000)">
<wd:ID wd:type="WID">1234567890</wd:ID>
<wd:ID wd:type="Candidate_ID">C100000</wd:ID>
</wd:Candidate_Reference>
<wd:Job_Requisition_Reference wd:Descriptor="JR100000 Software Engineer">
<wd:ID wd:type="WID">1234567890</wd:ID>
<wd:ID wd:type="Job_Requisition_ID">JR100000</wd:ID>
</wd:Job_Requisition_Reference>
<wd:Job_Application_Event_Reference wd:Descriptor="Job Application: Joe Smith - JR100000 Software Engineer (C100000)on 10/09/2024">
<wd:ID wd:type="WID">1234567890</wd:ID>
</wd:Job_Application_Event_Reference>
<wd:Candidate_Assessment_Data>
<wd:Assess_Candidate_Reference>codesignal_screen_F1234567890</wd:Assess_Candidate_Reference>
<wd:Assessed_By_Reference wd:Descriptor="Jane Hill">
<wd:ID wd:type="WID">1234567890</wd:ID>
<wd:ID wd:type="Employee_ID">234</wd:ID>
</wd:Assessed_By_Reference>
<wd:Assessed_On_Date>2024-10-09</wd:Assessed_On_Date>
<wd:Assessment_Status_Reference wd:Descriptor="CodeSignal Invite Sent">
<wd:ID wd:type="WID">1234567890</wd:ID>
<wd:ID wd:type="Assessment_Status_ID">CODESIGNAL_SENT</wd:ID>
</wd:Assessment_Status_Reference>
<wd:Is_Inline_Assessment>0</wd:Is_Inline_Assessment>
<wd:Assess_Candidate_Test_Result_Data>
<wd:Assessment_Test_Result_Reference wd:Descriptor="General Coding Assessment">
<wd:ID wd:type="WID">75c48b0e953f10017269c95cbe3d0000</wd:ID>
<wd:ID wd:type="Assessment_Test_Result_ID">RECRUITING_ASSESSMENT_TEST_RESULT-9-11</wd:ID>
</wd:Assessment_Test_Result_Reference>
<wd:Assessment_Test_Reference wd:Descriptor="General Coding Assessment">
<wd:ID wd:type="WID">433a1955a0391001ec373d152e890000</wd:ID>
<wd:ID wd:type="Reference_ID">Z2sgXkyN86wYgFc4s</wd:ID>
<wd:ID wd:type="Assessment_Test_ID">Z2sgXkyN86wYgFc4s</wd:ID>
</wd:Assessment_Test_Reference>
<wd:Assessment_Test_Score>0</wd:Assessment_Test_Score>
<wd:Assessment_Test_Status_Reference wd:Descriptor="Code Signal Invite Sent (Do Not Select)">
<wd:ID wd:type="WID">433a1955a0391001ebe4392189f40000</wd:ID>
<wd:ID wd:type="Assessment_Status_ID">CODESIGNAL_SENT</wd:ID>
</wd:Assessment_Test_Status_Reference>
<wd:Assessment_Test_Date>2024-10-09</wd:Assessment_Test_Date>
</wd:Assess_Candidate_Test_Result_Data>
</wd:Candidate_Assessment_Data>
</wd:Assess_Candidate_Data>
</wd:Response_Data>
</wd:Get_Assess_Candidate_Response>
</env:Body>
</env:Envelope> |
After the request is successfully validated, CodeSignal will filter the list of Assess_Candidate_Data workday references for the status, CODESIGNAL_SEND_INVITE. CodeSignal will then generate an assessment invitation that can subsequently be found on CodeSignal, in the Assessments dashboard under Pending test invitations. CodeSignal will then update the status on Workday to CODESIGNAL_SENT, notifying the user that an invitation has been delivered.
Requirements
Provide the following information to your CodeSignal integration contact via a secure credential-sharing channel.
-
Workday API credentials
-
SOAP API Endpoint URL
-
API username (including the tenant name, in the {{USERNAME}}@{{TENANT}} format)
-
API password
Sending assessment invitations to test-takers
As a prerequisite, you must have permissions in CodeSignal to send assessments within your company’s CodeSignal instance. You must also have access to Workday Recruiting with relevant permissions to edit requisitions and candidate details in Workday.
- Log in to Workday Recruiting, and then open the Job Requisitions section.
- Select any open job requisition and go to the Candidates section
- Select the candidate who has applied for the job requisition (Step/ Disposition column should display ‘Review’)
-
Select the Move Forward button, and then click on the Assessment.
- You will be prompted to choose the assessment and send the invitation to the candidate.
- After sending the invitation to the test-taker, the Status will display CodeSignal | Sent.
- The candidate will receive an email from CodeSignal to complete the assessment.
Receiving assessment results
Once an assessment is completed, the assessment result will be pushed to Workday. The Status will display CodeSignal | Complete.
The information available depends on whether the assessment was proctored or not, as well as whether the test-taker passed our proctoring verification process.
For verified proctored assessment results:
- Assessment report URL
- Assessment score (shown in the Score column, and also shown with respect to the total possible score in the Comment column)
- Number of Solved Questions
- Time spent
- Labels (optional)
For non-verified proctored assessment results:
- Assessment score = 0
- Rejection reason
Note: When candidates experience a technical issue during their proctored assessment and are given a retake by CodeSignal, the retake results will be sent to Workday.
For non-proctored assessments:
- Assessment score (shown in the Score column, and also shown with respect to the total possible score in the Comment column)
- Number of Solved Questions
- Time spent
- Integrity Flagged: Yes/No (available for non-proctored assessments only)
- Labels (optional)