> ## 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.

# Justworks OAuth 2.0 connector profile – StackOne setup guide

> Set up the OAuth 2.0 connector profile for Justworks in StackOne. One-time admin setup required before your users can link Justworks accounts via Hub.

<Warning>Justworks Partner API access is not self-service. You must contact Justworks to register an OAuth application before proceeding.</Warning>

<Panel>
  <div className="not-prose guides-scope-selector" data-guides-scope-selector data-guide-actions-json="[{&#x22;id&#x22;:&#x22;justworks_get_company&#x22;,&#x22;label&#x22;:&#x22;Get Company&#x22;,&#x22;scopes&#x22;:[&#x22;company.basic:read&#x22;]},{&#x22;id&#x22;:&#x22;justworks_get_company_bank_account&#x22;,&#x22;label&#x22;:&#x22;Get Company Bank Account&#x22;,&#x22;scopes&#x22;:[&#x22;company.bank_account:read&#x22;]},{&#x22;id&#x22;:&#x22;justworks_get_company_business_info&#x22;,&#x22;label&#x22;:&#x22;Get Company Business Info&#x22;,&#x22;scopes&#x22;:[&#x22;company.detail:read&#x22;]},{&#x22;id&#x22;:&#x22;justworks_list_company_custom_fields&#x22;,&#x22;label&#x22;:&#x22;List Company Custom Fields&#x22;,&#x22;scopes&#x22;:[&#x22;company.detail:read&#x22;]},{&#x22;id&#x22;:&#x22;justworks_list_company_jurisdictions&#x22;,&#x22;label&#x22;:&#x22;List Company Jurisdictions&#x22;,&#x22;scopes&#x22;:[&#x22;company.detail:read&#x22;,&#x22;member.detail:read&#x22;]},{&#x22;id&#x22;:&#x22;justworks_list_members&#x22;,&#x22;label&#x22;:&#x22;List Members&#x22;,&#x22;scopes&#x22;:[&#x22;member.basic:read&#x22;]},{&#x22;id&#x22;:&#x22;justworks_get_member&#x22;,&#x22;label&#x22;:&#x22;Get Member&#x22;,&#x22;scopes&#x22;:[&#x22;member.basic:read&#x22;]},{&#x22;id&#x22;:&#x22;justworks_list_member_custom_field_values&#x22;,&#x22;label&#x22;:&#x22;List Member Custom Field Values&#x22;,&#x22;scopes&#x22;:[&#x22;member.detail:read&#x22;]},{&#x22;id&#x22;:&#x22;justworks_list_payrolls&#x22;,&#x22;label&#x22;:&#x22;List Payrolls&#x22;,&#x22;scopes&#x22;:[&#x22;payroll:read&#x22;]},{&#x22;id&#x22;:&#x22;justworks_list_payroll_fees&#x22;,&#x22;label&#x22;:&#x22;List Payroll Fees&#x22;,&#x22;scopes&#x22;:[&#x22;payroll:read&#x22;]},{&#x22;id&#x22;:&#x22;justworks_list_payroll_paystubs&#x22;,&#x22;label&#x22;:&#x22;List Payroll Paystubs&#x22;,&#x22;scopes&#x22;:[&#x22;paystub:read&#x22;]},{&#x22;id&#x22;:&#x22;justworks_get_paystub&#x22;,&#x22;label&#x22;:&#x22;Get Paystub&#x22;,&#x22;scopes&#x22;:[&#x22;paystub:read&#x22;]},{&#x22;id&#x22;:&#x22;justworks_list_deduction_types&#x22;,&#x22;label&#x22;:&#x22;List Deduction Types&#x22;,&#x22;scopes&#x22;:[&#x22;deductions:read&#x22;]},{&#x22;id&#x22;:&#x22;justworks_list_deductions&#x22;,&#x22;label&#x22;:&#x22;List Deductions&#x22;,&#x22;scopes&#x22;:[&#x22;deductions:read&#x22;]},{&#x22;id&#x22;:&#x22;justworks_create_deductions&#x22;,&#x22;label&#x22;:&#x22;Create Deductions&#x22;,&#x22;scopes&#x22;:[&#x22;deductions:write&#x22;]},{&#x22;id&#x22;:&#x22;justworks_update_deductions&#x22;,&#x22;label&#x22;:&#x22;Update Deductions&#x22;,&#x22;scopes&#x22;:[&#x22;deductions:write&#x22;]},{&#x22;id&#x22;:&#x22;justworks_cancel_deductions&#x22;,&#x22;label&#x22;:&#x22;Cancel Deductions&#x22;,&#x22;scopes&#x22;:[&#x22;deductions:write&#x22;]},{&#x22;id&#x22;:&#x22;justworks_create_time_off_balances_report&#x22;,&#x22;label&#x22;:&#x22;Create Time Off Balances Report&#x22;,&#x22;scopes&#x22;:[&#x22;time_off:read&#x22;]},{&#x22;id&#x22;:&#x22;justworks_get_time_off_balances_report&#x22;,&#x22;label&#x22;:&#x22;Get Time Off Balances Report&#x22;,&#x22;scopes&#x22;:[&#x22;time_off:read&#x22;]},{&#x22;id&#x22;:&#x22;justworks_list_time_off_policies&#x22;,&#x22;label&#x22;:&#x22;List Time Off Policies&#x22;,&#x22;scopes&#x22;:[&#x22;time_off:read&#x22;]},{&#x22;id&#x22;:&#x22;justworks_list_time_off_requests&#x22;,&#x22;label&#x22;:&#x22;List Time Off Requests&#x22;,&#x22;scopes&#x22;:[&#x22;time_off:read&#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>Request Partner API access</h2>

  <p>Contact the Justworks Partner API team to register an OAuth application.</p>

  <Steps>
    <Step title="Contact Justworks">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Email <a href="mailto:partner-api@justworks.com" target="_blank" rel="noopener noreferrer">[partner-api@justworks.com](mailto:partner-api@justworks.com)</a> to request API access.</p>

        <ul>
          <li>Provide your application name, a brief description of the integration, and the redirect URI below</li>
          <li>Redirect URI: `https://api.stackone.com/connect/oauth2/justworks/callback`</li>
        </ul>
      </div>
    </Step>

    <Step title="Receive credentials">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>The Justworks team will create your OAuth application and provide credentials.</p>

        <ul>
          <li>You will receive a <strong>Client ID</strong> and <strong>Client Secret</strong> for your application</li>
          <li>Store both values securely for use later</li>
        </ul>
      </div>
    </Step>
  </Steps>
</section>

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

  <p>When requesting API access, specify the OAuth scopes your integration requires. Scopes determine what data your application can access on behalf of authorized customers.</p>

  <Steps>
    <Step title="Select required scopes">
      <div data-guide-step data-guide-scopes="company.detail:read,company.basic:read,company.bank_account:read,member.detail:read,member.basic:read,member.dob:read,member.sex:read,member.employment:read,member.pay:read,member.tax_id:read,payroll:read,paystub:read,deductions:write,deductions:read,time_off:read" data-guide-display-scopes-list="company.detail:read,company.basic:read,company.bank_account:read,member.detail:read,member.basic:read,member.dob:read,member.sex:read,member.employment:read,member.pay:read,member.tax_id:read,payroll:read,paystub:read,deductions:write,deductions:read,time_off:read">
        <div className="connector-guide-actions-badge" data-guide-actions-badge data-guide-actions-badge-scopes="company.detail:read,company.basic:read,company.bank_account:read,member.detail:read,member.basic:read,member.dob:read,member.sex:read,member.employment:read,member.pay:read,member.tax_id:read,payroll:read,paystub:read,deductions:write,deductions:read,time_off:read" 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>Cancel Deductions, Create Deductions, Create Time Off Balances Report, Get Company, Get Company Bank Account, Get Company Business Info, Get Member, Get Paystub, Get Time Off Balances Report, List Company Custom Fields, List Company Jurisdictions, List Deduction Types, List Deductions, List Member Custom Field Values, List Members, List Payroll Fees, List Payroll Paystubs, List Payrolls, List Time Off Policies, List Time Off Requests, Update Deductions</span>
        </div>

        <p>Include the following scopes in your Partner API request based on the data your integration needs.</p>

        <div style={{ marginTop: '8px' }} data-guide-display-scopes>
          <div className="connector-guide-scopes-container connector-guide-scopes-container--scrollable">
            <ul className="not-prose" style={{ listStyleType: "'- '", paddingLeft: '1em', margin: 0 }}>
              <li style={{ overflowWrap: 'anywhere', wordBreak: 'break-word' }} data-guide-display-scope="company.detail:read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy company.detail:read" title="Copy scope" data-copy="company.detail:read">
                  <span className="connector-guide-scope-copy__label">company.detail:read</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="company.basic:read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy company.basic:read" title="Copy scope" data-copy="company.basic:read">
                  <span className="connector-guide-scope-copy__label">company.basic:read</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="company.bank_account:read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy company.bank_account:read" title="Copy scope" data-copy="company.bank_account:read">
                  <span className="connector-guide-scope-copy__label">company.bank\_account:read</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="member.detail:read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy member.detail:read" title="Copy scope" data-copy="member.detail:read">
                  <span className="connector-guide-scope-copy__label">member.detail:read</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="member.basic:read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy member.basic:read" title="Copy scope" data-copy="member.basic:read">
                  <span className="connector-guide-scope-copy__label">member.basic:read</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="member.dob:read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy member.dob:read" title="Copy scope" data-copy="member.dob:read">
                  <span className="connector-guide-scope-copy__label">member.dob:read</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="member.sex:read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy member.sex:read" title="Copy scope" data-copy="member.sex:read">
                  <span className="connector-guide-scope-copy__label">member.sex:read</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="member.employment:read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy member.employment:read" title="Copy scope" data-copy="member.employment:read">
                  <span className="connector-guide-scope-copy__label">member.employment:read</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="member.pay:read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy member.pay:read" title="Copy scope" data-copy="member.pay:read">
                  <span className="connector-guide-scope-copy__label">member.pay:read</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="member.tax_id:read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy member.tax_id:read" title="Copy scope" data-copy="member.tax_id:read">
                  <span className="connector-guide-scope-copy__label">member.tax\_id:read</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="payroll:read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy payroll:read" title="Copy scope" data-copy="payroll:read">
                  <span className="connector-guide-scope-copy__label">payroll:read</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="paystub:read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy paystub:read" title="Copy scope" data-copy="paystub:read">
                  <span className="connector-guide-scope-copy__label">paystub:read</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="deductions:write">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy deductions:write" title="Copy scope" data-copy="deductions:write">
                  <span className="connector-guide-scope-copy__label">deductions:write</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="deductions:read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy deductions:read" title="Copy scope" data-copy="deductions:read">
                  <span className="connector-guide-scope-copy__label">deductions:read</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="time_off:read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy time_off:read" title="Copy scope" data-copy="time_off:read">
                  <span className="connector-guide-scope-copy__label">time\_off:read</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>
            </ul>
          </div>
        </div>
      </div>
    </Step>
  </Steps>
</section>

## Creating the StackOne Connector Profile

To create the Connector Profile in StackOne for <strong>Justworks</strong>:

<Steps>
  <Step title="Navigate to Connector Profiles">
    Login to StackOne and navigate to [Connector Profiles](https://app.stackone.com/connector_profiles)
  </Step>

  <Step title="Create New Connector Profile">
    <ul>
      <li>Click <strong>+ Connector Profile</strong></li>
      <li>Search for and select <strong>Justworks</strong></li>
      <li>Select <strong>Type</strong> as <strong>OAuth 2.0</strong></li>

      <li>
        Fill out the fields using details retrieved from your provider:

        <ul style={{ marginLeft: '20px' }}>
          <li><strong>Client ID</strong></li>
          <li><strong>Client Secret</strong></li>
        </ul>
      </li>

      <li>(Optional) Select <strong>Actions</strong> to be enabled for this Connector Profile</li>
      <li>Click <strong>Create profile</strong></li>
    </ul>
  </Step>
</Steps>

Congratulations! The new Connector Profile will now show up in your project ready to be used. You can now continue to <a href="/guides/accounts-section#linking-accounts">Link Accounts</a> for <strong>Justworks</strong>.
