> ## 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 HubSpot with Private App Access Token – StackOne Hub

> Link a HubSpot account in the StackOne Hub using Private App Access Token. End-user guide to authorize the integration and start using HubSpot actions.

<Panel>
  <div className="not-prose guides-scope-selector" data-guides-scope-selector data-guide-actions-json="[{&#x22;id&#x22;:&#x22;hubspot_list_associations&#x22;,&#x22;label&#x22;:&#x22;List Associations&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_create_association&#x22;,&#x22;label&#x22;:&#x22;Create Association&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_delete_association&#x22;,&#x22;label&#x22;:&#x22;Delete Association&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_batch_read_associations&#x22;,&#x22;label&#x22;:&#x22;Batch Read Associations&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_batch_create_associations&#x22;,&#x22;label&#x22;:&#x22;Batch Create Associations&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_contacts&#x22;,&#x22;label&#x22;:&#x22;List Contacts&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_get_contact&#x22;,&#x22;label&#x22;:&#x22;Get Contact&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_create_contact&#x22;,&#x22;label&#x22;:&#x22;Create Contact&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_update_contact&#x22;,&#x22;label&#x22;:&#x22;Update Contact&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_delete_contact&#x22;,&#x22;label&#x22;:&#x22;Delete Contact&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_search_contacts&#x22;,&#x22;label&#x22;:&#x22;Search Contacts&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_batch_create_contacts&#x22;,&#x22;label&#x22;:&#x22;Batch Create Contacts&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_batch_update_contacts&#x22;,&#x22;label&#x22;:&#x22;Batch Update Contacts&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_companies&#x22;,&#x22;label&#x22;:&#x22;List Companies&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.companies.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_get_company&#x22;,&#x22;label&#x22;:&#x22;Get Company&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.companies.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_create_company&#x22;,&#x22;label&#x22;:&#x22;Create Company&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.companies.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_update_company&#x22;,&#x22;label&#x22;:&#x22;Update Company&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.companies.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_delete_company&#x22;,&#x22;label&#x22;:&#x22;Delete Company&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.companies.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_search_companies&#x22;,&#x22;label&#x22;:&#x22;Search Companies&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.companies.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_batch_create_companies&#x22;,&#x22;label&#x22;:&#x22;Batch Create Companies&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.companies.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_batch_update_companies&#x22;,&#x22;label&#x22;:&#x22;Batch Update Companies&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.companies.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_deals&#x22;,&#x22;label&#x22;:&#x22;List Deals&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_get_deal&#x22;,&#x22;label&#x22;:&#x22;Get Deal&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_create_deal&#x22;,&#x22;label&#x22;:&#x22;Create Deal&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_update_deal&#x22;,&#x22;label&#x22;:&#x22;Update Deal&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_delete_deal&#x22;,&#x22;label&#x22;:&#x22;Delete Deal&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_search_deals&#x22;,&#x22;label&#x22;:&#x22;Search Deals&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_batch_create_deals&#x22;,&#x22;label&#x22;:&#x22;Batch Create Deals&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_batch_update_deals&#x22;,&#x22;label&#x22;:&#x22;Batch Update Deals&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_deal_pipelines&#x22;,&#x22;label&#x22;:&#x22;List Deal Pipelines&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_get_deal_pipeline&#x22;,&#x22;label&#x22;:&#x22;Get Deal Pipeline&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_create_deal_pipeline&#x22;,&#x22;label&#x22;:&#x22;Create Deal Pipeline&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_update_deal_pipeline&#x22;,&#x22;label&#x22;:&#x22;Update Deal Pipeline&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_deal_pipeline_stages&#x22;,&#x22;label&#x22;:&#x22;List Deal Pipeline Stages&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_get_deal_pipeline_stage&#x22;,&#x22;label&#x22;:&#x22;Get Deal Pipeline Stage&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_create_deal_pipeline_stage&#x22;,&#x22;label&#x22;:&#x22;Create Deal Pipeline Stage&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_update_deal_pipeline_stage&#x22;,&#x22;label&#x22;:&#x22;Update Deal Pipeline Stage&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.deals.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_owners&#x22;,&#x22;label&#x22;:&#x22;List Owners&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.owners.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_get_owner&#x22;,&#x22;label&#x22;:&#x22;Get Owner&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.owners.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_crm_objects&#x22;,&#x22;label&#x22;:&#x22;List CRM Objects&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.read&#x22;,&#x22;crm.objects.companies.read&#x22;,&#x22;crm.objects.deals.read&#x22;,&#x22;crm.objects.custom.read&#x22;,&#x22;tickets&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_get_crm_object&#x22;,&#x22;label&#x22;:&#x22;Get CRM Object&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.read&#x22;,&#x22;crm.objects.companies.read&#x22;,&#x22;crm.objects.deals.read&#x22;,&#x22;crm.objects.custom.read&#x22;,&#x22;tickets&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_create_crm_object&#x22;,&#x22;label&#x22;:&#x22;Create CRM Object&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.write&#x22;,&#x22;crm.objects.companies.write&#x22;,&#x22;crm.objects.deals.write&#x22;,&#x22;crm.objects.custom.write&#x22;,&#x22;tickets&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_update_crm_object&#x22;,&#x22;label&#x22;:&#x22;Update CRM Object&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.write&#x22;,&#x22;crm.objects.companies.write&#x22;,&#x22;crm.objects.deals.write&#x22;,&#x22;crm.objects.custom.write&#x22;,&#x22;tickets&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_delete_crm_object&#x22;,&#x22;label&#x22;:&#x22;Delete CRM Object&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.contacts.write&#x22;,&#x22;crm.objects.companies.write&#x22;,&#x22;crm.objects.deals.write&#x22;,&#x22;crm.objects.custom.write&#x22;,&#x22;tickets&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_get_object_properties&#x22;,&#x22;label&#x22;:&#x22;Get Object Properties&#x22;,&#x22;scopes&#x22;:[&#x22;crm.schemas.custom.read&#x22;,&#x22;crm.objects.contacts.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_custom_object_schemas&#x22;,&#x22;label&#x22;:&#x22;List Custom Object Schemas&#x22;,&#x22;scopes&#x22;:[&#x22;crm.schemas.custom.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_get_custom_object_schema&#x22;,&#x22;label&#x22;:&#x22;Get Custom Object Schema&#x22;,&#x22;scopes&#x22;:[&#x22;crm.schemas.custom.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_create_custom_object_schema&#x22;,&#x22;label&#x22;:&#x22;Create Custom Object Schema&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.custom.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_create_custom_object_association&#x22;,&#x22;label&#x22;:&#x22;Create Custom Object Association&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.custom.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_update_custom_object_schema&#x22;,&#x22;label&#x22;:&#x22;Update Custom Object Schema&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.custom.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_delete_custom_object_schema&#x22;,&#x22;label&#x22;:&#x22;Delete Custom Object Schema&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.custom.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_delete_custom_object_association&#x22;,&#x22;label&#x22;:&#x22;Delete Custom Object Association&#x22;,&#x22;scopes&#x22;:[&#x22;crm.objects.custom.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_unified_list_groups&#x22;,&#x22;label&#x22;:&#x22;List Unified Groups&#x22;,&#x22;scopes&#x22;:[&#x22;settings.users.teams.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_unified_get_group&#x22;,&#x22;label&#x22;:&#x22;Get Unified Group&#x22;,&#x22;scopes&#x22;:[&#x22;settings.users.teams.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_unified_list_roles&#x22;,&#x22;label&#x22;:&#x22;List Unified Roles&#x22;,&#x22;scopes&#x22;:[&#x22;settings.users.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_unified_get_role&#x22;,&#x22;label&#x22;:&#x22;Get Unified Role&#x22;,&#x22;scopes&#x22;:[&#x22;settings.users.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_unified_list_users&#x22;,&#x22;label&#x22;:&#x22;List Unified Users&#x22;,&#x22;scopes&#x22;:[&#x22;settings.users.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_unified_get_user&#x22;,&#x22;label&#x22;:&#x22;Get Unified User&#x22;,&#x22;scopes&#x22;:[&#x22;settings.users.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_campaigns&#x22;,&#x22;label&#x22;:&#x22;List Campaigns&#x22;,&#x22;scopes&#x22;:[&#x22;marketing.campaigns.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_get_campaign&#x22;,&#x22;label&#x22;:&#x22;Get Campaign&#x22;,&#x22;scopes&#x22;:[&#x22;marketing.campaigns.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_create_campaign&#x22;,&#x22;label&#x22;:&#x22;Create Campaign&#x22;,&#x22;scopes&#x22;:[&#x22;marketing.campaigns.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_update_campaign&#x22;,&#x22;label&#x22;:&#x22;Update Campaign&#x22;,&#x22;scopes&#x22;:[&#x22;marketing.campaigns.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_delete_campaign&#x22;,&#x22;label&#x22;:&#x22;Delete Campaign&#x22;,&#x22;scopes&#x22;:[&#x22;marketing.campaigns.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_campaign_assets&#x22;,&#x22;label&#x22;:&#x22;List Campaign Assets&#x22;,&#x22;scopes&#x22;:[&#x22;marketing.campaigns.read&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_add_campaign_asset&#x22;,&#x22;label&#x22;:&#x22;Add Asset To Campaign&#x22;,&#x22;scopes&#x22;:[&#x22;marketing.campaigns.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_remove_campaign_asset&#x22;,&#x22;label&#x22;:&#x22;Remove Asset From Campaign&#x22;,&#x22;scopes&#x22;:[&#x22;marketing.campaigns.write&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_marketing_emails&#x22;,&#x22;label&#x22;:&#x22;List Marketing Emails&#x22;,&#x22;scopes&#x22;:[&#x22;content&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_get_marketing_email&#x22;,&#x22;label&#x22;:&#x22;Get Marketing Email&#x22;,&#x22;scopes&#x22;:[&#x22;content&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_create_marketing_email&#x22;,&#x22;label&#x22;:&#x22;Create Marketing Email&#x22;,&#x22;scopes&#x22;:[&#x22;content&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_update_marketing_email&#x22;,&#x22;label&#x22;:&#x22;Update Marketing Email&#x22;,&#x22;scopes&#x22;:[&#x22;content&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_delete_marketing_email&#x22;,&#x22;label&#x22;:&#x22;Delete Marketing Email&#x22;,&#x22;scopes&#x22;:[&#x22;content&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_clone_marketing_email&#x22;,&#x22;label&#x22;:&#x22;Clone Marketing Email&#x22;,&#x22;scopes&#x22;:[&#x22;content&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_publish_marketing_email&#x22;,&#x22;label&#x22;:&#x22;Publish Marketing Email&#x22;,&#x22;scopes&#x22;:[&#x22;content&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_forms&#x22;,&#x22;label&#x22;:&#x22;List Forms&#x22;,&#x22;scopes&#x22;:[&#x22;forms&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_get_form&#x22;,&#x22;label&#x22;:&#x22;Get Form&#x22;,&#x22;scopes&#x22;:[&#x22;forms&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_form_submissions&#x22;,&#x22;label&#x22;:&#x22;List Form Submissions&#x22;,&#x22;scopes&#x22;:[&#x22;forms&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_tickets&#x22;,&#x22;label&#x22;:&#x22;List Tickets&#x22;,&#x22;scopes&#x22;:[&#x22;tickets&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_get_ticket&#x22;,&#x22;label&#x22;:&#x22;Get Ticket&#x22;,&#x22;scopes&#x22;:[&#x22;tickets&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_create_ticket&#x22;,&#x22;label&#x22;:&#x22;Create Ticket&#x22;,&#x22;scopes&#x22;:[&#x22;tickets&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_update_ticket&#x22;,&#x22;label&#x22;:&#x22;Update Ticket&#x22;,&#x22;scopes&#x22;:[&#x22;tickets&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_delete_ticket&#x22;,&#x22;label&#x22;:&#x22;Delete Ticket&#x22;,&#x22;scopes&#x22;:[&#x22;tickets&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_search_tickets&#x22;,&#x22;label&#x22;:&#x22;Search Tickets&#x22;,&#x22;scopes&#x22;:[&#x22;tickets&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_ticket_pipelines&#x22;,&#x22;label&#x22;:&#x22;List Ticket Pipelines&#x22;,&#x22;scopes&#x22;:[&#x22;tickets&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_get_ticket_pipeline&#x22;,&#x22;label&#x22;:&#x22;Get Ticket Pipeline&#x22;,&#x22;scopes&#x22;:[&#x22;tickets&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_list_ticket_pipeline_stages&#x22;,&#x22;label&#x22;:&#x22;List Ticket Pipeline Stages&#x22;,&#x22;scopes&#x22;:[&#x22;tickets&#x22;]},{&#x22;id&#x22;:&#x22;hubspot_get_ticket_pipeline_stage&#x22;,&#x22;label&#x22;:&#x22;Get Ticket Pipeline Stage&#x22;,&#x22;scopes&#x22;:[&#x22;tickets&#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 HubSpot Private App</h2>

  <p>Generate a private app access token from your HubSpot account. Private apps are now managed under <strong>Development > Legacy Apps</strong>; the older <strong>Settings > Integrations > Private Apps</strong> path now redirects there.</p>

  <Steps>
    <Step title="Navigate to Legacy Apps">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Open your HubSpot account and click <strong>Development</strong> in the left sidebar (it appears as its own top-level item in the main navigation, near the bottom).</p>

        <ul>
          <li>Within the Development section, click <strong>Legacy Apps</strong>. The list shows existing Public and Private legacy apps; only the Private ones expose an Access Token (PAT).</li>
          <li>Click <strong>Create legacy app</strong> in the upper right of the Legacy Apps page.</li>
        </ul>
      </div>
    </Step>

    <Step title="Pick Private and confirm the legacy path">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>HubSpot now shows two confirmation modals before letting you create a legacy private app — it actively recommends the modern Service Keys path instead.</p>

        <ul>
          <li>In the first modal ("What kind of legacy app do you want to create?"), click <strong>Private</strong> (For one account). The <strong>Public</strong> option is for OAuth apps, not PATs.</li>
          <li>HubSpot then shows a "Service Keys are the better path" screen. Service Keys are not yet supported by the StackOne connector, so to continue with the PAT flow tick <strong>"I understand that legacy private apps have limited functionality and won't receive future platform updates."</strong> and click <strong>Continue with legacy private app</strong>.</li>
        </ul>
      </div>
    </Step>

    <Step title="Fill in Basic info">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>The app creation page has three tabs across the top — <strong>Basic info</strong>, <strong>Scopes</strong>, <strong>Webhooks</strong>. Start on <strong>Basic info</strong>.</p>

        <ul>
          <li>Enter a <strong>Name</strong> (e.g., "StackOne Integration"). The name must be unique within the portal.</li>
          <li>Optionally upload a square logo and add a description — both are cosmetic.</li>
        </ul>
      </div>
    </Step>

    <Step title="Add scopes">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Switch to the <strong>Scopes</strong> tab and click <strong>+ Add new scope</strong> to add each scope you need. The scope picker is search-based — type a keyword like `companies` or `contacts` to filter, then tick the scopes from the search results.</p>

        <ul>
          <li>Only add the scopes required by the StackOne actions you plan to call — the connector enforces scope requirements per action at runtime, so a PAT missing a scope causes the affected action to fail with `403 Forbidden`.</li>
          <li>For Companies coverage: add `crm.objects.companies.read` and `crm.objects.companies.write`. For association support: also add `crm.objects.contacts.read` (and `crm.objects.contacts.write` if you'll create contacts in the same flow).</li>
          <li>For property discovery (used by `get_object_properties` and to manage custom properties on standard objects), HubSpot exposes `crm.schemas.companies.read`/`.write`, `crm.schemas.contacts.read`/`.write`, etc. These are HubSpot-side scopes only — they don't appear in this connector's `scopeDefinitions`.</li>
          <li>The <strong>Webhooks</strong> tab on this app is optional and can be configured later — leave it for now unless you plan to deliver events through this PAT.</li>
          <li>See <a href="https://developers.hubspot.com/docs/api/scopes" target="_blank" rel="noopener noreferrer">HubSpot scopes documentation</a> for the full list of available scopes (including ones not modeled by this connector).</li>
        </ul>
      </div>
    </Step>

    <Step title="Scopes used by this connector">
      <div data-guide-step data-guide-scopes="crm.objects.contacts.read,crm.objects.contacts.write,crm.objects.companies.read,crm.objects.companies.write,crm.objects.deals.read,crm.objects.deals.write,crm.objects.owners.read,crm.objects.custom.read,crm.objects.custom.write,crm.schemas.custom.read,forms,marketing.campaigns.read,marketing.campaigns.write,content,tickets" data-guide-display-scopes-list="crm.objects.contacts.read,crm.objects.contacts.write,crm.objects.companies.read,crm.objects.companies.write,crm.objects.deals.read,crm.objects.deals.write,crm.objects.owners.read,crm.objects.custom.read,crm.objects.custom.write,crm.schemas.custom.read,forms,marketing.campaigns.read,marketing.campaigns.write,content,tickets">
        <div className="connector-guide-actions-badge" data-guide-actions-badge data-guide-actions-badge-scopes="crm.objects.contacts.read,crm.objects.contacts.write,crm.objects.companies.read,crm.objects.companies.write,crm.objects.deals.read,crm.objects.deals.write,crm.objects.owners.read,crm.objects.custom.read,crm.objects.custom.write,crm.schemas.custom.read,forms,marketing.campaigns.read,marketing.campaigns.write,content,tickets" 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 Asset To Campaign, Batch Create Associations, Batch Create Companies, Batch Create Contacts, Batch Create Deals, Batch Read Associations, Batch Update Companies, Batch Update Contacts, Batch Update Deals, Clone Marketing Email, Create Association, Create CRM Object, Create Campaign, Create Company, Create Contact, Create Custom Object Association, Create Custom Object Schema, Create Deal, Create Deal Pipeline, Create Deal Pipeline Stage, Create Marketing Email, Create Ticket, Delete Association, Delete CRM Object, Delete Campaign, Delete Company, Delete Contact, Delete Custom Object Association, Delete Custom Object Schema, Delete Deal, Delete Marketing Email, Delete Ticket, Get CRM Object, Get Campaign, Get Company, Get Contact, Get Custom Object Schema, Get Deal, Get Deal Pipeline, Get Deal Pipeline Stage, Get Form, Get Marketing Email, Get Object Properties, Get Owner, Get Ticket, Get Ticket Pipeline, Get Ticket Pipeline Stage, List Associations, List CRM Objects, List Campaign Assets, List Campaigns, List Companies, List Contacts, List Custom Object Schemas, List Deal Pipeline Stages, List Deal Pipelines, List Deals, List Form Submissions, List Forms, List Marketing Emails, List Owners, List Ticket Pipeline Stages, List Ticket Pipelines, List Tickets, Publish Marketing Email, Remove Asset From Campaign, Search Companies, Search Contacts, Search Deals, Search Tickets, Update CRM Object, Update Campaign, Update Company, Update Contact, Update Custom Object Schema, Update Deal, Update Deal Pipeline, Update Deal Pipeline Stage, Update Marketing Email, Update Ticket</span>
        </div>

        <p>Below is the full set of HubSpot scopes that the StackOne HubSpot connector actions reference. Add the subset that matches the actions you intend to call — there is no "request only what you need" runtime behavior for PATs like there is for OAuth optional scopes; whatever you tick here becomes the static permission boundary of the token.</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="crm.objects.contacts.read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy crm.objects.contacts.read" title="Copy scope" data-copy="crm.objects.contacts.read">
                  <span className="connector-guide-scope-copy__label">crm.objects.contacts.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="crm.objects.contacts.write">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy crm.objects.contacts.write" title="Copy scope" data-copy="crm.objects.contacts.write">
                  <span className="connector-guide-scope-copy__label">crm.objects.contacts.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="crm.objects.companies.read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy crm.objects.companies.read" title="Copy scope" data-copy="crm.objects.companies.read">
                  <span className="connector-guide-scope-copy__label">crm.objects.companies.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="crm.objects.companies.write">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy crm.objects.companies.write" title="Copy scope" data-copy="crm.objects.companies.write">
                  <span className="connector-guide-scope-copy__label">crm.objects.companies.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="crm.objects.deals.read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy crm.objects.deals.read" title="Copy scope" data-copy="crm.objects.deals.read">
                  <span className="connector-guide-scope-copy__label">crm.objects.deals.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="crm.objects.deals.write">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy crm.objects.deals.write" title="Copy scope" data-copy="crm.objects.deals.write">
                  <span className="connector-guide-scope-copy__label">crm.objects.deals.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="crm.objects.owners.read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy crm.objects.owners.read" title="Copy scope" data-copy="crm.objects.owners.read">
                  <span className="connector-guide-scope-copy__label">crm.objects.owners.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="crm.objects.custom.read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy crm.objects.custom.read" title="Copy scope" data-copy="crm.objects.custom.read">
                  <span className="connector-guide-scope-copy__label">crm.objects.custom.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="crm.objects.custom.write">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy crm.objects.custom.write" title="Copy scope" data-copy="crm.objects.custom.write">
                  <span className="connector-guide-scope-copy__label">crm.objects.custom.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="crm.schemas.custom.read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy crm.schemas.custom.read" title="Copy scope" data-copy="crm.schemas.custom.read">
                  <span className="connector-guide-scope-copy__label">crm.schemas.custom.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="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="marketing.campaigns.read">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy marketing.campaigns.read" title="Copy scope" data-copy="marketing.campaigns.read">
                  <span className="connector-guide-scope-copy__label">marketing.campaigns.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="marketing.campaigns.write">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy marketing.campaigns.write" title="Copy scope" data-copy="marketing.campaigns.write">
                  <span className="connector-guide-scope-copy__label">marketing.campaigns.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="content">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy content" title="Copy scope" data-copy="content">
                  <span className="connector-guide-scope-copy__label">content</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="tickets">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy tickets" title="Copy scope" data-copy="tickets">
                  <span className="connector-guide-scope-copy__label">tickets</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>
            </ul>
          </div>
        </div>
      </div>
    </Step>

    <Step title="Create the app and copy the access token">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Click <strong>Create app</strong> in the top right of the editor and confirm in the dialog.</p>

        <ul>
          <li>After creation you land on the app detail page. Click the <strong>Auth</strong> tab.</li>
          <li>In the <strong>Access token</strong> section, click <strong>Show token</strong> then <strong>Copy</strong>. This is the value to paste into the StackOne "Private App Access Token" field below.</li>
          <li>The token begins with `pat-na1-` (US) or `pat-eu1-` (EU) depending on your portal region.</li>
          <li>The Auth tab also shows a <strong>Client secret</strong> — StackOne uses bearer-token auth only and does <strong>not</strong> use the client secret, so you can ignore it.</li>
          <li>The token can be re-revealed from this Auth tab anytime, or rotated via the <strong>Rotate</strong> button next to the token (rotating immediately invalidates the previous token).</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>Private App 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>
