Référence de l’API

Dépenses d’IA

Dépenses en modèles d’IA par émetteur de facture, éditeur du modèle, modèle et compteur, rapportées à vos bons de commande.

En savoir plus sur cette ressource

Nouveau avec les contrôles des dépenses d’IA. Les dépenses d’IA sont ce que coûtent les lignes de services d’IA de la facturation AWS, Google Cloud, Azure et OCI que vous avez connectée (Amazon Bedrock, SageMaker, Vertex AI, Azure OpenAI, OCI Generative AI et les modèles du marketplace sur la même facture), plus ce que déclarent les fournisseurs IA que vous connectez directement (voir Fournisseurs IA). Pleaxy les lit par la même connexion en lecture seule que le reste de la facture, avec le même choix de sources de données : une connexion qui autorise current_cost donne le mois en cours et une prévision ; une qui autorise invoices, le mois clôturé. AWS fait exception : il ne fournit les lignes d’IA que via Cost Explorer, si bien qu’une connexion AWS a besoin de current_cost pour le moindre chiffre d’IA (avec lui, le mois clôturé vient aussi). Le fournisseur est celui qui facture (l’émetteur) ; l’entreprise dont le modèle a été utilisé est le vendor de la ligne, si bien que Claude sur Bedrock est une dépense AWS avec vendor anthropic, et rien n’est compté deux fois. Chaque montant est dans la devise de facturation de l’émetteur, jamais converti ni additionné entre devises. Les règles d’attribution associent les tags, labels, projets et workspaces des fournisseurs à des centres de coûts (GetAiAttribution), et une ligne de commande validée peut fixer le plafond de dépenses du fournisseur lui-même (SetAiSpendLimit, sur activation).

Obtenir les dépenses d’IA

Dépenses d’IA d’une période, par émetteur, éditeur du modèle, modèle ou centre de coûts.

GET/v1/workspaces/{regionId}/ai-spend

Paramètres

  • periodstring

    Le mois, YYYY-MM. Par défaut, le mois en cours.

  • groupBy"invoicer" | "vendor" | "model" | "costCenter"

    Ce qu’est chaque groupe. Par défaut invoicer, qui correspond à vos factures. vendor additionne un éditeur de modèle entre émetteurs (ce que vous dépensez pour Claude, quel que soit celui qui le facture), model un identifiant de modèle tel que facturé, costCenter les centres de coûts des règles d’attribution.

Retour

200 OK avec l’objet présenté dans la réponse.

Plus de détails

Pour une période (par défaut le mois en cours), les dépenses d’IA de chaque émetteur connecté, groupées selon groupBy : mois en cours, prévision pour toute la période, dernier mois clôturé et variation par rapport à celui-ci, avec la consommation par compteur et, à côté de chaque émetteur, les lignes de bon de commande ouvertes émises à son nom et ce qu’il y reste. Les chiffres sont les lignes d’IA que les connexions ont synchronisées (chaque jour pour current_cost, comme le coût du mois en cours aujourd’hui). Un émetteur dont la connexion ne lit que les factures affiche le mois clôturé : son mois en cours et sa prévision sont absents (un compte AWS qui ne lit que les factures n’a aucune ligne d’IA et figure dans notReadable). La prévision est celle du fournisseur lorsqu’il en donne une (AWS Cost Explorer), sinon linéaire sur les jours écoulés. Les montants sont dans la devise de facturation de chaque émetteur, et les totaux comptent une entrée par devise, jamais additionnés entre devises. Grouper par costCenter suit les règles d’attribution (GetAiAttribution) ; une ligne qu’aucune règle ne retient est non attribuée.

Champs de la réponse

  • periodstring

    Le mois auquel les chiffres se rapportent, YYYY-MM.

  • asOfstring

    Quand la ligne la plus récente a été synchronisée, ISO 8601. Le mois en cours est arrêté à ce moment, pas à maintenant.

  • totalsArray<object>

    Une entrée par devise de facturation, jamais additionnées entre devises : monthToDate, forecast pour toute la période, lastMonth (le dernier mois clôturé) et changePct, la variation de la prévision par rapport à lastMonth, en pourcentage.

  • groups[].keystring

    Selon groupBy : l’identifiant de la connexion cloud de l’émetteur ; l’éditeur du modèle (anthropic, openai, google, meta, mistral, amazon, microsoft, cohere, xai, deepseek ou unknown pour un type d’usage que Pleaxy n’a pas encore mappé) ; l’identifiant du modèle tel que facturé, par exemple claude-sonnet-4-5 ou gemini-2.5-pro ; ou le code du centre de coûts.

  • groups[].labelstring

    Ce qu’il faut afficher pour le groupe : le libellé de compte de la connexion, le nom de l’éditeur du modèle, le nom du modèle ou le nom du centre de coûts.

  • groups[].invoicerstring

    Qui facture les dépenses du groupe, un cloud ou un fournisseur IA, avec invoicerId pour sa connexion : toujours avec groupBy invoicer et, pour un groupe par éditeur ou par modèle, lorsqu’une seule connexion facture le tout (Claude uniquement via Bedrock, par exemple) ; absent lorsqu’il y en a plusieurs. Un groupe par centre de coûts n’en a jamais.

  • groups[].monthToDatenumber

    Dans la devise du groupe, avec forecast, lastMonth et changePct comme dans totals. monthToDate et forecast sont absents pour un émetteur dont la connexion ne lit que les factures : il n’affiche que lastMonth.

  • groups[].quantitiesArray<object>

    La consommation par compteur. Lignes mesurées en tokens : input_tokens, output_tokens, cached_input_tokens, cache_write_tokens, batch_input_tokens, batch_output_tokens, images, audio_seconds, embeddings_tokens ou requests. Lignes de capacité : gpu_hours, ptu_hours, model_units_hours ou cluster_hours. other pour une ligne que Pleaxy n’a pas encore mappée à un compteur. unit est l’unité de la quantité : 1M_tokens, tokens, requests, images, seconds, gpu_hours, ptu_hours, model_unit_hours ou units pour une ligne non mappée.

  • groups[].purchaseOrdersArray<object>

    Les lignes de bon de commande ouvertes émises à l’émetteur du groupe, avec ce qu’il reste sur chacune (remaining, dans la devise du groupe) après les factures déjà imputées dessus. Uniquement pour un groupe avec émetteur.

  • groups[].servicesArray<object>

    Uniquement avec groupBy invoicer : les chiffres du groupe par service propre du fournisseur (Amazon Bedrock, avec les modèles du marketplace qu’il facture ; Amazon SageMaker ; Vertex AI ; ...), tels que l’onglet Cloud de la page Dépenses les affiche.

  • unattributedArray<object>

    Uniquement avec groupBy costCenter : les dépenses qu’aucune règle d’attribution n’a retenues, une entrée par devise sous la forme d’un groupe, affichées et jamais masquées. Écrivez une règle pour elles avec SetAiAttribution.

  • notReadableArray<object>

    Les comptes connectés sans ligne d’IA, et pourquoi : needs_current_cost pour un compte AWS dont la connexion n’autorise pas le coût actuel (AWS ne fournit ses lignes d’IA que via Cost Explorer), not_synced_yet pour un compte dont les lignes d’IA n’ont pas encore été lues. Absent lorsqu’il n’y en a aucun.

Erreurs

  • 400 Bad Request - period n’est pas un mois au format YYYY-MM, ou groupBy n’est ni invoicer, ni vendor, ni model, ni costCenter.
  • 401 Unauthorized - Aucun identifiant n’a été fourni, ou la valeur du jeton Bearer / de X-Api-Key est manquante, invalide, expirée ou révoquée.
  • 403 Forbidden - Le jeton Bearer ou la clé API de l’appelant ne donne pas accès à cet espace de travail (regionId), ou n’a pas le rôle requis.
GET /v1/workspaces/{regionId}/ai-spend
Requête
GET /v1/workspaces/reg_01k5x8p9j3q7vn2mhb4tzc6rde.buyer/ai-spend?period=2026-10&groupBy=vendor
Réponse · 200 OK
{
   "period": "2026-10",
   "asOf": "2026-10-29T06:10:00.000Z",
   "totals": [
      { "currency": "USD", "monthToDate": 57280.14, "forecast": 61400, "lastMonth": 48930.55, "changePct": 25.5 }
   ],
   "groups": [
      {
         "key": "anthropic",
         "label": "Anthropic",
         "invoicer": "aws",
         "invoicerId": "conn_01k7q2n4m8b3xd5fwj9hz6rsvt",
         "currency": "USD",
         "monthToDate": 44612.3,
         "forecast": 47830,
         "lastMonth": 38104.2,
         "changePct": 25.5,
         "quantities": [
            { "meter": "input_tokens", "unit": "1M_tokens", "quantity": 7120.4 },
            { "meter": "output_tokens", "unit": "1M_tokens", "quantity": 918.3 },
            { "meter": "cached_input_tokens", "unit": "1M_tokens", "quantity": 15480 },
            { "meter": "cache_write_tokens", "unit": "1M_tokens", "quantity": 1288.7 }
         ],
         "purchaseOrders": [ { "poId": "PO-8842", "lineNo": 1, "remaining": 4200 } ]
      },
      {
         "key": "amazon",
         "label": "Amazon",
         "invoicer": "aws",
         "invoicerId": "conn_01k7q2n4m8b3xd5fwj9hz6rsvt",
         "currency": "USD",
         "monthToDate": 12667.84,
         "forecast": 13570,
         "lastMonth": 10826.35,
         "changePct": 25.3,
         "quantities": [
            { "meter": "input_tokens", "unit": "1M_tokens", "quantity": 10874.8 },
            { "meter": "output_tokens", "unit": "1M_tokens", "quantity": 1240 }
         ],
         "purchaseOrders": [ { "poId": "PO-8842", "lineNo": 1, "remaining": 4200 } ]
      }
   ]
}

Lister les lignes d’usage d’IA

Liste les lignes d’usage d’IA derrière les chiffres, page par page.

GET/v1/workspaces/{regionId}/ai-spend/lines

Paramètres

  • periodstring

    Le mois, YYYY-MM. Par défaut, le mois en cours.

  • invoicerIdstring

    Uniquement les lignes facturées via cette connexion cloud.

  • vendorstring

    Uniquement cet éditeur de modèle, par exemple anthropic.

  • modelstring

    Uniquement cet identifiant de modèle tel que facturé, par exemple claude-sonnet-4-5.

  • costCenterstring

    Uniquement les lignes attribuées à ce centre de coûts (son code). Les lignes sont attribuées par les règles d’attribution.

  • limitnumber

    Taille de page, de 1 à 500. Par défaut, 100.

  • cursorstring

    Le nextCursor de la page précédente. Omettez-le pour la première page.

Retour

200 OK avec l’objet présenté dans la réponse.

Plus de détails

Les lignes normalisées à partir desquelles les dépenses d’IA sont additionnées : une par émetteur, jour, éditeur du modèle, modèle, compteur et région, telles que la facturation du fournisseur les a déclarées. Chaque connecteur lit ses propres noms (types d’usage d’AWS Cost Explorer, SKU de l’export de facturation Google Cloud, compteurs d’Azure Cost Management, SKU d’usage OCI) et les mappe vers un éditeur, un modèle et un compteur ; un type d’usage que Pleaxy ne connaît pas encore est conservé avec son nom brut et vendor unknown, jamais écarté. Du jour le plus récent au plus ancien. Renvoyez le nextCursor d’une page comme cursor pour la page suivante, et continuez jusqu’à ce que nextCursor soit absent. Les lignes sont conservées au jour pendant 90 jours, puis par mois.

Champs de la réponse

  • invoicerstring

    Le cloud sur la facture duquel figure la ligne, avec invoicerId pour sa connexion. C’est lui le fournisseur, quel que soit l’éditeur du modèle.

  • vendorstring

    L’entreprise dont le modèle a été utilisé, lue dans le type d’usage, le SKU ou le nom du compteur. unknown lorsque Pleaxy n’a pas encore mappé ce type d’usage ; rawUsageType indique alors le nom donné par le fournisseur.

  • modelstring

    L’identifiant du modèle tel que le fournisseur le facture, par exemple claude-sonnet-4-5 ou gemini-2.5-pro.

  • shapestring

    tokens pour une ligne mesurée en tokens (éditeur × modèle × compteur × région) ; capacity pour du débit provisionné, des heures de GPU ou un cluster dédié (éditeur × sku × compteur).

  • meterstring

    input_tokens, output_tokens, cached_input_tokens, cache_write_tokens, batch_input_tokens, batch_output_tokens, images, audio_seconds, embeddings_tokens ou requests pour les tokens ; gpu_hours, ptu_hours, model_units_hours ou cluster_hours pour la capacité ; other, avec unit units, pour un type d’usage que Pleaxy n’a pas encore mappé.

  • daystring

    YYYY-MM-DD. Après 90 jours, les lignes sont conservées par mois, et day est alors le premier jour du mois.

  • amountnumber

    Ce que le fournisseur facture pour la ligne, hors taxes, en currency : tel qu’il le déclare, jamais converti.

  • unitPricenumber

    amount divisé par quantity, dans l’unité de la grille tarifaire, lorsque quantity est supérieur à 0 : ce que la ligne a réellement été facturée, à rapprocher de ListAiRateCards.

  • attributionobject

    Comment le fournisseur lui-même attribue la ligne, sous les noms qu’il utilise : un tag d’allocation des coûts ou un profil d’inférence d’application (AWS), un label ou un projet (Google Cloud), un groupe de ressources ou un tag (Azure), un compartiment (OCI). Absent lorsque la ligne n’en porte aucun.

  • sourcestring

    De quelle lecture provient la ligne : AWS Cost Explorer (cost_explorer), l’export de facturation BigQuery de Google Cloud (billing_export), Azure Cost Management (cost_management) ou l’API d’usage OCI (usage_api).

  • rawServicestring

    Le nom du service selon le fournisseur lui-même et, en rawUsageType, son type d’usage, SKU ou nom de compteur, conservés pour les audits et sur chaque ligne non mappée.

  • nextCursorstring

    Opaque. Absent lorsqu’il n’y a pas de lignes plus anciennes.

Erreurs

  • 400 Bad Request - period n’est pas un mois au format YYYY-MM, limit est hors limites, ou cursor n’est pas un curseur renvoyé par cette route.
  • 401 Unauthorized - Aucun identifiant n’a été fourni, ou la valeur du jeton Bearer / de X-Api-Key est manquante, invalide, expirée ou révoquée.
  • 403 Forbidden - Le jeton Bearer ou la clé API de l’appelant ne donne pas accès à cet espace de travail (regionId), ou n’a pas le rôle requis.
GET /v1/workspaces/{regionId}/ai-spend/lines
Requête
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/ai-spend/lines" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Réponse · 200 OK
{
   "lines": [
      {
         "invoicerId": "string",
         "invoicer": "aws" | "gcp" | "azure" | "oci" | "openai" | "anthropic" | "mistral" | "snowflake",
         "vendor": "anthropic" | "openai" | "google" | "meta" | "mistral" | "amazon" | "microsoft" | "cohere" | "xai" | "deepseek" | "unknown",
         "model": "string",
         "shape": "tokens" | "capacity",
         "meter": "string",
         "region": "string",
         "day": "string",
         "quantity": number,
         "unit": "1M_tokens" | "tokens" | "requests" | "images" | "seconds" | "gpu_hours" | "ptu_hours" | "model_unit_hours" | "units",
         "amount": number,
         "currency": "string",
         "unitPrice": number,
         "attribution": { "tag": "string", "label": "string", "project": "string", "resourceGroup": "string", "compartment": "string", "inferenceProfile": "string" },
         "source": "cost_explorer" | "billing_export" | "cost_management" | "usage_api",
         "rawService": "string",
         "rawUsageType": "string"
      }
   ],
   "nextCursor": "string"
}

Lister les grilles tarifaires d’IA

Liste les prix publics des modèles d’IA, tels qu’en vigueur un jour donné.

GET/v1/workspaces/{regionId}/ai-rate-cards

Paramètres

  • invoicer"aws" | "gcp" | "azure" | "oci"

    Uniquement les prix de cet émetteur.

  • vendorstring

    Uniquement les modèles de cet éditeur, par exemple anthropic.

  • modelstring

    Uniquement cet identifiant de modèle tel que facturé.

  • onstring

    Un jour, YYYY-MM-DD : uniquement l’entrée en vigueur ce jour-là, par émetteur, éditeur, modèle, compteur et région. Omis, toutes les entrées sont renvoyées.

Retour

200 OK avec l’objet présenté dans la réponse.

Plus de détails

Les prix publics que Pleaxy tient à jour pour chaque émetteur, éditeur, modèle, compteur et région qu’il mappe, avec leurs dates d’effet, relevés sur les pages de tarifs des fournisseurs eux-mêmes. Un changement de prix est une nouvelle entrée avec son propre effectiveFrom ; rien n’est modifié sur place, si bien qu’une ligne est toujours jugée au prix qui s’appliquait le jour même. Avec on, seule l’entrée en vigueur ce jour-là est renvoyée par émetteur, éditeur, modèle, compteur et région ; sans lui, toutes les entrées, passées et actuelles. Le tarif négocié d’un contrat ou sa remise sur le prix public prime sur la grille lorsque Pleaxy vérifie vos lignes ; les grilles elles-mêmes ne se modifient pas.

Champs de la réponse

  • unitPricenumber

    Le prix public par unité, en currency : par 1 000 000 de tokens pour 1M_tokens, par heure pour les unités de capacité.

  • regionstring

    Uniquement lorsque l’émetteur tarifie par région ; absent pour un prix qui s’applique partout.

  • effectiveFromstring

    Le jour où le prix a pris effet, YYYY-MM-DD, et, en effectiveTo, une fois remplacé, le dernier jour où il s’est appliqué. Sans effectiveTo : toujours en vigueur.

  • sourceUrlstring

    La page de tarifs du fournisseur d’où l’entrée a été relevée.

Erreurs

  • 400 Bad Request - on n’est pas un jour au format YYYY-MM-DD, ou invoicer n’est ni aws, ni gcp, ni azure, ni oci.
  • 401 Unauthorized - Aucun identifiant n’a été fourni, ou la valeur du jeton Bearer / de X-Api-Key est manquante, invalide, expirée ou révoquée.
  • 403 Forbidden - Le jeton Bearer ou la clé API de l’appelant ne donne pas accès à cet espace de travail (regionId), ou n’a pas le rôle requis.
GET /v1/workspaces/{regionId}/ai-rate-cards
Requête
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/ai-rate-cards" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Réponse · 200 OK
[
   {
      "invoicer": "aws" | "gcp" | "azure" | "oci" | "openai" | "anthropic" | "mistral" | "snowflake",
      "vendor": "string",
      "model": "string",
      "meter": "string",
      "region": "string",
      "unit": "1M_tokens" | "tokens" | "requests" | "images" | "seconds" | "gpu_hours" | "ptu_hours" | "model_unit_hours",
      "unitPrice": number,
      "currency": "string",
      "effectiveFrom": "string",
      "effectiveTo": "string",
      "sourceUrl": "string"
   }
]

Vérifier les dépenses d’IA

Indique si la prévision de la période tient dans les lignes de bon de commande ouvertes et le budget.

POST/v1/workspaces/{regionId}/ai-spend/check

Corps

  • invoicerIdstring

    La connexion cloud à vérifier : sa prévision rapportée à chaque ligne de bon de commande ouverte émise à son nom.

  • costCenterstring

    Le code ou le nom d’un centre de coûts : ses dépenses d’IA attribuées et sa prévision rapportées à son budget pour la période, lorsque les budgets sont activés. Les lignes sont attribuées par les règles d’attribution.

  • poIdstring

    Un bon de commande : uniquement ses lignes ouvertes, pour l’émetteur auquel il a été adressé.

  • periodstring

    Le mois, YYYY-MM. Par défaut, le mois en cours.

Retour

200 OK avec l’objet présenté dans la réponse.

Plus de détails

Répond à « Bedrock tiendra-t-il dans PO-8842 ce mois-ci ? » à partir des mêmes chiffres que GetAiSpend : le mois en cours et la prévision d’un émetteur, d’un centre de coûts ou d’un bon de commande, rapportés aux lignes de bon de commande ouvertes émises à cet émetteur et, avec un centre de coûts et les budgets activés, à son budget. Rien n’est enregistré et rien ne bloque : le résultat est ce que l’onglet IA de la page Dépenses affiche et ce que l’Assistant et l’outil MCP check_ai_spend répondent. Indiquez au moins l’un de invoicerId, costCenter et poId ; poId implique l’émetteur auquel il a été adressé.

Champs de la réponse

  • outcomestring

    fits : la prévision tient dans ce qu’il reste sur les lignes ouvertes (et le budget). over : elle ne tient pas ; le overBy de chaque ligne dit de combien, et budget.remaining devient négatif. no_po : aucune ligne de bon de commande ouverte n’est émise à l’émetteur pour la période. no_budget : un centre de coûts a été indiqué mais n’a pas de budget pour la période, ou les budgets sont désactivés.

  • currencystring

    La devise de facturation de l’émetteur, dans laquelle sont monthToDate, forecast et les chiffres des lignes. Rien n’est converti : un budget tenu dans une autre devise donne no_budget.

  • purchaseOrdersArray<object>

    Les lignes ouvertes vérifiées, chacune avec remaining après les factures déjà imputées dessus et, lorsque la prévision le dépasse, overBy.

  • budgetobject

    Uniquement avec costCenter et les budgets activés : le budget du centre de coûts pour la période, committed (bons de commande ouverts), actual (factures), accruing (dépenses d’IA attribuées du mois en cours, pas encore facturées : un troisième chiffre, jamais fondu dans les deux autres) et remaining.

Erreurs

  • 400 Bad Request - Aucun de invoicerId, costCenter et poId n’a été indiqué, ou period n’est pas un mois au format YYYY-MM.
  • 404 Not Found - Aucune connexion cloud, aucun centre de coûts ni aucun bon de commande avec cet identifiant dans l’espace de travail.
  • 401 Unauthorized - Aucun identifiant n’a été fourni, ou la valeur du jeton Bearer / de X-Api-Key est manquante, invalide, expirée ou révoquée.
  • 403 Forbidden - Le jeton Bearer ou la clé API de l’appelant ne donne pas accès à cet espace de travail (regionId), ou n’a pas le rôle requis.
POST /v1/workspaces/{regionId}/ai-spend/check
Requête
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/ai-spend/check" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "invoicerId": "string",
   "costCenter": "string",
   "poId": "string",
   "period": "string"
}
Réponse · 200 OK
{
   "outcome": "fits" | "over" | "no_po" | "no_budget",
   "period": "string",
   "currency": "string",
   "monthToDate": number,
   "forecast": number,
   "purchaseOrders": [ { "poId": "string", "lineNo": number, "remaining": number, "overBy": number } ],
   "budget": { "costCenter": "string", "budget": number, "committed": number, "actual": number, "accruing": number, "remaining": number }
}

Suggérer des lignes de bon de commande d’IA

Lignes de bon de commande préremplies à partir de l’usage d’IA d’un émetteur.

GET/v1/workspaces/{regionId}/ai-spend/po-lines

Paramètres

  • invoicerIdstringObligatoire

    L’émetteur dont l’usage alimente les lignes : groups[].invoicerId de GetAiSpend.

  • periodstring

    Le mois, YYYY-MM. Par défaut, le dernier mois clôturé.

Retour

200 OK avec l’objet présenté dans la réponse.

Plus de détails

Les lignes que « Ajouter des lignes d’IA » préremplit sur un bon de commande : pour un émetteur et un mois (par défaut le dernier mois clôturé), une ligne par modèle et compteur qu’il a facturés, avec le volume du mois arrondi au supérieur comme quantité et un prix unitaire tiré de la condition active de votre contrat pour ce modèle (son tarif ou sa remise sur le prix public), sinon du prix public du jour, sinon de ce que le mois a été facturé - priceSource indique lequel. Les lignes que Pleaxy n’a pas pu rattacher à un compteur, et les crédits sans prix en argent, ne sont pas proposés. Rien n’est enregistré : envoyez les lignes à CreatePurchaseOrder, avec le contractId qu’indique une ligne. Nécessite l’accès 'view' aux bons de commande.

Champs de la réponse

  • providerstring

    Pour un émetteur cloud : le fournisseur auquel adresser la commande. Un fournisseur IA direct donne à la place supplierConnectionId, sa fiche fournisseur.

  • lines[].aiobject

    Le périmètre IA de la ligne, à envoyer en lineItems[].ai.

  • lines[].unitstring

    L’unité du compteur : 1M_tokens pour un compteur de tokens, gpu_hours et équivalents pour la capacité.

  • lines[].priceSourcestring

    contract (contractId et contractTermId désignent la condition), list (la grille tarifaire à la date du jour) ou billed (ce que le mois a coûté par unité, lorsque Pleaxy ne tient aucun prix pour le modèle).

  • lines[].periodQuantitynumber

    Ce que le mois a consommé, avec periodAmount ce qui a été facturé, pour que le formulaire de commande l’affiche à côté de la ligne.

Erreurs

  • 400 Bad Request - invoicerId est manquant, ou period n’est pas un mois au format YYYY-MM.
  • 404 Not Found - Aucun émetteur connecté avec cet identifiant dans l’espace de travail.
  • 401 Unauthorized - Aucun identifiant n’a été fourni, ou la valeur du jeton Bearer / de X-Api-Key est manquante, invalide, expirée ou révoquée.
  • 403 Forbidden - Le jeton Bearer ou la clé API de l’appelant ne donne pas accès à cet espace de travail (regionId), ou n’a pas le rôle requis.
GET /v1/workspaces/{regionId}/ai-spend/po-lines
Requête
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/ai-spend/po-lines" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Réponse · 200 OK
{
   "invoicerId": "string",
   "invoicer": "string",
   "period": "string",
   "provider": "string",
   "supplierConnectionId": "string",
   "lines": [
      {
         "ai": { "invoicer": "string", "vendor": "string", "model": "string", "meter": "string", "region": "string" },
         "unit": "string",
         "qty": number,
         "unitPrice": number,
         "currency": "string",
         "priceSource": "contract" | "list" | "billed",
         "contractId": "string",
         "contractTermId": "string",
         "periodQuantity": number,
         "periodAmount": number
      }
   ]
}

Commander la période d’IA suivante

Crée un brouillon de la même commande pour le mois suivant.

POST/v1/workspaces/{regionId}/ai-spend/next-period/{poId}

Paramètres

  • poIdstringObligatoire

    La commande à renouveler : une commande avec des lignes d’IA, ou la commande d’un fournisseur cloud.

Retour

201 Created avec l’objet présenté dans la réponse.

Plus de détails

« Commander la période suivante » : un brouillon de la même commande (fournisseur, centre de coûts, contrat et lignes) pour le mois qui suit celui de ses lignes. La quantité de chaque ligne d’IA est la prévision tirée de l’usage du mois en cours jusqu’ici, linéaire sur les jours écoulés (sa propre quantité si rien n’a encore été consommé) ; toutes les autres lignes gardent leur quantité. Le brouillon passe par la validation habituelle lorsqu’il est soumis. Sans corps. Nécessite l’accès 'create' aux bons de commande.

Erreurs

  • 400 Bad Request - La commande n’a aucune ligne d’IA et n’est pas une commande cloud.
  • 404 Not Found - Aucune commande de ce type dans l’espace de travail.
  • 401 Unauthorized - Aucun identifiant n’a été fourni, ou la valeur du jeton Bearer / de X-Api-Key est manquante, invalide, expirée ou révoquée.
  • 403 Forbidden - Le jeton Bearer ou la clé API de l’appelant ne donne pas accès à cet espace de travail (regionId), ou n’a pas le rôle requis.
POST /v1/workspaces/{regionId}/ai-spend/next-period/{poId}
Requête
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/ai-spend/next-period/{poId}" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Réponse · 201 Created
PurchaseOrder (the draft), as GetPurchaseOrder returns it

Obtenir les recommandations IA

Les dépenses IA qu'aucune commande ne couvre, et des façons moins chères de les acheter.

GET/v1/workspaces/{regionId}/ai-spend/recommendations

Paramètres

  • periodstring

    Le mois dont la couverture est vérifiée, YYYY-MM. Par défaut, ce mois-ci.

Retour

200 OK avec l’objet présenté dans la réponse.

Plus de détails

Ce que recommande l'onglet IA de la page Dépenses. uncovered liste chaque facturant dont la prévision du mois n'est couverte par aucun bon de commande ouvert : no_po quand aucune commande ne lui est adressée, over_po quand la prévision dépasse ce qu'il reste sur ses commandes, avec gap le montant dont une nouvelle commande a besoin. savings liste des façons moins chères d'acheter l'usage du mois dernier, aux prix catalogue du jour : batch (le maximum qu'économiserait le passage des tokens interactifs au tarif par lots), cache (ce qu'économise chaque tranche supplémentaire de 10% d'entrée lue depuis le cache) et reserve (les heures GPU utilisées avec un plancher stable la plupart des jours, et les GPU que ce plancher occupe ; sans montant, car les réservations se négocient par contrat). Les montants inférieurs à 10 ne sont pas listés, et chaque montant reste dans la devise de facturation du facturant. Nécessite l'accès 'view' aux fournisseurs ou aux factures.

Champs de la réponse

  • basisPeriodstring

    Le mois d'où les économies sont lues : le dernier clôturé.

  • uncovered[].coverednumber

    Ce qu'il reste pour le mois sur les lignes des commandes ouvertes adressées à ce facturant.

  • uncovered[].gapnumber

    forecast moins covered : ce dont une nouvelle commande a besoin. DraftAiOrders en crée le brouillon.

  • uncovered[].poIdsstring[]

    Pour over_po, les commandes ouvertes qui en couvrent une partie.

  • accountsobject[]

    Comme uncovered, pour des comptes cloud entiers : toutes leurs dépenses, selon l'estimation en cours du fournisseur, face aux commandes ouvertes qui couvrent le compte. Ce mois-ci seulement. Les dépenses IA d'un compte en font partie : n'additionnez jamais les deux listes.

  • savings[].savingnumber

    batch : le maximum économisé par mois si tout passait en lots (ne convient qu'au travail qui peut attendre). cache : ce qu'économise par mois chaque tranche supplémentaire de 10% d'entrée servie depuis le cache. Absent pour reserve.

  • savings[].detail.cachedSharenumber

    cache : la part de l'entrée déjà lue depuis le cache, de 0 à 1.

  • savings[].detail.reservableUnitsnumber

    reserve : les GPU que le plancher stable de steadyHoursPerDay occupe jour et nuit, sur daysUsed jours du mois.

Erreurs

  • 400 Bad Request - period n’est pas un mois au format YYYY-MM.
  • 401 Unauthorized - Aucun identifiant n’a été fourni, ou la valeur du jeton Bearer / de X-Api-Key est manquante, invalide, expirée ou révoquée.
  • 403 Forbidden - Le jeton Bearer ou la clé API de l’appelant ne donne pas accès à cet espace de travail (regionId), ou n’a pas le rôle requis.
GET /v1/workspaces/{regionId}/ai-spend/recommendations
Requête
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/ai-spend/recommendations" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Réponse · 200 OK
{
   "period": "string",
   "basisPeriod": "string",
   "uncovered": [
      {
         "invoicerId": "string",
         "invoicer": "string",
         "label": "string",
         "currency": "string",
         "monthToDate": number,
         "forecast": number,
         "covered": number,
         "gap": number,
         "reason": "no_po" | "over_po",
         "poIds": [ "string" ]
      }
   ],
   "accounts": [ "same as uncovered, for whole cloud accounts" ],
   "savings": [
      {
         "kind": "batch" | "cache" | "reserve",
         "invoicerId": "string",
         "invoicer": "string",
         "label": "string",
         "vendor": "string",
         "model": "string",
         "currency": "string",
         "spend": number,
         "saving": number,
         "detail": { "interactiveRate": number, "batchRate": number, "inputRate": number, "cachedRate": number, "cachedShare": number, "daysUsed": number, "steadyHoursPerDay": number, "reservableUnits": number }
      }
   ]
}

Créer des brouillons de commandes IA

Crée un brouillon de commande pour les dépenses IA non couvertes de chaque facturant.

POST/v1/workspaces/{regionId}/ai-spend/draft-orders

Corps

  • invoicerIdsstring[]Obligatoire

    Les facturants pour lesquels créer une commande, de 1 à 20 : uncovered[].invoicerId issu de GetAiRecommendations.

  • periodstring

    Le mois couvert par les commandes, YYYY-MM. Par défaut, ce mois-ci.

  • scopestring

    ai (par défaut) : des lignes par modèle et compteur pour l'usage IA. account : une ligne en montant pour tout ce que facture un compte cloud, jusqu'à son gap dans accounts, jusqu'à la fin du mois.

Retour

200 OK avec l’objet présenté dans la réponse.

Plus de détails

« Créer un brouillon de commande » sur une recommandation : pour chaque facturant indiqué, un brouillon de bon de commande pour le mois avec une ligne par modèle et compteur de l'usage du mois dernier, au prix que fixe SuggestAiPoLines, chaque quantité étant la prévision tirée de l'usage de ce mois jusqu'ici. Quand des commandes ouvertes couvrent déjà une partie de la prévision, les quantités sont ramenées à l'écart. Le brouillon d'un cloud est adressé au fournisseur pour ce compte ; celui d'un fournisseur d'IA direct, à sa fiche fournisseur. skipped indique pourquoi un facturant n'a pas eu de brouillon. Les brouillons passent par l'approbation habituelle lors de l'envoi. Nécessite l'accès 'create' aux bons de commande.

Champs de la réponse

  • drafts[].poIdstring

    Le brouillon de commande : GetPurchaseOrder le lit, et l'envoyer le soumet à approbation.

  • skipped[].reasonstring

    no_usage : pas encore d'usage IA sur lequel baser une commande. no_supplier : un fournisseur d'IA direct sans fiche fournisseur à qui l'adresser. no_forecast (scope account) : pas encore d'estimation des dépenses en cours pour le compte. already_drafted : un brouillon, ou une commande en attente d'approbation, existe déjà pour ces dépenses ce mois-ci ; poId l'identifie, et aucun second brouillon n'est créé.

Erreurs

  • 400 Bad Request - invoicerIds est vide ou en compte plus de 20, period n'est pas un mois au format YYYY-MM, ou scope vaut account pour un facturant qui n'est pas un compte cloud.
  • 404 Not Found - Aucun facturant connecté avec l'un de ces identifiants dans l'espace de travail.
  • 401 Unauthorized - Aucun identifiant n’a été fourni, ou la valeur du jeton Bearer / de X-Api-Key est manquante, invalide, expirée ou révoquée.
  • 403 Forbidden - Le jeton Bearer ou la clé API de l’appelant ne donne pas accès à cet espace de travail (regionId), ou n’a pas le rôle requis.
POST /v1/workspaces/{regionId}/ai-spend/draft-orders
Requête
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/ai-spend/draft-orders" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "invoicerIds": [ "string" ],
   "period": "string",
   "scope": "ai" | "account"
}
Réponse · 200 OK
{
   "period": "string",
   "drafts": [ { "invoicerId": "string", "poId": "string", "currency": "string", "total": number } ],
   "skipped": [ { "invoicerId": "string", "reason": "no_usage" | "no_supplier" | "no_forecast" | "already_drafted", "poId": "string", "message": "string", "messageId": "string", "params": { } } ]
}

Lister les engagements d’IA

Dépenses et capacité d’IA engagées, et crédits prépayés, avec ce qui en est consommé.

GET/v1/workspaces/{regionId}/ai-spend/commitments

Retour

200 OK avec l’objet présenté dans la réponse.

Plus de détails

Ce qu’affiche l’onglet Engagements de la page Dépenses : chaque condition de vos contrats actifs avec une dépense engagée ou une capacité réservée, avec ce que l’usage d’IA synchronisé en a consommé pendant sa durée, ce qu’il reste et, pour la dépense, le rythme jusqu’à la fin de la condition ; et chaque ligne de commande de crédits prépayés avec ce que ses factures y ont imputé. Nécessite l’accès 'view' aux fournisseurs ou aux factures.

Champs de la réponse

  • committednumber

    spend : le montant engagé, en currency. capacity : les unités réservées multipliées par les heures écoulées de la condition. prepaid_credit : ce que la ligne de commande a acheté.

  • usednumber

    spend : les montants des lignes d’IA synchronisées que couvre la condition, dans sa devise. capacity : les heures consommées. prepaid_credit : ce que les factures ont imputé sur la ligne.

  • projectednumber

    spend uniquement : ce que la condition aura consommé à son terme au rythme actuel.

Erreurs

  • 401 Unauthorized - Aucun identifiant n’a été fourni, ou la valeur du jeton Bearer / de X-Api-Key est manquante, invalide, expirée ou révoquée.
  • 403 Forbidden - Le jeton Bearer ou la clé API de l’appelant ne donne pas accès à cet espace de travail (regionId), ou n’a pas le rôle requis.
GET /v1/workspaces/{regionId}/ai-spend/commitments
Requête
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/ai-spend/commitments" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Réponse · 200 OK
[
   {
      "kind": "spend" | "capacity" | "prepaid_credit",
      "contractId": "string",
      "contractTitle": "string",
      "termId": "string",
      "poId": "string",
      "lineNo": number,
      "supplier": "string",
      "description": "string",
      "ai": { "invoicer": "string", "vendor": "string", "model": "string", "meter": "string" },
      "currency": "string",
      "termStart": "string",
      "termEnd": "string",
      "committed": number,
      "used": number,
      "remaining": number,
      "usedPct": number,
      "projected": number,
      "unit": "string"
   }
]

Obtenir la règle de renouvellement d’IA

La règle qui crée en brouillon les commandes d’IA du mois suivant.

GET/v1/workspaces/{regionId}/ai-spend/renewal-rule

Retour

200 OK avec l’objet présenté dans la réponse.

Plus de détails

Si les commandes d’IA du mois suivant sont créées en brouillon à partir de la prévision, à partir de quel jour du mois, et ce que sa dernière exécution a créé. Désactivée jusqu’à ce que quelqu’un l’active. Nécessite l’accès 'view' aux bons de commande.

Champs de la réponse

  • ownerSubstring

    Qui l’a activée : les brouillons sont créés en son nom, tant que cette personne est membre de l’espace de travail.

  • draftedForstring

    Le dernier mois pour lequel des brouillons ont été créés, YYYY-MM : chaque mois n’est traité qu’une fois.

Erreurs

  • 401 Unauthorized - Aucun identifiant n’a été fourni, ou la valeur du jeton Bearer / de X-Api-Key est manquante, invalide, expirée ou révoquée.
  • 403 Forbidden - Le jeton Bearer ou la clé API de l’appelant ne donne pas accès à cet espace de travail (regionId), ou n’a pas le rôle requis.
GET /v1/workspaces/{regionId}/ai-spend/renewal-rule
Requête
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/ai-spend/renewal-rule" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Réponse · 200 OK
{
   "enabled": boolean,
   "dayOfMonth": number,
   "ownerSub": "string",
   "updatedAt": "string",
   "draftedFor": "string",
   "lastRun": { "at": "string", "period": "string", "drafts": [ { "poId": "string", "draftId": "string" } ] }
}

Définir la règle de renouvellement d’IA

Active ou désactive la règle de renouvellement des commandes d’IA.

PUT/v1/workspaces/{regionId}/ai-spend/renewal-rule

Corps

  • enabledbooleanObligatoire

    Si les commandes d’IA du mois suivant sont créées en brouillon.

  • dayOfMonthnumber

    De 1 à 28 : le jour à partir duquel les brouillons sont créés. 25 si omis.

Retour

200 OK avec l’objet présenté dans la réponse.

Plus de détails

À partir de dayOfMonth, une fois par mois, Pleaxy crée en brouillon la commande du mois suivant pour chaque commande ouverte dont les lignes d’IA sont valables ce mois-ci, comme le fait RaiseNextAiPeriod, au nom de la personne qui a activé la règle. La règle s’exécute à la prochaine lecture des dépenses d’IA de l’espace de travail (le tableau de bord et la page Dépenses les lisent). Les brouillons ne sont jamais émis sans la validation habituelle.

Session connectée avec l’accès 'create' aux bons de commande ; une clé API reçoit 403.

Erreurs

  • 400 Bad Request - dayOfMonth n’est pas un nombre entier de 1 à 28.
  • 403 Forbidden - L’appelant est une clé API ou n’a pas l’accès 'create' aux bons de commande.
  • 401 Unauthorized - Aucun identifiant n’a été fourni, ou la valeur du jeton Bearer / de X-Api-Key est manquante, invalide, expirée ou révoquée.
PUT /v1/workspaces/{regionId}/ai-spend/renewal-rule
Requête
curl -X PUT "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/ai-spend/renewal-rule" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "enabled": true,
   "dayOfMonth": 25
}
Réponse · 200 OK
The rule, as GetAiRenewalRule returns it

Obtenir l’attribution d’IA

Les règles qui attribuent les dépenses d’IA aux centres de coûts.

GET/v1/workspaces/{regionId}/ai-spend/attribution

Paramètres

  • periodstring

    Le mois, YYYY-MM. Par défaut, le mois en cours.

Retour

200 OK avec l’objet présenté dans la réponse.

Plus de détails

Vos règles d’attribution dans l’ordre - la première qui correspond à une ligne l’emporte - avec ce que chacune a retenu sur la période, ce qu’aucune règle n’a retenu et les valeurs de dimension derrière les dépenses non retenues (les plus importantes d’abord), pour écrire la règle suivante à partir d’elles. Une règle associe une dimension du fournisseur à un centre de coûts : tag (tag d’allocation des coûts AWS) ou label (Google Cloud), avec sa clé ; project (OpenAI, Google Cloud), workspace (Anthropic), resource_group (Azure), compartment (OCI), cluster (clouds GPU), api_key ou inference_profile. Une ligne qu’aucune règle ne retient est non attribuée : affichée, jamais masquée. Nécessite l’accès 'view' aux fournisseurs ou aux factures.

Champs de la réponse

  • versionnumber

    Renvoyez-la avec SetAiAttribution, pour qu’un enregistrement ne puisse pas écraser celui de quelqu’un d’autre.

  • rules[].invoicerIdstring

    Uniquement les lignes de cet émetteur ; tous les émetteurs en son absence.

  • rules[].matchedArray<object>

    Ce que la règle a retenu sur la période, une entrée par devise.

Erreurs

  • 400 Bad Request - period n’est pas un mois au format YYYY-MM.
  • 401 Unauthorized - Aucun identifiant n’a été fourni, ou la valeur du jeton Bearer / de X-Api-Key est manquante, invalide, expirée ou révoquée.
  • 403 Forbidden - Le jeton Bearer ou la clé API de l’appelant ne donne pas accès à cet espace de travail (regionId), ou n’a pas le rôle requis.
GET /v1/workspaces/{regionId}/ai-spend/attribution
Requête
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/ai-spend/attribution" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Réponse · 200 OK
{
   "period": "string",
   "version": number,
   "updatedAt": "string",
   "rules": [
      { "id": "string", "invoicerId": "string", "dimension": "string", "key": "string", "value": "string", "costCenter": "string", "matched": [ { "currency": "string", "amount": number } ] }
   ],
   "unattributed": [ { "currency": "string", "amount": number } ],
   "unmatchedValues": [ { "invoicerId": "string", "key": "string", "value": "string", "currency": "string", "amount": number } ]
}

Définir l’attribution d’IA

Remplace les règles d’attribution.

PUT/v1/workspaces/{regionId}/ai-spend/attribution

Corps

  • rulesArray<{ id?, invoicerId?, dimension, key?, value, costCenter }>Obligatoire

    Toutes les règles, la première qui correspond en premier. 200 au maximum. Gardez l’id d’une règle pour la conserver ; une nouvelle règle en reçoit un.

  • versionnumberObligatoire

    La version renvoyée par GetAiAttribution ; 0 pour le premier enregistrement.

Retour

200 OK avec l’objet présenté dans la réponse.

Plus de détails

Remplace toutes les règles, dans l’ordre, à partir de la version que vous avez lue. Une règle tag ou label a besoin de sa clé ; le centre de coûts doit être l’un de ceux de l’espace de travail. Une règle sur un tag AWS ou un label Google Cloud fait aussi lire par la prochaine synchronisation les lignes d’IA de ce compte selon ce tag ou label (une clé de tag AWS par compte). Renvoie les règles comme GetAiAttribution. Nécessite l’accès 'edit' aux bons de commande.

Erreurs

  • 400 Bad Request - Une règle tag ou label n’a pas de clé, ou un centre de coûts n’est pas l’un de ceux de l’espace de travail.
  • 409 Conflict - Quelqu’un a enregistré les règles depuis que vous les avez lues ; relisez-les.
  • 401 Unauthorized - Aucun identifiant n’a été fourni, ou la valeur du jeton Bearer / de X-Api-Key est manquante, invalide, expirée ou révoquée.
  • 403 Forbidden - Le jeton Bearer ou la clé API de l’appelant ne donne pas accès à cet espace de travail (regionId), ou n’a pas le rôle requis.
PUT /v1/workspaces/{regionId}/ai-spend/attribution
Requête
curl -X PUT "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/ai-spend/attribution" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "rules": [ { "dimension": "tag", "key": "team", "value": "search", "costCenter": "CC-410" } ],
   "version": 3
}
Réponse · 200 OK
The rules, as GetAiAttribution returns them

Lister les centres de coûts d’IA

Budgets des centres de coûts avec leurs dépenses d’IA en cours d’accumulation.

GET/v1/workspaces/{regionId}/ai-spend/cost-centers

Paramètres

  • periodstring

    Le mois, YYYY-MM. Par défaut, le mois en cours.

Retour

200 OK avec l’objet présenté dans la réponse.

Plus de détails

Le budget de chaque centre de coûts, committed (commandes validées) et actual (factures validées) issus du contrôle budgétaire, avec l’usage d’IA attribué de ce mois en accruing - un troisième chiffre, pas encore facturé - et sa prévision, dans la devise du budget ; le pourcentage du budget avec la prévision ; et l’alerte envoyée. Lorsque la prévision, ajoutée à l’engagé et au facturé, atteint 80 % ou 100 % d’un budget, Pleaxy envoie une notification ai_forecast_over_budget une fois par seuil et par mois, via les canaux de l’espace de travail. Rien n’est bloqué. Nécessite l’accès 'view' aux bons de commande.

Champs de la réponse

  • budgetModestring

    Le mode du contrôle budgétaire. off : aucun budget n’est tenu, les lignes ne portent que les chiffres d’IA et aucune alerte n’est envoyée.

  • rows[].pctWithForecastnumber

    (committed + actual + forecast) / budget, en pourcentage. Absent sans budget.

Erreurs

  • 400 Bad Request - period n’est pas un mois au format YYYY-MM.
  • 401 Unauthorized - Aucun identifiant n’a été fourni, ou la valeur du jeton Bearer / de X-Api-Key est manquante, invalide, expirée ou révoquée.
  • 403 Forbidden - Le jeton Bearer ou la clé API de l’appelant ne donne pas accès à cet espace de travail (regionId), ou n’a pas le rôle requis.
GET /v1/workspaces/{regionId}/ai-spend/cost-centers
Requête
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/ai-spend/cost-centers" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Réponse · 200 OK
{
   "period": "string",
   "budgetMode": "string",
   "thresholds": [ number ],
   "rows": [
      { "costCenter": "string", "costCenterName": "string", "currency": "string", "budget": number, "committed": number, "actual": number, "accruing": number, "forecast": number, "pctWithForecast": number, "alert": { "threshold": number, "sentAt": "string" } }
   ],
   "unattributed": [ { "currency": "string", "monthToDate": number, "forecast": number } ]
}

Lister les limites de dépenses d’IA

Les plafonds de dépenses fixés chez les fournisseurs, et leurs identifiants.

GET/v1/workspaces/{regionId}/ai-spend/limits

Retour

200 OK avec l’objet présenté dans la réponse.

Plus de détails

Sur activation : les plafonds de dépenses que Pleaxy a fixés chez les fournisseurs à partir de vos lignes de commande validées, et quels émetteurs ont un identifiant de limites (jamais la clé). Un plafond est votre propre limite chez le fournisseur - un budget AWS, une limite de projet OpenAI, une limite de workspace Anthropic, un budget ou un plafond de dépenses Google Cloud, un budget Azure - fixée avec un identifiant que vous créez séparément de la connexion en lecture seule, et que vous retirez quand vous voulez. Nécessite l’accès 'view' aux bons de commande.

Champs de la réponse

  • limits[].enforcementstring

    deny : le fournisseur arrête les dépenses au plafond (une limite OpenAI ou Anthropic, un plafond de dépenses Google Cloud, une action de budget AWS qui attache votre stratégie de refus - AWS actualise les budgets quelques fois par jour, donc avec des heures de retard). alert : il ne fait que notifier (Azure, ou un budget Google Cloud ou AWS sans cela).

  • limits[].readBackobject

    Ce qu’a donné la relecture du plafond chez le fournisseur, et quand.

  • limits[].historyArray<object>

    Chaque écriture que Pleaxy a faite pour la ligne chez le fournisseur, les 20 dernières.

Erreurs

  • 401 Unauthorized - Aucun identifiant n’a été fourni, ou la valeur du jeton Bearer / de X-Api-Key est manquante, invalide, expirée ou révoquée.
  • 403 Forbidden - Le jeton Bearer ou la clé API de l’appelant ne donne pas accès à cet espace de travail (regionId), ou n’a pas le rôle requis.
GET /v1/workspaces/{regionId}/ai-spend/limits
Requête
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/ai-spend/limits" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Réponse · 200 OK
{
   "credentials": [ { "invoicerId": "string", "invoicer": "aws" | "openai" | "anthropic" | "gcp" | "azure", "keyHint": "string", "notifyEmail": "string", "createdAt": "string" } ],
   "limits": [
      {
         "poId": "string", "lineNo": number, "invoicerId": "string", "invoicer": "string", "target": "string",
         "amount": number, "currency": "string", "period": "string", "providerRef": "string",
         "enforcement": "deny" | "alert", "state": "set" | "failed" | "removed",
         "readBack": { "amount": number, "at": "string" },
         "history": [ { "at": "string", "by": "string", "action": "set" | "raise" | "remove" | "failed", "amount": number, "readBack": number, "error": "string" } ]
      }
   ]
}

Définir une limite de dépenses d’IA

Fixe le montant d’une ligne de commande validée comme plafond chez le fournisseur.

PUT/v1/workspaces/{regionId}/ai-spend/limits/{poId}/{lineNo}

Paramètres

  • poIdstringObligatoire

    La commande validée.

  • lineNonumberObligatoire

    La ligne de commande dont le montant est le plafond.

Corps

  • invoicerIdstringObligatoire

    Le compte ou le fournisseur IA que couvre la commande, avec un identifiant de limites.

  • targetstring

    OpenAI : le projet (proj_...). Anthropic : le workspace (wrkspc_...). Google Cloud : le projet, pour un plafond de dépenses.

  • denyboolean

    Arrêter les dépenses au plafond là où le fournisseur le peut. true si omis ; false ne fait qu’alerter.

Retour

200 OK avec l’objet présenté dans la réponse.

Plus de détails

Écrit le montant de la ligne comme plafond de dépenses de son émetteur pour le mois (le premier mois de la ligne lorsqu’elle commence plus tard), le relit et enregistre l’écriture. Uniquement pour une commande validée et ouverte adressée à cet émetteur, avec un identifiant de limites pour lui. Refusé en dessous des dépenses du mois en cours, avec les chiffres. Augmenter la ligne (une nouvelle version) relève le plafond ; clôturer la commande le retire. Pleaxy ne modifie ni ne supprime jamais chez le fournisseur rien qu’il n’a pas créé. Nécessite l’accès 'edit' aux bons de commande.

Connecté via un agent, c’est une demande d’agent que la personne confirme dans Pleaxy ; une clé API avec 'edit' sur les bons de commande agit immédiatement.

Erreurs

  • 400 Bad Request - La commande n’est pas validée et ouverte, ou n’est pas adressée à cet émetteur ; aucun identifiant de limites pour lui ; le plafond serait inférieur aux dépenses du mois en cours ; ou le fournisseur l’a refusé (la raison dit pourquoi : l’identifiant, un projet ou un workspace manquant, une devise qu’il n’accepte pas).
  • 404 Not Found - Aucune commande, ligne ou aucun émetteur de ce type, ou les limites ne sont pas activées dans cette région.
  • 401 Unauthorized - Aucun identifiant n’a été fourni, ou la valeur du jeton Bearer / de X-Api-Key est manquante, invalide, expirée ou révoquée.
  • 403 Forbidden - Le jeton Bearer ou la clé API de l’appelant ne donne pas accès à cet espace de travail (regionId), ou n’a pas le rôle requis.
PUT /v1/workspaces/{regionId}/ai-spend/limits/{poId}/{lineNo}
Requête
curl -X PUT "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/ai-spend/limits/{poId}/{lineNo}" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "invoicerId": "aip_01k8q2m4xv7c9n3p5t6r8w0yzb",
   "target": "proj_abc"
}
Réponse · 200 OK
The limit, as an entry of ListAiSpendLimits' limits

Retirer une limite de dépenses d’IA

Retire le plafond que Pleaxy a fixé pour une ligne de commande.

DELETE/v1/workspaces/{regionId}/ai-spend/limits/{poId}/{lineNo}

Paramètres

  • poIdstringObligatoire

    La commande.

  • lineNonumberObligatoire

    La ligne de commande.

Retour

200 OK avec l’objet présenté dans la réponse.

Plus de détails

Supprime le plafond que Pleaxy a fixé pour la ligne chez le fournisseur (uniquement un plafond nommé par Pleaxy) et l’enregistre. Nécessite l’accès 'edit' aux bons de commande.

Erreurs

  • 404 Not Found - Aucun plafond pour cette ligne.
  • 401 Unauthorized - Aucun identifiant n’a été fourni, ou la valeur du jeton Bearer / de X-Api-Key est manquante, invalide, expirée ou révoquée.
  • 403 Forbidden - Le jeton Bearer ou la clé API de l’appelant ne donne pas accès à cet espace de travail (regionId), ou n’a pas le rôle requis.
DELETE /v1/workspaces/{regionId}/ai-spend/limits/{poId}/{lineNo}
Requête
curl -X DELETE "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/ai-spend/limits/{poId}/{lineNo}" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Réponse · 200 OK
The limit, as an entry of ListAiSpendLimits' limits, with state removed

Définir l’identifiant de limites d’IA

Ajoute l’identifiant distinct avec lequel les plafonds d’un émetteur sont fixés.

PUT/v1/workspaces/{regionId}/ai-spend/limit-credentials/{invoicerId}

Paramètres

  • invoicerIdstringObligatoire

    L’identifiant de la connexion cloud ou du fournisseur IA.

Corps

  • roleArnstring

    AWS : l’ARN du rôle PleaxyAiLimits.

  • executionRoleArnstring

    AWS, pour arrêter les dépenses : l’ARN du rôle d’exécution du modèle.

  • denyPolicyArnstring

    AWS, pour arrêter les dépenses : l’ARN de la stratégie de refus du modèle.

  • roleNamesArray<string>

    AWS, pour arrêter les dépenses : les noms des rôles auxquels la stratégie de refus est attachée.

  • serviceAccountEmailstring

    Google Cloud : le compte de service de limites.

  • clientIdstring

    Azure : l’ID client de l’application de limites.

  • keystring

    OpenAI ou Anthropic : une clé d’administration distincte pour les limites.

  • notifyEmailstring

    Qui le fournisseur prévient par e-mail à un plafond : nécessaire pour Azure, et pour un plafond AWS qui arrête les dépenses.

Retour

200 OK avec l’objet présenté dans la réponse.

Plus de détails

L’identifiant d’écriture pour les plafonds d’un émetteur, distinct de sa connexion en lecture seule, qui n’est jamais élargie : un rôle de limites AWS (issu du modèle CloudFormation aws-ai-limits de Pleaxy : AWS Budgets uniquement et, en option, une stratégie de refus sur les appels Amazon Bedrock que le budget attache à 100 %), un compte de service de limites Google Cloud dans le pool d’identités de la connexion, une application de limites Azure avec l’identifiant fédéré de la connexion, ou une clé d’administration OpenAI ou Anthropic distincte (stockée chiffrée, jamais renvoyée). Vérifié par une lecture avant d’être enregistré. Retirez-le pour mettre fin à la fonctionnalité pour cet émetteur.

Session connectée avec l’accès 'edit' aux fournisseurs ; une clé API reçoit 403.

Erreurs

  • 400 Bad Request - Un champ dont le fournisseur a besoin est manquant ; c’est l’identifiant même de la connexion en lecture seule ; ou le fournisseur l’a refusé, et rien n’a été enregistré.
  • 403 Forbidden - L’appelant est une clé API ou n’a pas 'edit' sur les fournisseurs.
  • 404 Not Found - Aucun émetteur de ce type, ou les limites ne sont pas activées dans cette région.
  • 401 Unauthorized - Aucun identifiant n’a été fourni, ou la valeur du jeton Bearer / de X-Api-Key est manquante, invalide, expirée ou révoquée.
PUT /v1/workspaces/{regionId}/ai-spend/limit-credentials/{invoicerId}
Requête
curl -X PUT "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/ai-spend/limit-credentials/{invoicerId}" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "roleArn": "arn:aws:iam::123456789012:role/PleaxyAiLimits"
}
Réponse · 200 OK
The credential, as an entry of ListAiSpendLimits' credentials

Retirer l’identifiant de limites d’IA

Retire l’identifiant de limites d’un émetteur.

DELETE/v1/workspaces/{regionId}/ai-spend/limit-credentials/{invoicerId}

Paramètres

  • invoicerIdstringObligatoire

    L’identifiant de la connexion cloud ou du fournisseur IA.

Retour

200 OK avec l’objet présenté dans la réponse.

Plus de détails

Pleaxy ne fixe plus de plafond chez cet émetteur ; la connexion en lecture seule reste telle quelle. Supprimez aussi le rôle, le compte de service, l’application ou la clé chez le fournisseur.

Session connectée avec l’accès 'edit' aux fournisseurs ; une clé API reçoit 403.

Erreurs

  • 403 Forbidden - L’appelant est une clé API ou n’a pas 'edit' sur les fournisseurs.
  • 401 Unauthorized - Aucun identifiant n’a été fourni, ou la valeur du jeton Bearer / de X-Api-Key est manquante, invalide, expirée ou révoquée.
DELETE /v1/workspaces/{regionId}/ai-spend/limit-credentials/{invoicerId}
Requête
curl -X DELETE "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/ai-spend/limit-credentials/{invoicerId}" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Réponse · 200 OK
{
   "invoicerId": "string"
}

Lister les nombres de sièges d’IA

Utilisateurs actifs d’un mois des produits d’IA facturés au siège.

GET/v1/workspaces/{regionId}/ai-spend/seats

Paramètres

  • periodstring

    Le mois, YYYY-MM. Par défaut, le mois en cours.

Retour

200 OK avec l’objet présenté dans la réponse.

Plus de détails

L’IA facturée au siège (ChatGPT Enterprise, Claude Enterprise, Microsoft 365 Copilot, GitHub Copilot, Cursor) est facturée par siège. Voici les utilisateurs actifs enregistrés pour chaque produit sur un mois, et l’origine de chaque nombre. Une ligne de facture avec le compteur seats qui facture plus de sièges que le nombre du mois donne un constat ai_seats_above_active ; une condition de contrat qui engage des sièges apparaît dans l’onglet Engagements, rapportée au nombre le plus récent. Nécessite l’accès 'view' aux fournisseurs ou aux factures.

Erreurs

  • 400 Bad Request - period n’est pas un mois au format YYYY-MM.
  • 401 Unauthorized - Aucun identifiant n’a été fourni, ou la valeur du jeton Bearer / de X-Api-Key est manquante, invalide, expirée ou révoquée.
  • 403 Forbidden - Le jeton Bearer ou la clé API de l’appelant ne donne pas accès à cet espace de travail (regionId), ou n’a pas le rôle requis.
GET /v1/workspaces/{regionId}/ai-spend/seats
Requête
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/ai-spend/seats" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Réponse · 200 OK
[
   { "invoicer": "string", "product": "string", "period": "string", "activeUsers": number, "source": "okta" | "entra" | "google_workspace" | "jumpcloud" | "provider_console" | "manual", "recordedAt": "string", "recordedBy": "string" }
]

Définir le nombre de sièges d’IA

Enregistre les utilisateurs actifs d’un mois d’un produit facturé au siège.

PUT/v1/workspaces/{regionId}/ai-spend/seats

Corps

  • invoicerstringObligatoire

    Qui facture les sièges : openai, anthropic, microsoft, github, cursor, ...

  • productstringObligatoire

    Le produit facturé au siège tel que le nomme la ligne de commande (son ai.model), par exemple chatgpt-enterprise.

  • periodstringObligatoire

    Le mois, YYYY-MM.

  • activeUsersnumberObligatoire

    Utilisateurs titulaires d’un siège qui se sont connectés ce mois-là.

  • sourcestringObligatoire

    okta, entra, google_workspace, jumpcloud, provider_console ou manual.

Retour

200 OK avec l’objet présenté dans la réponse.

Plus de détails

Enregistre combien d’utilisateurs d’un produit facturé au siège ont été actifs sur un mois, tels que les déclare votre fournisseur d’identité (Okta, Microsoft Entra, Google Workspace, JumpCloud) ou la console d’administration du fournisseur, en remplaçant le nombre de ce mois. Pleaxy ne lit pas lui-même votre fournisseur d’identité : envoyez le nombre depuis un script, un agent ou à la main. Nécessite l’accès 'edit' aux factures.

Erreurs

  • 400 Bad Request - Un champ est manquant ou hors limites.
  • 401 Unauthorized - Aucun identifiant n’a été fourni, ou la valeur du jeton Bearer / de X-Api-Key est manquante, invalide, expirée ou révoquée.
  • 403 Forbidden - Le jeton Bearer ou la clé API de l’appelant ne donne pas accès à cet espace de travail (regionId), ou n’a pas le rôle requis.
PUT /v1/workspaces/{regionId}/ai-spend/seats
Requête
curl -X PUT "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/ai-spend/seats" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "invoicer": "openai",
   "product": "chatgpt-enterprise",
   "period": "2026-10",
   "activeUsers": 182,
   "source": "okta"
}
Réponse · 200 OK
The count, as an entry of ListAiSeatCounts
Nous contacter