Présentation de l’API Cost Management de Microsoft 365 Copilot

Importante

Les API sous la /beta version sont susceptibles d’être modifiées. L’utilisation de ces API dans des applications de production n’est pas prise en charge.

L’API Cost Management pour Microsoft 365 Copilot permet aux administrateurs de régir et d’observer la consommation par les locataires des crédits Copilot et AI par le biais de Microsoft Graph, basé à /copilot/costManagement. Le contrat est basé sur des unités et est libellé en crédit. Il couvre l’instantané du solde de crédit du locataire, la gestion des stratégies de dépenses, l’étendue de l’audience de groupe, les paramètres par service, les alertes de seuil de notification uniquement et leurs destinataires, les soldes de consommation par utilisateur, l’examen des demandes de crédit des utilisateurs et les rapports d’utilisation qui décomposent la consommation par utilisateur, groupe de sécurité, service régi et classe de financement.

L’API est libellée en crédit et exclut délibérément les prévisions d’achat. Il ne renvoie aucune devise, facture, prix ou montant de règlement.

Fonctionnalités clés

  • Lisez l’instantané du solde de crédit à l’échelle du client, avec une ligne par mode de facturation.
  • Créez, lisez, mettez à jour et supprimez des stratégies de dépenses qui limitent la consommation de crédits Copilot pour une audience.
  • Étendre une stratégie à chaque utilisateur du client (allUsersSpendingPolicy) ou à des groupes sélectionnés (selectedGroupsSpendingPolicy).
  • Gérez l’audience d’un groupe de stratégies à l’aide $ref de liens de référence.
  • Configurez les paramètres par service qui régissent ou excluent des services d’IA individuels dans une stratégie.
  • Configurez les alertes de seuil de notification uniquement et gérez leurs destinataires.
  • Diagnostiquez le solde de consommation par service d’un utilisateur et comprenez pourquoi un utilisateur peut ou ne peut pas utiliser un service.
  • Répertoriez, examinez, approuvez ou rejetez les demandes de crédits Copilot des utilisateurs, individuellement ou en bloc.
  • Rapport de consommation pour une journée UTC terminée par utilisateur, groupe de sécurité et service gouverné, avec classement et pagination.
  • Déclarez la consommation d’un mois civil par classe de financement (prépayée, paiement à l’utilisation, dépassement non facturé et non facturable).
  • Lisez les détails bruts d’utilisation d’un utilisateur sur une fenêtre d’horodatage, ventilés par service et session.

Exemples de scénarios

  • Un administrateur définit une limite de crédit mensuelle pour un groupe pilote et alerte les administrateurs lorsque l’utilisation atteint 80 %.
  • Un administrateur ajoute ou supprime un service gouverné sur une stratégie existante.
  • Un administrateur de support diagnostique la raison pour laquelle un utilisateur ne peut plus consommer un service en lisant le solde par service de cet utilisateur.
  • Un lecteur FinOps répertorie les stratégies de dépenses activées du client et passe en revue leurs limites configurées.
  • Un administrateur IA examine les demandes de crédit en attente pour Work IQ et les approuve en bloc.
  • Un analyste FinOps divise la consommation d’hier par service pour voir où les crédits sont allés dans les expériences d’IA.
  • Un administrateur de facturation clôture un mois en examinant sa consommation par classe de financement, y compris les dépassements non facturés.
  • Un analyste FinOps ou un responsable d’unité commerciale classe les utilisateurs ou les groupes de sécurité les plus consommateurs pour une journée.
  • Un administrateur de support inspecte les sessions d’utilisation brute d’un utilisateur sur une fenêtre de temps.

Personas et rôles

Les personas cibles incluent l’administrateur IA et l’administrateur de licence pour la gestion des stratégies ; le FinOps/Global Reader et l’administrateur de facturation pour les lectures ; et l’administrateur du support/support technique pour les diagnostics par utilisateur. Pour les rapports d’utilisation, les personas cibles incluent l’analyste FinOps et l’administrateur de facturation pour les rapports sur les services et le financement, ainsi que l’analyste FinOps et le responsable de l’unité commerciale (BU) pour le classement des utilisateurs et des groupes. La création d’une stratégie de dépenses nécessite également le rôle d’annuaire Administrateur de facturation ou Administrateur général au moment de l’exécution.

Les administrateurs de facturation, les administrateurs généraux, les administrateurs d’IA, les lecteurs généraux et les lecteurs d’IA peuvent lire les demandes de crédit. Les administrateurs généraux, les administrateurs de facturation et les administrateurs d’IA peuvent les approuver ou les rejeter.

Autorisations

Cette API utilise la famille d’autorisations CopilotCostManagement-* . La plupart des opérations prennent uniquement en charge les autorisations déléguées (compte professionnel ou scolaire). La lecture du solde de crédit client (getTenantCreditBalance) prend également en charge l’autorisation d’applicationCopilotCostManagement.Read.All, et les rapports d’utilisation du service et du financement prennent également en charge les autorisations d’application et CopilotCostManagement.Read.All de financementCopilotCostManagement-Reports.Read.All. Les comptes Microsoft personnels ne sont pas pris en charge. Choisissez l’autorisation de moindre privilège pour chaque opération.

Importante

Certaines autorisations de gestion des coûts Microsoft 365 Copilot peuvent ne pas encore apparaître dans le sélecteur d’autorisations d’API du centre dʀ�administration Microsoft Entra. Les exigences normales de consentement de l’administrateur et d’autorisation de l’API s’appliquent toujours.

Pour l’accès délégué, demandez l’autorisation de moindre privilège répertoriée pour l’opération par son nom d’étendue complet dans le flux d’authentification de votre application, par exemple https://graph.microsoft.com/CopilotCostManagement-Reports.Read.All pour les rapports de service ou de financement agrégés. Un administrateur client autorisé peut accorder un consentement par le biais d’une demande de consentement administrateur spécifique au client en utilisant l’ID client de votre application, l’URI de redirection enregistré et le même nom d’étendue, sans sélectionner au préalable l’autorisation dans le sélecteur.

Ce flux scope-name s’applique uniquement aux autorisations déléguées ; Il ne configure ni n’accorde d’autorisations à l’application.

Autorisation Opérations
CopilotCostManagement.Read.All Lisez l’instantané du solde de crédit du locataire. Lisez également tous les rapports d’utilisation avec des autorisations déléguées. L’accès aux applications s’applique uniquement au solde de crédit du locataire et aux rapports d’utilisation des services et des financements.
CopilotCostManagement-Reports.Read.All Lire les rapports d’utilisation des services et des financements agrégés.
CopilotCostManagement-Policy.Read.All Lisez les stratégies de dépenses, les paramètres par service, les seuils d’alerte et les destinataires.
CopilotCostManagement-Policy.ReadWrite.All Créer, mettre à jour et supprimer des stratégies, des paramètres de service, des alertes et des destinataires.
CopilotCostManagement-Assignment.Read.All Lisez l’audience d’un groupe de stratégies.
CopilotCostManagement-Assignment.ReadWrite.All Ajouter et supprimer une audience de groupe de stratégie.
CopilotCostManagement-UserData.Read.All Lire les diagnostics de solde d’un utilisateur nommé, y compris la consommation et le fichier .spendingPolicyId Lisez également les enregistrements d’utilisation des utilisateurs et des groupes ainsi que les détails bruts d’utilisation par utilisateur, y compris les services, les sessions, les identificateurs de session native et les horodatages de la première et de la dernière activité.
CopilotCostManagement-CreditReq.Read.All Lisez les demandes de crédit.
CopilotCostManagement-CreditReq.ReadWrite.All Lire les demandes de crédit et les approuver ou les rejeter.

Liste des API

Opération Méthode HTTP Description
Obtenir le solde créditeur du locataire GET /copilot/costManagement/getTenantCreditBalance Obtenez l’instantané du solde de crédit à l’échelle du locataire.
List spendingPolicies GET /copilot/costManagement/spendingPolicies Obtenez une liste des stratégies de dépenses.
Créer une stratégie de dépense POST /copilot/costManagement/spendingPolicies Créez une stratégie de dépenses.
Obtenir spendingPolicy GET /copilot/costManagement/spendingPolicies/{id} Récupérer une stratégie de dépenses.
Mettre à jour spendingPolicy PATCH /copilot/costManagement/spendingPolicies/{id} Mettre à jour une stratégie de dépenses.
Supprimer spendingPolicy SUPPRIMER /copilot/costManagement/spendingPolicies/{id} Supprimez une stratégie de dépenses.
Liste attribuéeGroupes GET /copilot/costManagement/spendingPolicies/{id}/microsoft.graph.selectedGroupsSpendingPolicy/assignedGroups Répertorier les groupes affectés à une stratégie.
Ajouter attribuéGroupe POST /copilot/costManagement/spendingPolicies/{id}/microsoft.graph.selectedGroupsSpendingPolicy/assignedGroups/$ref Ajoutez une référence de groupe à une stratégie.
Supprimer attribuéGroup. SUPPRIMER /copilot/costManagement/spendingPolicies/{id}/microsoft.graph.selectedGroupsSpendingPolicy/assignedGroups/{groupId}/$ref Supprimer une référence de groupe.
Répertorier les dépensesPolicyServiceSettings GET /copilot/costManagement/spendingPolicies/{id}/serviceSettings Répertorier les paramètres de service d’une stratégie.
Créer spendingPolicyServiceSetting POST /copilot/costManagement/spendingPolicies/{id}/serviceSettings Ajouter un service à une stratégie.
Obtenir spendingPolicyServiceSetting GET /copilot/costManagement/spendingPolicies/{id}/serviceSettings/{serviceId} Récupérez un paramètre de service.
Mettre à jour spendingPolicyServiceSetting PATCH /copilot/costManagement/spendingPolicies/{id}/serviceSettings/{serviceId} Mettre à jour un paramètre de service.
Obtenir costManagementAlertSetting GET /copilot/costManagement/spendingPolicies/{id}/emailThresholdSettings Récupérer la configuration des alertes d’une stratégie.
Mettre à jour costManagementAlertSetting PATCH /copilot/costManagement/spendingPolicies/{id}/emailThresholdSettings Créez ou mettez à jour la configuration de l’alerte.
Supprimer costManagementAlertSetting SUPPRIMER /copilot/costManagement/spendingPolicies/{id}/emailThresholdSettings Supprimez la configuration de l’alerte.
Liste des destinataires GET /copilot/costManagement/spendingPolicies/{id}/emailThresholdSettings/recipients Répertorier les destinataires de l’alerte.
Ajouter un destinataire POST /copilot/costManagement/spendingPolicies/{id}/emailThresholdSettings/recipients/$ref Ajoutez un destinataire d’alerte.
Supprimer un destinataire SUPPRIMER /copilot/costManagement/spendingPolicies/{id}/emailThresholdSettings/recipients/{userId}/$ref Supprimer un destinataire d’alerte.
Obtenir costManagementUserBalance GET /copilot/costManagement/userBalances/{userId} Récupérez le solde de consommation d’un utilisateur.
List costManagementUserServiceBalances GET /copilot/costManagement/userBalances/{userId}/serviceBalances Répertorier les lignes de solde par service d’un utilisateur.
Get costManagementUserServiceBalance GET /copilot/costManagement/userBalances/{userId}/serviceBalances/{serviceId} Récupérer la ligne de solde d’un service pour un utilisateur.
Liste des creditRequests GET /copilot/costManagement/creditRequests Répertoriez les demandes de crédit du locataire.
Obtenir une demande de crédit GET /copilot/costManagement/creditRequests/{id} Récupérer une demande de crédit.
Mettre à jour creditRequest PATCH /copilot/costManagement/creditRequests/{id} Approuver ou rejeter une demande de crédit.
Décisions d’enregistrement par lots POST /copilot/costManagement/creditRequests/batchRecordDecisions Approuver ou rejeter des demandes de crédit en bloc.
List costManagementUserUsageRecords GET /copilot/costManagement/usageReports/userUsageRecords Répertorier la consommation signalée par utilisateur pour une journée UTC terminée.
Get costManagementUserUsageRecord GET /copilot/costManagement/usageReports/userUsageRecords/{userId} Récupérez la consommation signalée d’un utilisateur pour une journée UTC terminée.
List costManagementGroupUsageRecords GET /copilot/costManagement/usageReports/groupUsageRecords Répertorie la consommation signalée par groupe de sécurité pour un jour UTC terminé.
Get costManagementGroupUsageRecord GET /copilot/costManagement/usageReports/groupUsageRecords/{groupId} Récupérez la consommation signalée d’un groupe de sécurité pour un jour UTC terminé.
List costManagementServiceUsageRecords GET /copilot/costManagement/usageReports/serviceUsageRecords Répertorier la consommation signalée par service gouverné pendant un jour UTC terminé.
Obtenir costManagementServiceUsageRecord GET /copilot/costManagement/usageReports/serviceUsageRecords/{serviceId} Récupérez la consommation signalée d’un service pour un jour UTC terminé.
List costManagementFundingUsageRecords GET /copilot/costManagement/usageReports/fundingUsageRecords Énumérez la consommation déclarée par catégorie de financement pour un mois civil.
Obtenir costManagementUserUsageDetail GET /copilot/costManagement/usageReports/userUsageDetails/{userId} Récupérez les détails bruts d’utilisation d’un utilisateur sur une fenêtre d’horodatage.
List costManagementUserUsageServiceDetails GET /copilot/costManagement/usageReports/userUsageDetails/{userId}/services Répertorier la consommation brute d’un utilisateur par service gouverné.
List costManagementUserUsageSessionDetails GET /copilot/costManagement/usageReports/userUsageDetails/{userId}/sessions Répertorier l’utilisation brute d’un utilisateur groupée par session.

Sémantique d’accès concurrentiel et de suppression

  • Pour muter une stratégie existante et ses ressources enfants (paramètres de service et liens de référence), incluez un If-Match en-tête avec l’ETag de la stratégie parente. Les paramètres de service et les liens de référence ne disposent pas de leur propre ETag. La stratégie parente gère l’accès concurrentiel et s’affiche comme parentEtag sur un paramètre de service. Lorsque vous créez une stratégie, elle n’a pas d’ETag existant et n’utilise If-Matchpas .
  • La serviceSettings collection ne prend pas en charge DELETE. Définie state sur disabled pour supprimer un service. L’entrée reste dans cet état.
  • Gérez les assignedGroups relations et recipients en tant que propriétés de navigation de référence avec $ref ajouter et supprimer.
  • Les demandes de crédit portent leur propre ETag fort, retourné comme @odata.etag et dans l’en-tête de réponse ETag . La mise à jour de creditRequest nécessite un If-Match en-tête ; l’action batchRecordDecisions prend une valeur par élément etag à la place.
  • Une décision de demande de crédit qui correspond à l’état actuel est une non-op qui conserve l’ETag, decisionByet les horodatages. L’ETag est toujours vérifié, donc une décision du même État avec un ETag obsolète échoue avec preconditionFailed.
  • Les demandes de crédit ne peuvent pas être créées ou supprimées via l’API. Les utilisateurs les créent en dehors de Microsoft Graph et le service les conserve conformément à sa stratégie de rétention.

Rapport d’utilisation, sélecteurs d’heure et pagination

Les rapports d’utilisation résident sous /copilot/costManagement/usageReports. Chaque demande de rapport d’utilisation nécessite un sélecteur de temps, fourni en tant que paramètres de requête. Les demandes sans les sélecteurs requis sont rejetées avec une 400 unsupportedQuery réponse.

Famille de sélecteurs Paramètres Format Utilisateur
Jour UTC terminé startDate, endDate Date, YYYY-MM-DD. Début inclusif et fin exclusive. endDate doit être égal à startDate plus un jour, et son UTC minuit ne doit pas être postérieur à l’heure actuelle. Enregistrements d’utilisation d’utilisateur, de groupe et de service (list and get)
Mois Calendar month String, YYYY-MM. Les plages de dates sont rejetées. Enregistrements d’utilisation du financement
Fenêtre d’horodatage startDateTime, endDateTime DateTimeOffset, UTC ISO 8601, jusqu’à sept chiffres fractionnaires. Début inclusif et fin exclusive. Actuellement, startDateTime doit être antérieur à endDateTime, endDateTime ne peut pas être postérieur à l’heure actuelle, la fenêtre peut avoir une durée maximale de 24 heures et la fenêtre ne peut pas franchir la limite UTC-mois-calendrier. La fin peut être égale à minuit UTC le premier jour du mois suivant. Détails de l’utilisation de l’utilisateur, de ses services et de ses sessions

Les sélecteurs non valides sont rejetés, mais non limités. Les plages de jours actuels, futurs et de plusieurs jours des rapports terminés UTC renvoient une 400 réponse, tout comme les fenêtres d’horodatage qui ne respectent pas actuellement les limites de fenêtre d’horodatage dans la table. La validation n’applique pas un fichier plus ancien autorisé startDate ou month.

  • Pagination. Les enregistrements d’utilisation des utilisateurs, des groupes et des services, ainsi que les sessions d’utilisation des utilisateurs, utilisent la pagination gérée par le serveur avec $skiptoken; $skip n’est pas pris en charge. Suivez l’URL complète @odata.nextLink inchangée. La suite conserve les sélecteurs, le filtre et l’ordre d’origine, mais il ne s’agit pas d’un instantané ponctuel. Les pages ultérieures lisent les données actives, de sorte que des lignes peuvent se répéter ou être manquées entre les pages. Une nextLink personne dont les dates diffèrent de la demande initiale est rejetée avec une 400 réponse. Dans les enregistrements d’utilisation de l’utilisateur, du groupe et du service, $top accepte un nombre entier compris entre 1 et 100, la valeur par défaut étant 10, et les valeurs en dehors de cette plage sont rejetées et non plafonnées. Les sessions d’utilisation utilisateur ont une taille de page par défaut distincte de 20 et un maximum de 100. Les enregistrements d’utilisation du financement et les services d’utilisation des utilisateurs ne sont pas paginés.
  • Filtrage. Les enregistrements d’utilisation de l’utilisateur, du groupe et du service sont pris en charge $filter sur userId, groupIdet serviceId respectivement, en utilisant uniquement l’opérateur eq . D’autres opérateurs, comme in, ne sont pas pris en charge.
  • Commande. Ne prend en charge que .consumedQuantity$orderby Les liens sont rompus en interne et le classement sur la clé de dimension n’est pas pris en charge.
  • Unités. Chaque quantité porte un unit, actuellement copilotCredit. Aucune devise, facture, prix ou montant de règlement n’est retourné.
  • Transformé versus brut. userUsageRecords Renvoie la consommation traitée pour un jour UTC terminé que vous pouvez classer parmi les utilisateurs. userUsageDetails Renvoie l’utilisation brute et facturable d’un utilisateur avec indicateur sur une fenêtre d’horodatage, avec des ventilations de services et de sessions. Les deux mesures, y compris leurs sessionCount valeurs, ne sont pas garanties égales.
  • Parents illisibles. GET /copilot/costManagement/usageReports Renvoie une 404 réponse et ne transporte aucune donnée. GET /copilot/costManagement/usageReports/userUsageDetails n’est pas listable ; lire les détails par ID utilisateur à la place.

Conditions d’erreur

Les réponses d’erreur utilisent l’OData error standard et innerError l’enveloppe. Il innerError.code signale les conditions spécifiques à la charge de travail, tandis que l’OData error.code standard signale les conditions génériques. La sécurité au niveau des lignes s’exécute avant la recherche, de sorte qu’une ressource client hors étendue retourne une 404 réponse au lieu d’une 403 réponse.

Condition HTTP Code d’erreur
L’appelant ne dispose pas de l’autorisation requise ou d’un rôle d’annuaire éligible 403 Authorization_RequestDenied
Option de requête non prise en charge ou requête incorrecte 400 invalidRequest, unsupportedQuery
Le sélecteur d’heure du rapport d’utilisation est manquant, incorrect ou incompatible ; un utilisateur, un groupe ou une plage de services ne sélectionne pas exactement un jour UTC terminé ; $top des enregistrements d’utilisation de l’utilisateur, du groupe ou du service est compris entre 1 et 100 ; le début d’une fenêtre de détails d’utilisation d’un utilisateur n’est pas antérieur à sa fin, sa fin est postérieure à l’heure actuelle, elle dure plus de 24 heures ou elle dépasse une limite UTC-mois-calendrier ; ou un jeton de continuation n’est pas valide ou ne correspond pas 400 unsupportedQuery
Un rapport d’utilisation à clé lu n’a pas d’utilisation représentée. Cette réponse n’est pas une preuve de consommation zéro ou de l’existence de l’utilisateur ou du groupe. 404 usageDataUnavailable
La suppression du dernier groupe affecté laisserait la stratégie sans public affecté 409 lastAssignedGroup
Une autre stratégie non handicapée à l’échelle du client régit déjà le même service 409 allUsersServiceConflict
Une stratégie étendue à un groupe partage à la fois un groupe affecté et un service activé avec une autre stratégie non désactivée 409 groupServiceConflict
Désactivation du dernier service activé sur une stratégie qui a des paramètres de service 409 atLeastOneServiceRequired
Valeur du seuil d’alerte hors plage (les seuils de pourcentage doivent être un entier compris entre 1 et 100) 400 invalidAlertThreshold
Appliquer un correctif à un champ d’une stratégie qui n’est pas dans un état modifiable 400 policyNotEditableWhilePending
ID de service inconnu ou non valide 400 invalidService
Alerte activée sans destinataire lié, ou suppression du dernier destinataire lorsque l’alerte est activée 400 alertRecipientsRequired
La référence du destinataire de l’alerte ne se résout pas en un utilisateur réel dans l’annuaire du locataire 400 alertRecipientNotFound
Approvisionnement d’un champ géré par le serveur dans PATCH 400 invalidRequest
Obsolète If-Match lors d’une opération de mutation 412 preconditionFailed
Manquant If-Match dans la mise à jour d’une demande de crédit 428 preconditionRequired
Incorrect, faible (W/) ou *If-Match sur une mise à jour de demande de crédit 400 invalidRequest
Transition d’état simultané en conflit 409 invalidTransition
L’évaluateur en amont a échoué pour chaque service, de sorte qu’aucune ligne d’équilibrage n’a pu être produite 503 sourceUnavailable
L’ID de demande de crédit n’existe pas 404 itemNotFound
Charge utile de décision en bloc non valide, comme une liste vide, plus de 100 éléments ou des ID de demande en double 400 invalidRequest
Transition d’état de demande de crédit non prise en charge lors de la mise à jour 400 invalidRequest
Échec de la dépendance de la liste ou du nombre de demandes de crédit 503 serviceNotAvailable
La source du rapport d’utilisation a échoué. Ne traitez pas cette réponse comme une consommation nulle. 503 sourceUnavailable
Limitation d’API. Honorer l’en-tête Retry-After . 429 tooManyRequests

L’action batchRecordDecisions renvoie des échecs par élément dans une 200 OK réponse, et non pas sous forme d’erreurs HTTP.