Search code examples
httpsharepointazure-active-directorymicrosoft-graph-api

How to filter groups that have at least 1 member in Graph API?


I'm trying to get a list of all groups in a tenant, but only groups that actually have members are relevant to me. The documentation (use of $count in $filter) (supported objects in advanced queries) seems to vaguely imply i can filter based on members of a group. however, the query gives me an error.

This is the query i tried

GET https://graph.microsoft.com/v1.0/groups?$filter=members/$count ge 1

however, this gives me the following error:

    "error": {
        "code": "Request_UnsupportedQuery",
        "message": "Property 'members' does not exist as a declared property or extension property."
    }

Is there any way i can do this with a filter? or do i have to check with a seperate request for every group if it has members?


Solution

  • AFAIK, there is no direct filter to retrieve groups having at least 1 member.

    When I ran your query in Graph Explorer, I too got same error as below:

    GET https://graph.microsoft.com/v1.0/groups?$filter=members/$count ge 1
    
    

    Response:

    enter image description here

    Alternatively, you can make use of below Python code by formatting the /groups response to retrieve groups having at least 1 member:

    import requests
    
    access_token = "token"
    groups_api_url = "https://graph.microsoft.com/v1.0/groups"
    
    headers = {
        "Authorization": f"Bearer {access_token}",
    }
    
    response = requests.get(groups_api_url, headers=headers)
    
    if response.status_code == 200:
        groups = response.json().get("value", [])
    
        for group in groups:
            group_id = group['id']
            members_api_url = f"https://graph.microsoft.com/v1.0/groups/{group_id}/members"
            members_response = requests.get(members_api_url, headers=headers)
    
            if members_response.status_code == 200 and members_response.json().get("value", []):
                print(f"Group ID: {group_id}, Group Name: {group['displayName']} has at least one member")
    else:
        print(f"Error: {response.status_code} - {response.text}")
    
    

    Response:

    enter image description here