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

# Glean OAuth 2.0 connector profile – StackOne setup guide

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

<Warning>An OAuth client registered on your Glean instance is required. Static registration needs Glean admin access. Dynamic registration does not, but yields a restricted scope set.</Warning>

<Panel>
  <div className="not-prose guides-scope-selector" data-guides-scope-selector data-guide-actions-json="[{&#x22;id&#x22;:&#x22;glean_report_activity&#x22;,&#x22;label&#x22;:&#x22;Report Activity&#x22;,&#x22;scopes&#x22;:[&#x22;activity&#x22;]},{&#x22;id&#x22;:&#x22;glean_report_feedback&#x22;,&#x22;label&#x22;:&#x22;Report Feedback&#x22;,&#x22;scopes&#x22;:[&#x22;feedback&#x22;]},{&#x22;id&#x22;:&#x22;glean_list_agents&#x22;,&#x22;label&#x22;:&#x22;List Agents&#x22;,&#x22;scopes&#x22;:[&#x22;agents&#x22;]},{&#x22;id&#x22;:&#x22;glean_get_agent&#x22;,&#x22;label&#x22;:&#x22;Get Agent&#x22;,&#x22;scopes&#x22;:[&#x22;agents&#x22;]},{&#x22;id&#x22;:&#x22;glean_get_agent_schemas&#x22;,&#x22;label&#x22;:&#x22;Get Agent Schemas&#x22;,&#x22;scopes&#x22;:[&#x22;agents&#x22;]},{&#x22;id&#x22;:&#x22;glean_run_agent&#x22;,&#x22;label&#x22;:&#x22;Run Agent&#x22;,&#x22;scopes&#x22;:[&#x22;agents&#x22;]},{&#x22;id&#x22;:&#x22;glean_create_announcement&#x22;,&#x22;label&#x22;:&#x22;Create Announcement&#x22;,&#x22;scopes&#x22;:[&#x22;announcements&#x22;]},{&#x22;id&#x22;:&#x22;glean_update_announcement&#x22;,&#x22;label&#x22;:&#x22;Update Announcement&#x22;,&#x22;scopes&#x22;:[&#x22;announcements&#x22;]},{&#x22;id&#x22;:&#x22;glean_delete_announcement&#x22;,&#x22;label&#x22;:&#x22;Delete Announcement&#x22;,&#x22;scopes&#x22;:[&#x22;announcements&#x22;]},{&#x22;id&#x22;:&#x22;glean_get_answer&#x22;,&#x22;label&#x22;:&#x22;Get Answer&#x22;,&#x22;scopes&#x22;:[&#x22;answers&#x22;]},{&#x22;id&#x22;:&#x22;glean_create_answer&#x22;,&#x22;label&#x22;:&#x22;Create Answer&#x22;,&#x22;scopes&#x22;:[&#x22;answers&#x22;]},{&#x22;id&#x22;:&#x22;glean_update_answer&#x22;,&#x22;label&#x22;:&#x22;Update Answer&#x22;,&#x22;scopes&#x22;:[&#x22;answers&#x22;]},{&#x22;id&#x22;:&#x22;glean_delete_answer&#x22;,&#x22;label&#x22;:&#x22;Delete Answer&#x22;,&#x22;scopes&#x22;:[&#x22;answers&#x22;]},{&#x22;id&#x22;:&#x22;glean_check_datasource_auth&#x22;,&#x22;label&#x22;:&#x22;Check Datasource Authorization&#x22;,&#x22;scopes&#x22;:[&#x22;auth_token_creator&#x22;]},{&#x22;id&#x22;:&#x22;glean_create_auth_token&#x22;,&#x22;label&#x22;:&#x22;Create Authentication Token&#x22;,&#x22;scopes&#x22;:[&#x22;auth_token_creator&#x22;]},{&#x22;id&#x22;:&#x22;glean_chat&#x22;,&#x22;label&#x22;:&#x22;Chat&#x22;,&#x22;scopes&#x22;:[&#x22;chat&#x22;]},{&#x22;id&#x22;:&#x22;glean_get_chat&#x22;,&#x22;label&#x22;:&#x22;Get Chat&#x22;,&#x22;scopes&#x22;:[&#x22;chat&#x22;]},{&#x22;id&#x22;:&#x22;glean_list_chats&#x22;,&#x22;label&#x22;:&#x22;List Chats&#x22;,&#x22;scopes&#x22;:[&#x22;chat&#x22;]},{&#x22;id&#x22;:&#x22;glean_get_chat_application&#x22;,&#x22;label&#x22;:&#x22;Get Chat Application&#x22;,&#x22;scopes&#x22;:[&#x22;chat&#x22;]},{&#x22;id&#x22;:&#x22;glean_get_chat_files&#x22;,&#x22;label&#x22;:&#x22;Get Chat Files&#x22;,&#x22;scopes&#x22;:[&#x22;chat&#x22;]},{&#x22;id&#x22;:&#x22;glean_delete_chats&#x22;,&#x22;label&#x22;:&#x22;Delete Chats&#x22;,&#x22;scopes&#x22;:[&#x22;chat&#x22;]},{&#x22;id&#x22;:&#x22;glean_delete_all_chats&#x22;,&#x22;label&#x22;:&#x22;Delete All Chats&#x22;,&#x22;scopes&#x22;:[&#x22;chat&#x22;]},{&#x22;id&#x22;:&#x22;glean_delete_chat_files&#x22;,&#x22;label&#x22;:&#x22;Delete Chat Files&#x22;,&#x22;scopes&#x22;:[&#x22;chat&#x22;]},{&#x22;id&#x22;:&#x22;glean_list_collections&#x22;,&#x22;label&#x22;:&#x22;List Collections&#x22;,&#x22;scopes&#x22;:[&#x22;collections&#x22;]},{&#x22;id&#x22;:&#x22;glean_get_collection&#x22;,&#x22;label&#x22;:&#x22;Get Collection&#x22;,&#x22;scopes&#x22;:[&#x22;collections&#x22;]},{&#x22;id&#x22;:&#x22;glean_create_collection&#x22;,&#x22;label&#x22;:&#x22;Create Collection&#x22;,&#x22;scopes&#x22;:[&#x22;collections&#x22;]},{&#x22;id&#x22;:&#x22;glean_update_collection&#x22;,&#x22;label&#x22;:&#x22;Update Collection&#x22;,&#x22;scopes&#x22;:[&#x22;collections&#x22;]},{&#x22;id&#x22;:&#x22;glean_delete_collection&#x22;,&#x22;label&#x22;:&#x22;Delete Collection&#x22;,&#x22;scopes&#x22;:[&#x22;collections&#x22;]},{&#x22;id&#x22;:&#x22;glean_add_collection_items&#x22;,&#x22;label&#x22;:&#x22;Add Collection Items&#x22;,&#x22;scopes&#x22;:[&#x22;collections&#x22;]},{&#x22;id&#x22;:&#x22;glean_update_collection_item&#x22;,&#x22;label&#x22;:&#x22;Update Collection Item&#x22;,&#x22;scopes&#x22;:[&#x22;collections&#x22;]},{&#x22;id&#x22;:&#x22;glean_delete_collection_item&#x22;,&#x22;label&#x22;:&#x22;Delete Collection Item&#x22;,&#x22;scopes&#x22;:[&#x22;collections&#x22;]},{&#x22;id&#x22;:&#x22;glean_get_datasource_instance_configuration&#x22;,&#x22;label&#x22;:&#x22;Get Datasource Instance Configuration&#x22;,&#x22;scopes&#x22;:[&#x22;admin&#x22;]},{&#x22;id&#x22;:&#x22;glean_update_datasource_instance_configuration&#x22;,&#x22;label&#x22;:&#x22;Update Datasource Instance Configuration&#x22;,&#x22;scopes&#x22;:[&#x22;admin&#x22;]},{&#x22;id&#x22;:&#x22;glean_get_datasource_credential_status&#x22;,&#x22;label&#x22;:&#x22;Get Datasource Credential Status&#x22;,&#x22;scopes&#x22;:[&#x22;admin&#x22;]},{&#x22;id&#x22;:&#x22;glean_rotate_datasource_credentials&#x22;,&#x22;label&#x22;:&#x22;Rotate Datasource Credentials&#x22;,&#x22;scopes&#x22;:[&#x22;admin&#x22;]},{&#x22;id&#x22;:&#x22;glean_get_document_permissions&#x22;,&#x22;label&#x22;:&#x22;Get Document Permissions&#x22;,&#x22;scopes&#x22;:[&#x22;docpermissions&#x22;]},{&#x22;id&#x22;:&#x22;glean_get_documents&#x22;,&#x22;label&#x22;:&#x22;Get Documents&#x22;,&#x22;scopes&#x22;:[&#x22;documents&#x22;]},{&#x22;id&#x22;:&#x22;glean_list_documents_by_facets&#x22;,&#x22;label&#x22;:&#x22;List Documents By Facets&#x22;,&#x22;scopes&#x22;:[&#x22;documents&#x22;]},{&#x22;id&#x22;:&#x22;glean_list_entities&#x22;,&#x22;label&#x22;:&#x22;List Entities&#x22;,&#x22;scopes&#x22;:[&#x22;entities&#x22;]},{&#x22;id&#x22;:&#x22;glean_get_people&#x22;,&#x22;label&#x22;:&#x22;Get People&#x22;,&#x22;scopes&#x22;:[&#x22;people&#x22;]},{&#x22;id&#x22;:&#x22;glean_list_policies&#x22;,&#x22;label&#x22;:&#x22;List Data Loss Prevention Policies&#x22;,&#x22;scopes&#x22;:[&#x22;data_governance&#x22;]},{&#x22;id&#x22;:&#x22;glean_get_policy&#x22;,&#x22;label&#x22;:&#x22;Get Data Loss Prevention Policy&#x22;,&#x22;scopes&#x22;:[&#x22;data_governance&#x22;]},{&#x22;id&#x22;:&#x22;glean_create_policy&#x22;,&#x22;label&#x22;:&#x22;Create Data Loss Prevention Policy&#x22;,&#x22;scopes&#x22;:[&#x22;data_governance&#x22;]},{&#x22;id&#x22;:&#x22;glean_update_policy&#x22;,&#x22;label&#x22;:&#x22;Update Data Loss Prevention Policy&#x22;,&#x22;scopes&#x22;:[&#x22;data_governance&#x22;]},{&#x22;id&#x22;:&#x22;glean_create_report&#x22;,&#x22;label&#x22;:&#x22;Create One Time Report&#x22;,&#x22;scopes&#x22;:[&#x22;data_governance&#x22;]},{&#x22;id&#x22;:&#x22;glean_get_report_status&#x22;,&#x22;label&#x22;:&#x22;Get Report Status&#x22;,&#x22;scopes&#x22;:[&#x22;data_governance&#x22;]},{&#x22;id&#x22;:&#x22;glean_get_document_visibility&#x22;,&#x22;label&#x22;:&#x22;Get Document Visibility Overrides&#x22;,&#x22;scopes&#x22;:[&#x22;content_hiding&#x22;]},{&#x22;id&#x22;:&#x22;glean_set_document_visibility&#x22;,&#x22;label&#x22;:&#x22;Set Document Visibility Overrides&#x22;,&#x22;scopes&#x22;:[&#x22;content_hiding&#x22;]},{&#x22;id&#x22;:&#x22;glean_list_findings_exports&#x22;,&#x22;label&#x22;:&#x22;List Findings Exports&#x22;,&#x22;scopes&#x22;:[&#x22;data_governance&#x22;]},{&#x22;id&#x22;:&#x22;glean_create_findings_export&#x22;,&#x22;label&#x22;:&#x22;Create Findings Export&#x22;,&#x22;scopes&#x22;:[&#x22;data_governance&#x22;]},{&#x22;id&#x22;:&#x22;glean_delete_findings_export&#x22;,&#x22;label&#x22;:&#x22;Delete Findings Export&#x22;,&#x22;scopes&#x22;:[&#x22;data_governance&#x22;]},{&#x22;id&#x22;:&#x22;glean_get_insights&#x22;,&#x22;label&#x22;:&#x22;Get Insights&#x22;,&#x22;scopes&#x22;:[&#x22;insights&#x22;]},{&#x22;id&#x22;:&#x22;glean_list_pins&#x22;,&#x22;label&#x22;:&#x22;List Pins&#x22;,&#x22;scopes&#x22;:[&#x22;pins&#x22;]},{&#x22;id&#x22;:&#x22;glean_get_pin&#x22;,&#x22;label&#x22;:&#x22;Get Pin&#x22;,&#x22;scopes&#x22;:[&#x22;pins&#x22;]},{&#x22;id&#x22;:&#x22;glean_create_pin&#x22;,&#x22;label&#x22;:&#x22;Create Pin&#x22;,&#x22;scopes&#x22;:[&#x22;pins&#x22;]},{&#x22;id&#x22;:&#x22;glean_update_pin&#x22;,&#x22;label&#x22;:&#x22;Update Pin&#x22;,&#x22;scopes&#x22;:[&#x22;pins&#x22;]},{&#x22;id&#x22;:&#x22;glean_delete_pin&#x22;,&#x22;label&#x22;:&#x22;Delete Pin&#x22;,&#x22;scopes&#x22;:[&#x22;pins&#x22;]},{&#x22;id&#x22;:&#x22;glean_search&#x22;,&#x22;label&#x22;:&#x22;Search&#x22;,&#x22;scopes&#x22;:[&#x22;search&#x22;]},{&#x22;id&#x22;:&#x22;glean_autocomplete&#x22;,&#x22;label&#x22;:&#x22;Autocomplete&#x22;,&#x22;scopes&#x22;:[&#x22;search&#x22;]},{&#x22;id&#x22;:&#x22;glean_get_feed&#x22;,&#x22;label&#x22;:&#x22;Get Feed&#x22;,&#x22;scopes&#x22;:[&#x22;feed&#x22;]},{&#x22;id&#x22;:&#x22;glean_get_recommendations&#x22;,&#x22;label&#x22;:&#x22;Get Recommendations&#x22;,&#x22;scopes&#x22;:[&#x22;search&#x22;]},{&#x22;id&#x22;:&#x22;glean_list_shortcuts&#x22;,&#x22;label&#x22;:&#x22;List Shortcuts&#x22;,&#x22;scopes&#x22;:[&#x22;shortcuts&#x22;]},{&#x22;id&#x22;:&#x22;glean_get_shortcut&#x22;,&#x22;label&#x22;:&#x22;Get Shortcut&#x22;,&#x22;scopes&#x22;:[&#x22;shortcuts&#x22;]},{&#x22;id&#x22;:&#x22;glean_create_shortcut&#x22;,&#x22;label&#x22;:&#x22;Create Shortcut&#x22;,&#x22;scopes&#x22;:[&#x22;shortcuts&#x22;]},{&#x22;id&#x22;:&#x22;glean_update_shortcut&#x22;,&#x22;label&#x22;:&#x22;Update Shortcut&#x22;,&#x22;scopes&#x22;:[&#x22;shortcuts&#x22;]},{&#x22;id&#x22;:&#x22;glean_delete_shortcut&#x22;,&#x22;label&#x22;:&#x22;Delete Shortcut&#x22;,&#x22;scopes&#x22;:[&#x22;shortcuts&#x22;]},{&#x22;id&#x22;:&#x22;glean_list_skills&#x22;,&#x22;label&#x22;:&#x22;List Skills&#x22;,&#x22;scopes&#x22;:[&#x22;skills&#x22;]},{&#x22;id&#x22;:&#x22;glean_get_skill&#x22;,&#x22;label&#x22;:&#x22;Get Skill&#x22;,&#x22;scopes&#x22;:[&#x22;skills&#x22;]},{&#x22;id&#x22;:&#x22;glean_list_skill_versions&#x22;,&#x22;label&#x22;:&#x22;List Skill Versions&#x22;,&#x22;scopes&#x22;:[&#x22;skills&#x22;]},{&#x22;id&#x22;:&#x22;glean_get_skill_version&#x22;,&#x22;label&#x22;:&#x22;Get Skill Version&#x22;,&#x22;scopes&#x22;:[&#x22;skills&#x22;]},{&#x22;id&#x22;:&#x22;glean_preview_skill_source&#x22;,&#x22;label&#x22;:&#x22;Preview Skill Source&#x22;,&#x22;scopes&#x22;:[&#x22;skills&#x22;]},{&#x22;id&#x22;:&#x22;glean_import_skills&#x22;,&#x22;label&#x22;:&#x22;Import Skills&#x22;,&#x22;scopes&#x22;:[&#x22;skills&#x22;]},{&#x22;id&#x22;:&#x22;glean_update_skill&#x22;,&#x22;label&#x22;:&#x22;Update Skill&#x22;,&#x22;scopes&#x22;:[&#x22;skills&#x22;]},{&#x22;id&#x22;:&#x22;glean_sync_skill&#x22;,&#x22;label&#x22;:&#x22;Sync Skill&#x22;,&#x22;scopes&#x22;:[&#x22;skills&#x22;]},{&#x22;id&#x22;:&#x22;glean_delete_skill&#x22;,&#x22;label&#x22;:&#x22;Delete Skill&#x22;,&#x22;scopes&#x22;:[&#x22;skills&#x22;]},{&#x22;id&#x22;:&#x22;glean_summarize&#x22;,&#x22;label&#x22;:&#x22;Summarize&#x22;,&#x22;scopes&#x22;:[&#x22;summarize&#x22;]},{&#x22;id&#x22;:&#x22;glean_list_tools&#x22;,&#x22;label&#x22;:&#x22;List Tools&#x22;,&#x22;scopes&#x22;:[&#x22;tools&#x22;]},{&#x22;id&#x22;:&#x22;glean_call_tool&#x22;,&#x22;label&#x22;:&#x22;Call Tool&#x22;,&#x22;scopes&#x22;:[&#x22;tools&#x22;]},{&#x22;id&#x22;:&#x22;glean_get_action_pack_auth_status&#x22;,&#x22;label&#x22;:&#x22;Get Action Pack Auth Status&#x22;,&#x22;scopes&#x22;:[&#x22;tools&#x22;]},{&#x22;id&#x22;:&#x22;glean_authorize_action_pack&#x22;,&#x22;label&#x22;:&#x22;Authorize Action Pack&#x22;,&#x22;scopes&#x22;:[&#x22;tools&#x22;]},{&#x22;id&#x22;:&#x22;glean_get_tool_server_auth_status&#x22;,&#x22;label&#x22;:&#x22;Get Tool Server Auth Status&#x22;,&#x22;scopes&#x22;:[&#x22;tools&#x22;]},{&#x22;id&#x22;:&#x22;glean_authorize_tool_server&#x22;,&#x22;label&#x22;:&#x22;Authorize Tool Server&#x22;,&#x22;scopes&#x22;:[&#x22;tools&#x22;]},{&#x22;id&#x22;:&#x22;glean_get_tool_server_tools&#x22;,&#x22;label&#x22;:&#x22;Get Tool Server Tools&#x22;,&#x22;scopes&#x22;:[&#x22;tools&#x22;]},{&#x22;id&#x22;:&#x22;glean_list_verifications&#x22;,&#x22;label&#x22;:&#x22;List Verifications&#x22;,&#x22;scopes&#x22;:[&#x22;verification&#x22;]},{&#x22;id&#x22;:&#x22;glean_verify_document&#x22;,&#x22;label&#x22;:&#x22;Verify Document&#x22;,&#x22;scopes&#x22;:[&#x22;verification&#x22;]},{&#x22;id&#x22;:&#x22;glean_add_verification_reminder&#x22;,&#x22;label&#x22;:&#x22;Add Verification Reminder&#x22;,&#x22;scopes&#x22;:[&#x22;verification&#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>Prerequisites</h2>

  <p>Confirm what you need before starting setup.</p>

  <ul>
    <li>Your Glean instance subdomain, taken from your backend host</li>
    <li>A Glean admin has enabled the Glean OAuth Server in the Admin Console under <strong>Settings</strong> then <strong>Third-party access (OAuth)</strong></li>
    <li>Glean admin access if you want to register a static OAuth client</li>
  </ul>
</section>

<section data-guide-section data-guide-scopes="">
  <h2>Register an OAuth client</h2>

  <p>The connector needs a Client ID and Client Secret for your Glean instance. There are two ways to obtain them.</p>

  <Steps>
    <Step title="Create a static client (recommended)">
      <div data-guide-step data-guide-scopes="activity,admin,agents,announcements,answers,auth_token_creator,chat,collections,content_hiding,data_governance,docpermissions,documents,entities,feed,feedback,insights,offline_access,people,pins,search,shortcuts,skills,summarize,tools,verification" data-guide-display-scopes-list="activity,admin,agents,announcements,answers,auth_token_creator,chat,collections,content_hiding,data_governance,docpermissions,documents,entities,feed,feedback,insights,offline_access,people,pins,search,shortcuts,skills,summarize,tools,verification">
        <div className="connector-guide-actions-badge" data-guide-actions-badge data-guide-actions-badge-scopes="activity,admin,agents,announcements,answers,auth_token_creator,chat,collections,content_hiding,data_governance,docpermissions,documents,entities,feed,feedback,insights,offline_access,people,pins,search,shortcuts,skills,summarize,tools,verification" 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>Add Collection Items, Add Verification Reminder, Authorize Action Pack, Authorize Tool Server, Autocomplete, Call Tool, Chat, Check Datasource Authorization, Create Announcement, Create Answer, Create Authentication Token, Create Collection, Create Data Loss Prevention Policy, Create Findings Export, Create One Time Report, Create Pin, Create Shortcut, Delete All Chats, Delete Announcement, Delete Answer, Delete Chat Files, Delete Chats, Delete Collection, Delete Collection Item, Delete Findings Export, Delete Pin, Delete Shortcut, Delete Skill, Get Action Pack Auth Status, Get Agent, Get Agent Schemas, Get Answer, Get Chat, Get Chat Application, Get Chat Files, Get Collection, Get Data Loss Prevention Policy, Get Datasource Credential Status, Get Datasource Instance Configuration, Get Document Permissions, Get Document Visibility Overrides, Get Documents, Get Feed, Get Insights, Get People, Get Pin, Get Recommendations, Get Report Status, Get Shortcut, Get Skill, Get Skill Version, Get Tool Server Auth Status, Get Tool Server Tools, Import Skills, List Agents, List Chats, List Collections, List Data Loss Prevention Policies, List Documents By Facets, List Entities, List Findings Exports, List Pins, List Shortcuts, List Skill Versions, List Skills, List Tools, List Verifications, Preview Skill Source, Report Activity, Report Feedback, Rotate Datasource Credentials, Run Agent, Search, Set Document Visibility Overrides, Summarize, Sync Skill, Update Announcement, Update Answer, Update Collection, Update Collection Item, Update Data Loss Prevention Policy, Update Datasource Instance Configuration, Update Pin, Update Shortcut, Update Skill, Verify Document</span>
        </div>

        <p>Register the client in the Glean Admin Console. This path needs admin access and can be allow-listed for the full scope set.</p>

        <ul>
          <li>Sign in to the Glean Admin Console</li>
          <li>Go to <strong>Users & permissions</strong> then <strong>Third-party access (OAuth)</strong></li>
          <li>Under <strong>Static clients</strong>, click <strong>Create client</strong></li>
          <li>Enter a client name and the redirect URI below</li>
          <li>Select the scopes the client is allowed to request</li>
          <li>Copy the Client ID and Client Secret. The secret is shown once and cannot be retrieved again</li>
        </ul>

        <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="activity">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy activity" title="Copy scope" data-copy="activity">
                  <span className="connector-guide-scope-copy__label">activity</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="admin">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy admin" title="Copy scope" data-copy="admin">
                  <span className="connector-guide-scope-copy__label">admin</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="agents">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy agents" title="Copy scope" data-copy="agents">
                  <span className="connector-guide-scope-copy__label">agents</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="announcements">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy announcements" title="Copy scope" data-copy="announcements">
                  <span className="connector-guide-scope-copy__label">announcements</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="answers">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy answers" title="Copy scope" data-copy="answers">
                  <span className="connector-guide-scope-copy__label">answers</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="auth_token_creator">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy auth_token_creator" title="Copy scope" data-copy="auth_token_creator">
                  <span className="connector-guide-scope-copy__label">auth\_token\_creator</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">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy chat" title="Copy scope" data-copy="chat">
                  <span className="connector-guide-scope-copy__label">chat</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="collections">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy collections" title="Copy scope" data-copy="collections">
                  <span className="connector-guide-scope-copy__label">collections</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="content_hiding">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy content_hiding" title="Copy scope" data-copy="content_hiding">
                  <span className="connector-guide-scope-copy__label">content\_hiding</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="data_governance">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy data_governance" title="Copy scope" data-copy="data_governance">
                  <span className="connector-guide-scope-copy__label">data\_governance</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="docpermissions">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy docpermissions" title="Copy scope" data-copy="docpermissions">
                  <span className="connector-guide-scope-copy__label">docpermissions</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="documents">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy documents" title="Copy scope" data-copy="documents">
                  <span className="connector-guide-scope-copy__label">documents</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="entities">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy entities" title="Copy scope" data-copy="entities">
                  <span className="connector-guide-scope-copy__label">entities</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="feed">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy feed" title="Copy scope" data-copy="feed">
                  <span className="connector-guide-scope-copy__label">feed</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="feedback">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy feedback" title="Copy scope" data-copy="feedback">
                  <span className="connector-guide-scope-copy__label">feedback</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="insights">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy insights" title="Copy scope" data-copy="insights">
                  <span className="connector-guide-scope-copy__label">insights</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="offline_access">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy offline_access" title="Copy scope" data-copy="offline_access">
                  <span className="connector-guide-scope-copy__label">offline\_access</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="people">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy people" title="Copy scope" data-copy="people">
                  <span className="connector-guide-scope-copy__label">people</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="pins">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy pins" title="Copy scope" data-copy="pins">
                  <span className="connector-guide-scope-copy__label">pins</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="search">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy search" title="Copy scope" data-copy="search">
                  <span className="connector-guide-scope-copy__label">search</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="shortcuts">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy shortcuts" title="Copy scope" data-copy="shortcuts">
                  <span className="connector-guide-scope-copy__label">shortcuts</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="skills">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy skills" title="Copy scope" data-copy="skills">
                  <span className="connector-guide-scope-copy__label">skills</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="summarize">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy summarize" title="Copy scope" data-copy="summarize">
                  <span className="connector-guide-scope-copy__label">summarize</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="tools">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy tools" title="Copy scope" data-copy="tools">
                  <span className="connector-guide-scope-copy__label">tools</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="verification">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy verification" title="Copy scope" data-copy="verification">
                  <span className="connector-guide-scope-copy__label">verification</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>
            </ul>
          </div>
        </div>
      </div>
    </Step>

    <Step title="Or register a dynamic client">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Dynamic client registration follows <a href="https://datatracker.ietf.org/doc/html/rfc7591" target="_blank" rel="noopener noreferrer">RFC 7591</a> and needs no admin access.</p>

        <ul>
          <li>POST a registration request to `https://{instance}-be.glean.com/oauth/register`, including the redirect URI below</li>
          <li>Glean applies a restricted scope set to dynamically registered clients, and the exact set is configured per tenant, so a dynamic client may not be able to obtain every scope listed above</li>
          <li>If that set excludes offline\_access, no refresh token is issued and the connection must be re-authorized once the access token expires. Ask your Glean representative to widen the set</li>
          <li>An admin can disable dynamic registration on the instance</li>
        </ul>
      </div>
    </Step>

    <Step title="Configure the redirect URI and grant">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Glean runs an OAuth 2.1 implementation, so these values are fixed.</p>

        <ul>
          <li>Redirect URI, exact and case sensitive: `https://api.stackone.com/connect/oauth2/glean/callback`</li>
          <li>Grant type: authorization code with PKCE using S256. Implicit and password grants are not supported</li>
          <li>Token endpoint auth method: client\_secret\_post, so the client secret travels in the token request body</li>
        </ul>
      </div>
    </Step>

    <Step title="Set the connector scopes">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Back in StackOne, paste the space-separated scope list your OAuth client is allowed to request into the <strong>Scopes</strong> field.</p>

        <ul>
          <li>Leaving <strong>Scopes</strong> empty requests every scope the connector supports, which suits a static client allow-listed for the full set</li>
          <li>Dynamically registered clients hold a restricted scope set, so enter that set explicitly rather than leaving the field empty</li>
          <li>Requesting a scope the client cannot hold can fail authorization, and any action whose scope was not requested fails with a 403</li>
        </ul>
      </div>
    </Step>
  </Steps>
</section>

<section data-guide-section data-guide-scopes="">
  <h2>Find your instance subdomain</h2>

  <p>The instance is the part of your Glean backend host before `-be.glean.com`. For a backend host of `acme-prod-be.glean.com` the instance is `acme-prod`. The connector uses it to build the API base URL and both OAuth endpoints, all of which are per-instance.</p>
</section>

## Creating the StackOne Connector Profile

To create the Connector Profile in StackOne for <strong>Glean</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>Glean</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>
          <li><strong>Scopes</strong> (Optional)</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="/connect/managing-connectors/linking-accounts">Link Accounts</a> for <strong>Glean</strong>.
