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

# Azure DevOps OAuth 2.0 (Microsoft Entra ID) connector profile – StackOne setup guide

> Set up the OAuth 2.0 (Microsoft Entra ID) connector profile for Azure DevOps in StackOne. One-time admin setup required before your users can link Azure DevOps accounts via Hub.

<Warning>You need permission to register applications in your Microsoft Entra ID tenant, and administrator rights to grant admin consent. Note: end users cannot grant consent to newly registered multitenant apps without verified publishers.</Warning>

<Panel>
  <div className="not-prose guides-scope-selector" data-guides-scope-selector data-guide-actions-json="[{&#x22;id&#x22;:&#x22;azuredevops_list_projects&#x22;,&#x22;label&#x22;:&#x22;List Projects&#x22;,&#x22;scopes&#x22;:[&#x22;vso.project&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_project&#x22;,&#x22;label&#x22;:&#x22;Get Project&#x22;,&#x22;scopes&#x22;:[&#x22;vso.project&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_update_project&#x22;,&#x22;label&#x22;:&#x22;Update Project&#x22;,&#x22;scopes&#x22;:[&#x22;vso.project_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_project_properties&#x22;,&#x22;label&#x22;:&#x22;Get Project Properties&#x22;,&#x22;scopes&#x22;:[&#x22;vso.project&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_set_project_properties&#x22;,&#x22;label&#x22;:&#x22;Set Project Properties&#x22;,&#x22;scopes&#x22;:[&#x22;vso.project_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_create_project&#x22;,&#x22;label&#x22;:&#x22;Create Project&#x22;,&#x22;scopes&#x22;:[&#x22;vso.project_manage&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_delete_project&#x22;,&#x22;label&#x22;:&#x22;Delete Project&#x22;,&#x22;scopes&#x22;:[&#x22;vso.project_manage&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_query_work_items&#x22;,&#x22;label&#x22;:&#x22;Query Work Items (WIQL)&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_work_item&#x22;,&#x22;label&#x22;:&#x22;Get Work Item&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_work_items_by_ids&#x22;,&#x22;label&#x22;:&#x22;List Work Items By IDs&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_create_work_item&#x22;,&#x22;label&#x22;:&#x22;Create Work Item&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_update_work_item&#x22;,&#x22;label&#x22;:&#x22;Update Work Item&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_delete_work_item&#x22;,&#x22;label&#x22;:&#x22;Delete Work Item&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work_full&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_work_item_types&#x22;,&#x22;label&#x22;:&#x22;List Work Item Types&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_work_item_type&#x22;,&#x22;label&#x22;:&#x22;Get Work Item Type&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_fields&#x22;,&#x22;label&#x22;:&#x22;List Fields&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_work_item_type_fields&#x22;,&#x22;label&#x22;:&#x22;List Work Item Type Fields&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_work_item_relation_types&#x22;,&#x22;label&#x22;:&#x22;List Work Item Relation Types&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_work_item_revisions&#x22;,&#x22;label&#x22;:&#x22;List Work Item Revisions&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_work_item_updates&#x22;,&#x22;label&#x22;:&#x22;List Work Item Updates&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_work_item_comments&#x22;,&#x22;label&#x22;:&#x22;List Work Item Comments&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_work_item_comment&#x22;,&#x22;label&#x22;:&#x22;Get Work Item Comment&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_add_work_item_comment&#x22;,&#x22;label&#x22;:&#x22;Add Work Item Comment&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_update_work_item_comment&#x22;,&#x22;label&#x22;:&#x22;Update Work Item Comment&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_delete_work_item_comment&#x22;,&#x22;label&#x22;:&#x22;Delete Work Item Comment&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_upload_attachment&#x22;,&#x22;label&#x22;:&#x22;Upload Attachment&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_download_attachment&#x22;,&#x22;label&#x22;:&#x22;Download Attachment&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_work_item_tags&#x22;,&#x22;label&#x22;:&#x22;List Work Item Tags&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_work_item_tag&#x22;,&#x22;label&#x22;:&#x22;Get Work Item Tag&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_update_work_item_tag&#x22;,&#x22;label&#x22;:&#x22;Update Work Item Tag&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_delete_work_item_tag&#x22;,&#x22;label&#x22;:&#x22;Delete Work Item Tag&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_queries&#x22;,&#x22;label&#x22;:&#x22;List Queries&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_query&#x22;,&#x22;label&#x22;:&#x22;Get Query&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_create_query&#x22;,&#x22;label&#x22;:&#x22;Create Query&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_update_query&#x22;,&#x22;label&#x22;:&#x22;Update Query&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_delete_query&#x22;,&#x22;label&#x22;:&#x22;Delete Query&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_search_queries&#x22;,&#x22;label&#x22;:&#x22;Search Queries&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_classification_nodes&#x22;,&#x22;label&#x22;:&#x22;Get Classification Nodes&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_create_classification_node&#x22;,&#x22;label&#x22;:&#x22;Create Classification Node&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_update_classification_node&#x22;,&#x22;label&#x22;:&#x22;Update Classification Node&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_delete_classification_node&#x22;,&#x22;label&#x22;:&#x22;Delete Classification Node&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_repositories&#x22;,&#x22;label&#x22;:&#x22;List Repositories&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_repository&#x22;,&#x22;label&#x22;:&#x22;Get Repository&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_create_repository&#x22;,&#x22;label&#x22;:&#x22;Create Repository&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code_manage&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_delete_repository&#x22;,&#x22;label&#x22;:&#x22;Delete Repository&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code_manage&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_pull_requests&#x22;,&#x22;label&#x22;:&#x22;List Pull Requests&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_pull_request&#x22;,&#x22;label&#x22;:&#x22;Get Pull Request&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_create_pull_request&#x22;,&#x22;label&#x22;:&#x22;Create Pull Request&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_update_pull_request&#x22;,&#x22;label&#x22;:&#x22;Update Pull Request&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_pull_request_threads&#x22;,&#x22;label&#x22;:&#x22;List Pull Request Threads&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_create_pull_request_thread&#x22;,&#x22;label&#x22;:&#x22;Create Pull Request Thread&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_pull_request_reviewers&#x22;,&#x22;label&#x22;:&#x22;List Pull Request Reviewers&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_create_pull_request_reviewer&#x22;,&#x22;label&#x22;:&#x22;Create Pull Request Reviewer&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_pull_request_commits&#x22;,&#x22;label&#x22;:&#x22;List Pull Request Commits&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_pull_request_work_items&#x22;,&#x22;label&#x22;:&#x22;List Pull Request Work Items&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_pull_request_labels&#x22;,&#x22;label&#x22;:&#x22;List Pull Request Labels&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_create_pull_request_label&#x22;,&#x22;label&#x22;:&#x22;Add Pull Request Label&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_pull_request_iterations&#x22;,&#x22;label&#x22;:&#x22;List Pull Request Iterations&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_pull_request_statuses&#x22;,&#x22;label&#x22;:&#x22;List Pull Request Statuses&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_create_pull_request_status&#x22;,&#x22;label&#x22;:&#x22;Create Pull Request Status&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_pull_requests_by_project&#x22;,&#x22;label&#x22;:&#x22;Get Pull Requests By Project&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_update_pull_request_thread&#x22;,&#x22;label&#x22;:&#x22;Update Pull Request Thread&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_delete_pull_request_reviewer&#x22;,&#x22;label&#x22;:&#x22;Delete Pull Request Reviewer&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_update_pull_request_reviewer&#x22;,&#x22;label&#x22;:&#x22;Update Pull Request Reviewer&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_item&#x22;,&#x22;label&#x22;:&#x22;Get Item&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_items&#x22;,&#x22;label&#x22;:&#x22;List Items&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_tree&#x22;,&#x22;label&#x22;:&#x22;Get Tree&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_pushes&#x22;,&#x22;label&#x22;:&#x22;List Pushes&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_create_push&#x22;,&#x22;label&#x22;:&#x22;Create Push&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_update_refs&#x22;,&#x22;label&#x22;:&#x22;Update Refs&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_update_repository&#x22;,&#x22;label&#x22;:&#x22;Update Repository&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_forks&#x22;,&#x22;label&#x22;:&#x22;List Forks&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_merge_bases&#x22;,&#x22;label&#x22;:&#x22;List Merge Bases&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_refs&#x22;,&#x22;label&#x22;:&#x22;List Refs&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_branch_stats&#x22;,&#x22;label&#x22;:&#x22;List Branch Statistics&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_commits&#x22;,&#x22;label&#x22;:&#x22;List Commits&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_commit&#x22;,&#x22;label&#x22;:&#x22;Get Commit&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_pipelines&#x22;,&#x22;label&#x22;:&#x22;List Pipelines&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_pipeline&#x22;,&#x22;label&#x22;:&#x22;Get Pipeline&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_run_pipeline&#x22;,&#x22;label&#x22;:&#x22;Run Pipeline&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build_execute&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_create_pipeline&#x22;,&#x22;label&#x22;:&#x22;Create Pipeline&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build_execute&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_pipeline_runs&#x22;,&#x22;label&#x22;:&#x22;List Pipeline Runs&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_pipeline_run&#x22;,&#x22;label&#x22;:&#x22;Get Pipeline Run&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_pipeline_logs&#x22;,&#x22;label&#x22;:&#x22;List Pipeline Logs&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_pipeline_log&#x22;,&#x22;label&#x22;:&#x22;Get Pipeline Log&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_pipeline_artifact&#x22;,&#x22;label&#x22;:&#x22;Get Pipeline Artifact&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_preview_pipeline&#x22;,&#x22;label&#x22;:&#x22;Preview Pipeline&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_builds&#x22;,&#x22;label&#x22;:&#x22;List Builds&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_build&#x22;,&#x22;label&#x22;:&#x22;Get Build&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_build_definitions&#x22;,&#x22;label&#x22;:&#x22;List Build Definitions&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_create_build_definition&#x22;,&#x22;label&#x22;:&#x22;Create Build Definition&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build_execute&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_build_definition&#x22;,&#x22;label&#x22;:&#x22;Get Build Definition&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_build_logs&#x22;,&#x22;label&#x22;:&#x22;Get Build Logs&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_queue_build&#x22;,&#x22;label&#x22;:&#x22;Queue Build&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build_execute&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_build_timeline&#x22;,&#x22;label&#x22;:&#x22;Get Build Timeline&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_build_artifacts&#x22;,&#x22;label&#x22;:&#x22;List Build Artifacts&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_add_build_tag&#x22;,&#x22;label&#x22;:&#x22;Add Build Tag&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build_execute&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_build_log&#x22;,&#x22;label&#x22;:&#x22;Get Build Log&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_build_tags&#x22;,&#x22;label&#x22;:&#x22;List Build Tags&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_build_changes&#x22;,&#x22;label&#x22;:&#x22;Get Build Changes&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_build_work_items&#x22;,&#x22;label&#x22;:&#x22;Get Build Work Items&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_release_definitions&#x22;,&#x22;label&#x22;:&#x22;List Release Definitions&#x22;,&#x22;scopes&#x22;:[&#x22;vso.release&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_releases&#x22;,&#x22;label&#x22;:&#x22;List Releases&#x22;,&#x22;scopes&#x22;:[&#x22;vso.release&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_deployments&#x22;,&#x22;label&#x22;:&#x22;List Deployments&#x22;,&#x22;scopes&#x22;:[&#x22;vso.release&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_release&#x22;,&#x22;label&#x22;:&#x22;Get Release&#x22;,&#x22;scopes&#x22;:[&#x22;vso.release&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_create_release&#x22;,&#x22;label&#x22;:&#x22;Create Release&#x22;,&#x22;scopes&#x22;:[&#x22;vso.release_execute&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_create_release_definition&#x22;,&#x22;label&#x22;:&#x22;Create Release Definition&#x22;,&#x22;scopes&#x22;:[&#x22;vso.release_execute&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_teams&#x22;,&#x22;label&#x22;:&#x22;List Teams&#x22;,&#x22;scopes&#x22;:[&#x22;vso.project&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_team&#x22;,&#x22;label&#x22;:&#x22;Get Team&#x22;,&#x22;scopes&#x22;:[&#x22;vso.project&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_team_members&#x22;,&#x22;label&#x22;:&#x22;List Team Members&#x22;,&#x22;scopes&#x22;:[&#x22;vso.project&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_create_team&#x22;,&#x22;label&#x22;:&#x22;Create Team&#x22;,&#x22;scopes&#x22;:[&#x22;vso.project_manage&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_update_team&#x22;,&#x22;label&#x22;:&#x22;Update Team&#x22;,&#x22;scopes&#x22;:[&#x22;vso.project_manage&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_delete_team&#x22;,&#x22;label&#x22;:&#x22;Delete Team&#x22;,&#x22;scopes&#x22;:[&#x22;vso.project_manage&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_iterations&#x22;,&#x22;label&#x22;:&#x22;List Iterations&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_iteration&#x22;,&#x22;label&#x22;:&#x22;Get Iteration&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_iteration_work_items&#x22;,&#x22;label&#x22;:&#x22;List Iteration Work Items&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_backlogs&#x22;,&#x22;label&#x22;:&#x22;List Backlogs&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_backlog&#x22;,&#x22;label&#x22;:&#x22;Get Backlog&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_boards&#x22;,&#x22;label&#x22;:&#x22;List Boards&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_users&#x22;,&#x22;label&#x22;:&#x22;List Users&#x22;,&#x22;scopes&#x22;:[&#x22;vso.graph&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_user&#x22;,&#x22;label&#x22;:&#x22;Get User&#x22;,&#x22;scopes&#x22;:[&#x22;vso.graph&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_entitlements&#x22;,&#x22;label&#x22;:&#x22;List User Entitlements&#x22;,&#x22;scopes&#x22;:[&#x22;vso.graph&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_user_entitlement&#x22;,&#x22;label&#x22;:&#x22;Get User Entitlement&#x22;,&#x22;scopes&#x22;:[&#x22;vso.graph&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_groups&#x22;,&#x22;label&#x22;:&#x22;List Groups&#x22;,&#x22;scopes&#x22;:[&#x22;vso.graph&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_memberships&#x22;,&#x22;label&#x22;:&#x22;List Memberships&#x22;,&#x22;scopes&#x22;:[&#x22;vso.graph&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_add_user_entitlement&#x22;,&#x22;label&#x22;:&#x22;Add User Entitlement&#x22;,&#x22;scopes&#x22;:[&#x22;vso.graph&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_update_user_entitlement&#x22;,&#x22;label&#x22;:&#x22;Update User Entitlement&#x22;,&#x22;scopes&#x22;:[&#x22;vso.graph&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_delete_user_entitlement&#x22;,&#x22;label&#x22;:&#x22;Delete User Entitlement&#x22;,&#x22;scopes&#x22;:[&#x22;vso.graph&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_add_membership&#x22;,&#x22;label&#x22;:&#x22;Add Membership&#x22;,&#x22;scopes&#x22;:[&#x22;vso.graph&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_test_plans&#x22;,&#x22;label&#x22;:&#x22;List Test Plans&#x22;,&#x22;scopes&#x22;:[&#x22;vso.test&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_test_runs&#x22;,&#x22;label&#x22;:&#x22;List Test Runs&#x22;,&#x22;scopes&#x22;:[&#x22;vso.test&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_test_results&#x22;,&#x22;label&#x22;:&#x22;List Test Results&#x22;,&#x22;scopes&#x22;:[&#x22;vso.test&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_search_code&#x22;,&#x22;label&#x22;:&#x22;Search Code&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_search_work_items&#x22;,&#x22;label&#x22;:&#x22;Search Work Items&#x22;,&#x22;scopes&#x22;:[&#x22;vso.work&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_wikis&#x22;,&#x22;label&#x22;:&#x22;List Wikis&#x22;,&#x22;scopes&#x22;:[&#x22;vso.wiki&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_wiki&#x22;,&#x22;label&#x22;:&#x22;Get Wiki&#x22;,&#x22;scopes&#x22;:[&#x22;vso.wiki&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_wiki_page&#x22;,&#x22;label&#x22;:&#x22;Get Wiki Page&#x22;,&#x22;scopes&#x22;:[&#x22;vso.wiki&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_create_or_update_wiki_page&#x22;,&#x22;label&#x22;:&#x22;Create Or Update Wiki Page&#x22;,&#x22;scopes&#x22;:[&#x22;vso.wiki_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_delete_wiki_page&#x22;,&#x22;label&#x22;:&#x22;Delete Wiki Page&#x22;,&#x22;scopes&#x22;:[&#x22;vso.wiki_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_create_wiki&#x22;,&#x22;label&#x22;:&#x22;Create Wiki&#x22;,&#x22;scopes&#x22;:[&#x22;vso.wiki_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_update_wiki&#x22;,&#x22;label&#x22;:&#x22;Update Wiki&#x22;,&#x22;scopes&#x22;:[&#x22;vso.wiki_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_delete_wiki&#x22;,&#x22;label&#x22;:&#x22;Delete Wiki&#x22;,&#x22;scopes&#x22;:[&#x22;vso.wiki_write&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_feeds&#x22;,&#x22;label&#x22;:&#x22;List Feeds&#x22;,&#x22;scopes&#x22;:[&#x22;vso.packaging&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_feed&#x22;,&#x22;label&#x22;:&#x22;Get Feed&#x22;,&#x22;scopes&#x22;:[&#x22;vso.packaging&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_create_feed&#x22;,&#x22;label&#x22;:&#x22;Create Feed&#x22;,&#x22;scopes&#x22;:[&#x22;vso.packaging&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_update_feed&#x22;,&#x22;label&#x22;:&#x22;Update Feed&#x22;,&#x22;scopes&#x22;:[&#x22;vso.packaging&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_feed_permissions&#x22;,&#x22;label&#x22;:&#x22;Get Feed Permissions&#x22;,&#x22;scopes&#x22;:[&#x22;vso.packaging&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_set_feed_permissions&#x22;,&#x22;label&#x22;:&#x22;Set Feed Permissions&#x22;,&#x22;scopes&#x22;:[&#x22;vso.packaging&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_service_hooks&#x22;,&#x22;label&#x22;:&#x22;List Service Hooks&#x22;,&#x22;scopes&#x22;:[&#x22;vso.hooks&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_create_service_hook&#x22;,&#x22;label&#x22;:&#x22;Create Service Hook&#x22;,&#x22;scopes&#x22;:[&#x22;vso.hooks&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_delete_service_hook&#x22;,&#x22;label&#x22;:&#x22;Delete Service Hook&#x22;,&#x22;scopes&#x22;:[&#x22;vso.hooks&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_replace_service_hook&#x22;,&#x22;label&#x22;:&#x22;Replace Service Hook&#x22;,&#x22;scopes&#x22;:[&#x22;vso.hooks&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_service_hook_notifications&#x22;,&#x22;label&#x22;:&#x22;List Service Hook Notifications&#x22;,&#x22;scopes&#x22;:[&#x22;vso.hooks&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_subscription&#x22;,&#x22;label&#x22;:&#x22;Get Subscription&#x22;,&#x22;scopes&#x22;:[&#x22;vso.hooks&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_service_endpoints&#x22;,&#x22;label&#x22;:&#x22;List Service Endpoints&#x22;,&#x22;scopes&#x22;:[&#x22;vso.profile&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_create_service_endpoint&#x22;,&#x22;label&#x22;:&#x22;Create Service Endpoint&#x22;,&#x22;scopes&#x22;:[&#x22;vso.profile&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_delete_service_endpoint&#x22;,&#x22;label&#x22;:&#x22;Delete Service Endpoint&#x22;,&#x22;scopes&#x22;:[&#x22;vso.profile&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_variable_groups&#x22;,&#x22;label&#x22;:&#x22;List Variable Groups&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_create_variable_group&#x22;,&#x22;label&#x22;:&#x22;Create Variable Group&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build_execute&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_update_variable_group&#x22;,&#x22;label&#x22;:&#x22;Update Variable Group&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build_execute&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_delete_variable_group&#x22;,&#x22;label&#x22;:&#x22;Delete Variable Group&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build_execute&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_environments&#x22;,&#x22;label&#x22;:&#x22;List Environments&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_environment&#x22;,&#x22;label&#x22;:&#x22;Get Environment&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_environment_deployment_records&#x22;,&#x22;label&#x22;:&#x22;List Environment Deployment Records&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_agent_pools&#x22;,&#x22;label&#x22;:&#x22;List Agent Pools&#x22;,&#x22;scopes&#x22;:[&#x22;vso.profile&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_agents&#x22;,&#x22;label&#x22;:&#x22;List Agents&#x22;,&#x22;scopes&#x22;:[&#x22;vso.profile&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_policy_configurations&#x22;,&#x22;label&#x22;:&#x22;List Policy Configurations&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_create_policy_configuration&#x22;,&#x22;label&#x22;:&#x22;Create Policy Configuration&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code_manage&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_update_policy_configuration&#x22;,&#x22;label&#x22;:&#x22;Update Policy Configuration&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code_manage&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_policy_evaluations&#x22;,&#x22;label&#x22;:&#x22;List Policy Evaluations&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_dashboards&#x22;,&#x22;label&#x22;:&#x22;List Dashboards&#x22;,&#x22;scopes&#x22;:[&#x22;vso.dashboards&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_create_dashboard_widget&#x22;,&#x22;label&#x22;:&#x22;Create Dashboard Widget&#x22;,&#x22;scopes&#x22;:[&#x22;vso.dashboards&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_agent_pool&#x22;,&#x22;label&#x22;:&#x22;Get Agent Pool&#x22;,&#x22;scopes&#x22;:[&#x22;vso.profile&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_create_environment&#x22;,&#x22;label&#x22;:&#x22;Create Environment&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_delete_environment&#x22;,&#x22;label&#x22;:&#x22;Delete Environment&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_variable_group&#x22;,&#x22;label&#x22;:&#x22;Get Variable Group&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_service_endpoint&#x22;,&#x22;label&#x22;:&#x22;Get Service Endpoint&#x22;,&#x22;scopes&#x22;:[&#x22;vso.profile&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_policy_configuration&#x22;,&#x22;label&#x22;:&#x22;Get Policy Configuration&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_approvals&#x22;,&#x22;label&#x22;:&#x22;List Approvals&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_update_approval&#x22;,&#x22;label&#x22;:&#x22;Update Approval&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build_execute&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_get_dashboard&#x22;,&#x22;label&#x22;:&#x22;Get Dashboard&#x22;,&#x22;scopes&#x22;:[&#x22;vso.dashboards&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_list_widgets&#x22;,&#x22;label&#x22;:&#x22;List Widgets&#x22;,&#x22;scopes&#x22;:[&#x22;vso.dashboards&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_update_service_endpoint&#x22;,&#x22;label&#x22;:&#x22;Update Service Endpoint&#x22;,&#x22;scopes&#x22;:[&#x22;vso.serviceendpoint_manage&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_update_environment&#x22;,&#x22;label&#x22;:&#x22;Update Environment&#x22;,&#x22;scopes&#x22;:[&#x22;vso.build_execute&#x22;]},{&#x22;id&#x22;:&#x22;azuredevops_delete_policy_configuration&#x22;,&#x22;label&#x22;:&#x22;Delete Policy Configuration&#x22;,&#x22;scopes&#x22;:[&#x22;vso.code_manage&#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>Register a Microsoft Entra ID application</h2>

  <p>Create an app registration in Microsoft Entra ID to enable OAuth 2.0 authentication with Azure DevOps.</p>

  <Steps>
    <Step title="Sign in to the Microsoft Entra admin center">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Open the <a href="https://entra.microsoft.com/" target="_blank" rel="noopener noreferrer">Microsoft Entra admin center</a> and sign in with your Microsoft work account.</p>

        <img src="https://mintcdn.com/stackone-60/y3JLAGTnfHYE9tQB/connectors/azuredevops/images/oauth2-setup-sign-in.png?fit=max&auto=format&n=y3JLAGTnfHYE9tQB&q=85&s=176fd767382b6cf71d8936630633739a" alt="Microsoft sign in page with the Email, phone, or Skype field and Next button" width="1280" height="800" data-path="connectors/azuredevops/images/oauth2-setup-sign-in.png" />
      </div>
    </Step>

    <Step title="Open App registrations">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>In the left sidebar under <strong>Entra ID</strong>, click <strong>App registrations</strong>, then click <strong>+ New registration</strong> in the toolbar.</p>

        <img src="https://mintcdn.com/stackone-60/y3JLAGTnfHYE9tQB/connectors/azuredevops/images/oauth2-setup-app-registrations.png?fit=max&auto=format&n=y3JLAGTnfHYE9tQB&q=85&s=a0839284aef13b637a9a190d6af5acc7" alt="App registrations list with the New registration button highlighted" width="1280" height="800" data-path="connectors/azuredevops/images/oauth2-setup-app-registrations.png" />
      </div>
    </Step>

    <Step title="Choose the supported account types">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>On the <strong>Register an application</strong> screen, enter a <strong>Name</strong> (e.g., StackOne Azure DevOps Integration). Under <strong>Supported account types</strong>, open the dropdown and select <strong>Multiple Entra ID tenants</strong> (shown as <strong>Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant)</strong>).</p>

        <ul>
          <li>After selecting it, two options appear — select <strong>Allow all tenants</strong> (the default, <strong>Allow only certain tenants (Preview)</strong>, requires listing every tenant explicitly).</li>
        </ul>

        <img src="https://mintcdn.com/stackone-60/y3JLAGTnfHYE9tQB/connectors/azuredevops/images/oauth2-setup-account-types.png?fit=max&auto=format&n=y3JLAGTnfHYE9tQB&q=85&s=fdf8b7e509eeb67b6a1a6716851009ed" alt="Supported account types dropdown open with Multiple Entra ID tenants highlighted" width="1280" height="800" data-path="connectors/azuredevops/images/oauth2-setup-account-types.png" />
      </div>
    </Step>

    <Step title="Set the Redirect URI and register">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Under <strong>Redirect URI (optional)</strong>, select the <strong>Web</strong> platform and paste StackOne's callback URL, then click <strong>Register</strong>.</p>

        <ul>
          <li>Redirect URI: `https://api.stackone.com/connect/oauth2/azuredevops/callback`</li>
        </ul>

        <img src="https://mintcdn.com/stackone-60/y3JLAGTnfHYE9tQB/connectors/azuredevops/images/oauth2-setup-register-form.png?fit=max&auto=format&n=y3JLAGTnfHYE9tQB&q=85&s=48f0b9601974edbfc0d285c0f0ef741c" alt="Completed Register an application form with the Register button highlighted" width="1280" height="800" data-path="connectors/azuredevops/images/oauth2-setup-register-form.png" />
      </div>
    </Step>
  </Steps>
</section>

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

  <p>Grant the application delegated access to the Azure DevOps REST API.</p>

  <Steps>
    <Step title="Open API permissions">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>In the app's left menu under <strong>Manage</strong>, click <strong>API permissions</strong>, then click <strong>+ Add a permission</strong> in the <strong>Configured permissions</strong> section.</p>

        <img src="https://mintcdn.com/stackone-60/y3JLAGTnfHYE9tQB/connectors/azuredevops/images/oauth2-setup-api-permissions.png?fit=max&auto=format&n=y3JLAGTnfHYE9tQB&q=85&s=55bb25c98cf41ee518de75d8f4d917ae" alt="API permissions blade with the Add a permission button highlighted" width="1280" height="800" data-path="connectors/azuredevops/images/oauth2-setup-api-permissions.png" />
      </div>
    </Step>

    <Step title="Select the Azure DevOps API">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>In the <strong>Request API permissions</strong> panel, on the <strong>Microsoft APIs</strong> tab, select the <strong>Azure DevOps</strong> tile ("Integrate with Azure DevOps and Azure DevOps server").</p>

        <img src="https://mintcdn.com/stackone-60/y3JLAGTnfHYE9tQB/connectors/azuredevops/images/oauth2-setup-select-azure-devops.png?fit=max&auto=format&n=y3JLAGTnfHYE9tQB&q=85&s=093fb27f5128b69347cb2e0aacb61c7c" alt="Request API permissions panel with the Azure DevOps tile highlighted" width="1280" height="800" data-path="connectors/azuredevops/images/oauth2-setup-select-azure-devops.png" />
      </div>
    </Step>

    <Step title="Add the user_impersonation permission">
      <div data-guide-step data-guide-scopes="vso.build,vso.build_execute,vso.code,vso.code_write,vso.code_manage,vso.dashboards,vso.graph,vso.hooks,vso.hooks_write,vso.packaging,vso.profile,vso.project,vso.project_write,vso.project_manage,vso.release,vso.release_execute,vso.serviceendpoint_manage,vso.test,vso.wiki,vso.wiki_write,vso.work,vso.work_write,vso.work_full" data-guide-display-scopes-list="vso.build,vso.build_execute,vso.code,vso.code_write,vso.code_manage,vso.dashboards,vso.graph,vso.hooks,vso.hooks_write,vso.packaging,vso.profile,vso.project,vso.project_write,vso.project_manage,vso.release,vso.release_execute,vso.serviceendpoint_manage,vso.test,vso.wiki,vso.wiki_write,vso.work,vso.work_write,vso.work_full">
        <div className="connector-guide-actions-badge" data-guide-actions-badge data-guide-actions-badge-scopes="vso.build,vso.build_execute,vso.code,vso.code_write,vso.code_manage,vso.dashboards,vso.graph,vso.hooks,vso.hooks_write,vso.packaging,vso.profile,vso.project,vso.project_write,vso.project_manage,vso.release,vso.release_execute,vso.serviceendpoint_manage,vso.test,vso.wiki,vso.wiki_write,vso.work,vso.work_write,vso.work_full" 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 Build Tag, Add Membership, Add Pull Request Label, Add User Entitlement, Add Work Item Comment, Create Build Definition, Create Classification Node, Create Dashboard Widget, Create Environment, Create Feed, Create Or Update Wiki Page, Create Pipeline, Create Policy Configuration, Create Project, Create Pull Request, Create Pull Request Reviewer, Create Pull Request Status, Create Pull Request Thread, Create Push, Create Query, Create Release, Create Release Definition, Create Repository, Create Service Endpoint, Create Service Hook, Create Team, Create Variable Group, Create Wiki, Create Work Item, Delete Classification Node, Delete Environment, Delete Policy Configuration, Delete Project, Delete Pull Request Reviewer, Delete Query, Delete Repository, Delete Service Endpoint, Delete Service Hook, Delete Team, Delete User Entitlement, Delete Variable Group, Delete Wiki, Delete Wiki Page, Delete Work Item, Delete Work Item Comment, Delete Work Item Tag, Download Attachment, Get Agent Pool, Get Backlog, Get Build, Get Build Changes, Get Build Definition, Get Build Log, Get Build Logs, Get Build Timeline, Get Build Work Items, Get Classification Nodes, Get Commit, Get Dashboard, Get Environment, Get Feed, Get Feed Permissions, Get Item, Get Iteration, Get Pipeline, Get Pipeline Artifact, Get Pipeline Log, Get Pipeline Run, Get Policy Configuration, Get Project, Get Project Properties, Get Pull Request, Get Pull Requests By Project, Get Query, Get Release, Get Repository, Get Service Endpoint, Get Subscription, Get Team, Get Tree, Get User, Get User Entitlement, Get Variable Group, Get Wiki, Get Wiki Page, Get Work Item, Get Work Item Comment, Get Work Item Tag, Get Work Item Type, List Agent Pools, List Agents, List Approvals, List Backlogs, List Boards, List Branch Statistics, List Build Artifacts, List Build Definitions, List Build Tags, List Builds, List Commits, List Dashboards, List Deployments, List Environment Deployment Records, List Environments, List Feeds, List Fields, List Forks, List Groups, List Items, List Iteration Work Items, List Iterations, List Memberships, List Merge Bases, List Pipeline Logs, List Pipeline Runs, List Pipelines, List Policy Configurations, List Policy Evaluations, List Projects, List Pull Request Commits, List Pull Request Iterations, List Pull Request Labels, List Pull Request Reviewers, List Pull Request Statuses, List Pull Request Threads, List Pull Request Work Items, List Pull Requests, List Pushes, List Queries, List Refs, List Release Definitions, List Releases, List Repositories, List Service Endpoints, List Service Hook Notifications, List Service Hooks, List Team Members, List Teams, List Test Plans, List Test Results, List Test Runs, List User Entitlements, List Users, List Variable Groups, List Widgets, List Wikis, List Work Item Comments, List Work Item Relation Types, List Work Item Revisions, List Work Item Tags, List Work Item Type Fields, List Work Item Types, List Work Item Updates, List Work Items By IDs, Preview Pipeline, Query Work Items (WIQL), Queue Build, Replace Service Hook, Run Pipeline, Search Code, Search Queries, Search Work Items, Set Feed Permissions, Set Project Properties, Update Approval, Update Classification Node, Update Environment, Update Feed, Update Policy Configuration, Update Project, Update Pull Request, Update Pull Request Reviewer, Update Pull Request Thread, Update Query, Update Refs, Update Repository, Update Service Endpoint, Update Team, Update User Entitlement, Update Variable Group, Update Wiki, Update Work Item, Update Work Item Comment, Update Work Item Tag, Upload Attachment</span>
        </div>

        <p>Under <strong>Delegated permissions</strong>, check <strong>user\_impersonation</strong> ("Have full access to Visual Studio Team Services REST APIs"), then click <strong>Add permissions</strong>. This single permission covers every Azure DevOps scope the connector uses:</p>

        <ul>
          <li>The <strong>vso</strong> group in the same panel lists granular scopes, but the Service Hooks scopes (vso.hooks, vso.hooks\_write) needed for webhook events are not individually selectable there — <strong>user\_impersonation</strong> is the permission that covers them.</li>
        </ul>

        <img src="https://mintcdn.com/stackone-60/y3JLAGTnfHYE9tQB/connectors/azuredevops/images/oauth2-setup-user-impersonation.png?fit=max&auto=format&n=y3JLAGTnfHYE9tQB&q=85&s=8dc2e4d58267bfd4598d68f3f36181e4" alt="Delegated permissions list with user_impersonation checked and highlighted" width="1280" height="800" data-path="connectors/azuredevops/images/oauth2-setup-user-impersonation.png" />

        <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="vso.build">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy vso.build" title="Copy scope" data-copy="vso.build">
                  <span className="connector-guide-scope-copy__label">vso.build</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="vso.build_execute">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy vso.build_execute" title="Copy scope" data-copy="vso.build_execute">
                  <span className="connector-guide-scope-copy__label">vso.build\_execute</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="vso.code">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy vso.code" title="Copy scope" data-copy="vso.code">
                  <span className="connector-guide-scope-copy__label">vso.code</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="vso.code_write">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy vso.code_write" title="Copy scope" data-copy="vso.code_write">
                  <span className="connector-guide-scope-copy__label">vso.code\_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="vso.code_manage">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy vso.code_manage" title="Copy scope" data-copy="vso.code_manage">
                  <span className="connector-guide-scope-copy__label">vso.code\_manage</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>

              <li style={{ overflowWrap: 'anywhere', wordBreak: 'break-word' }} data-guide-display-scope="vso.dashboards">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy vso.dashboards" title="Copy scope" data-copy="vso.dashboards">
                  <span className="connector-guide-scope-copy__label">vso.dashboards</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="vso.graph">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy vso.graph" title="Copy scope" data-copy="vso.graph">
                  <span className="connector-guide-scope-copy__label">vso.graph</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="vso.hooks">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy vso.hooks" title="Copy scope" data-copy="vso.hooks">
                  <span className="connector-guide-scope-copy__label">vso.hooks</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="vso.hooks_write">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy vso.hooks_write" title="Copy scope" data-copy="vso.hooks_write">
                  <span className="connector-guide-scope-copy__label">vso.hooks\_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="vso.packaging">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy vso.packaging" title="Copy scope" data-copy="vso.packaging">
                  <span className="connector-guide-scope-copy__label">vso.packaging</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="vso.profile">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy vso.profile" title="Copy scope" data-copy="vso.profile">
                  <span className="connector-guide-scope-copy__label">vso.profile</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="vso.project">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy vso.project" title="Copy scope" data-copy="vso.project">
                  <span className="connector-guide-scope-copy__label">vso.project</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="vso.project_write">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy vso.project_write" title="Copy scope" data-copy="vso.project_write">
                  <span className="connector-guide-scope-copy__label">vso.project\_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="vso.project_manage">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy vso.project_manage" title="Copy scope" data-copy="vso.project_manage">
                  <span className="connector-guide-scope-copy__label">vso.project\_manage</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>

              <li style={{ overflowWrap: 'anywhere', wordBreak: 'break-word' }} data-guide-display-scope="vso.release">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy vso.release" title="Copy scope" data-copy="vso.release">
                  <span className="connector-guide-scope-copy__label">vso.release</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="vso.release_execute">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy vso.release_execute" title="Copy scope" data-copy="vso.release_execute">
                  <span className="connector-guide-scope-copy__label">vso.release\_execute</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="vso.serviceendpoint_manage">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy vso.serviceendpoint_manage" title="Copy scope" data-copy="vso.serviceendpoint_manage">
                  <span className="connector-guide-scope-copy__label">vso.serviceendpoint\_manage</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>

              <li style={{ overflowWrap: 'anywhere', wordBreak: 'break-word' }} data-guide-display-scope="vso.test">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy vso.test" title="Copy scope" data-copy="vso.test">
                  <span className="connector-guide-scope-copy__label">vso.test</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="vso.wiki">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy vso.wiki" title="Copy scope" data-copy="vso.wiki">
                  <span className="connector-guide-scope-copy__label">vso.wiki</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="vso.wiki_write">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy vso.wiki_write" title="Copy scope" data-copy="vso.wiki_write">
                  <span className="connector-guide-scope-copy__label">vso.wiki\_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="vso.work">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy vso.work" title="Copy scope" data-copy="vso.work">
                  <span className="connector-guide-scope-copy__label">vso.work</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="vso.work_write">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy vso.work_write" title="Copy scope" data-copy="vso.work_write">
                  <span className="connector-guide-scope-copy__label">vso.work\_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="vso.work_full">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy vso.work_full" title="Copy scope" data-copy="vso.work_full">
                  <span className="connector-guide-scope-copy__label">vso.work\_full</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>
            </ul>
          </div>
        </div>
      </div>
    </Step>

    <Step title="Grant admin consent">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Back on <strong>Configured permissions</strong>, click <strong>Grant admin consent for \[your tenant]</strong> and confirm with <strong>Yes</strong>, so users don't hit the unverified-publisher consent block.</p>

        <img src="https://mintcdn.com/stackone-60/y3JLAGTnfHYE9tQB/connectors/azuredevops/images/oauth2-setup-grant-admin-consent.png?fit=max&auto=format&n=y3JLAGTnfHYE9tQB&q=85&s=1e181a330767c16c5c4749bff5e03e71" alt="Configured permissions with the Grant admin consent button highlighted" width="1280" height="800" data-path="connectors/azuredevops/images/oauth2-setup-grant-admin-consent.png" />
      </div>
    </Step>
  </Steps>
</section>

<section data-guide-section data-guide-scopes="">
  <h2>Create and copy your credentials</h2>

  <p>Copy the client ID and generate a client secret for the StackOne connection.</p>

  <Steps>
    <Step title="Copy the Application (client) ID">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>On the app's <strong>Overview</strong> page, in the <strong>Essentials</strong> panel, copy the <strong>Application (client) ID</strong> — this is the public identifier of your app. Paste it into the <strong>Client ID</strong> field in the StackOne Connector profile.</p>

        <img src="https://mintcdn.com/stackone-60/y3JLAGTnfHYE9tQB/connectors/azuredevops/images/oauth2-setup-client-id.png?fit=max&auto=format&n=y3JLAGTnfHYE9tQB&q=85&s=812fcfa2d120ca16bfca92c0881b2525" alt="App Overview Essentials panel with the Application (client) ID highlighted" width="1280" height="800" data-path="connectors/azuredevops/images/oauth2-setup-client-id.png" />
      </div>
    </Step>

    <Step title="Create a client secret">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>In the left menu under <strong>Manage</strong>, click <strong>Certificates & secrets</strong>. On the <strong>Client secrets</strong> tab, click <strong>+ New client secret</strong>.</p>

        <img src="https://mintcdn.com/stackone-60/y3JLAGTnfHYE9tQB/connectors/azuredevops/images/oauth2-setup-new-client-secret.png?fit=max&auto=format&n=y3JLAGTnfHYE9tQB&q=85&s=6aa19db504a259fafd7d7a43d9207a28" alt="Certificates and secrets page with the New client secret button highlighted" width="1280" height="800" data-path="connectors/azuredevops/images/oauth2-setup-new-client-secret.png" />
      </div>
    </Step>

    <Step title="Add the client secret">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>In the <strong>Add a client secret</strong> panel, enter a <strong>Description</strong>, choose an expiry under <strong>Expires</strong> (default <strong>Recommended: 180 days (6 months)</strong>), and click <strong>Add</strong>.</p>

        <ul>
          <li>Track the expiry date — the connection stops working when the secret expires and you will need to create a new one.</li>
        </ul>

        <img src="https://mintcdn.com/stackone-60/y3JLAGTnfHYE9tQB/connectors/azuredevops/images/oauth2-setup-add-client-secret.png?fit=max&auto=format&n=y3JLAGTnfHYE9tQB&q=85&s=ee847aa5fbfc48ed27a54de13889f3eb" alt="Add a client secret panel with Description and Expires fields and the Add button highlighted" width="1280" height="800" data-path="connectors/azuredevops/images/oauth2-setup-add-client-secret.png" />
      </div>
    </Step>

    <Step title="Copy the secret Value">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Copy the new secret's <strong>Value</strong> column (not the <strong>Secret ID</strong>) and paste it into the <strong>Client Secret</strong> field in the StackOne Connector profile.</p>

        <ul>
          <li>The secret <strong>Value</strong> is only displayed once and cannot be retrieved later — copy it before leaving the page.</li>
          <li>Per the on-screen notice: "Client secret values cannot be viewed, except for immediately after creation. Be sure to save the secret when created before leaving the page."</li>
        </ul>

        <img src="https://mintcdn.com/stackone-60/y3JLAGTnfHYE9tQB/connectors/azuredevops/images/oauth2-setup-secret-value.png?fit=max&auto=format&n=y3JLAGTnfHYE9tQB&q=85&s=7b02966b80b17047409fa7d9821549a2" alt="Client secrets tab with the one-time secret Value highlighted and redacted" width="1280" height="800" data-path="connectors/azuredevops/images/oauth2-setup-secret-value.png" />
      </div>
    </Step>

    <Step title="Set the Scopes field (optional)">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>The <strong>Scopes</strong> field in the StackOne Connector profile is a space-separated list of Azure DevOps scopes to request. Leave it blank to use the default, which works with the <strong>user\_impersonation</strong> permission configured above.</p>

        <ul>
          <li>Default: `https://app.vssps.visualstudio.com/.default`</li>
        </ul>
      </div>
    </Step>
  </Steps>
</section>

## Creating the StackOne Connector Profile

To create the Connector Profile in StackOne for <strong>Azure DevOps</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>Azure DevOps</strong></li>
      <li>Select <strong>Type</strong> as <strong>OAuth 2.0 (Microsoft Entra ID)</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="/guides/accounts-section#linking-accounts">Link Accounts</a> for <strong>Azure DevOps</strong>.
