Skip to main content

Shared foundation

Everything in this part is required whether you deploy the ATS, the HRIS, or both. It establishes a single Integration System User, a single Security Group, and a single OAuth API Client that both integrations will use.

1.1 Integration System User​

Run the Create Integration System User task.

Search for Create Integration System User

Search for Create Integration System User in the Workday search bar.

Configure the user with these values:

FieldValue
User NameDeeperSignals_User
New PasswordA strong password, recorded in your secret store.
Session Timeout Minutes0 (do not expire). An expired session can cause the integration to stop mid-run.
Do Not Allow UI SessionsChecked. The ISU must not be able to sign in to the Workday UI.

Create Integration System User form

The completed Create Integration System User form.

1.2 Integration System Security Group​

Run the Create Security Group task. Choose Integration System Security Group (Constrained) and name it DeeperSignals_SG.

Search for Create Security Group

Search for Create Security Group.

Create Security Group form

Type = Integration System Security Group (Constrained); Name = DeeperSignals_SG.

On the next screen, add DeeperSignals_User as an Integration System User, add the top-level Organization that Deeper Signals should have visibility over, and set Access Rights to Organizations to Applies to Current Organization And All Subordinates.

Edit Integration System Security Group

Constrained group with the ISU as a member and access scoped to the chosen organisation and all its subordinates.

1.3 Domain Security Policies​

Find the DeeperSignals_SG security group (use All of Workday in the Search categories if it doesn't appear immediately). On the three-dot Related Actions menu, choose Security Group → Maintain Domain Permissions for Security Group.

Maintain Domain Permissions for Security Group

The Maintain Domain Permissions for Security Group task — add each policy in the table that follows.

Add the rows below to the security group. The first table is the minimum set required by every deployment. The second table lists the additional rows needed only if you deploy the HRIS surface — including the worker and supervisory-organisation domains, which an ATS-only deployment does not require.

:::info Deploying ATS only?

If you are deploying the ATS surface without HRIS, add only the rows in §1.3.1. Every worker-data and organisation domain lives in §1.3.2, because the code paths that read worker or organisation data are gated on an HRIS integration being configured and never execute in an ATS-only deployment. This keeps the integration's access confined to the Recruiting candidate record. :::

1.3.1 Required for every deployment ATS HRIS​

OperationDomain Security PolicyInheriting Sub-PoliciesFunctional Area
Get and PutCustom Domain 1—System
Get and PutCandidate Data: Attachments—Recruiting
Get and PutCandidate Data: Assessment Results—Recruiting
Get and PutMove Candidate—Recruiting
Get and PutCandidate Data: Edit Job Application—Recruiting
Get and PutCandidate Data: Job ApplicationCandidate Data: Mass Actions (Do Not Use); Candidate Data: Stock Grant OfferRecruiting
Get OnlyCandidate Data: Job Application—Recruiting
Get and PutManage: Candidate Job Application Notes—Recruiting
Get OnlyPerson Data: Work Contact InformationPerson Data: Work Instant Messenger; Person Data: Work Web AddressContact Information

The Candidate Data: Job Application Get-Only row needs to be added explicitly under Domain Security Policies Permitting Get Access:

Add Candidate Data: Job Application Get Only

Add the Get-Only entry for Candidate Data: Job Application.

Once all rows are added, the configuration should look similar to:

Completed Maintain Domain Permissions

Final domain permissions on DeeperSignals_SG. This screenshot is from a combined ATS + HRIS tenant, so it also shows the §1.3.2 rows; an ATS-only group will be shorter.

1.3.2 Additional rows required for HRIS HRIS​

If you deploy the HRIS surface (Part 3), add these rows on top of the table above. They give the integration the data it needs to read the entire workforce, resolve recruiters and hiring managers, and write back assessment PDFs to the worker.

Do not add these rows for an ATS-only deployment. Every one of them backs a code path that first checks whether an HRIS integration is configured; without that configuration the calls are never made, so the grants would be unused standing access.

OperationDomain Security PolicyFunctional Area
Get OnlyWorker Data: Public Worker ReportsStaffing
Get OnlyWorker Position: ViewStaffing
Get OnlyManage: Supervisory Organization UnconstrainedRecruiting
Get OnlyWorker Data: Current Staffing InformationStaffing
Get OnlyWorker Data: Current Management Level InformationStaffing
Get OnlyWorker Data: All PositionsStaffing
Get OnlyWorker Data: Historical Staffing InformationStaffing
Get and PutWorker Data: Add Worker DocumentsPersonal Data
Get OnlyWorker Data: Management ChainStaffing

:::warning Important — unconstrained access (HRIS deployments)

The Manage: Supervisory Organization domain must be added in the Unconstrained section of the security group. Workday will only return the Manager_Reference of a supervisory organisation when the security group has unconstrained read access on this domain — even when the organisation itself sits inside the constrained scope.

Without this row, Deeper Signals cannot identify the hiring manager of a job requisition, so the campaign owner is not set automatically and the hiring manager is not granted access to the candidate's results. This affects HRIS deployments only. An ATS-only deployment never calls Get_Organizations: the recruiter and organisation references returned by Get_Job_Requisitions are read but never resolved to a person, campaigns are created without an auto-assigned owner, and the assessment write-back is unaffected. :::

1.4 Activate Pending Security Policy Changes​

Domain permission changes do not take effect until you activate them. Run Activate Pending Security Policy Changes, add a comment, then on the next page tick Confirm and click OK.

Activate Pending Security Policy Changes

Search for the activation task.

Activate Pending Security Policy Changes — comment

Add a descriptive comment.

Activate Pending Security Policy Changes — confirm

Confirm and submit. The Domain Security Policies list shows the rows being applied.

1.5 Password Expiration Exemption​

Although the integration uses OAuth, the Integration System User itself still authenticates with a password to Workday's user store. To prevent the user becoming locked out, run Maintain Password Rules and add DeeperSignals_User to the System Users Exempt from Password Expiration field.

Maintain Password Rules

Search for Maintain Password Rules.

System Users Exempt from Password Expiration

Add DeeperSignals_User to the exempt list.

1.6 OAuth 2.0 — Register API Client​

Run Register API Client for Integrations. Configure the client as below:

FieldValue
Client NameDeeper Signals
Client Grant TypeAuthorization Code Grant
Access Token TypeBearer
Non-Expiring Refresh TokensChecked.
Refresh Token Timeout (in days)0
Include Workday Owned ScopeChecked.
Scope (Functional Areas)Contact Information Jobs & Positions Personal Data HRIS only Pre-Hire Process Recruiting Staffing HRIS only System Tenant Non-Configurable

Edit API Client for Integrations

The OAuth client. A combined ATS + HRIS deployment needs all eight scopes; an ATS-only deployment needs the six that are not marked HRIS only.

:::note Which scopes are required, and why

The integration touches three SOAP services and one REST API across both ATS and HRIS surfaces. Each scope below maps to a specific surface; missing one that your deployment uses causes the corresponding endpoint to fail with "The task submitted is not authorized." The Required for column shows which deployments need each scope — an ATS-only deployment can omit Staffing and Personal Data entirely.

ScopeRequired forWhy DS needs it
RecruitingATS + HRISGet_Assess_Candidate, Get_Candidates, Assess_Candidate, Put_Candidate_Attachment, Get_Job_Requisitions. Also Get_Organizations, which is called on HRIS deployments only.
Jobs & PositionsATS + HRISRead job requisitions and positions referenced by candidates.
Pre-Hire ProcessATS + HRISRead pre-hire / candidate-stage data on Workday tenants that route data through that area.
Tenant Non-ConfigurableATS + HRISRequired for every external integration to call public web services.
Contact InformationATS + HRISPerson Data: Work Contact Information — the candidate's email address, and worker emails on HRIS deployments.
SystemATS + HRISREST /api/customObject/v2/{tenant}/customObjects/{name} for pushing assessment dimension scores.
StaffingHRIS onlyGet_Workers, Put_Worker_Document. Not used by an ATS-only deployment.
Personal DataHRIS onlyWorker contact information used during HRIS sync (work email, instant messenger, web address). Not used by an ATS-only deployment.
:::

For reference, the screenshot below — taken from a real tenant — shows the moment the last three scopes (Staffing, Personal Data, System) are added; these are the scopes most often missed when starting from an older Workday integration template. On an ATS-only tenant, only System of those three applies.

The last three scopes commonly added

The three scopes most often added late: Staffing, Personal Data, System.

After saving the client, click OK and record the Client ID and Client Secret.

Next, generate a long-lived refresh token. From the API Client's three-dot Related Actions menu, choose API Client → Manage Refresh Tokens for Integrations. Set the Workday Account to DeeperSignals_User and click OK to generate a refresh token. Record the token value.

Manage Refresh Tokens for Integrations

Generate a refresh token bound to the ISU.

Open View API Client on the same client and record all three URLs:

View API Client URLs

Record the Workday REST API Endpoint, the Token Endpoint, and the Authorization Endpoint.

1.7 Public Web Service endpoints​

Deeper Signals reaches Workday's SOAP services on the SOAP bind addresses published per service. Run Public Web Services in Workday, find each service in the table, choose Web Service → View WSDL, and copy the bind address from the bottom of the WSDL XML.

Public Web Services

Search for Public Web Services in Workday.

View WSDL

From the row's three-dot menu, open Web Service → View WSDL.

WSDL XML showing soap bind address

Copy the soapbind:address location at the bottom of the WSDL.

Capture the bind address for the services below:

ServiceRequired when
Recruiting/v45.2ATS integration is enabled.
Staffing/v45.2HRIS integration is enabled (used to upload assessment PDFs to the worker).
Human_Resources/v45.2HRIS integration is enabled (used to read workers).