> ## Documentation Index
> Fetch the complete documentation index at: https://docs.stackone.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Connect UKG Pro with Service Account - SOAP – StackOne Hub

> Link a UKG Pro account in the StackOne Hub using Service Account - SOAP. End-user guide to authorize the integration and start using UKG Pro actions.

<Warning>Ensure you have Admin privileges in UKG Pro to create Service Accounts and access Web Services configuration.</Warning>

<Panel>
  <div className="not-prose guides-scope-selector" data-guides-scope-selector data-guide-actions-json="[{&#x22;id&#x22;:&#x22;ukg-pro_list_person_details&#x22;,&#x22;label&#x22;:&#x22;List Person Details&#x22;,&#x22;scopes&#x22;:[&#x22;EmployeePersonDetails:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_get_person_details&#x22;,&#x22;label&#x22;:&#x22;Get Person Details&#x22;,&#x22;scopes&#x22;:[&#x22;EmployeePersonDetails:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_list_employee_supervisors&#x22;,&#x22;label&#x22;:&#x22;List Employee Supervisor Details&#x22;,&#x22;scopes&#x22;:[&#x22;PersonnelIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_list_employee_phone_numbers&#x22;,&#x22;label&#x22;:&#x22;List Employee Multiple Phone Numbers&#x22;,&#x22;scopes&#x22;:[&#x22;PersonnelIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_list_changes_by_date&#x22;,&#x22;label&#x22;:&#x22;List Employee Changes By Date&#x22;,&#x22;scopes&#x22;:[&#x22;EmployeeExport:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_list_changes_by_employee&#x22;,&#x22;label&#x22;:&#x22;List Employee Changes By Employee ID&#x22;,&#x22;scopes&#x22;:[&#x22;EmployeeExport:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_list_business_structure_changes&#x22;,&#x22;label&#x22;:&#x22;List Business Structure Changes&#x22;,&#x22;scopes&#x22;:[&#x22;PersonnelIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_list_compensation_details&#x22;,&#x22;label&#x22;:&#x22;List Compensation Details&#x22;,&#x22;scopes&#x22;:[&#x22;EmployeeCompensationDetails:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_get_compensation_details&#x22;,&#x22;label&#x22;:&#x22;Get Compensation Details By Employee&#x22;,&#x22;scopes&#x22;:[&#x22;EmployeeCompensationDetails:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_list_job_history_details&#x22;,&#x22;label&#x22;:&#x22;List Employee Job History Details&#x22;,&#x22;scopes&#x22;:[&#x22;PersonnelIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_list_earnings_history&#x22;,&#x22;label&#x22;:&#x22;List Earnings History&#x22;,&#x22;scopes&#x22;:[&#x22;PayrollIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_list_direct_deposits&#x22;,&#x22;label&#x22;:&#x22;List Direct Deposits&#x22;,&#x22;scopes&#x22;:[&#x22;EmployeeDirectDeposit:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_list_deductions_history&#x22;,&#x22;label&#x22;:&#x22;List Payroll Deductions History&#x22;,&#x22;scopes&#x22;:[&#x22;PayrollIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_list_pay_periods&#x22;,&#x22;label&#x22;:&#x22;List Pay Group Pay Periods&#x22;,&#x22;scopes&#x22;:[&#x22;PayrollIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_get_pay_register&#x22;,&#x22;label&#x22;:&#x22;Get Pay Register&#x22;,&#x22;scopes&#x22;:[&#x22;PayrollIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_get_employee_pay_statements&#x22;,&#x22;label&#x22;:&#x22;Get Employee Pay Statements&#x22;,&#x22;scopes&#x22;:[&#x22;EmployeePayStatement:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_get_employee_last_pay_statement&#x22;,&#x22;label&#x22;:&#x22;Get Employee Last Pay Statement&#x22;,&#x22;scopes&#x22;:[&#x22;EmployeePayStatement:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_list_employee_deductions&#x22;,&#x22;label&#x22;:&#x22;List Employee Deductions&#x22;,&#x22;scopes&#x22;:[&#x22;PersonnelIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_list_dependent_deductions&#x22;,&#x22;label&#x22;:&#x22;List Dependent Deductions&#x22;,&#x22;scopes&#x22;:[&#x22;PersonnelIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_list_cobra_details&#x22;,&#x22;label&#x22;:&#x22;List Employee COBRA Details&#x22;,&#x22;scopes&#x22;:[&#x22;PersonnelIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_list_open_enrollment_deductions&#x22;,&#x22;label&#x22;:&#x22;List Open Enrollment Employee Deductions&#x22;,&#x22;scopes&#x22;:[&#x22;PersonnelIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_list_pto_plans&#x22;,&#x22;label&#x22;:&#x22;List PTO Plans&#x22;,&#x22;scopes&#x22;:[&#x22;PTOPlanIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_create_pto_plan&#x22;,&#x22;label&#x22;:&#x22;Create PTO Plan&#x22;,&#x22;scopes&#x22;:[&#x22;PTOPlanIntegration:Add&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_get_pto_plan&#x22;,&#x22;label&#x22;:&#x22;Get PTO Plan&#x22;,&#x22;scopes&#x22;:[&#x22;PTOPlanIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_update_pto_plan&#x22;,&#x22;label&#x22;:&#x22;Update PTO Plan&#x22;,&#x22;scopes&#x22;:[&#x22;PTOPlanIntegration:Edit&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_list_employee_pto_plans&#x22;,&#x22;label&#x22;:&#x22;List Employee PTO Plans&#x22;,&#x22;scopes&#x22;:[&#x22;PTOPlanIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_list_earnings_configurations&#x22;,&#x22;label&#x22;:&#x22;List Earnings Configurations&#x22;,&#x22;scopes&#x22;:[&#x22;CompanyConfigurationIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_list_org_levels&#x22;,&#x22;label&#x22;:&#x22;List Organization Levels&#x22;,&#x22;scopes&#x22;:[&#x22;CompanyConfigurationIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_create_org_level&#x22;,&#x22;label&#x22;:&#x22;Create Organization Level&#x22;,&#x22;scopes&#x22;:[&#x22;CompanyConfigurationIntegration:Add&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_list_companies&#x22;,&#x22;label&#x22;:&#x22;List Company Details&#x22;,&#x22;scopes&#x22;:[&#x22;CompanyConfigurationIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_list_job_configurations&#x22;,&#x22;label&#x22;:&#x22;List Job Configurations&#x22;,&#x22;scopes&#x22;:[&#x22;CompanyConfigurationIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_get_job_configuration&#x22;,&#x22;label&#x22;:&#x22;Get Job Configuration&#x22;,&#x22;scopes&#x22;:[&#x22;CompanyConfigurationIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_list_positions&#x22;,&#x22;label&#x22;:&#x22;List Employee Positions&#x22;,&#x22;scopes&#x22;:[&#x22;CompanyConfigurationIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_list_location_configurations&#x22;,&#x22;label&#x22;:&#x22;List Location Configurations&#x22;,&#x22;scopes&#x22;:[&#x22;CompanyConfigurationIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_get_location_configuration&#x22;,&#x22;label&#x22;:&#x22;Get Location Configuration&#x22;,&#x22;scopes&#x22;:[&#x22;CompanyConfigurationIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_list_job_groups&#x22;,&#x22;label&#x22;:&#x22;List Job Groups&#x22;,&#x22;scopes&#x22;:[&#x22;CompanyConfigurationIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_list_contacts&#x22;,&#x22;label&#x22;:&#x22;List Employee Contacts&#x22;,&#x22;scopes&#x22;:[&#x22;PersonnelIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_get_contact&#x22;,&#x22;label&#x22;:&#x22;Get Employee Contact Details&#x22;,&#x22;scopes&#x22;:[&#x22;PersonnelIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_list_international_employees&#x22;,&#x22;label&#x22;:&#x22;List International Employees&#x22;,&#x22;scopes&#x22;:[&#x22;PersonnelIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_get_international_employee&#x22;,&#x22;label&#x22;:&#x22;Get International Employee Details&#x22;,&#x22;scopes&#x22;:[&#x22;PersonnelIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_list_global_employee_banks&#x22;,&#x22;label&#x22;:&#x22;List Global Employee Bank Accounts&#x22;,&#x22;scopes&#x22;:[&#x22;GlobalEmployeeDirectDeposit:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_list_global_localization_elements&#x22;,&#x22;label&#x22;:&#x22;List Global Localization Elements&#x22;,&#x22;scopes&#x22;:[&#x22;PersonnelIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_get_user_details&#x22;,&#x22;label&#x22;:&#x22;Get User Details&#x22;,&#x22;scopes&#x22;:[&#x22;PersonnelIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_get_security_roles&#x22;,&#x22;label&#x22;:&#x22;Get Security Roles&#x22;,&#x22;scopes&#x22;:[&#x22;CompanyConfigurationIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_get_employee_security_user_details&#x22;,&#x22;label&#x22;:&#x22;Get Employee Security User Details&#x22;,&#x22;scopes&#x22;:[&#x22;PersonnelIntegration:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_find_person&#x22;,&#x22;label&#x22;:&#x22;Find People&#x22;,&#x22;scopes&#x22;:[&#x22;EmployeePersonDetails:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_get_person_by_employee_identifier&#x22;,&#x22;label&#x22;:&#x22;Get Person By Employee Identifier&#x22;,&#x22;scopes&#x22;:[&#x22;EmployeePersonDetails:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_find_user_defined_fields&#x22;,&#x22;label&#x22;:&#x22;Find User Defined Fields&#x22;,&#x22;scopes&#x22;:[&#x22;EmployeeUserDefinedFields:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_get_user_defined_fields_by_employee_identifier&#x22;,&#x22;label&#x22;:&#x22;Get User Defined Fields By Employee Identifier&#x22;,&#x22;scopes&#x22;:[&#x22;EmployeeUserDefinedFields:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_find_jobs&#x22;,&#x22;label&#x22;:&#x22;Find Jobs&#x22;,&#x22;scopes&#x22;:[&#x22;EmployeeJobDetails:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_get_job_by_employee_identifier&#x22;,&#x22;label&#x22;:&#x22;Get Job By Employee Identifier&#x22;,&#x22;scopes&#x22;:[&#x22;EmployeeJobDetails:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_find_compensations&#x22;,&#x22;label&#x22;:&#x22;Find Compensations&#x22;,&#x22;scopes&#x22;:[&#x22;EmployeeCompensationDetails:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_get_compensation_by_employee_identifier&#x22;,&#x22;label&#x22;:&#x22;Get Compensation By Employee Identifier&#x22;,&#x22;scopes&#x22;:[&#x22;EmployeeCompensationDetails:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_find_contacts&#x22;,&#x22;label&#x22;:&#x22;Find Contacts&#x22;,&#x22;scopes&#x22;:[&#x22;EmployeeContacts:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_get_contact_by_employee_identifier&#x22;,&#x22;label&#x22;:&#x22;Get Contact By Employee Identifier&#x22;,&#x22;scopes&#x22;:[&#x22;EmployeeContacts:View&#x22;]},{&#x22;id&#x22;:&#x22;ukg-pro_get_employee_contact_by_contact_id&#x22;,&#x22;label&#x22;:&#x22;Get Employee Contact By Contact ID&#x22;,&#x22;scopes&#x22;:[&#x22;EmployeeContacts:View&#x22;]}]" style={{ borderRadius: '8px', padding: '16px', marginBottom: '24px' }}>
    <div className="guides-scope-selector__title" style={{ fontSize: '16px', fontWeight: '600', marginBottom: '12px' }}>Select Actions to adjust the guide</div>
    <div className="guides-scope-selector__muted" style={{ fontSize: '13px', marginBottom: '12px' }}>Some actions may require additional configuration in the provider to be accessible. Choose the actions you need and the guide will be updated.</div>

    <div style={{ display: 'flex', gap: '8px', marginBottom: '12px', flexWrap: 'wrap' }}>
      <input type="text" placeholder="Search actions..." className="guides-scope-selector__input" data-guide-action-search style={{ padding: '8px 12px', borderRadius: '6px', fontSize: '13px', flex: 1, minWidth: '160px' }} />

      <button type="button" className="guides-scope-selector__quick-btn" data-guide-select-all style={{ padding: '6px 10px', borderRadius: '6px', fontSize: '12px', cursor: 'pointer' }}>Select all</button>
      <button type="button" className="guides-scope-selector__quick-btn" data-guide-clear style={{ padding: '6px 10px', borderRadius: '6px', fontSize: '12px', cursor: 'pointer' }}>Clear</button>
    </div>

    <div className="guides-scope-selector__list" style={{ maxHeight: '240px', overflowY: 'auto', borderRadius: '6px', marginBottom: '12px' }}>
      <div className="guides-scope-selector__list-header" style={{ display: 'flex', alignItems: 'center', gap: '10px', padding: '8px 12px', fontSize: '12px', fontWeight: '600', position: 'sticky', top: 0, zIndex: 1 }}>
        <div style={{ width: '16px', flexShrink: 0 }} />

        <div style={{ flex: 1, textAlign: 'left' }}>Action</div>
        <div style={{ minWidth: '120px', marginLeft: 'auto', textAlign: 'right' }}>Scope(s)</div>
      </div>

      <div className="guides-scope-selector__muted" data-guide-loading style={{ padding: '16px', textAlign: 'center', fontSize: '13px' }}>Loading actions...</div>
      <div className="guides-scope-selector__muted" data-guide-no-results hidden style={{ padding: '16px', textAlign: 'center', fontSize: '13px' }}>No actions match your search.</div>
    </div>

    <div className="guides-scope-selector__url-section" style={{ marginTop: '12px', paddingTop: '12px' }}>
      <div className="guides-scope-selector__muted" style={{ fontSize: '12px', fontWeight: '500', marginBottom: '6px' }}>Dynamic Guide URL</div>

      <div style={{ display: 'flex', alignItems: 'center', gap: '8px', flexWrap: 'wrap' }}>
        <input type="text" readOnly className="guides-scope-selector__input" data-guide-url style={{ flex: 1, minWidth: '200px', padding: '8px 10px', borderRadius: '6px', fontSize: '12px', fontFamily: 'monospace' }} />

        <button type="button" className="guides-scope-selector__copy-btn" data-guide-copy-url style={{ width: '120px', padding: '8px 14px', borderRadius: '6px', fontSize: '13px', fontWeight: '500', cursor: 'pointer', whiteSpace: 'nowrap', marginLeft: 'auto' }}>Copy URL</button>
      </div>

      <div style={{ marginTop: '12px' }}>
        <div className="guides-scope-selector__muted" style={{ fontSize: '12px', fontWeight: '500', marginBottom: '6px' }}>Scopes Selected</div>

        <div style={{ display: 'flex', alignItems: 'stretch', gap: '8px', flexWrap: 'wrap' }}>
          <pre className="guides-scope-selector__input" role="textbox" aria-readonly="true" tabIndex={0} data-guide-scopes-output style={{ flex: 1, minWidth: '200px', minHeight: '88px', maxHeight: '120px', overflowY: 'auto', margin: 0, padding: '8px 10px', borderRadius: '6px', fontSize: '12px', fontFamily: 'monospace', whiteSpace: 'pre-wrap' }} />

          <div className="guides-scope-selector__muted" style={{ display: 'flex', flexDirection: 'column', gap: '8px', fontSize: '12px', fontWeight: '500', flexShrink: 0, alignItems: 'flex-start' }}>
            <div style={{ whiteSpace: 'nowrap' }}>Separator</div>

            <select className="guides-scope-selector__input" data-guide-scope-delimiter style={{ width: '100%', padding: '6px 10px', borderRadius: '6px', fontSize: '12px' }}>
              <option value="space">Space</option>
              <option value="comma">Comma</option>
              <option value="semicolon">Semicolon</option>
              <option value="pipe">Pipe</option>
              <option value="newline">Newline</option>
            </select>

            <button type="button" className="guides-scope-selector__copy-btn" data-guide-copy-scopes style={{ width: '120px', padding: '8px 14px', borderRadius: '6px', fontSize: '13px', fontWeight: '500', cursor: 'pointer', whiteSpace: 'nowrap' }}>Copy scopes</button>
          </div>
        </div>
      </div>
    </div>
  </div>
</Panel>

<section data-guide-section data-guide-scopes="">
  <h2>Create a Service Account</h2>

  <p>A Service Account is required to authenticate SOAP API requests to UKG Pro. Service Accounts are recommended over Web Users for API integrations.</p>

  <Steps>
    <Step title="Log in to UKG Pro">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Sign in to your UKG Pro account with administrator credentials.</p>
      </div>
    </Step>

    <Step title="Navigate to Service Account Administration">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Go to <strong>Sidebar Menu > System Configuration > Security > Service Account Administration</strong>.</p>
      </div>
    </Step>

    <Step title="Create a new Service Account">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Click the <strong>Add</strong> button to create a new service account.</p>

        <ul>
          <li><strong>Username</strong>: Enter a descriptive name (e.g., StackOneIntegration)</li>
          <li><strong>E-mail</strong>: Add a valid email</li>
        </ul>
      </div>
    </Step>

    <Step title="Configure Web Service Permissions">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>During new service account creation, enable the required permissions based on your integration needs.<br />Each permission maps to specific SOAP API capabilities. The following steps show which permissions are needed for different features.</p>
      </div>
    </Step>

    <Step title="Enable Employee Data Permissions">
      <div data-guide-step data-guide-scopes="EmployeePersonDetails:View,EmployeeContacts:View,EmployeeUserDefinedFields:View,EmployeeJobDetails:View" data-guide-display-scopes-list="EmployeePersonDetails:View,EmployeeContacts:View,EmployeeUserDefinedFields:View,EmployeeJobDetails:View">
        <div className="connector-guide-actions-badge" data-guide-actions-badge data-guide-actions-badge-scopes="EmployeePersonDetails:View,EmployeeContacts:View,EmployeeUserDefinedFields:View,EmployeeJobDetails:View" style={{ display: 'block', width: 'fit-content', maxWidth: '100%', padding: '2px 8px', borderRadius: '8px', fontSize: '12px', marginBottom: '8px', marginTop: '-10px', whiteSpace: 'nowrap', overflowX: 'auto', overflowY: 'hidden', msOverflowStyle: 'none', scrollbarWidth: 'none' }}>
          <span>Enables actions: </span><span data-guide-actions-badge-labels>Find Contacts, Find Jobs, Find People, Find User Defined Fields, Get Contact By Employee Identifier, Get Employee Contact By Contact ID, Get Job By Employee Identifier, Get Person By Employee Identifier, Get Person Details, Get User Defined Fields By Employee Identifier, List Person Details</span>
        </div>

        <p>Enable these permissions to access employee data, profiles, contacts, job details, and custom fields via SOAP services.</p>

        <ul>
          <li><strong>Employee Person Details</strong> (View) - Personal information and employee profiles</li>
          <li><strong>Employee Job Details</strong> (View) - Job titles, departments, positions, and employment information</li>
          <li><strong>Employee Contacts</strong> (View) - Emergency contacts, dependents, and beneficiary information</li>
          <li><strong>Employee User Defined Fields</strong> (View) - Retrieve custom fields configured for employee records</li>
        </ul>

        <div style={{ marginTop: '8px' }} data-guide-display-scopes>
          <div className="connector-guide-scopes-container">
            <ul className="not-prose" style={{ listStyleType: "'- '", paddingLeft: '1em', margin: 0 }}>
              <li style={{ overflowWrap: 'anywhere', wordBreak: 'break-word' }} data-guide-display-scope="EmployeePersonDetails:View">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy EmployeePersonDetails:View" title="Copy scope" data-copy="EmployeePersonDetails:View">
                  <span className="connector-guide-scope-copy__label">EmployeePersonDetails:View</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>

              <li style={{ overflowWrap: 'anywhere', wordBreak: 'break-word' }} data-guide-display-scope="EmployeeContacts:View">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy EmployeeContacts:View" title="Copy scope" data-copy="EmployeeContacts:View">
                  <span className="connector-guide-scope-copy__label">EmployeeContacts:View</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>

              <li style={{ overflowWrap: 'anywhere', wordBreak: 'break-word' }} data-guide-display-scope="EmployeeUserDefinedFields:View">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy EmployeeUserDefinedFields:View" title="Copy scope" data-copy="EmployeeUserDefinedFields:View">
                  <span className="connector-guide-scope-copy__label">EmployeeUserDefinedFields:View</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>

              <li style={{ overflowWrap: 'anywhere', wordBreak: 'break-word' }} data-guide-display-scope="EmployeeJobDetails:View">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy EmployeeJobDetails:View" title="Copy scope" data-copy="EmployeeJobDetails:View">
                  <span className="connector-guide-scope-copy__label">EmployeeJobDetails:View</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>
            </ul>
          </div>
        </div>
      </div>
    </Step>

    <Step title="Enable Compensation Permissions">
      <div data-guide-step data-guide-scopes="EmployeeCompensationDetails:View" data-guide-display-scopes-list="EmployeeCompensationDetails:View">
        <div className="connector-guide-actions-badge" data-guide-actions-badge data-guide-actions-badge-scopes="EmployeeCompensationDetails:View" style={{ display: 'block', width: 'fit-content', maxWidth: '100%', padding: '2px 8px', borderRadius: '8px', fontSize: '12px', marginBottom: '8px', marginTop: '-10px', whiteSpace: 'nowrap', overflowX: 'auto', overflowY: 'hidden', msOverflowStyle: 'none', scrollbarWidth: 'none' }}>
          <span>Enables actions: </span><span data-guide-actions-badge-labels>Find Compensations, Get Compensation By Employee Identifier, Get Compensation Details By Employee, List Compensation Details</span>
        </div>

        <p>Enable this permission to access salary, pay rates, and compensation data via SOAP services.</p>

        <ul>
          <li><strong>Employee Compensation Details</strong> (View) - Salary, pay rates, and compensation data</li>
        </ul>

        <div style={{ marginTop: '8px' }} data-guide-display-scopes>
          <div className="connector-guide-scopes-container">
            <ul className="not-prose" style={{ listStyleType: "'- '", paddingLeft: '1em', margin: 0 }}>
              <li style={{ overflowWrap: 'anywhere', wordBreak: 'break-word' }} data-guide-display-scope="EmployeeCompensationDetails:View">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy EmployeeCompensationDetails:View" title="Copy scope" data-copy="EmployeeCompensationDetails:View">
                  <span className="connector-guide-scope-copy__label">EmployeeCompensationDetails:View</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>
            </ul>
          </div>
        </div>
      </div>
    </Step>

    <Step title="Save and record credentials">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Click <strong>Save</strong>. The system will generate a password and User API Key for the service account.</p>

        <ul>
          <li>⚠️ <strong>Important</strong>: Copy and securely store the generated password immediately. It will only be displayed once.</li>
          <li>⚠️ <strong>Important</strong>: Record the User API Key that appears in the grid next to your username. This is required for SOAP authentication.</li>
          <li>If you lose the password, you'll need to reset it from the Service Account Administration page.</li>
        </ul>
      </div>
    </Step>
  </Steps>
</section>

<section data-guide-section data-guide-scopes="">
  <h2>Find Your Customer API Key</h2>

  <p>The Customer API Key is required for all SOAP API authentication.</p>

  <Steps>
    <Step title="Navigate to Service Account page">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Go to <strong>Sidebar Menu > System Configuration > Security > Service Account Administration</strong>.</p>
      </div>
    </Step>

    <Step title="Locate the Customer API Key">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>The Customer API Key is displayed at the top of the Service Account Administration page.</p>

        <ul>
          <li>The API Key is typically a short alphanumeric string (often uppercase)</li>
          <li>Example format: VWUIA or similar</li>
          <li>Copy this value for use in the integration setup</li>
        </ul>
      </div>
    </Step>
  </Steps>
</section>

<section data-guide-section data-guide-scopes="">
  <h2>Find Your User API Key</h2>

  <p>The User API Key is specific to each Service Account and is required for SOAP authentication (not needed for REST APIs).</p>

  <Steps>
    <Step title="Navigate to Service Account Administration">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Go to <strong>Sidebar Menu > System Configuration > Security > Service Account Administration</strong>.</p>
      </div>
    </Step>

    <Step title="Locate the User API Key">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>The User API Key will be visible on the grid corresponding to the created username at the Service Account Administration page.</p>

        <ul>
          <li>The User API Key appears to the right of the service account username in the list</li>
          <li>This key is automatically generated when the service account is created</li>
          <li>⚠️ <strong>Note</strong>: This is different from the Customer API Key and is specific to your service account</li>
          <li>Copy this value for use in the SOAP authentication setup</li>
        </ul>
      </div>
    </Step>
  </Steps>
</section>

<section data-guide-section data-guide-scopes="">
  <h2>Find Your Web Services Domain</h2>

  <p>You need to identify your UKG Pro Web Services domain and subdomain.</p>

  <Steps>
    <Step title="Navigate to Web Services">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Go to <strong>Sidebar Menu > System Configuration > Security > Web Services</strong>.</p>
      </div>
    </Step>

    <Step title="Identify the domain from any endpoint">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Look at any Web Services endpoint URL displayed on the page.</p>

        <ul>
          <li>Example URL: `https://service2.ultipro.com/services/...`</li>
          <li><strong>Web Service Domain</strong>: `ultipro.com` (the main domain)</li>
          <li><strong>Web Service Subdomain</strong>: `service2` (the subdomain prefix)</li>
        </ul>
      </div>
    </Step>
  </Steps>
</section>

<section data-guide-section data-guide-scopes="">
  <h2>Troubleshooting</h2>

  <p>Common issues and how to resolve them.</p>

  <Steps>
    <Step title="Error: 401 Unauthorised">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>This error indicates authentication failure.</p>

        <ul>
          <li>Check all 4 credentials (username, password, Customer API Key, User API Key)</li>
          <li>Verify the Service Account username is correct (case-sensitive)</li>
          <li>Confirm the password is correct</li>
          <li>Ensure the Customer API Key is correct</li>
          <li>Verify the User API Key matches the service account</li>
          <li>Ensure the Service Account status is Active</li>
        </ul>
      </div>
    </Step>

    <Step title="Error: 403 Forbidden">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>This error indicates the Service Account lacks required permissions.</p>

        <ul>
          <li>Verify permissions on Service Account Administration page</li>
          <li>Go to Service Account Administration</li>
          <li>Edit the Service Account</li>
          <li>Enable the required SOAP web service permissions</li>
          <li>Save and retry the connection</li>
        </ul>
      </div>
    </Step>

    <Step title="Error: Invalid User API Key">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>This error indicates the User API Key is incorrect or missing.</p>

        <ul>
          <li>Verify key from Service Account Administration page</li>
          <li>Check that the User API Key corresponds to the correct service account username</li>
          <li>Ensure you're not using the Customer API Key in place of the User API Key</li>
          <li>These are two different keys with different purposes</li>
        </ul>
      </div>
    </Step>

    <Step title="Error: Connection timeout or host not found">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>This error indicates incorrect domain configuration.</p>

        <ul>
          <li>Check domain/subdomain configuration</li>
          <li>Double-check the Web Service Domain (e.g., ultipro.com)</li>
          <li>Verify the Web Service Subdomain (e.g., service2)</li>
          <li>Ensure your network allows outbound HTTPS connections to UKG Pro</li>
        </ul>
      </div>
    </Step>

    <Step title="Service Account password expired">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Service Account passwords may expire based on your organisation's security policies.</p>

        <ul>
          <li>Go to Service Account Administration</li>
          <li>Select the Service Account</li>
          <li>Click <strong>Reset Password</strong></li>
          <li>Update the password in your StackOne connection</li>
        </ul>
      </div>
    </Step>
  </Steps>
</section>

<div data-whitelabel-hide>
  <h2>Linking the Account from the Hub</h2>

  <Steps>
    <Step title="Navigate to the Hub">
      Use one of the three <a href="/guides/accounts-section#linking-accounts">Linking Account Methods</a> to access the Hub.
    </Step>

    <Step title="Fill out the fields">
      Fill out the following fields using details from your provider:

      <ul>
        <li><strong>UKG Pro Service Account User name</strong></li>
        <li><strong>UKG Pro Service Account Password</strong></li>
        <li><strong>UKG Pro Customer API Key (ClientAccessKey)</strong></li>
        <li><strong>UKG Pro User API Key (UserAccessKey)</strong></li>
        <li><strong>UKG Pro Web Service domain</strong></li>
        <li><strong>UKG Pro Web Service subdomain</strong></li>
      </ul>
    </Step>

    <Step title="Connect">
      <ul>
        <li>Click <strong>Connect</strong></li>
        <li>If applicable, the provider will redirect you to a sign-in or authorization page. Complete the provider's authorization flow.</li>
        <li>Once authorization is successful, you will see a confirmation popup</li>
      </ul>
    </Step>
  </Steps>

  <p>If the account linking is successful, you will see the newly linked account in your <a href="/guides/accounts-section">Accounts</a> page.</p>
</div>
