Introduction au rapport SharePoint API Usage
Microsoft a récemment introduit dans le changelog de Microsoft Graph API un nouvel endpoint de reporting dédié à SharePoint Online : le SharePoint API Usage Report. Disponible uniquement sous l'endpoint /beta, ce rapport offre aux administrateurs une visibilité granulaire sur la consommation des API SharePoint par les applications enregistrées dans leur tenant Azure AD.
Cet article vous guide pas à pas à travers l'activation du rapport, la compréhension de ses données, et l'exploitation programmatique de ses endpoints via PowerShell et Graph Explorer. Il s'adresse aux ingénieurs cloud et administrateurs Microsoft 365 qui souhaitent instrumenter leur gouvernance des accès API SharePoint.
Statut Preview
Ce rapport est actuellement en préversion publique et uniquement accessible via l'endpoint /beta de Microsoft Graph. Il ne doit pas être utilisé en production sans validation préalable. Les schémas de réponse et les permissions peuvent évoluer sans préavis.

Pourquoi ce rapport est stratégique pour votre tenant
Avant l'introduction de ce rapport, la supervision de la consommation API sur SharePoint Online reposait essentiellement sur les journaux d'audit unifiés (Unified Audit Logs) et les données agrégées du portail d'administration Microsoft 365. Ces sources, bien qu'utiles, ne permettaient pas d'identifier facilement quelle application consomme le plus de bande passante ou effectue le plus de requêtes API sur une période donnée.
Le SharePoint API Usage Report comble ce manque en exposant des métriques précises par application, par jour, incluant :
- Le volume de données transférées (en Mo)
- Le nombre d'opérations API exécutées
- L'identification de chaque application par son
AppIdAzure AD
Ces informations sont précieuses pour les scénarios suivants :
- Audit de gouvernance : identifier les applications tierces ou internes sur-consommatrices
- Optimisation des performances : détecter les patterns de consommation anormaux
- Planification capacitaire : anticiper les pics de charge sur les API SharePoint
- Sécurité : repérer des applications inconnues ayant un accès API actif
Complémentarité avec le rapport Graph API Usage
Ce rapport est conçu sur le même modèle que le Graph API Usage Report (endpoint getGraphApiUsage). Si vous gérez déjà ce dernier, la prise en main sera immédiate. Les deux rapports sont complémentaires et doivent être analysés conjointement pour une vue 360° de la consommation API dans votre tenant.
Prérequis techniques et modèle de permissions
Permissions Microsoft Graph requises
Le rapport fonctionne actuellement exclusivement en mode délégué (Delegated permissions). Les permissions d'application (Application permissions) ne sont pas encore supportées selon la documentation officielle Microsoft.
Permissions applicatives non supportées
Malgré ce que la documentation indique, des tests ont démontré que les endpoints n'appliquent pas strictement les permissions requises dans tous les cas. Suivez néanmoins scrupuleusement les recommandations officielles pour éviter tout comportement inattendu lors des mises à jour de l'API.
Voici le tableau des permissions requises selon l'opération effectuée :
| Opération | Endpoint | Permission requise | Type |
|---|---|---|---|
| Activer la collecte | POST enableApiUsageReport | ReportSettings.ReadWrite.All | Déléguée |
| Vérifier le statut | GET apiUsageReportMetrics | ReportSettings.Read.All | Déléguée |
| Lire le rapport | GET getSharePointApiUsage | Reports.Read.All | Déléguée |
Rôles Azure AD recommandés
- Global Administrator : pour l'activation initiale de la collecte
- Reports Reader : pour la lecture des données de rapport (principe du moindre privilège)
- SharePoint Administrator : accès aux paramètres SharePoint avancés
Activation du rapport SharePoint API Usage
L'activation du rapport nécessite deux étapes distinctes : l'envoi d'une requête d'activation, puis la vérification du statut d'intégration.
Envoyer la requĂŞte d'activation via Graph API
Émettez une requête POST contre l'endpoint enableApiUsageReport avec le payload JSON suivant. Cette opération active la collecte de métriques pour la métrique EgressReport :
1POST https://graph.microsoft.com/beta/admin/reportSettings/sharePoint/enableApiUsageReport2Content-Type: application/json3 4{5 "metric": "EgressReport"6}Une réponse 200 OK indique que la demande a été acceptée. Le champ onboardingStatus retourné prend alors la valeur enabling, ce qui signifie que la collecte de données est en cours d'initialisation côté infrastructure Microsoft.
Vérifier le statut d'intégration
Après l'activation, interrogez l'endpoint apiUsageReportMetrics pour suivre l'évolution du statut :
1GET https://graph.microsoft.com/beta/admin/reportSettings/sharePoint/apiUsageReportMetricsLa réponse JSON attendue ressemble à :
1{2 "@odata.context": "https://graph.microsoft.com/beta/$metadata#admin/reportSettings/sharePoint/apiUsageReportMetrics",3 "metric": "EgressReport",4 "onboardingStatus": "enabled",5 "lastUpdatedDateTime": "2026-07-01T00:00:00Z"6}Attendez que le statut passe de enabling à enabled avant de tenter de récupérer des données de rapport.
Patienter la période d'initialisation
Les données de rapport sont générées sur une base quotidienne. Il est recommandé d'attendre au minimum 48 à 72 heures après activation avant d'interroger le rapport. Pendant cette période, toute requête sur l'endpoint getSharePointApiUsage retournera une erreur 403 Forbidden.

Implémentation PowerShell avec Microsoft.Graph SDK
Voici un script PowerShell complet pour automatiser l'activation et la récupération des données du rapport. Il utilise le module Microsoft.Graph PowerShell SDK.
Installation du module requis
1# Installation du module Microsoft Graph PowerShell SDK2Install-Module -Name Microsoft.Graph -Scope CurrentUser -ForceScript d'activation du rapport
1# Connexion avec les scopes délégués requis2Connect-MgGraph -Scopes "ReportSettings.ReadWrite.All", "Reports.Read.All"3 4# Activation de la collecte de métriques SharePoint API Usage5$enableBody = @{6 metric = "EgressReport"7} | ConvertTo-Json8 9try {10 $enableResponse = Invoke-MgGraphRequest `11 -Method POST `12 -Uri "https://graph.microsoft.com/beta/admin/reportSettings/sharePoint/enableApiUsageReport" `13 -Body $enableBody `14 -ContentType "application/json"15 16 Write-Host "[OK] Collecte activée. Statut : $($enableResponse.onboardingStatus)" -ForegroundColor Green17} catch {18 Write-Error "Erreur lors de l'activation : $($_.Exception.Message)"19}20 21# Vérification du statut d'intégration22$statusResponse = Invoke-MgGraphRequest `23 -Method GET `24 -Uri "https://graph.microsoft.com/beta/admin/reportSettings/sharePoint/apiUsageReportMetrics"25 26Write-Host "Statut actuel : $($statusResponse.onboardingStatus)"27Write-Host "Dernière mise à jour : $($statusResponse.lastUpdatedDateTime)"Script de récupération et d'analyse du rapport
1# Paramètres configurables2$period = "D30" # Valeurs possibles : D1, D7, D303$outputPath = "C:\Reports\SharePointAPIUsage_$(Get-Date -Format 'yyyyMMdd').csv"4 5# Connexion6Connect-MgGraph -Scopes "Reports.Read.All"7 8try {9 # Récupération des données du rapport10 $reportData = Invoke-MgGraphRequest `11 -Method GET `12 -Uri "https://graph.microsoft.com/beta/reports/getSharePointApiUsage(period='$period')"13 14 # Vérification de la présence de données15 if ($null -eq $reportData.value -or $reportData.value.Count -eq 0) {16 Write-Warning "Aucune donnée disponible. Vérifiez que la collecte est activée et que le délai d'initialisation est écoulé."17 exit18 }19 20 # Transformation et export CSV21 $report = $reportData.value | Select-Object `22 @{N="Date"; E={$_.usageDateTime}},23 @{N="ServiceArea"; E={$_.serviceArea}},24 @{N="AppId"; E={$_.appId}},25 @{N="UsageMB"; E={[math]::Round($_.usageMB, 2)}},26 @{N="UsageRequests"; E={$_.usageRequests}}27 28 $report | Export-Csv -Path $outputPath -NoTypeInformation -Encoding UTF829 Write-Host "[OK] Rapport exporté : $outputPath" -ForegroundColor Green30 31 # Analyse : Top 10 des applications par consommation (Mo)32 Write-Host "`n=== Top 10 Applications par ConsommationMB ==="33 $report | Group-Object -Property AppId | `34 Select-Object Name, @{N="TotalMB"; E={($_.Group | Measure-Object UsageMB -Sum).Sum}} | `35 Sort-Object TotalMB -Descending | `36 Select-Object -First 10 | `37 Format-Table -AutoSize38 39} catch {40 Write-Error "Erreur lors de la récupération : $($_.Exception.Message)"41}Filtrage par AppId
Pour surveiller une application spécifique, ajoutez le paramètre de filtre appId directement dans l'URL de la requête :
https://graph.microsoft.com/beta/reports/getSharePointApiUsage(period='D30')?appId='972bb84a-1d27-4bd3-8306-6b8e57679e8c'
Cela permet de cibler par exemple Microsoft Defender for Cloud Apps (972bb84a-1d27-4bd3-8306-6b8e57679e8c) ou toute autre application enregistrée.
Analyse des données du rapport
Structure des données retournées
L'endpoint getSharePointApiUsage retourne par défaut un payload JSON dont voici la structure annotée :
1{2 "@odata.context": "https://graph.microsoft.com/beta/$metadata#Collection(microsoft.graph.sharePointApiUsage)",3 "value": [4 {5 "usageDateTime": "2026-06-30",6 "serviceArea": "SharePoint",7 "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",8 "appId": "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy",9 "usageMB": 1245.67,10 "usageRequests": 98432,11 "activeApps": null12 }13 ]14}Description détaillée des champs
usageDateTime: Date de la période de reporting (granularité journalière, format ISO 8601)serviceArea: Zone de service concernée — actuellementSharePointtenantId: GUID du tenant — redondant si vous interrogez votre propre tenantappId: GUID de l'application Azure AD ayant effectué les appels API SharePointusageMB: Volume de données transférées en mégaoctets pour la journéeusageRequests: Nombre total d'opérations API effectuées par l'application sur la journéeactiveApps: Champ documenté mais non encore retourné — indiquera à terme le nombre d'applications uniques actives sur la période

Paramètres de requête supportés
| Paramètre | Syntaxe | Description | Exemple |
|---|---|---|---|
| period | period='Dx' | Période de données : D1, D7, D30 | period='D7' |
| date | date=YYYY-MM-DD | Données pour une date précise | date=2026-06-15 |
| appId | appId='GUID' | Filtrage par application | appId='972bb84a-...' |
| $format | $format=json | Format de sortie (JSON par défaut) | $format=json |
Ne pas modifier le paramètre $format
Bien que l'endpoint supporte le paramètre $format, ne l'utilisez qu'avec la valeur json. D'autres valeurs comme csv ou text/csv peuvent produire des résultats incohérents ou des erreurs en environnement preview.
Architecture et considérations de gouvernance
Positionnement dans l'écosystème Microsoft Graph
Le SharePoint API Usage Report s'inscrit dans la famille des rapports d'utilisation Microsoft Graph, aux côtés de :
getGraphApiUsage— consommation globale des API Microsoft GraphgetSharePointActivityUserDetail— activité utilisateur SharePointgetSharePointSiteUsageDetail— utilisation par site SharePoint
Contrairement aux rapports d'activité utilisateur, ce nouveau rapport se concentre exclusivement sur la consommation applicative des API, ce qui en fait un outil de gouvernance complémentaire et non substituable.
Recommandations d'architecture pour la collecte
Pour industrialiser la collecte et l'analyse de ces données, il est recommandé de mettre en place le pipeline suivant :
1[Azure Automation / Logic App]2 |3 v4[Graph API - getSharePointApiUsage]5 |6 v7[Azure Storage Account / Log Analytics Workspace]8 |9 v10[Power BI / Azure Workbooks]Un Azure Automation Runbook planifié quotidiennement peut automatiser la collecte et l'archivage des données dans un Log Analytics Workspace, permettant ensuite des analyses via KQL et des alertes basées sur des seuils de consommation.
Exemple de requĂŞte KQL pour Log Analytics
Si vous ingérez les données dans Log Analytics via un Custom Log, voici une requête KQL pour identifier les applications les plus consommatrices :
1SharePointApiUsage_CL2| where TimeGenerated >= ago(30d)3| summarize TotalMB = sum(usageMB_d), TotalRequests = sum(usageRequests_d) by appId_s4| top 10 by TotalMB desc5| project AppId = appId_s,6 TotalDataMB = round(TotalMB, 2),7 TotalAPIRequests = TotalRequests8| order by TotalDataMB descAnticipation des futures politiques de throttling
Microsoft n'a pas encore communiqué officiellement sur d'éventuelles politiques de throttling basées sur ces métriques. Cependant, l'introduction de ce rapport suggère une évolution vers un modèle de gouvernance plus strict. Il est conseillé de commencer à collecter et archiver ces données dès maintenant afin d'établir des baselines de consommation qui serviront de référence lors de futures négociations avec Microsoft ou d'investigations de sécurité.
Limitations connues et points d'attention
- Préversion uniquement : L'endpoint
/betapeut être modifié ou retiré sans préavis par Microsoft - Permissions délégées exclusivement : L'absence de support des permissions applicatives limite l'automatisation non-interactive
- Délai de disponibilité : Les données ne sont pas disponibles en temps réel ; elles sont générées quotidiennement avec un délai potentiel de 24 à 72 heures
- Champ
activeAppsnon fonctionnel : Documenté mais non retourné dans les réponses actuelles - Pas de rétention configurable : La période maximale interrogeable est de 30 jours (
D30) - Uniformité Graph API : L'obligation d'activer manuellement la collecte et l'existence d'un endpoint dédié (plutôt qu'une intégration native dans
getGraphApiUsage) reflète une fragmentation architecturale des équipes produit Microsoft
Ressources de référence officielles
- Documentation Microsoft Graph - enableApiUsageReport
- Documentation Microsoft Graph - getSharePointApiUsage
- Graph API Changelog
- Microsoft Graph PowerShell SDK
- RĂ´les Azure AD pour les rapports Microsoft 365
- Microsoft Graph Explorer
Conclusion
Le SharePoint API Usage Report est une addition bienvenue dans l'arsenal de reporting Microsoft Graph, notamment pour les organisations ayant de nombreuses applications tierces ou internes intégrées à SharePoint Online. Malgré ses limitations actuelles — absence de permissions applicatives, nécessité d'activation manuelle, données non temps-réel — il offre une visibilité jusqu'alors inexistante sur la consommation API au niveau applicatif.
La mise en place d'une collecte automatisée et d'un archivage dans Log Analytics dès maintenant permettra d'établir des baselines solides et de se préparer à d'éventuelles politiques de throttling que Microsoft pourrait introduire à l'avenir. C'est une bonne pratique de gouvernance que tout administrateur SharePoint Online sérieux devrait intégrer dans son outillage de supervision.



