> ## 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 Slack with Access Token (Bot or User) – StackOne Hub

> Link a Slack account in the StackOne Hub using Access Token (Bot or User). End-user guide to authorize the integration and start using Slack actions.

<Warning>Bot tokens (xoxb-) perform actions as your app. User tokens (xoxp-) perform actions as you personally. Choose the appropriate token type for your use case. Ensure token rotation is disabled for static token usage.</Warning>

<Panel>
  <div className="not-prose guides-scope-selector" data-guides-scope-selector data-guide-actions-json="[{&#x22;id&#x22;:&#x22;slack_list_conversations&#x22;,&#x22;label&#x22;:&#x22;List Conversations&#x22;,&#x22;scopes&#x22;:[&#x22;channels:read&#x22;,&#x22;groups:read&#x22;,&#x22;mpim:read&#x22;,&#x22;im:read&#x22;]},{&#x22;id&#x22;:&#x22;slack_get_conversation&#x22;,&#x22;label&#x22;:&#x22;Get Conversation&#x22;,&#x22;scopes&#x22;:[&#x22;channels:read&#x22;,&#x22;groups:read&#x22;,&#x22;mpim:read&#x22;,&#x22;im:read&#x22;]},{&#x22;id&#x22;:&#x22;slack_create_conversation&#x22;,&#x22;label&#x22;:&#x22;Create Conversation&#x22;,&#x22;scopes&#x22;:[&#x22;channels:write&#x22;,&#x22;groups:write&#x22;]},{&#x22;id&#x22;:&#x22;slack_join_conversation&#x22;,&#x22;label&#x22;:&#x22;Join Conversation&#x22;,&#x22;scopes&#x22;:[&#x22;channels:join&#x22;]},{&#x22;id&#x22;:&#x22;slack_leave_conversation&#x22;,&#x22;label&#x22;:&#x22;Leave Conversation&#x22;,&#x22;scopes&#x22;:[&#x22;channels:write&#x22;,&#x22;groups:write&#x22;]},{&#x22;id&#x22;:&#x22;slack_rename_conversation&#x22;,&#x22;label&#x22;:&#x22;Rename Conversation&#x22;,&#x22;scopes&#x22;:[&#x22;channels:write&#x22;,&#x22;groups:write&#x22;]},{&#x22;id&#x22;:&#x22;slack_invite_users_to_conversation&#x22;,&#x22;label&#x22;:&#x22;Invite Users To Conversation&#x22;,&#x22;scopes&#x22;:[&#x22;channels:write.invites&#x22;,&#x22;groups:write.invites&#x22;]},{&#x22;id&#x22;:&#x22;slack_invite_shared_conversation&#x22;,&#x22;label&#x22;:&#x22;Invite Shared Conversation&#x22;,&#x22;scopes&#x22;:[&#x22;conversations.connect:write&#x22;]},{&#x22;id&#x22;:&#x22;slack_kick_user_from_conversation&#x22;,&#x22;label&#x22;:&#x22;Remove User From Conversation&#x22;,&#x22;scopes&#x22;:[&#x22;channels:write&#x22;,&#x22;groups:write&#x22;]},{&#x22;id&#x22;:&#x22;slack_list_conversation_members&#x22;,&#x22;label&#x22;:&#x22;List Conversation Members&#x22;,&#x22;scopes&#x22;:[&#x22;channels:read&#x22;,&#x22;groups:read&#x22;,&#x22;mpim:read&#x22;,&#x22;im:read&#x22;]},{&#x22;id&#x22;:&#x22;slack_open_conversation&#x22;,&#x22;label&#x22;:&#x22;Open Conversation&#x22;,&#x22;scopes&#x22;:[&#x22;im:write&#x22;,&#x22;mpim:write&#x22;]},{&#x22;id&#x22;:&#x22;slack_list_thread_replies&#x22;,&#x22;label&#x22;:&#x22;List Thread Replies&#x22;,&#x22;scopes&#x22;:[&#x22;channels:history&#x22;,&#x22;groups:history&#x22;,&#x22;mpim:history&#x22;,&#x22;im:history&#x22;]},{&#x22;id&#x22;:&#x22;slack_list_connect_invites&#x22;,&#x22;label&#x22;:&#x22;List Slack Connect Invites&#x22;,&#x22;scopes&#x22;:[&#x22;conversations.connect:read&#x22;]},{&#x22;id&#x22;:&#x22;slack_list_files&#x22;,&#x22;label&#x22;:&#x22;List Files&#x22;,&#x22;scopes&#x22;:[&#x22;files:read&#x22;]},{&#x22;id&#x22;:&#x22;slack_get_file&#x22;,&#x22;label&#x22;:&#x22;Get File&#x22;,&#x22;scopes&#x22;:[&#x22;files:read&#x22;]},{&#x22;id&#x22;:&#x22;slack_delete_file&#x22;,&#x22;label&#x22;:&#x22;Delete File&#x22;,&#x22;scopes&#x22;:[&#x22;files:write&#x22;]},{&#x22;id&#x22;:&#x22;slack_get_upload_url&#x22;,&#x22;label&#x22;:&#x22;Get File Upload URL&#x22;,&#x22;scopes&#x22;:[&#x22;files:write&#x22;]},{&#x22;id&#x22;:&#x22;slack_complete_file_upload&#x22;,&#x22;label&#x22;:&#x22;Complete File Upload&#x22;,&#x22;scopes&#x22;:[&#x22;files:write&#x22;]},{&#x22;id&#x22;:&#x22;slack_share_file_public_url&#x22;,&#x22;label&#x22;:&#x22;Share File Public URL&#x22;,&#x22;scopes&#x22;:[&#x22;files:write&#x22;]},{&#x22;id&#x22;:&#x22;slack_revoke_file_public_url&#x22;,&#x22;label&#x22;:&#x22;Revoke File Public URL&#x22;,&#x22;scopes&#x22;:[&#x22;files:write&#x22;]},{&#x22;id&#x22;:&#x22;slack_unified_list_groups&#x22;,&#x22;label&#x22;:&#x22;List Unified Groups&#x22;,&#x22;scopes&#x22;:[&#x22;usergroups:read&#x22;]},{&#x22;id&#x22;:&#x22;slack_unified_get_group&#x22;,&#x22;label&#x22;:&#x22;Get Unified Group&#x22;,&#x22;scopes&#x22;:[&#x22;usergroups:read&#x22;]},{&#x22;id&#x22;:&#x22;slack_unified_list_organizations&#x22;,&#x22;label&#x22;:&#x22;List Unified Organizations&#x22;,&#x22;scopes&#x22;:[&#x22;team:read&#x22;]},{&#x22;id&#x22;:&#x22;slack_unified_get_organization&#x22;,&#x22;label&#x22;:&#x22;Get Unified Organization&#x22;,&#x22;scopes&#x22;:[&#x22;team:read&#x22;]},{&#x22;id&#x22;:&#x22;slack_unified_list_users&#x22;,&#x22;label&#x22;:&#x22;List Unified Users&#x22;,&#x22;scopes&#x22;:[&#x22;users:read&#x22;]},{&#x22;id&#x22;:&#x22;slack_unified_get_user&#x22;,&#x22;label&#x22;:&#x22;Get Unified User&#x22;,&#x22;scopes&#x22;:[&#x22;users:read&#x22;]},{&#x22;id&#x22;:&#x22;slack_list_messages&#x22;,&#x22;label&#x22;:&#x22;List Messages&#x22;,&#x22;scopes&#x22;:[&#x22;channels:history&#x22;,&#x22;groups:history&#x22;,&#x22;mpim:history&#x22;,&#x22;im:history&#x22;]},{&#x22;id&#x22;:&#x22;slack_send_message&#x22;,&#x22;label&#x22;:&#x22;Send Message&#x22;,&#x22;scopes&#x22;:[&#x22;chat:write&#x22;]},{&#x22;id&#x22;:&#x22;slack_update_message&#x22;,&#x22;label&#x22;:&#x22;Update Message&#x22;,&#x22;scopes&#x22;:[&#x22;chat:write&#x22;]},{&#x22;id&#x22;:&#x22;slack_delete_message&#x22;,&#x22;label&#x22;:&#x22;Delete Message&#x22;,&#x22;scopes&#x22;:[&#x22;chat:write&#x22;]},{&#x22;id&#x22;:&#x22;slack_send_ephemeral_message&#x22;,&#x22;label&#x22;:&#x22;Send Ephemeral Message&#x22;,&#x22;scopes&#x22;:[&#x22;chat:write&#x22;]},{&#x22;id&#x22;:&#x22;slack_schedule_message&#x22;,&#x22;label&#x22;:&#x22;Schedule Message&#x22;,&#x22;scopes&#x22;:[&#x22;chat:write&#x22;]},{&#x22;id&#x22;:&#x22;slack_list_scheduled_messages&#x22;,&#x22;label&#x22;:&#x22;List Scheduled Messages&#x22;,&#x22;scopes&#x22;:[&#x22;chat:write&#x22;]},{&#x22;id&#x22;:&#x22;slack_delete_scheduled_message&#x22;,&#x22;label&#x22;:&#x22;Delete Scheduled Message&#x22;,&#x22;scopes&#x22;:[&#x22;chat:write&#x22;]},{&#x22;id&#x22;:&#x22;slack_get_message_permalink&#x22;,&#x22;label&#x22;:&#x22;Get Message Permalink&#x22;,&#x22;scopes&#x22;:[&#x22;channels:history&#x22;,&#x22;groups:history&#x22;,&#x22;mpim:history&#x22;,&#x22;im:history&#x22;]},{&#x22;id&#x22;:&#x22;slack_list_users&#x22;,&#x22;label&#x22;:&#x22;List Users&#x22;,&#x22;scopes&#x22;:[&#x22;users:read&#x22;]},{&#x22;id&#x22;:&#x22;slack_list_user_conversations&#x22;,&#x22;label&#x22;:&#x22;List User Conversations&#x22;,&#x22;scopes&#x22;:[&#x22;users:read&#x22;,&#x22;channels:read&#x22;,&#x22;groups:read&#x22;,&#x22;mpim:read&#x22;,&#x22;im:read&#x22;]},{&#x22;id&#x22;:&#x22;slack_get_user&#x22;,&#x22;label&#x22;:&#x22;Get User&#x22;,&#x22;scopes&#x22;:[&#x22;users:read&#x22;]},{&#x22;id&#x22;:&#x22;slack_get_user_by_email&#x22;,&#x22;label&#x22;:&#x22;Get User By Email&#x22;,&#x22;scopes&#x22;:[&#x22;users:read.email&#x22;]},{&#x22;id&#x22;:&#x22;slack_lookup_discoverable_contact&#x22;,&#x22;label&#x22;:&#x22;Lookup Discoverable Contact&#x22;,&#x22;scopes&#x22;:[&#x22;users:read&#x22;,&#x22;users:read.email&#x22;]},{&#x22;id&#x22;:&#x22;slack_get_user_profile&#x22;,&#x22;label&#x22;:&#x22;Get User Profile&#x22;,&#x22;scopes&#x22;:[&#x22;users.profile:read&#x22;]},{&#x22;id&#x22;:&#x22;slack_set_user_profile&#x22;,&#x22;label&#x22;:&#x22;Set User Profile&#x22;,&#x22;scopes&#x22;:[&#x22;users.profile:write&#x22;]},{&#x22;id&#x22;:&#x22;slack_get_user_presence&#x22;,&#x22;label&#x22;:&#x22;Get User Presence&#x22;,&#x22;scopes&#x22;:[&#x22;users:read&#x22;]},{&#x22;id&#x22;:&#x22;slack_set_user_presence&#x22;,&#x22;label&#x22;:&#x22;Set User Presence&#x22;,&#x22;scopes&#x22;:[&#x22;users:write&#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 Slack app and get your token</h2>

  <p>Create a Slack app, configure permissions, and copy the generated access token.</p>

  <Steps>
    <Step title="Sign in to Slack API">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Sign in to the <a href="https://api.slack.com/apps" target="_blank" rel="noopener noreferrer">Slack API Apps page</a>.</p>

        <ul>
          <li>Click <strong>Create New App</strong>, then in the <strong>Create an app</strong> dialog, select <strong>From scratch</strong>.</li>
        </ul>
      </div>
    </Step>

    <Step title="Create new app">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Fill in the application details.</p>

        <ul>
          <li>Enter an <strong>App Name</strong> (e.g., "StackOne Integration")</li>
          <li>Select your workspace from the dropdown.</li>
          <li>Click <strong>Create App</strong>.</li>
        </ul>
      </div>
    </Step>

    <Step title="Add scopes">
      <div data-guide-step data-guide-scopes="channels:history,channels:join,channels:manage,channels:read,channels:write,channels:write.invites,chat:write,conversations.connect:read,conversations.connect:write,files:read,files:write,groups:history,groups:read,groups:write,groups:write.invites,im:history,im:read,im:write,mpim:history,mpim:read,mpim:write,users.profile:read,users.profile:write,users:read,users:read.email,users:write,team:read,usergroups:read" data-guide-display-scopes-list="channels:history,channels:join,channels:manage,channels:read,channels:write,channels:write.invites,chat:write,conversations.connect:read,conversations.connect:write,files:read,files:write,groups:history,groups:read,groups:write,groups:write.invites,im:history,im:read,im:write,mpim:history,mpim:read,mpim:write,users.profile:read,users.profile:write,users:read,users:read.email,users:write,team:read,usergroups:read">
        <div className="connector-guide-actions-badge" data-guide-actions-badge data-guide-actions-badge-scopes="channels:history,channels:join,channels:manage,channels:read,channels:write,channels:write.invites,chat:write,conversations.connect:read,conversations.connect:write,files:read,files:write,groups:history,groups:read,groups:write,groups:write.invites,im:history,im:read,im:write,mpim:history,mpim:read,mpim:write,users.profile:read,users.profile:write,users:read,users:read.email,users:write,team:read,usergroups: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>Complete File Upload, Create Conversation, Delete File, Delete Message, Delete Scheduled Message, Get Conversation, Get File, Get File Upload URL, Get Message Permalink, Get Unified Group, Get Unified Organization, Get Unified User, Get User, Get User By Email, Get User Presence, Get User Profile, Invite Shared Conversation, Invite Users To Conversation, Join Conversation, Leave Conversation, List Conversation Members, List Conversations, List Files, List Messages, List Scheduled Messages, List Slack Connect Invites, List Thread Replies, List Unified Groups, List Unified Organizations, List Unified Users, List User Conversations, List Users, Lookup Discoverable Contact, Open Conversation, Remove User From Conversation, Rename Conversation, Revoke File Public URL, Schedule Message, Send Ephemeral Message, Send Message, Set User Presence, Set User Profile, Share File Public URL, Update Message</span>
        </div>

        <p>In the left sidebar, click <strong>OAuth & Permissions</strong> under <strong>Features</strong>. The page opens at the <strong>Advanced token security via token rotation</strong> section — scroll down to the <strong>Scopes</strong> section. Add scopes under <strong>Bot token scopes</strong> (for `xoxb-`) or <strong>User token scopes</strong> (for `xoxp-`) depending on the token type you need. At minimum, add the `users:read` scope — it is required for StackOne to verify the connection (used by the list users check).</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="channels:history">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy channels:history" title="Copy scope" data-copy="channels:history">
                  <span className="connector-guide-scope-copy__label">channels:history</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="channels:join">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy channels:join" title="Copy scope" data-copy="channels:join">
                  <span className="connector-guide-scope-copy__label">channels:join</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="channels:manage">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy channels:manage" title="Copy scope" data-copy="channels:manage">
                  <span className="connector-guide-scope-copy__label">channels:manage</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="channels:read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy channels:read" title="Copy scope" data-copy="channels:read">
                  <span className="connector-guide-scope-copy__label">channels: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="channels:write">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy channels:write" title="Copy scope" data-copy="channels:write">
                  <span className="connector-guide-scope-copy__label">channels: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="channels:write.invites">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy channels:write.invites" title="Copy scope" data-copy="channels:write.invites">
                  <span className="connector-guide-scope-copy__label">channels:write.invites</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="chat:write">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy chat:write" title="Copy scope" data-copy="chat:write">
                  <span className="connector-guide-scope-copy__label">chat: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="conversations.connect:read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy conversations.connect:read" title="Copy scope" data-copy="conversations.connect:read">
                  <span className="connector-guide-scope-copy__label">conversations.connect: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="conversations.connect:write">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy conversations.connect:write" title="Copy scope" data-copy="conversations.connect:write">
                  <span className="connector-guide-scope-copy__label">conversations.connect: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="files:read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy files:read" title="Copy scope" data-copy="files:read">
                  <span className="connector-guide-scope-copy__label">files: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="files:write">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy files:write" title="Copy scope" data-copy="files:write">
                  <span className="connector-guide-scope-copy__label">files: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="groups:history">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy groups:history" title="Copy scope" data-copy="groups:history">
                  <span className="connector-guide-scope-copy__label">groups:history</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="groups:read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy groups:read" title="Copy scope" data-copy="groups:read">
                  <span className="connector-guide-scope-copy__label">groups: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="groups:write">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy groups:write" title="Copy scope" data-copy="groups:write">
                  <span className="connector-guide-scope-copy__label">groups: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="groups:write.invites">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy groups:write.invites" title="Copy scope" data-copy="groups:write.invites">
                  <span className="connector-guide-scope-copy__label">groups:write.invites</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="im:history">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy im:history" title="Copy scope" data-copy="im:history">
                  <span className="connector-guide-scope-copy__label">im:history</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="im:read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy im:read" title="Copy scope" data-copy="im:read">
                  <span className="connector-guide-scope-copy__label">im: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="im:write">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy im:write" title="Copy scope" data-copy="im:write">
                  <span className="connector-guide-scope-copy__label">im: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="mpim:history">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy mpim:history" title="Copy scope" data-copy="mpim:history">
                  <span className="connector-guide-scope-copy__label">mpim:history</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="mpim:read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy mpim:read" title="Copy scope" data-copy="mpim:read">
                  <span className="connector-guide-scope-copy__label">mpim: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="mpim:write">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy mpim:write" title="Copy scope" data-copy="mpim:write">
                  <span className="connector-guide-scope-copy__label">mpim: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="users.profile:read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy users.profile:read" title="Copy scope" data-copy="users.profile:read">
                  <span className="connector-guide-scope-copy__label">users.profile: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="users.profile:write">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy users.profile:write" title="Copy scope" data-copy="users.profile:write">
                  <span className="connector-guide-scope-copy__label">users.profile: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="users:read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy users:read" title="Copy scope" data-copy="users:read">
                  <span className="connector-guide-scope-copy__label">users: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="users:read.email">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy users:read.email" title="Copy scope" data-copy="users:read.email">
                  <span className="connector-guide-scope-copy__label">users:read.email</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="users:write">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy users:write" title="Copy scope" data-copy="users:write">
                  <span className="connector-guide-scope-copy__label">users: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="team:read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy team:read" title="Copy scope" data-copy="team:read">
                  <span className="connector-guide-scope-copy__label">team: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="usergroups:read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy usergroups:read" title="Copy scope" data-copy="usergroups:read">
                  <span className="connector-guide-scope-copy__label">usergroups:read</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>
            </ul>
          </div>
        </div>
      </div>
    </Step>

    <Step title="Confirm token rotation is OFF">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>On the <strong>OAuth & Permissions</strong> page, scroll to <strong>Advanced token security via token rotation</strong> and confirm it is <strong>NOT</strong> opted in.</p>

        <ul>
          <li>Static token authentication requires rotation to remain disabled. If rotation is enabled, Slack issues a rotating token (`xoxe.xoxb-` or `xoxe.xoxp-`) that expires every 12 hours, and this auth type has no refresh mechanism — the connection will silently break.</li>
          <li>If you need refresh-token support, use the <strong>OAuth 2.0 (Bot Token)</strong> or <strong>OAuth 2.0 (User Token)</strong> authentication option instead.</li>
        </ul>
      </div>
    </Step>

    <Step title="Install and copy token">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>On the <strong>OAuth & Permissions</strong> page, click <strong>Install to \[Your Workspace]</strong> — the button shows your actual workspace name (e.g. <strong>Install to stackone sandbox</strong>). The button stays disabled until at least one scope has been added in the previous step. A permissions dialog then appears — click <strong>Allow</strong> to accept the requested permissions and return to the app.</p>

        <ul>
          <li><strong>Bot token</strong> — copy the <strong>Bot User OAuth Token</strong> (starts with `xoxb-`, NOT `xoxe.xoxb-`)</li>
          <li><strong>User token</strong> — copy the <strong>User OAuth Token</strong> (starts with `xoxp-`, NOT `xoxe.xoxp-`)</li>
          <li>Note: A token starting with `xoxe.` indicates token rotation is enabled — go back and disable it, then reinstall the app. Also, if you add or change scopes after installing, you must reinstall the app for the changes to take effect — a yellow banner appears at the top of the page reading "You've changed the permission scopes your app uses. Please reinstall your app for these changes to take effect." with a reinstall link.</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>Slack Access Token</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>
