Azure DevOps: Retrieving Repository Size and Permissions via REST API

What will you learn?

Discover how to utilize the Azure DevOps REST API to retrieve essential information about repository size and permissions efficiently.

Introduction to the Problem and Solution

In this scenario, we delve into harnessing the power of the Azure DevOps REST API to gather vital data concerning a repository’s size and permissions. By programmatically accessing this information, we can streamline tasks related to monitoring repositories within our projects. Our solution entails making HTTP requests to specific endpoints provided by the Azure DevOps API, parsing JSON responses, and extracting key details for analysis.


# Import necessary libraries
import requests

# Define Azure DevOps organization URL and personal access token
organization_url = ""
token = "YourPersonalAccessToken"

# Define project name and repository ID
project = "YourProjectName"
repository_id = "YourRepositoryID"

# Endpoint for getting repository size
size_url = f"{organization_url}/{project}/_apis/git/repositories/{repository_id}/stats/size?api-version=6.1-preview.1"

# Endpoint for getting repository permissions
perms_url = f"{organization_url}/{project}/_apis/git/repositories/{repository_id}/permissions?api-version=6.0"

# Function to make authenticated GET request using personal access token
def make_get_request(url):
    headers = {
        "Authorization": f"Basic {token}"
    response = requests.get(url, headers=headers)
    return response.json()

# Get repository size information (in bytes)
repo_size_info = make_get_request(size_url)
print(repo_size_info)  # Output includes 'size' attribute representing total size in bytes

# Get repository permissions information 
repo_perms_info = make_get_request(perms_url)
print(repo_perms_info)  # Output contains detailed permission settings for the repository

# Copyright PHD


To address this challenge effectively, we begin by importing the requests library for handling HTTP requests. We then define crucial variables such as organization_url, token, project, and repository_id to construct endpoint URLs required for fetching data.

Next, we establish two endpoints – one for retrieving repository size (size_url) and another for acquiring permission details (perms_url). These URLs are structured following Azure DevOps API conventions with placeholders replaced by actual values.

Subsequently, a function named make_get_request is created to facilitate authenticated GET requests using our personal access token within the authorization header. This function enhances code reusability by managing authentication logic seamlessly.

By invoking make_get_request with respective endpoint URLs (size_url & perms_url), we capture JSON responses containing essential data related to both aspects – sizing metrics in bytes of the target repo and its permission configurations.

The final step involves printing out these fetched details, providing users with insights into their repositories within an automated framework powered by Python’s scripting capabilities.

    How do I obtain a Personal Access Token (PAT) for Azure DevOps?

    You can generate a PAT by navigating to your user profile settings in Azure DevOps > Personal Access Tokens > New Token.

    What permissions are required for fetching repository information via Azure DevOps APIs?

    Typically, read-level permissions on repositories are adequate; however elevated privileges may be needed depending on specific operations being performed.

    Can I modify existing repositories through Azure DevOps REST APIs?

    Yes, it is possible but necessitates appropriate authorization levels granted via tokens or other means.

    Are there rate limits imposed when interacting with Azure DevOps APIs?

    Yes, rate limiting mechanisms apply; hence consider caching strategies or adhere to retry policies upon hitting thresholds.

    Is it feasible to integrate retrieved data into custom dashboards or reports?

    Absolutely! You can leverage parsed JSON responses from API calls within visualization tools or reporting frameworks tailored as per your requirements.


    Exploring pivotal metadata concerning repository dimensions and permission structures from platforms like Azure Repositories through RESTful interfaces provides significant utility. It equips developers with informed decision-making processes enhanced through automation potentials inherent in Python’s adaptability showcased above.

    Leave a Comment