Choose the permission or permissions marked as least privileged for this API. Use a higher privileged permission or permissions only if your app requires it. For details about delegated and application permissions, see Permission types. To learn more about these permissions, see the permissions reference.
Permission type
Least privileged permissions
Higher privileged permissions
Delegated (work or school account)
Reports.Read.All
Not available.
Delegated (personal Microsoft account)
Not supported.
Not supported.
Application
Reports.Read.All
Not available.
Note: For delegated permissions to allow apps to read service usage reports on behalf of a user, the tenant administrator must have assigned the user the appropriate Microsoft Entra limited administrator role. For more details, see Authorization for APIs to read Microsoft 365 usage reports.
HTTP request
GET /reports/getM365AppUserDetail(period='{period_value}')
GET /reports/getM365AppUserDetail(date='{date_value}')
Function parameters
In the request URL, provide the following parameters with a valid value.
Parameter
Type
Description
period
string
Specifies the length of time over which the report is aggregated. The supported values for {period_value} are: D7, D30, D90, and D180. These values follow the format Dn where n represents the number of days over which the report is aggregated.
date
Date
Specifies the date for which you would like to view the users who performed any activity. {date_value} must have a format of YYYY-MM-DD. As this report is only available for the past 30 days, {date_value} should be a date from that range.
Note: You need to set either period or date in the request URL.
Optional query parameters
This method supports the $format, $top, and $skipTokenOData query parameters to customize the response. The default output type is text/csv. However, if you want to specify the output type, you can use the OData $format query parameter to set the default output to text/csv or application/json.
If successful, this method returns a 302 Found response that redirects to a preauthenticated download URL for the report. That URL can be found in the Location header in the response.
Preauthenticated download URLs are only valid for a short period of time (a few minutes) and do not require an Authorization header.
The CSV file has the following headers for columns:
Report Refresh Date
User Principal Name
Last Activation Date
Last Activity Date
Report Period
Windows
Mac
Mobile
Web
Outlook
Word
Excel
PowerPoint
OneNote
Teams
Outlook (Windows)
Word (Windows)
Excel (Windows)
PowerPoint (Windows)
OneNote (Windows)
Teams (Windows)
Outlook (Mac)
Word (Mac)
Excel (Mac)
PowerPoint (Mac)
OneNote (Mac)
Teams (Mac)
Outlook (Mobile)
Word (Mobile)
Excel (Mobile)
PowerPoint (Mobile)
OneNote (Mobile)
Teams (Mobile)
Outlook (Web)
Word (Web)
Excel (Web)
PowerPoint (Web)
OneNote (Web)
Teams (Web)
JSON
If successful, this method returns a 200 OK response code and a JSON object in response body.
The default page size for this request is 200 items.
GET https://graph.microsoft.com/v1.0/reports/getM365AppUserDetail(period='D7')?$format=text/csv
// Code snippets are only available for the latest version. Current version is 5.x
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
await graphClient.Reports.GetM365AppUserDetailWithPeriod("{period}").GetAsync((requestConfiguration) =>
{
requestConfiguration.QueryParameters.Format = "text/csv";
});
// Code snippets are only available for the latest major version. Current major version is $v1.*
// Dependencies
import (
"context"
msgraphsdk "github.com/microsoftgraph/msgraph-sdk-go"
graphreports "github.com/microsoftgraph/msgraph-sdk-go/reports"
//other-imports
)
requestFormat := "text/csv"
requestParameters := &graphreports.ReportsGetM365AppUserDetailWithPeriodRequestBuilderGetQueryParameters{
Format: &requestFormat,
}
configuration := &graphreports.ReportsGetM365AppUserDetailWithPeriodRequestBuilderGetRequestConfiguration{
QueryParameters: requestParameters,
}
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=go
period := "{period}"
graphClient.Reports().GetM365AppUserDetailWithPeriod(&period).Get(context.Background(), configuration)
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
graphClient.reports().getM365AppUserDetailWithPeriod("{period}").get(requestConfiguration -> {
requestConfiguration.queryParameters.format = "text/csv";
});
# Code snippets are only available for the latest version. Current version is 1.x
from msgraph import GraphServiceClient
from msgraph.generated.reports.get_m365_app_user_detail(period='{period}').get_m365_app_user_detail_with_period_request_builder import GetM365AppUserDetailWithPeriodRequestBuilder
from kiota_abstractions.base_request_configuration import RequestConfiguration
# To initialize your graph_client, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=python
query_params = GetM365AppUserDetailWithPeriodRequestBuilder.GetM365AppUserDetailWithPeriodRequestBuilderGetQueryParameters(
format = "text/csv",
)
request_configuration = RequestConfiguration(
query_parameters = query_params,
)
await graph_client.reports.get_m365_app_user_detail_with_period("{period}").get(request_configuration = request_configuration)
GET https://graph.microsoft.com/v1.0/reports/getM365AppUserDetail(period='D7')?$format=application/json
// Code snippets are only available for the latest version. Current version is 5.x
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
await graphClient.Reports.GetM365AppUserDetailWithPeriod("{period}").GetAsync((requestConfiguration) =>
{
requestConfiguration.QueryParameters.Format = "application/json";
});
// Code snippets are only available for the latest major version. Current major version is $v1.*
// Dependencies
import (
"context"
msgraphsdk "github.com/microsoftgraph/msgraph-sdk-go"
graphreports "github.com/microsoftgraph/msgraph-sdk-go/reports"
//other-imports
)
requestFormat := "application/json"
requestParameters := &graphreports.ReportsGetM365AppUserDetailWithPeriodRequestBuilderGetQueryParameters{
Format: &requestFormat,
}
configuration := &graphreports.ReportsGetM365AppUserDetailWithPeriodRequestBuilderGetRequestConfiguration{
QueryParameters: requestParameters,
}
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=go
period := "{period}"
graphClient.Reports().GetM365AppUserDetailWithPeriod(&period).Get(context.Background(), configuration)
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
graphClient.reports().getM365AppUserDetailWithPeriod("{period}").get(requestConfiguration -> {
requestConfiguration.queryParameters.format = "application/json";
});
# Code snippets are only available for the latest version. Current version is 1.x
from msgraph import GraphServiceClient
from msgraph.generated.reports.get_m365_app_user_detail(period='{period}').get_m365_app_user_detail_with_period_request_builder import GetM365AppUserDetailWithPeriodRequestBuilder
from kiota_abstractions.base_request_configuration import RequestConfiguration
# To initialize your graph_client, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=python
query_params = GetM365AppUserDetailWithPeriodRequestBuilder.GetM365AppUserDetailWithPeriodRequestBuilderGetQueryParameters(
format = "application/json",
)
request_configuration = RequestConfiguration(
query_parameters = query_params,
)
await graph_client.reports.get_m365_app_user_detail_with_period("{period}").get(request_configuration = request_configuration)