Usage
Microsoft Graph supports optional query parameters that you can use to specify and control the amount of data returned in a response.
One of those parameters is $count
which can be used either as a query parameter or as a URL segment.
Query parameter
When using as a query parameter withe the syntax $count=true
, the response will include a count of total number of items for the specified query. The number of items is in the @odata.count
property.
Example: The query GET /v1.0/users?$count=true
will return the collection of users alongside with total number of users.
URL segment
When using as a URL segment, it retrieves the integer total of the collection. Additionally, it supports either $filter
or $search
query parameter.
Let's focus on $count
as a URL segment in the rest of the article.
Examples
There are two cases when $count
is useful. When you are only interested in the statistics of how many items a given collection contains, or if a item is included in a collection.
Note :
For users, groups, applications, service principals, organizational contacts and administrative units collection the request requires ConsistencyLevel
header set to eventual
.
Users
Total number of users
GET /v1.0/users/$count
Total number of guest users
GET /v1.0/users/$count?$filter=userType eq 'Guest'
Number of users created this year
GET /v1.0/users/$count?$filter=createdDateTime ge 2024-01-01T00:00:00Z and createdDateTime le 2024-12-31T00:00:00Z
Number of users with specific given name
GET /v1.0/users/$count?$filter=givenName eq 'Martin'
Number of user's contacts
GET /v1.0/users/{userId}/contacts/$count
Number of devices owned by a user
GET /v1.0/users/{userId}/ownedDevices/$count
Number of devices with specific operating system owned by a user
GET /v1.0/users/{userId}/ownedDevices/$count?$filter=operatingSystem eq 'Windows'
Groups
Total number of groups
GET /v1.0/groups/$count
Number of mail-enabled groups
GET /v1.0/groups/$count?$filter=mailEnabled eq true
Number of security groups
GET /v1.0/groups/$count?$filter=securityEnabled eq true
Total number of members in a group
GET /v1.0/groups/{groupId}/members/$count
Check if a user is a member of a group
GET /v1.0/groups/{groupId}/members/$count?$filter=id eq '{userId}'
The result equals to 1 means that user is a member, 0 means that user is not a member.
Total number of owners in a group
GET /v1.0/groups/{groupId}/owners/$count
Check if a user is an owner of a group
GET /v1.0/groups/{groupId}/owners/$count?$filter=id eq '{userId}'
The result equals to 1 means that user is an owner, 0 means that user is not an owner.
Applications
Total number of applications
GET /v1.0/applications/$count
Number of single tenant applications
GET /v1.0/applications/$count?$filter=signInAudience eq 'AzureADMyOrg'
Number of multitenant applications
GET /v1.0/applications/$count?$filter=signInAudience eq 'AzureADMultipleOrgs'
Number of owners of an application
GET /v1.0/applications/{appId}/owners/$count
Check if a user is an owner of an application
GET /v1.0/applications/{appId}/owners/$count?$filter=id eq '{userId}'
The result equals to 1 means that user is an owner, 0 means that user is not an owner.
Service principals
Total number of service principals
GET /v1.0/servicePrincipals/$count
Check if there is an instance of an app
GET /v1.0/servicePrincipals/$count?$filter=appId eq '{appId}'
The result equals to 1 means that a service principal exists for an app, 0 means that a service principal doesn't exist.
Number of service principals where granting app role assignment is not required
GET /v1.0/servicePrincipals/$count?$filter=appRoleAssignmentRequired eq false
Check if a user is an owner of an application
GET /v1.0/servicePrincipals/{servicePrincipalId}/owners/$count?$filter=id eq '{userId}'
The result equals to 1 means that user is an owner, 0 means that user is not an owner.
Organizational contacts
Total number of organizational contacts
GET /v1.0/contacts/$count
Check whether a mail is an organizational contacts
GET /v1.0/contacts/$count?$filter=mail eq '{mail}'
The result equals to 1 means that an organizational contact exists, 0 means that it doesn't exist.
Number of groups where an organizational contact is a member
GET /v1.0/contacts/{contactId}/memberOf/$count
Check whether an organizational contact is a member of specific group
GET /v1.0/contacts/{contactId}/memberOf/$count?$filter=id eq '{groupId}'
The result equals to 1 means that an organizational contact is a member of a group, 0 means that it's not a member.
Administrative units
Total number of administrative units
GET /v1.0/directory/administrativeUnits/$count
Check whether an administrative unit with specific name already exists
GET /v1.0/directory/administrativeUnits/$count?$filter=displayName eq '{unitName}'
The result equals to 1 means that an administrative unit exists, 0 means that it doesn't exist.
Number of members of an administrative unit
GET /v1.0/directory/administrativeUnits/{unitId}/members/$count
Check whether a user is member of an administrative unit
GET /v1.0/directory/administrativeUnits/{unitId}/members/$count?$filter=id eq '{userId}'
Messages
Total number of all emails
GET /v1.0/me/messages/$count
Number of unread emails
GET /v1.0/me/messages/$count?$filter=isRead eq false
Number of drafts
GET /v1.0/me/messages/$count?$filter=isDraft eq true
Total number of emails in inbox folder
GET /v1.0/me/mailFolders/inbox/messages/$count
Number of messages in a conversation
GET /v1.0/me/messages/$count?$filter=conversationId eq '{conversationId}'
Number of attachments in a message
GET /v1.0/me/messages/{messageId}/attachments/$count
Number of the app roles a user has been granted
GET /v1.0/users/{userId}/appRoleAssignments/$count
Conclusion
$count
can be used either as a query parameter or as a URL segment.
When using as a URL segment, it supports $filter
or $search
query parameter. The most common use case is to retrieve a number of items for a specific collection, or to check whether an item is present inside the collection.