> ## 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 Brainier with OAuth 2.0 (Elan REST API) – StackOne Hub

> Link a Brainier account in the StackOne Hub using OAuth 2.0 (Elan REST API). End-user guide to authorize the integration and start using Brainier actions.

<Warning>Admin privileges in your Brainier account are required to complete this integration. If you don't have admin access, please contact your Brainier administrator.</Warning>

<Panel>
  <div className="not-prose guides-scope-selector" data-guides-scope-selector data-guide-actions-json="[{&#x22;id&#x22;:&#x22;brainier_get_multiple_users_info&#x22;,&#x22;label&#x22;:&#x22;Get Multiple Users Info&#x22;,&#x22;scopes&#x22;:[&#x22;Users&#x22;]},{&#x22;id&#x22;:&#x22;brainier_get_single_user_info&#x22;,&#x22;label&#x22;:&#x22;Get Single User Info&#x22;,&#x22;scopes&#x22;:[&#x22;Users&#x22;]},{&#x22;id&#x22;:&#x22;brainier_update_user_info&#x22;,&#x22;label&#x22;:&#x22;Update User Info&#x22;,&#x22;scopes&#x22;:[&#x22;Users&#x22;]},{&#x22;id&#x22;:&#x22;brainier_create_user&#x22;,&#x22;label&#x22;:&#x22;Create User&#x22;,&#x22;scopes&#x22;:[&#x22;Users&#x22;]},{&#x22;id&#x22;:&#x22;brainier_upload_user_avatar&#x22;,&#x22;label&#x22;:&#x22;Upload User Avatar&#x22;,&#x22;scopes&#x22;:[&#x22;Users&#x22;]},{&#x22;id&#x22;:&#x22;brainier_get_multiple_groups_info&#x22;,&#x22;label&#x22;:&#x22;Get Multiple Groups Info&#x22;,&#x22;scopes&#x22;:[&#x22;Groups&#x22;]},{&#x22;id&#x22;:&#x22;brainier_get_single_group_info&#x22;,&#x22;label&#x22;:&#x22;Get Single Group Info&#x22;,&#x22;scopes&#x22;:[&#x22;Groups&#x22;]},{&#x22;id&#x22;:&#x22;brainier_add_user_to_group&#x22;,&#x22;label&#x22;:&#x22;Add User To Group&#x22;,&#x22;scopes&#x22;:[&#x22;Groups&#x22;]},{&#x22;id&#x22;:&#x22;brainier_update_group_info&#x22;,&#x22;label&#x22;:&#x22;Update Group Info&#x22;,&#x22;scopes&#x22;:[&#x22;Groups&#x22;]},{&#x22;id&#x22;:&#x22;brainier_create_group&#x22;,&#x22;label&#x22;:&#x22;Create Group&#x22;,&#x22;scopes&#x22;:[&#x22;Groups&#x22;]},{&#x22;id&#x22;:&#x22;brainier_remove_user_from_group&#x22;,&#x22;label&#x22;:&#x22;Remove User From Group&#x22;,&#x22;scopes&#x22;:[&#x22;Groups&#x22;]},{&#x22;id&#x22;:&#x22;brainier_get_multiple_roles_info&#x22;,&#x22;label&#x22;:&#x22;Get Multiple Roles Info&#x22;,&#x22;scopes&#x22;:[&#x22;Roles&#x22;]},{&#x22;id&#x22;:&#x22;brainier_get_single_role_info&#x22;,&#x22;label&#x22;:&#x22;Get Single Role Info&#x22;,&#x22;scopes&#x22;:[&#x22;Roles&#x22;]},{&#x22;id&#x22;:&#x22;brainier_get_multiple_learning_objects_info&#x22;,&#x22;label&#x22;:&#x22;Get Multiple Learning Objects Info&#x22;,&#x22;scopes&#x22;:[&#x22;LearningObjects&#x22;]},{&#x22;id&#x22;:&#x22;brainier_get_learning_object_info&#x22;,&#x22;label&#x22;:&#x22;Get Learning Object Info&#x22;,&#x22;scopes&#x22;:[&#x22;LearningObjects&#x22;]},{&#x22;id&#x22;:&#x22;brainier_get_learning_object_comments&#x22;,&#x22;label&#x22;:&#x22;Get Learning Object Comments&#x22;,&#x22;scopes&#x22;:[&#x22;LearningObjects&#x22;]},{&#x22;id&#x22;:&#x22;brainier_get_object_access&#x22;,&#x22;label&#x22;:&#x22;Get Object Access&#x22;,&#x22;scopes&#x22;:[&#x22;LearningObjects&#x22;]},{&#x22;id&#x22;:&#x22;brainier_create_object_access&#x22;,&#x22;label&#x22;:&#x22;Create Object Access&#x22;,&#x22;scopes&#x22;:[&#x22;LearningObjects&#x22;]},{&#x22;id&#x22;:&#x22;brainier_remove_object_access&#x22;,&#x22;label&#x22;:&#x22;Remove Object Access&#x22;,&#x22;scopes&#x22;:[&#x22;LearningObjects&#x22;]},{&#x22;id&#x22;:&#x22;brainier_get_class_schedules_info&#x22;,&#x22;label&#x22;:&#x22;Get Class Schedules Info&#x22;,&#x22;scopes&#x22;:[&#x22;LearningObjects&#x22;]},{&#x22;id&#x22;:&#x22;brainier_get_user_object_records&#x22;,&#x22;label&#x22;:&#x22;Get User Object Records&#x22;,&#x22;scopes&#x22;:[&#x22;UserObjectRecords&#x22;]},{&#x22;id&#x22;:&#x22;brainier_create_user_object_record&#x22;,&#x22;label&#x22;:&#x22;Create User Object Record&#x22;,&#x22;scopes&#x22;:[&#x22;UserObjectRecords&#x22;]},{&#x22;id&#x22;:&#x22;brainier_update_user_object_record&#x22;,&#x22;label&#x22;:&#x22;Update User Object Record&#x22;,&#x22;scopes&#x22;:[&#x22;UserObjectRecords&#x22;]},{&#x22;id&#x22;:&#x22;brainier_unregister_from_class&#x22;,&#x22;label&#x22;:&#x22;Unregister From Class&#x22;,&#x22;scopes&#x22;:[&#x22;UserObjectRecords&#x22;]},{&#x22;id&#x22;:&#x22;brainier_get_form_questions_and_answers&#x22;,&#x22;label&#x22;:&#x22;Get Form Questions And Answers&#x22;,&#x22;scopes&#x22;:[&#x22;Forms&#x22;]},{&#x22;id&#x22;:&#x22;brainier_get_form_options&#x22;,&#x22;label&#x22;:&#x22;Get Form Options&#x22;,&#x22;scopes&#x22;:[&#x22;Forms&#x22;]},{&#x22;id&#x22;:&#x22;brainier_get_user_form_answers&#x22;,&#x22;label&#x22;:&#x22;Get User Form Answers&#x22;,&#x22;scopes&#x22;:[&#x22;Forms&#x22;]},{&#x22;id&#x22;:&#x22;brainier_send_form_answers&#x22;,&#x22;label&#x22;:&#x22;Send Form Answers&#x22;,&#x22;scopes&#x22;:[&#x22;Forms&#x22;]},{&#x22;id&#x22;:&#x22;brainier_list_assignments&#x22;,&#x22;label&#x22;:&#x22;Get Assignments&#x22;,&#x22;scopes&#x22;:[&#x22;Assignments&#x22;]},{&#x22;id&#x22;:&#x22;brainier_create_assignment&#x22;,&#x22;label&#x22;:&#x22;Create Assignment&#x22;,&#x22;scopes&#x22;:[&#x22;Assignments&#x22;]},{&#x22;id&#x22;:&#x22;brainier_get_assigned_users&#x22;,&#x22;label&#x22;:&#x22;Get Assigned Users&#x22;,&#x22;scopes&#x22;:[&#x22;Assignments&#x22;]},{&#x22;id&#x22;:&#x22;brainier_create_assigned_user&#x22;,&#x22;label&#x22;:&#x22;Create Assigned User&#x22;,&#x22;scopes&#x22;:[&#x22;Assignments&#x22;]},{&#x22;id&#x22;:&#x22;brainier_remove_assigned_user&#x22;,&#x22;label&#x22;:&#x22;Remove Assigned User&#x22;,&#x22;scopes&#x22;:[&#x22;Assignments&#x22;]},{&#x22;id&#x22;:&#x22;brainier_get_assigned_groups&#x22;,&#x22;label&#x22;:&#x22;Get Assigned Groups&#x22;,&#x22;scopes&#x22;:[&#x22;Assignments&#x22;]},{&#x22;id&#x22;:&#x22;brainier_create_assigned_group&#x22;,&#x22;label&#x22;:&#x22;Create Assigned Group&#x22;,&#x22;scopes&#x22;:[&#x22;Assignments&#x22;]},{&#x22;id&#x22;:&#x22;brainier_remove_assigned_group&#x22;,&#x22;label&#x22;:&#x22;Remove Assigned Group&#x22;,&#x22;scopes&#x22;:[&#x22;Assignments&#x22;]},{&#x22;id&#x22;:&#x22;brainier_get_assigned_objects&#x22;,&#x22;label&#x22;:&#x22;Get Assigned Objects&#x22;,&#x22;scopes&#x22;:[&#x22;Assignments&#x22;]},{&#x22;id&#x22;:&#x22;brainier_create_assigned_object&#x22;,&#x22;label&#x22;:&#x22;Create Assigned Object&#x22;,&#x22;scopes&#x22;:[&#x22;Assignments&#x22;]},{&#x22;id&#x22;:&#x22;brainier_remove_assigned_object&#x22;,&#x22;label&#x22;:&#x22;Remove Assigned Object&#x22;,&#x22;scopes&#x22;:[&#x22;Assignments&#x22;]},{&#x22;id&#x22;:&#x22;brainier_get_assignments_by_user&#x22;,&#x22;label&#x22;:&#x22;Get Assignments By User&#x22;,&#x22;scopes&#x22;:[&#x22;Assignments&#x22;]},{&#x22;id&#x22;:&#x22;brainier_get_tags&#x22;,&#x22;label&#x22;:&#x22;Get Tags&#x22;,&#x22;scopes&#x22;:[&#x22;Tags&#x22;]},{&#x22;id&#x22;:&#x22;brainier_get_bookmarked_objects&#x22;,&#x22;label&#x22;:&#x22;Get Bookmarked Objects&#x22;,&#x22;scopes&#x22;:[&#x22;Bookmarks&#x22;]},{&#x22;id&#x22;:&#x22;brainier_create_bookmark&#x22;,&#x22;label&#x22;:&#x22;Create Bookmark&#x22;,&#x22;scopes&#x22;:[&#x22;Bookmarks&#x22;]},{&#x22;id&#x22;:&#x22;brainier_remove_bookmark&#x22;,&#x22;label&#x22;:&#x22;Remove Bookmark&#x22;,&#x22;scopes&#x22;:[&#x22;Bookmarks&#x22;]},{&#x22;id&#x22;:&#x22;brainier_get_object_authors&#x22;,&#x22;label&#x22;:&#x22;Get Object Authors&#x22;,&#x22;scopes&#x22;:[&#x22;Authors&#x22;]},{&#x22;id&#x22;:&#x22;brainier_get_all_object_authors&#x22;,&#x22;label&#x22;:&#x22;Get All Object Authors&#x22;,&#x22;scopes&#x22;:[&#x22;Authors&#x22;]},{&#x22;id&#x22;:&#x22;brainier_get_objects_by_author&#x22;,&#x22;label&#x22;:&#x22;Get Objects By Author&#x22;,&#x22;scopes&#x22;:[&#x22;Authors&#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 an API Client</h2>

  <p>To authenticate with the Brainier Elan REST API using OAuth 2.0, you must first create an API Client.</p>

  <Steps>
    <Step title="Access API Client Management">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Log in to your Brainier LMS site and navigate to <strong>⚙️ Administration</strong> (top right corner) > <strong>Settings</strong> > <strong>Options</strong> > <strong>Integrations</strong> > <strong>Elan/LMS REST API</strong>, click <strong>Manage API Clients</strong> button.</p>
      </div>
    </Step>

    <Step title="Create New API Client">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Click the <strong>Add</strong> button in the top right corner of the screen.</p>
      </div>
    </Step>

    <Step title="Configure API Client Settings">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Fill out the following fields.</p>

        <ul>
          <li><strong>Client Name</strong>: Enter a descriptive name (e.g., StackOne Integration)</li>
          <li><strong>Token Duration (minutes)</strong>: Set the access token validity period. Maximum: 1440 (24 hours)</li>
        </ul>
      </div>
    </Step>

    <Step title="Select Scopes">
      <div data-guide-step data-guide-scopes="Assignments,Authors,Bookmarks,Forms,Groups,LearningObjects,Roles,Tags,UserObjectRecords,Users" data-guide-display-scopes-list="Assignments,Authors,Bookmarks,Forms,Groups,LearningObjects,Roles,Tags,UserObjectRecords,Users">
        <div className="connector-guide-actions-badge" data-guide-actions-badge data-guide-actions-badge-scopes="Assignments,Authors,Bookmarks,Forms,Groups,LearningObjects,Roles,Tags,UserObjectRecords,Users" 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 User To Group, Create Assigned Group, Create Assigned Object, Create Assigned User, Create Assignment, Create Bookmark, Create Group, Create Object Access, Create User, Create User Object Record, Get All Object Authors, Get Assigned Groups, Get Assigned Objects, Get Assigned Users, Get Assignments, Get Assignments By User, Get Bookmarked Objects, Get Class Schedules Info, Get Form Options, Get Form Questions And Answers, Get Learning Object Comments, Get Learning Object Info, Get Multiple Groups Info, Get Multiple Learning Objects Info, Get Multiple Roles Info, Get Multiple Users Info, Get Object Access, Get Object Authors, Get Objects By Author, Get Single Group Info, Get Single Role Info, Get Single User Info, Get Tags, Get User Form Answers, Get User Object Records, Remove Assigned Group, Remove Assigned Object, Remove Assigned User, Remove Bookmark, Remove Object Access, Remove User From Group, Send Form Answers, Unregister From Class, Update Group Info, Update User Info, Update User Object Record, Upload User Avatar</span>
        </div>

        <p>Select the scopes:</p>

        <div style={{ marginTop: '8px' }} data-guide-display-scopes>
          <div className="connector-guide-scopes-container">
            <ul className="not-prose" style={{ listStyleType: "'- '", paddingLeft: '1em', margin: 0 }}>
              <li style={{ overflowWrap: 'anywhere', wordBreak: 'break-word' }} data-guide-display-scope="Assignments">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy Assignments" title="Copy scope" data-copy="Assignments">
                  <span className="connector-guide-scope-copy__label">Assignments</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="Authors">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy Authors" title="Copy scope" data-copy="Authors">
                  <span className="connector-guide-scope-copy__label">Authors</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="Bookmarks">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy Bookmarks" title="Copy scope" data-copy="Bookmarks">
                  <span className="connector-guide-scope-copy__label">Bookmarks</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="Forms">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy Forms" title="Copy scope" data-copy="Forms">
                  <span className="connector-guide-scope-copy__label">Forms</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">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy Groups" title="Copy scope" data-copy="Groups">
                  <span className="connector-guide-scope-copy__label">Groups</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="LearningObjects">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy LearningObjects" title="Copy scope" data-copy="LearningObjects">
                  <span className="connector-guide-scope-copy__label">LearningObjects</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="Roles">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy Roles" title="Copy scope" data-copy="Roles">
                  <span className="connector-guide-scope-copy__label">Roles</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="Tags">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy Tags" title="Copy scope" data-copy="Tags">
                  <span className="connector-guide-scope-copy__label">Tags</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="UserObjectRecords">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy UserObjectRecords" title="Copy scope" data-copy="UserObjectRecords">
                  <span className="connector-guide-scope-copy__label">UserObjectRecords</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">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy Users" title="Copy scope" data-copy="Users">
                  <span className="connector-guide-scope-copy__label">Users</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>
            </ul>
          </div>
        </div>
      </div>
    </Step>

    <Step title="Save and Retrieve Credentials">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Click <strong>Save</strong> to create the API Client. After saving, two new fields will appear: <strong>Client ID</strong> (a unique identifier for this API Client) and <strong>Client Secret</strong> (a secret value used for obtaining access tokens). Store the Client Secret securely for use later. This value should never be exposed to front-end code or shared publicly.</p>
      </div>
    </Step>
  </Steps>
</section>

<section data-guide-section data-guide-scopes="">
  <h2>Gather Required Information</h2>

  <p>Collect the following information to link your Brainier account with StackOne.</p>

  <Steps>
    <Step title="Find Your Subdomain">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Your Brainier subdomain is the first part of your Brainier URL.</p>

        <ul>
          <li>Format: `https://{subdomain}.brainier.com`</li>
          <li>Example: If your URL is `https://mycompany.brainier.com`, your subdomain is `mycompany`</li>
          <li>Note: Do not include `.brainier.com` in the subdomain field</li>
        </ul>
      </div>
    </Step>

    <Step title="Identify Username (Optional)">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Identify the username of the account you want to bind the access token to. This is typically a SuperAdmin account or a dedicated service account with appropriate permissions.</p>

        <ul>
          <li>Note: If no username is supplied during authentication, the token will be bound to the default SuperAdmin account (user\_id 1)</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>Client ID</strong></li>
        <li><strong>Client Secret</strong></li>
        <li><strong>Subdomain</strong></li>
        <li><strong>Username</strong> (Optional)</li>
        <li><strong>API Client IP</strong> (Optional)</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>
