Référence de l’API

Bons de commande

Les commandes qu’un acheteur passe auprès d’un fournisseur : leurs lignes, montants, statut et validation.

En savoir plus sur cette ressource

Un bon de commande engage un acheteur sur une ou plusieurs lignes auprès d’un fournisseur. Sa création lance une chaîne de validation ; une fois validé, il peut être converti en facture. Tous les montants sont dans la devise de la région (la devise d’un espace de travail est celle de sa région, définie dans le profil de l’entreprise), et Pleaxy ne convertit pas les devises.

Lister les bons de commande

Liste les bons de commande de l’espace de travail, éventuellement sur une plage de dates.

GET/v1/workspaces/{regionId}/purchase-orders

Paramètres

  • fromstring

    Date/horodatage ISO 8601 : seuls les éléments créés à cette date ou après sont renvoyés.

  • tostring

    Date/horodatage ISO 8601 : seuls les éléments créés à cette date ou avant sont renvoyés.

Retour

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

Plus de détails

Liste tous les bons de commande de l’espace de travail, sans ordre particulier. Peut être limité à une plage de createdAt via from/to : passez les bornes d’un mois civil pour obtenir une vue mensuelle. Un appelant fournisseur reçoit une vue réduite de chaque bon de commande (voir GetPurchaseOrder) : la comptabilité interne de l’acheteur et le circuit de validation complet ne sont pas communiqués.

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}/purchase-orders
Requête
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-orders" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Réponse · 200 OK
[
   {
      "id": "string",
      "buyerOrgId": "string",
      "supplierOrgId": "string",
      "supplier": "string",
      "amount": number,
      "currency": "string",
      "status": "draft" | "pending_approval" | "rejected" | "awaiting_fulfillment" | "invoiced" | "paid" | "canceled" | "closed" | "expired",
      "invoiceId": "string",
      "provider": "aws" | "gcp" | "azure" | "oci",
      "payerAccounts": [
         { "id": "string", "label": "string", "detail": "string" }
      ],
      "billToParty": {
         "source": "company_profile" | "custom",
         "companyName": "string",
         "address": { "line1": "string", "line2": "string", "city": "string", "region": "string", "postalCode": "string", "country": "string" },
         "addressText": "string",
         "taxId": "string"
      },
      "costCenter": "string",
      "costCenterChanges": [ { "from": "string", "to": "string", "reason": "string", "by": "string", "byName": "string", "at": "string" } ],
      "budgetOwner": "string",
      "buyerName": "string",
      "supplierSite": "string",
      "notes": "string",
      "requestId": "string",
      "lineItems": [
         {
         "lineNo": number,
         "scopeType": "sku" | "service" | "account" | "custom",
         "scopeId": "string" | null,
         "name": "string",
         "ruleType": "quantity" | "amount",
         "unit": "string",
         "unitPrice": number,
         "qty": number,
         "nteAmount": number,
         "lineType": "goods" | "service",
         "currency": "string",
         "paymentTerms": "string",
         "validFrom": "string",
         "validUntil": "string",
         "consumed": number,
         "customerLineNo": "string",
         "supplierSku": "string",
         "priceSource": "contract" | "list" | "manual"
       }
      ],
      "approval": {
         "requester": "string",
         "requesterEmployeeKey": "string",
         "groups": [
           {
             "id": "string",
             "mode": "sequential" | "parallel",
             "label": "string",
             "status": "pending" | "approved" | "rejected",
             "stages": [
               { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
             ]
           }
         ],
         "groupIndex": number,
         "status": "pending" | "approved" | "rejected",
         "history": [
           { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
         ],
         "autonomy": boolean,
         "selfApproved": boolean
       },
      "supplierEmail": { "to": "string", "at": "string" },
      "priorInvoiced": { "amount": number, "currency": "string", "basis": "invoiced" | "remaining", "sourceSystem": "sap_ariba" | "coupa" | "oracle", "importId": "string", "fileName": "string", "importedAt": "string", "importedBy": "string" },
      "createdAt": "string"
   }
]

Obtenir un bon de commande

Récupère un bon de commande.

GET/v1/workspaces/{regionId}/purchase-orders/{poId}

Paramètres

  • poIdstringObligatoire

    L’identifiant du bon de commande.

  • buyerstring

    Appelants fournisseurs uniquement, et seulement après un 409 *_ID_AMBIGUOUS : l’ID de l’espace de travail de l’acheteur (se terminant par .buyer) ou son id de région, tiré de la liste buyers du 409. Seul le document de cet acheteur est pris en compte ; s’il n’y en a pas, c’est un 404. Un ID d’espace de travail .supplier donne 400 BUYER_QUALIFIER_INVALID (« The buyer parameter must be one buyer's Workspace ID (ending in .buyer), from the buyers list in the 409 response. »). Ignoré pour un appelant acheteur.

Retour

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

Plus de détails

Récupère un bon de commande par son id. Pour un appelant acheteur, regionId est l’espace de travail du bon de commande lui-même. Pour un appelant fournisseur, regionId est l’espace de travail du fournisseur, et le bon de commande est recherché parmi les bons de commande reçus par l’organisation, quel que soit l’espace de travail acheteur qui l’a émis.

Champs de la réponse

  • priorInvoicedobject

    Uniquement sur un bon de commande créé par un import de liste comportant un montant déjà facturé par le système précédent de l’acheteur. amount (dans la devise du bon de commande) compte dans le total facturé du bon de commande, pour que son solde restant soit juste. basis indique si le fichier donnait le montant facturé ou le solde restant à partir duquel il a été calculé, et sourceSystem l’export selon lequel la liste a été lue. importId, fileName et importedBy ne sont renvoyés qu’à l’acheteur.

  • billToPartyobject

    Qui le fournisseur facture : companyName, l’adresse en champs séparés (address) ou, pour une adresse sur une ligne, addressText, et taxId. Une copie, pas un lien : source "company_profile" correspond aux coordonnées de facturation du profil d’entreprise de l’acheteur telles qu’elles étaient à la création de la commande, de sorte que la commande conserve l’adresse avec laquelle elle a été émise si le profil change ensuite ; "custom" a été saisi sur la commande. Une facture sur la commande reprend d’ici les coordonnées de l’acheteur. Absent sur les commandes créées avant son introduction, qui ont à la place le champ en texte libre billTo.

  • supplierEmailobject

    Quand la commande émise a été envoyée par e-mail au fournisseur en PDF, et à quelle adresse. Défini une seule fois ; absent si elle n’a pas été envoyée par e-mail (pas d’e-mail de contact, fournisseur cloud, ou commande pas encore émise).

  • costCenterChangesArray

    Acheteur uniquement. Chaque modification de costCenter faite une fois la commande terminée, de la plus ancienne à la plus récente : from (absent s’il n’y en avait pas), to, reason, qui (by, byName) et quand. Voir ChangeFinishedPurchaseOrderCostCenter.

Erreurs

  • 404 Not Found - Aucun bon de commande avec cet id n’existe dans l’espace de travail de l’appelant.
  • 409 Conflict - Appelants fournisseurs uniquement. Code PO_ID_AMBIGUOUS : plusieurs de vos acheteurs ont émis un bon de commande avec cet id (les id ne sont uniques qu’au sein d’un même acheteur), donc Pleaxy ne devine pas lequel vous visez. Rien n’est lu ni modifié. Le champ buyers du corps liste l’ID de l’espace de travail et le nom de chaque acheteur : relancez l’appel avec ?buyer=<that Workspace ID>.
  • 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}/purchase-orders/{poId}
Requête
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-orders/{poId}" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Réponse · 200 OK
{
   "id": "string",
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "status": "draft" | "pending_approval" | "rejected" | "awaiting_fulfillment" | "invoiced" | "paid" | "canceled" | "closed" | "expired",
   "invoiceId": "string",
   "provider": "aws" | "gcp" | "azure" | "oci",
   "payerAccounts": [
      { "id": "string", "label": "string", "detail": "string" }
   ],
   "billToParty": {
      "source": "company_profile" | "custom",
      "companyName": "string",
      "address": { "line1": "string", "line2": "string", "city": "string", "region": "string", "postalCode": "string", "country": "string" },
      "addressText": "string",
      "taxId": "string"
   },
   "costCenter": "string",
   "costCenterChanges": [ { "from": "string", "to": "string", "reason": "string", "by": "string", "byName": "string", "at": "string" } ],
   "budgetOwner": "string",
   "buyerName": "string",
   "supplierSite": "string",
   "notes": "string",
   "requestId": "string",
   "lineItems": [
      {
      "lineNo": number,
      "scopeType": "sku" | "service" | "account" | "custom",
      "scopeId": "string" | null,
      "name": "string",
      "ruleType": "quantity" | "amount",
      "unit": "string",
      "unitPrice": number,
      "qty": number,
      "nteAmount": number,
      "lineType": "goods" | "service",
      "currency": "string",
      "paymentTerms": "string",
      "validFrom": "string",
      "validUntil": "string",
      "consumed": number,
      "customerLineNo": "string",
      "supplierSku": "string",
      "priceSource": "contract" | "list" | "manual"
    }
   ],
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "supplierEmail": { "to": "string", "at": "string" },
   "priorInvoiced": { "amount": number, "currency": "string", "basis": "invoiced" | "remaining", "sourceSystem": "sap_ariba" | "coupa" | "oracle", "importId": "string", "fileName": "string", "importedAt": "string", "importedBy": "string" },
   "createdAt": "string"
}

Obtenir le PDF d’un bon de commande

Télécharge un bon de commande au format PDF.

GET/v1/workspaces/{regionId}/purchase-orders/{poId}/pdf

Paramètres

  • poIdstringObligatoire

    L’identifiant du bon de commande.

  • buyerstring

    Appelants fournisseurs uniquement, et seulement après un 409 *_ID_AMBIGUOUS : l’ID de l’espace de travail de l’acheteur (se terminant par .buyer) ou son id de région, tiré de la liste buyers du 409. Seul le document de cet acheteur est pris en compte ; s’il n’y en a pas, c’est un 404. Un ID d’espace de travail .supplier donne 400 BUYER_QUALIFIER_INVALID (« The buyer parameter must be one buyer's Workspace ID (ending in .buyer), from the buyers list in the 409 response. »). Ignoré pour un appelant acheteur.

Retour

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

Plus de détails

Le bon de commande en PDF, à télécharger, imprimer ou transférer : votre logo, l’entité facturée (billToParty, avec son adresse et son numéro d’identification fiscale), le fournisseur, la date de commande, la devise, les conditions de paiement, le numéro de devis du fournisseur, les lignes et le total, et la façon de le facturer. C’est l’exemplaire du fournisseur, quel que soit le demandeur (sans centre de coûts, responsable budgétaire, notes ni validations), et une commande en brouillon, en attente, refusée ou annulée indique clairement qu’elle n’est pas à exécuter. Le même PDF est joint à l’e-mail que reçoit le fournisseur lorsque la commande est émise. Envoyez Accept: application/pdf, sinon le corps est renvoyé encodé en base64.

Erreurs

  • 404 Not Found - Aucun bon de commande avec cet id n’existe dans l’espace de travail de l’appelant.
  • 409 Conflict - Appelants fournisseurs uniquement. Code PO_ID_AMBIGUOUS : plusieurs de vos acheteurs ont émis un bon de commande avec cet id (les id ne sont uniques qu’au sein d’un même acheteur), donc Pleaxy ne devine pas lequel vous visez. Rien n’est lu ni modifié. Le champ buyers du corps liste l’ID de l’espace de travail et le nom de chaque acheteur : relancez l’appel avec ?buyer=<that Workspace ID>.
  • 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}/purchase-orders/{poId}/pdf
Requête
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-orders/{poId}/pdf" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Réponse · 200 OK
application/pdf

Créer un bon de commande

Crée un bon de commande, ou l’enregistre comme brouillon.

POST/v1/workspaces/{regionId}/purchase-orders

Corps

  • poNumberstring

    Votre propre numéro de bon de commande, à utiliser comme id à la place d’un id généré, par exemple PO-2026-0042. Lettres, chiffres, '.', '_' et '-', jusqu’à 40 caractères, unique dans la région.

  • supplierstringObligatoire

    Nom d’affichage du fournisseur / de la contrepartie.

  • supplierRegionIdstring

    regionId de l’organisation fournisseur intégrée à laquelle ce bon de commande est émis, si elle est connue. Vous devez avoir une connexion fournisseur validée avec elle ; toute autre région est refusée. Relie le bon de commande au véritable espace de travail fournisseur de cette organisation plutôt qu’à un simple nom en texte libre.

  • currencystring

    ISO 4217 : la devise dans laquelle la commande est libellée. Pour un fournisseur présent sur Pleaxy (supplierRegionId), une devise dans laquelle sa région facture, par défaut sa devise principale (sinon 400 PO_CURRENCY_NOT_OFFERED). Pour un fournisseur cloud ou un fournisseur absent de Pleaxy, n’importe quel code ; par défaut la « Devise de facturation » que vous avez définie pour ce fournisseur (SetSupplierCurrencies), sinon celle de votre espace de travail. Toutes les lignes sont dans cette devise. Une commande dans une autre devise que celle de votre espace de travail passe par toutes les étapes de validation et n’est jamais validée automatiquement, car les plafonds de validation sont exprimés dans la devise de votre espace de travail.

  • supplierContactEmailstring

    Uniquement pour un fournisseur absent de Pleaxy (sans supplierRegionId ni provider) : son e-mail de contact. Quand le bon de commande est envoyé, immédiatement ou à la soumission d’un brouillon, Pleaxy l’invite, ou l’associe au fournisseur que cet espace de travail possède déjà.

  • provider"aws" | "gcp" | "azure" | "oci"

    Fournisseur cloud couvert par ce bon de commande, le cas échéant.

  • payerAccountsArray<{ id, label, detail }>

    Uniquement avec provider : les connexions cloud de ce fournisseur dans cette région auxquelles s’applique le bon de commande, par id. Une connexion encore en cours de configuration est refusée. Le bon de commande enregistre le libellé et le détail propres à chaque connexion ; ceux que vous envoyez sont ignorés mais doivent être des chaînes.

  • billToParty{ companyName?, address, taxId? }

    Qui le fournisseur facture, quand ce ne sont pas les coordonnées de facturation de votre profil d’entreprise. companyName (jusqu’à 200 caractères) prend par défaut le nom de votre entreprise ; address accepte les mêmes champs et règles par pays que billingAddressParts d’UpdateOrgProfile ; taxId fait jusqu’à 64 caractères. S’il est omis, la commande copie le nom, l’adresse de facturation et le numéro d’identification fiscale actuels de votre profil d’entreprise.

  • billTostring

    Obsolète : utilisez billToParty. Une adresse de facturation sur une ligne pour votre entreprise, jusqu’à 500 caractères, conservée telle que saisie. Ignorée lorsque billToParty est envoyé.

  • costCenterstring

    Code interne du centre de coûts.

  • budgetOwnerstring

    Nom du responsable budgétaire.

  • buyerNamestring

    Nom du contact acheteur ; sert aussi de demandeur de la chaîne de validation s’il est renseigné.

  • supplierSitestring

    Identifiant du site ou de l’emplacement du fournisseur.

  • notesstring

    Notes en texte libre.

  • contractIdstring

    Votre contrat actif avec ce fournisseur dont relève la commande. Les lignes sans paymentTerms reprennent ses conditions de paiement par défaut, et les factures sur la commande sont contrôlées par rapport à ce contrat.

  • draftboolean

    Enregistrer comme brouillon au lieu de soumettre à validation. Soumettez-le plus tard avec SubmitPurchaseOrderDraft.

  • lineItemsArray<LineItem>Obligatoire

    Au moins une ligne. Chaque ligne : scopeType ("sku" | "service" | "account" | "custom"), scopeId, name, ruleType ("quantity" | "amount"), unit, unitPrice, qty, nteAmount, currency (facultatif), paymentTerms (facultatif, jusqu’à 40 caractères : si omis, la ligne reprend les conditions de paiement par défaut du contrat dont provient son prix ou que la commande désigne dans contractId, sinon celles de l’article du catalogue, sinon "Net 30"), validFrom, validUntil, customerLineNo (facultatif : votre propre numéro pour la ligne, jusqu’à 40 caractères, affiché à côté du lineNo du serveur), lineType (facultatif : "goods", des biens expédiés et réceptionnés par une réception de marchandises, ou "service", un travail comme du support ou une formation, confirmé par une fiche de saisie de services et jamais expédié ; si omis, la ligne reprend le type de son article du catalogue, sinon c’est un service quand son unité est une unité de temps comme hr, day ou month, et des biens dans les autres cas). Toutes les lignes sont dans la devise de la région, que le serveur renseigne : omettez currency, ou envoyez la devise de la région (casse indifférente). Pleaxy ne convertit pas les devises, donc toute autre devise est refusée.

  • lineItems[].ai{ invoicer, vendor, model, meter, region? }

    Une ligne d’IA (contrôles des dépenses d’IA) : qui la facture, l’éditeur du modèle, l’identifiant du modèle tel que facturé, le compteur (input_tokens, output_tokens, cached_input_tokens, batch_input_tokens, gpu_hours, ..., ou prepaid_credit pour un achat de crédits prépayés) et la région, lorsque le prix dépend de la région. Une ligne en quantité dans l’unité du compteur (millions de tokens, heures). Les lignes d’IA d’une facture sont rapprochées de celles-ci par périmètre, jamais par description. SuggestAiPoLines les préremplit.

Retour

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

Plus de détails

Crée un bon de commande à partir d’une ou plusieurs lignes, ou l’enregistre comme brouillon. Le montant total est la somme des montants de chaque ligne (qty × unitPrice pour une ligne à règle de quantité, ou nteAmount pour une ligne à règle de montant). Sauf s’il s’agit d’un brouillon, sa chaîne de validation est construite immédiatement à partir du circuit de validation des bons de commande de la région, des paramètres d’autonomie, des règles d’automatisation et des plafonds de dépenses. S’il est validé automatiquement, le bon de commande est créé directement au statut awaiting_fulfillment au lieu de pending_approval. Dès qu’un bon de commande est émis (awaiting_fulfillment, immédiatement ou à sa validation finale), le fournisseur est notifié et, sauf s’il s’agit d’un fournisseur cloud, reçoit la commande en PDF par e-mail (voir GetPurchaseOrderPdf), à supplierContactEmail, sinon au contact de votre fiche fournisseur, avec le demandeur en Reply-To. Envoyé une seule fois par commande et consigné dans supplierEmail ; un échec d’envoi de l’e-mail ne fait jamais échouer la commande.

Champs de la réponse

  • idstring

    Identifiant du bon de commande, par exemple "PO-AB12CD34".

  • statusstring

    "pending_approval", ou "awaiting_fulfillment" si le montant a été validé automatiquement.

  • amountnumber

    Somme des montants de toutes les lignes.

  • currencystring

    Code ISO 4217 du bon de commande et de toutes ses lignes : la devise de la région, définie par le serveur.

  • approvalApprovalChain

    La chaîne de validation construite pour ce bon de commande.

  • lineItemsArray<LineItem>

    Chaque ligne telle qu’enregistrée, avec lineNo et consumed (qui commence à 0).

Erreurs

  • 400 Bad Request - La validation des données a échoué (y compris une adresse billToParty à laquelle manque un élément exigé par son pays), la devise d’une ligne n’est pas celle de la région (« Line items must be in this region's currency (EUR). Pleaxy doesn't convert currencies. »), ou le plan de la région a atteint sa limite de bons de commande sur 30 jours glissants (plan Free : 10 par période de 30 jours glissants).
  • 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}/purchase-orders
Requête
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/reg_01k5x8p9j3q7vn2mhb4tzc6rde.buyer/purchase-orders" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "supplier": "Amazon Web Services",
    "provider": "aws",
    "lineItems": [
      {
        "scopeType": "sku",
        "scopeId": "AWS-EC2-M5LG",
        "name": "EC2 m5.large",
        "ruleType": "quantity",
        "unit": "hr",
        "unitPrice": 0.096,
        "qty": 5000,
        "nteAmount": 0,
        "paymentTerms": "Net 30",
        "validFrom": "2026-01-01",
        "validUntil": "2026-12-31"
      }
    ]
  }'
Réponse · 201 Created
{
  "id": "PO-AB12CD34",
  "buyerOrgId": "org_buyer_us-east-1",
  "supplier": "Amazon Web Services",
  "amount": 480,
  "currency": "USD",
  "status": "pending_approval",
  "provider": "aws",
  "lineItems": [
    {
      "lineNo": 1,
      "scopeType": "sku",
      "scopeId": "AWS-EC2-M5LG",
      "name": "EC2 m5.large",
      "ruleType": "quantity",
      "unit": "hr",
      "unitPrice": 0.096,
      "qty": 5000,
      "nteAmount": 0,
      "currency": "USD",
      "paymentTerms": "Net 30",
      "validFrom": "2026-01-01",
      "validUntil": "2026-12-31",
      "consumed": 0
    }
  ],
  "approval": {
    "requester": "Amazon Web Services",
    "groups": [
      {
        "id": "g1",
        "mode": "sequential",
        "status": "pending",
        "stages": [
          { "id": "cost-owner", "label": "Cost owner", "approverEmployeeKey": "us-east-1a2b3c4d", "approverName": "Jamie Rivera", "status": "pending" }
        ]
      },
      {
        "id": "g2",
        "mode": "sequential",
        "status": "pending",
        "stages": [
          { "id": "finance", "label": "Finance", "approverEmployeeKey": "us-east-1e5f6g7h", "approverName": "Priya Nair", "status": "pending" }
        ]
      }
    ],
    "groupIndex": 0,
    "status": "pending",
    "history": []
  },
  "createdAt": "2026-01-15T18:04:22.000Z"
}

Mettre à jour un bon de commande

Met à jour les informations ou les lignes d’un bon de commande.

PATCH/v1/workspaces/{regionId}/purchase-orders/{poId}

Paramètres

  • poIdstringObligatoire

    L’identifiant du bon de commande.

Corps

  • lineItemsArray<LineItem>

    Remplace toutes les lignes, au même format que dans CreatePurchaseOrder. Au moins une.

  • billToParty{ companyName?, address, taxId? } | null

    Qui le fournisseur facture, comme dans CreatePurchaseOrder. null copie les coordonnées de facturation actuelles de votre profil d’entreprise. Champ comptable : ne renvoie jamais le bon de commande en validation.

  • billTostring

    Obsolète : utilisez billToParty. Une adresse de facturation sur une ligne, jusqu’à 500 caractères ; une chaîne vide copie celle du profil de l’entreprise. Ignorée lorsque billToParty est envoyé.

  • costCenterstring

    Code interne du centre de coûts.

  • budgetOwnerstring

    Nom du responsable budgétaire.

  • buyerNamestring

    Nom du contact acheteur.

  • notesstring

    Notes en texte libre.

Retour

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

Plus de détails

Met à jour les champs comptables d’un bon de commande, ou remplace ses lignes. Impossible une fois qu’il est clôturé, annulé ou payé. Envoyer lineItems remplace l’ensemble des lignes, recalcule le montant et reconstruit entièrement la chaîne de validation, en écartant les approbations déjà obtenues : un brouillon reste un brouillon ; sinon, le bon de commande passe à awaiting_fulfillment si la nouvelle chaîne est validée automatiquement, ou à pending_approval si elle requiert une personne. Augmenter le total d’un bon de commande validé peut donc le renvoyer en validation. Les plafonds de dépenses sont vérifiés à la fois pour le demandeur du bon de commande et pour la personne qui le modifie. Pour réimputer un bon de commande clôturé, annulé ou payé à un autre centre de coûts, utilisez ChangeFinishedPurchaseOrderCostCenter.

Erreurs

  • 400 Bad Request - La validation des données a échoué ; le bon de commande est clôturé, annulé ou payé (« PO '{poId}' can't be edited once it's {status} ») ; ou la devise d’une ligne n’est pas celle de la région.
  • 404 Not Found - Aucun bon de commande avec cet id n’existe 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.
PATCH /v1/workspaces/{regionId}/purchase-orders/{poId}
Requête
curl -X PATCH "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-orders/{poId}" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Réponse · 200 OK
{
   "id": "string",
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "status": "draft" | "pending_approval" | "rejected" | "awaiting_fulfillment" | "invoiced" | "paid" | "canceled" | "closed" | "expired",
   "invoiceId": "string",
   "provider": "aws" | "gcp" | "azure" | "oci",
   "payerAccounts": [
      { "id": "string", "label": "string", "detail": "string" }
   ],
   "billToParty": {
      "source": "company_profile" | "custom",
      "companyName": "string",
      "address": { "line1": "string", "line2": "string", "city": "string", "region": "string", "postalCode": "string", "country": "string" },
      "addressText": "string",
      "taxId": "string"
   },
   "costCenter": "string",
   "costCenterChanges": [ { "from": "string", "to": "string", "reason": "string", "by": "string", "byName": "string", "at": "string" } ],
   "budgetOwner": "string",
   "buyerName": "string",
   "supplierSite": "string",
   "notes": "string",
   "requestId": "string",
   "lineItems": [
      {
      "lineNo": number,
      "scopeType": "sku" | "service" | "account" | "custom",
      "scopeId": "string" | null,
      "name": "string",
      "ruleType": "quantity" | "amount",
      "unit": "string",
      "unitPrice": number,
      "qty": number,
      "nteAmount": number,
      "lineType": "goods" | "service",
      "currency": "string",
      "paymentTerms": "string",
      "validFrom": "string",
      "validUntil": "string",
      "consumed": number,
      "customerLineNo": "string",
      "supplierSku": "string",
      "priceSource": "contract" | "list" | "manual"
    }
   ],
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "supplierEmail": { "to": "string", "at": "string" },
   "priorInvoiced": { "amount": number, "currency": "string", "basis": "invoiced" | "remaining", "sourceSystem": "sap_ariba" | "coupa" | "oracle", "importId": "string", "fileName": "string", "importedAt": "string", "importedBy": "string" },
   "createdAt": "string"
}

Soumettre un brouillon de bon de commande

Soumet un brouillon de bon de commande à validation.

POST/v1/workspaces/{regionId}/purchase-orders/{poId}/submit

Paramètres

  • poIdstringObligatoire

    L’identifiant du bon de commande.

Retour

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

Plus de détails

Soumet un brouillon à validation. La chaîne de validation est construite à ce moment-là, à partir du circuit de validation, des paramètres d’autonomie et des plafonds de dépenses actuels, et non de ceux en vigueur lors de l’enregistrement du brouillon, et les lignes prennent la devise actuelle de la région. Les plafonds de dépenses sont vérifiés à la fois pour le demandeur du brouillon et pour la personne qui le soumet. Un fournisseur absent de Pleaxy avec un supplierContactEmail est invité à ce moment-là. Ne prend pas de corps.

Erreurs

  • 400 Bad Request - Le bon de commande n’est pas un brouillon (« PO '{poId}' isn't a draft »), ou il dépasse un plafond de dépenses qui désigne comme valideur la personne qui le soumet, ce qui ne laisserait personne pour l’approuver (« Not submitted. This draft is over a spend limit that names you as its approver… »).
  • 404 Not Found - Aucun bon de commande avec cet id n’existe 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}/purchase-orders/{poId}/submit
Requête
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-orders/{poId}/submit" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Réponse · 201 Created
{
   "id": "string",
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "status": "draft" | "pending_approval" | "rejected" | "awaiting_fulfillment" | "invoiced" | "paid" | "canceled" | "closed" | "expired",
   "invoiceId": "string",
   "provider": "aws" | "gcp" | "azure" | "oci",
   "payerAccounts": [
      { "id": "string", "label": "string", "detail": "string" }
   ],
   "billToParty": {
      "source": "company_profile" | "custom",
      "companyName": "string",
      "address": { "line1": "string", "line2": "string", "city": "string", "region": "string", "postalCode": "string", "country": "string" },
      "addressText": "string",
      "taxId": "string"
   },
   "costCenter": "string",
   "costCenterChanges": [ { "from": "string", "to": "string", "reason": "string", "by": "string", "byName": "string", "at": "string" } ],
   "budgetOwner": "string",
   "buyerName": "string",
   "supplierSite": "string",
   "notes": "string",
   "requestId": "string",
   "lineItems": [
      {
      "lineNo": number,
      "scopeType": "sku" | "service" | "account" | "custom",
      "scopeId": "string" | null,
      "name": "string",
      "ruleType": "quantity" | "amount",
      "unit": "string",
      "unitPrice": number,
      "qty": number,
      "nteAmount": number,
      "lineType": "goods" | "service",
      "currency": "string",
      "paymentTerms": "string",
      "validFrom": "string",
      "validUntil": "string",
      "consumed": number,
      "customerLineNo": "string",
      "supplierSku": "string",
      "priceSource": "contract" | "list" | "manual"
    }
   ],
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "supplierEmail": { "to": "string", "at": "string" },
   "priorInvoiced": { "amount": number, "currency": "string", "basis": "invoiced" | "remaining", "sourceSystem": "sap_ariba" | "coupa" | "oracle", "importId": "string", "fileName": "string", "importedAt": "string", "importedBy": "string" },
   "createdAt": "string"
}

Annuler un bon de commande

Annule un bon de commande qui n’a pas été exécuté.

POST/v1/workspaces/{regionId}/purchase-orders/{poId}/cancel

Paramètres

  • poIdstringObligatoire

    L’identifiant du bon de commande.

Corps

  • reasonstring

    Jusqu’à 500 caractères. Le fournisseur le voit exactement tel qu’il est rédigé.

Retour

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

Plus de détails

Annule un bon de commande en brouillon, en attente de validation, en attente d’exécution ou expiré. C’est l’acheteur qui arrête la commande, pas un valideur qui la refuse. Le fournisseur en est informé, avec votre motif si vous en indiquez un.

Erreurs

  • 400 Bad Request - Le bon de commande est dans un statut qui ne permet pas l’annulation (« PO '{poId}' can't be canceled once it's {status} »), ou reason dépasse 500 caractères.
  • 404 Not Found - Aucun bon de commande avec cet id n’existe 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}/purchase-orders/{poId}/cancel
Requête
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-orders/{poId}/cancel" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "reason": "string"
}
Réponse · 201 Created
{
   "id": "string",
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "status": "draft" | "pending_approval" | "rejected" | "awaiting_fulfillment" | "invoiced" | "paid" | "canceled" | "closed" | "expired",
   "invoiceId": "string",
   "provider": "aws" | "gcp" | "azure" | "oci",
   "payerAccounts": [
      { "id": "string", "label": "string", "detail": "string" }
   ],
   "billToParty": {
      "source": "company_profile" | "custom",
      "companyName": "string",
      "address": { "line1": "string", "line2": "string", "city": "string", "region": "string", "postalCode": "string", "country": "string" },
      "addressText": "string",
      "taxId": "string"
   },
   "costCenter": "string",
   "costCenterChanges": [ { "from": "string", "to": "string", "reason": "string", "by": "string", "byName": "string", "at": "string" } ],
   "budgetOwner": "string",
   "buyerName": "string",
   "supplierSite": "string",
   "notes": "string",
   "requestId": "string",
   "lineItems": [
      {
      "lineNo": number,
      "scopeType": "sku" | "service" | "account" | "custom",
      "scopeId": "string" | null,
      "name": "string",
      "ruleType": "quantity" | "amount",
      "unit": "string",
      "unitPrice": number,
      "qty": number,
      "nteAmount": number,
      "lineType": "goods" | "service",
      "currency": "string",
      "paymentTerms": "string",
      "validFrom": "string",
      "validUntil": "string",
      "consumed": number,
      "customerLineNo": "string",
      "supplierSku": "string",
      "priceSource": "contract" | "list" | "manual"
    }
   ],
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "supplierEmail": { "to": "string", "at": "string" },
   "priorInvoiced": { "amount": number, "currency": "string", "basis": "invoiced" | "remaining", "sourceSystem": "sap_ariba" | "coupa" | "oracle", "importId": "string", "fileName": "string", "importedAt": "string", "importedBy": "string" },
   "createdAt": "string"
}

Clôturer un bon de commande

Clôture un bon de commande qui n’a plus rien à facturer.

POST/v1/workspaces/{regionId}/purchase-orders/{poId}/close

Paramètres

  • poIdstringObligatoire

    L’identifiant du bon de commande.

Retour

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

Plus de détails

Clôture un bon de commande en attente d’exécution, facturé, payé ou expiré, par exemple un bon entièrement consommé sans plus rien à facturer. Un bon de commande clôturé ne peut pas être modifié. Ne prend pas de corps.

Erreurs

  • 400 Bad Request - Le bon de commande est dans un statut qui ne permet pas la clôture (« PO '{poId}' can't be closed while it's {status} »).
  • 404 Not Found - Aucun bon de commande avec cet id n’existe 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}/purchase-orders/{poId}/close
Requête
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-orders/{poId}/close" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Réponse · 201 Created
{
   "id": "string",
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "status": "draft" | "pending_approval" | "rejected" | "awaiting_fulfillment" | "invoiced" | "paid" | "canceled" | "closed" | "expired",
   "invoiceId": "string",
   "provider": "aws" | "gcp" | "azure" | "oci",
   "payerAccounts": [
      { "id": "string", "label": "string", "detail": "string" }
   ],
   "billToParty": {
      "source": "company_profile" | "custom",
      "companyName": "string",
      "address": { "line1": "string", "line2": "string", "city": "string", "region": "string", "postalCode": "string", "country": "string" },
      "addressText": "string",
      "taxId": "string"
   },
   "costCenter": "string",
   "costCenterChanges": [ { "from": "string", "to": "string", "reason": "string", "by": "string", "byName": "string", "at": "string" } ],
   "budgetOwner": "string",
   "buyerName": "string",
   "supplierSite": "string",
   "notes": "string",
   "requestId": "string",
   "lineItems": [
      {
      "lineNo": number,
      "scopeType": "sku" | "service" | "account" | "custom",
      "scopeId": "string" | null,
      "name": "string",
      "ruleType": "quantity" | "amount",
      "unit": "string",
      "unitPrice": number,
      "qty": number,
      "nteAmount": number,
      "lineType": "goods" | "service",
      "currency": "string",
      "paymentTerms": "string",
      "validFrom": "string",
      "validUntil": "string",
      "consumed": number,
      "customerLineNo": "string",
      "supplierSku": "string",
      "priceSource": "contract" | "list" | "manual"
    }
   ],
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "supplierEmail": { "to": "string", "at": "string" },
   "priorInvoiced": { "amount": number, "currency": "string", "basis": "invoiced" | "remaining", "sourceSystem": "sap_ariba" | "coupa" | "oracle", "importId": "string", "fileName": "string", "importedAt": "string", "importedBy": "string" },
   "createdAt": "string"
}

Changer le centre de coûts d’un bon de commande terminé

Déplace un bon de commande terminé vers un autre centre de coûts.

POST/v1/workspaces/{regionId}/purchase-orders/{poId}/cost-center

Paramètres

  • poIdstringObligatoire

    L’identifiant du bon de commande.

Corps

  • costCenterstringObligatoire

    Le centre de coûts auquel imputer la commande, jusqu’à 100 caractères. Comparé à la liste de l’espace de travail sans tenir compte de la casse, et enregistré tel qu’il est écrit dans la liste.

  • reasonstringObligatoire

    Pourquoi il change, jusqu’à 500 caractères. Conservé sur la commande.

Retour

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

Plus de détails

Réimpute un bon de commande clôturé, annulé ou payé à un autre centre de coûts, avec un motif, par exemple après une réorganisation ou une erreur d’imputation constatée en fin de mois. Seul costCenter change : les lignes, le montant et les validations restent tels qu’ils ont été validés, et rien ne repasse en validation. La modification est conservée sur la commande dans costCenterChanges, avec son auteur et sa date. Lorsque l’espace de travail tient une liste de centres de coûts, le nouveau doit être un centre actif de cette liste. Un bon de commande ouvert change plutôt de centre de coûts avec UpdatePurchaseOrder.

Administrateur de l’espace de travail uniquement : un administrateur connecté, ou une clé API générée avec le rôle administrateur.

Champs de la réponse

  • costCenterChangesArray

    Chaque modification faite de cette façon, de la plus ancienne à la plus récente : { from?, to, reason, by, byName, at }.

Erreurs

  • 400 Bad Request - Aucun motif (« Say why the cost center is changing. ») ; le bon de commande est encore ouvert (« PO '{poId}' is still open. Change its cost center by editing the order. ») ; le centre de coûts n’est pas un centre actif de la liste de l’espace de travail (« '{costCenter}' isn't an active cost center in this workspace. Pick one from the cost centers list. ») ; c’est celui que le bon de commande a déjà ; ou un champ échoue à la validation.
  • 403 Forbidden - L’appelant n’est pas administrateur de cet espace de travail acheteur (« Only an administrator of this workspace can add or change cost centers. »).
  • 404 Not Found - Aucun bon de commande avec cet id n’existe dans l’espace de travail.
  • 409 Conflict - Le bon de commande a changé pendant l’enregistrement (« PO '{poId}' changed while you were editing it. Refresh and try again. »).
  • 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.
POST /v1/workspaces/{regionId}/purchase-orders/{poId}/cost-center
Requête
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-orders/{poId}/cost-center" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "costCenter": "string",
   "reason": "string"
}
Réponse · 201 Created
{
   "id": "string",
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "status": "draft" | "pending_approval" | "rejected" | "awaiting_fulfillment" | "invoiced" | "paid" | "canceled" | "closed" | "expired",
   "invoiceId": "string",
   "provider": "aws" | "gcp" | "azure" | "oci",
   "payerAccounts": [
      { "id": "string", "label": "string", "detail": "string" }
   ],
   "billToParty": {
      "source": "company_profile" | "custom",
      "companyName": "string",
      "address": { "line1": "string", "line2": "string", "city": "string", "region": "string", "postalCode": "string", "country": "string" },
      "addressText": "string",
      "taxId": "string"
   },
   "costCenter": "string",
   "costCenterChanges": [ { "from": "string", "to": "string", "reason": "string", "by": "string", "byName": "string", "at": "string" } ],
   "budgetOwner": "string",
   "buyerName": "string",
   "supplierSite": "string",
   "notes": "string",
   "requestId": "string",
   "lineItems": [
      {
      "lineNo": number,
      "scopeType": "sku" | "service" | "account" | "custom",
      "scopeId": "string" | null,
      "name": "string",
      "ruleType": "quantity" | "amount",
      "unit": "string",
      "unitPrice": number,
      "qty": number,
      "nteAmount": number,
      "lineType": "goods" | "service",
      "currency": "string",
      "paymentTerms": "string",
      "validFrom": "string",
      "validUntil": "string",
      "consumed": number,
      "customerLineNo": "string",
      "supplierSku": "string",
      "priceSource": "contract" | "list" | "manual"
    }
   ],
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "supplierEmail": { "to": "string", "at": "string" },
   "priorInvoiced": { "amount": number, "currency": "string", "basis": "invoiced" | "remaining", "sourceSystem": "sap_ariba" | "coupa" | "oracle", "importId": "string", "fileName": "string", "importedAt": "string", "importedBy": "string" },
   "createdAt": "string"
}

Valider un bon de commande

Valide l’étape de validation en cours d’un bon de commande.

POST/v1/workspaces/{regionId}/purchase-orders/{poId}/approve

Paramètres

  • poIdstringObligatoire

    L’identifiant du bon de commande.

Retour

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

Plus de détails

Fait avancer d’une étape la chaîne de validation du bon de commande. Seul l’employé désigné par l’étape en cours peut l’appeler : aucun rôle, aucune permission ni aucun droit d’administrateur ne remplace le fait d’être désigné, et une clé API ne peut jamais être désignée. Une fois la dernière étape validée, le statut du bon de commande devient awaiting_fulfillment, une notification po_approved est envoyée au fournisseur, et la commande lui est envoyée par e-mail en PDF (voir CreatePurchaseOrder). Ne prend pas de corps et agit au nom de l’appelant authentifié (une clé API agit en tant que apikey:<keyId>).

Session connectée uniquement. Tout autre appelant, y compris une clé API, reçoit 403 HUMAN_APPROVAL_REQUIRED avant toute lecture.

Erreurs

  • 400 Bad Request - La chaîne de validation du bon de commande n’a aucune étape en attente (déjà validée ou refusée).
  • 403 Forbidden - Code HUMAN_APPROVAL_REQUIRED. L’appelant est une clé API. Les étapes de validation désignent un employé précis, et une clé ne peut jamais en être un : une clé ne peut donc ni valider ni refuser une étape. Demandez à l’employé désigné par l’étape d’agir dans Pleaxy.
  • 403 Forbidden - Code APPROVER_NOT_ASSIGNED. Aucun valideur n’est affecté à l’étape en cours, donc personne ne peut agir dessus. Un administrateur doit d’abord en affecter un avec ReassignPurchaseOrderApprovalStage / ReassignInvoiceApprovalStage.
  • 403 Forbidden - L’appelant n’est pas l’employé désigné par l’étape en cours. Seul cet employé peut la valider ou la refuser : aucun rôle ni aucune permission ne remplace le fait d’être désigné.
  • 404 Not Found - Aucun bon de commande avec cet id n’existe 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}/purchase-orders/{poId}/approve
Requête
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-orders/{poId}/approve" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Réponse · 201 Created
{
   "id": "string",
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "status": "draft" | "pending_approval" | "rejected" | "awaiting_fulfillment" | "invoiced" | "paid" | "canceled" | "closed" | "expired",
   "invoiceId": "string",
   "provider": "aws" | "gcp" | "azure" | "oci",
   "payerAccounts": [
      { "id": "string", "label": "string", "detail": "string" }
   ],
   "billToParty": {
      "source": "company_profile" | "custom",
      "companyName": "string",
      "address": { "line1": "string", "line2": "string", "city": "string", "region": "string", "postalCode": "string", "country": "string" },
      "addressText": "string",
      "taxId": "string"
   },
   "costCenter": "string",
   "costCenterChanges": [ { "from": "string", "to": "string", "reason": "string", "by": "string", "byName": "string", "at": "string" } ],
   "budgetOwner": "string",
   "buyerName": "string",
   "supplierSite": "string",
   "notes": "string",
   "requestId": "string",
   "lineItems": [
      {
      "lineNo": number,
      "scopeType": "sku" | "service" | "account" | "custom",
      "scopeId": "string" | null,
      "name": "string",
      "ruleType": "quantity" | "amount",
      "unit": "string",
      "unitPrice": number,
      "qty": number,
      "nteAmount": number,
      "lineType": "goods" | "service",
      "currency": "string",
      "paymentTerms": "string",
      "validFrom": "string",
      "validUntil": "string",
      "consumed": number,
      "customerLineNo": "string",
      "supplierSku": "string",
      "priceSource": "contract" | "list" | "manual"
    }
   ],
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "supplierEmail": { "to": "string", "at": "string" },
   "priorInvoiced": { "amount": number, "currency": "string", "basis": "invoiced" | "remaining", "sourceSystem": "sap_ariba" | "coupa" | "oracle", "importId": "string", "fileName": "string", "importedAt": "string", "importedBy": "string" },
   "createdAt": "string"
}

Refuser un bon de commande

Refuse un bon de commande à son étape de validation en cours.

POST/v1/workspaces/{regionId}/purchase-orders/{poId}/reject

Paramètres

  • poIdstringObligatoire

    L’identifiant du bon de commande.

Retour

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

Plus de détails

Refuse le bon de commande à son étape de validation en cours. Seul l’employé désigné par l’étape en cours peut l’appeler : le refus obéit à la même règle que la validation. Le statut devient rejected et une notification po_rejected est envoyée au fournisseur. Définitif : un bon de commande refusé ne peut pas être soumis de nouveau. Ne prend pas de corps et agit au nom de l’appelant authentifié (une clé API agit en tant que apikey:<keyId>).

Erreurs

  • 400 Bad Request - La chaîne de validation du bon de commande n’a aucune étape en attente.
  • 403 Forbidden - Code HUMAN_APPROVAL_REQUIRED. L’appelant est une clé API. Les étapes de validation désignent un employé précis, et une clé ne peut jamais en être un : une clé ne peut donc ni valider ni refuser une étape. Demandez à l’employé désigné par l’étape d’agir dans Pleaxy.
  • 403 Forbidden - Code APPROVER_NOT_ASSIGNED. Aucun valideur n’est affecté à l’étape en cours, donc personne ne peut agir dessus. Un administrateur doit d’abord en affecter un avec ReassignPurchaseOrderApprovalStage / ReassignInvoiceApprovalStage.
  • 403 Forbidden - L’appelant n’est pas l’employé désigné par l’étape en cours. Seul cet employé peut la valider ou la refuser : aucun rôle ni aucune permission ne remplace le fait d’être désigné.
  • 404 Not Found - Aucun bon de commande avec cet id n’existe 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}/purchase-orders/{poId}/reject
Requête
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-orders/{poId}/reject" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Réponse · 201 Created
{
   "id": "string",
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "status": "draft" | "pending_approval" | "rejected" | "awaiting_fulfillment" | "invoiced" | "paid" | "canceled" | "closed" | "expired",
   "invoiceId": "string",
   "provider": "aws" | "gcp" | "azure" | "oci",
   "payerAccounts": [
      { "id": "string", "label": "string", "detail": "string" }
   ],
   "billToParty": {
      "source": "company_profile" | "custom",
      "companyName": "string",
      "address": { "line1": "string", "line2": "string", "city": "string", "region": "string", "postalCode": "string", "country": "string" },
      "addressText": "string",
      "taxId": "string"
   },
   "costCenter": "string",
   "costCenterChanges": [ { "from": "string", "to": "string", "reason": "string", "by": "string", "byName": "string", "at": "string" } ],
   "budgetOwner": "string",
   "buyerName": "string",
   "supplierSite": "string",
   "notes": "string",
   "requestId": "string",
   "lineItems": [
      {
      "lineNo": number,
      "scopeType": "sku" | "service" | "account" | "custom",
      "scopeId": "string" | null,
      "name": "string",
      "ruleType": "quantity" | "amount",
      "unit": "string",
      "unitPrice": number,
      "qty": number,
      "nteAmount": number,
      "lineType": "goods" | "service",
      "currency": "string",
      "paymentTerms": "string",
      "validFrom": "string",
      "validUntil": "string",
      "consumed": number,
      "customerLineNo": "string",
      "supplierSku": "string",
      "priceSource": "contract" | "list" | "manual"
    }
   ],
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "supplierEmail": { "to": "string", "at": "string" },
   "priorInvoiced": { "amount": number, "currency": "string", "basis": "invoiced" | "remaining", "sourceSystem": "sap_ariba" | "coupa" | "oracle", "importId": "string", "fileName": "string", "importedAt": "string", "importedBy": "string" },
   "createdAt": "string"
}

Réaffecter une étape de validation d’un bon de commande

Affecte une étape de validation en attente à une autre personne.

POST/v1/workspaces/{regionId}/purchase-orders/{poId}/approval/reassign

Paramètres

  • poIdstringObligatoire

    L’identifiant du bon de commande.

Corps

  • stageIdstringObligatoire

    Id de l’étape en attente à réaffecter. Elle peut se trouver dans n’importe quel groupe de la chaîne, pas seulement dans le groupe en cours.

  • approverEmployeeKeystringObligatoire

    Clé d’employé (sub Cognito) du nouveau valideur. Doit être un membre acheteur de cet espace de travail, et pas l’administrateur qui effectue l’action.

  • reasonstring

    Pourquoi l’étape a été réaffectée, jusqu’à 280 caractères. Affiché dans l’historique de validation.

Retour

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

Plus de détails

Redirige une étape en attente de la chaîne de validation de cette commande vers un autre employé désigné. Administrateur uniquement (approvalSettings:edit), et sessions connectées uniquement. Comme une étape ne peut être traitée que par l’employé qu’elle désigne, c’est le seul moyen de déplacer une étape dont le valideur est parti ou n’a jamais été affecté : il n’existe aucun intervenant de repli. Seule la chaîne de ce document change : la chaîne configurée de l’organisation dans les Paramètres reste intacte, et la modification est consignée dans l’historique de validation sous forme d’entrée reassigned.

Erreurs

  • 400 Bad Request - La chaîne est déjà validée ou refusée ; l’étape a déjà été validée ou refusée ; le nouveau valideur n’est pas un employé de cet espace de travail ; le nouveau valideur a créé la commande / saisi la facture, est exclu au titre de la séparation des tâches, a déjà levé le plafond de dépenses par sa propre délégation de pouvoir, ou occupe déjà une autre place sur la même étape ; ou l’étape est la revue du plafond de dépenses, dont le valideur est un élément d’audit figé (modifiez-le dans Paramètres › Plafonds de dépenses).
  • 403 Forbidden - L’appelant n’a pas approvalSettings:edit (administrateur), ou s’est désigné lui-même comme nouveau valideur : s’affecter une étape active ferait d’une seule personne toute la chaîne, sans aucune trace de règle. Code HUMAN_APPROVAL_REQUIRED lorsque l’appelant est une clé API : seul un administrateur connecté peut réaffecter une étape de validation.
  • 404 Not Found - Aucun document avec cet id n’existe dans l’espace de travail, ou la chaîne n’a aucune étape avec ce stageId.
  • 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}/purchase-orders/{poId}/approval/reassign
Requête
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-orders/{poId}/approval/reassign" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "stageId": "string",
   "approverEmployeeKey": "string",
   "reason": "string"
}
Réponse · 201 Created
{
   "id": "string",
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "status": "draft" | "pending_approval" | "rejected" | "awaiting_fulfillment" | "invoiced" | "paid" | "canceled" | "closed" | "expired",
   "invoiceId": "string",
   "provider": "aws" | "gcp" | "azure" | "oci",
   "payerAccounts": [
      { "id": "string", "label": "string", "detail": "string" }
   ],
   "billToParty": {
      "source": "company_profile" | "custom",
      "companyName": "string",
      "address": { "line1": "string", "line2": "string", "city": "string", "region": "string", "postalCode": "string", "country": "string" },
      "addressText": "string",
      "taxId": "string"
   },
   "costCenter": "string",
   "costCenterChanges": [ { "from": "string", "to": "string", "reason": "string", "by": "string", "byName": "string", "at": "string" } ],
   "budgetOwner": "string",
   "buyerName": "string",
   "supplierSite": "string",
   "notes": "string",
   "requestId": "string",
   "lineItems": [
      {
      "lineNo": number,
      "scopeType": "sku" | "service" | "account" | "custom",
      "scopeId": "string" | null,
      "name": "string",
      "ruleType": "quantity" | "amount",
      "unit": "string",
      "unitPrice": number,
      "qty": number,
      "nteAmount": number,
      "lineType": "goods" | "service",
      "currency": "string",
      "paymentTerms": "string",
      "validFrom": "string",
      "validUntil": "string",
      "consumed": number,
      "customerLineNo": "string",
      "supplierSku": "string",
      "priceSource": "contract" | "list" | "manual"
    }
   ],
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "supplierEmail": { "to": "string", "at": "string" },
   "priorInvoiced": { "amount": number, "currency": "string", "basis": "invoiced" | "remaining", "sourceSystem": "sap_ariba" | "coupa" | "oracle", "importId": "string", "fileName": "string", "importedAt": "string", "importedBy": "string" },
   "createdAt": "string"
}

Lister les commentaires d’un bon de commande

Liste les commentaires d’un bon de commande.

GET/v1/workspaces/{regionId}/purchase-orders/{poId}/comments

Paramètres

  • poIdstringObligatoire

    L’identifiant du bon de commande.

  • buyerstring

    Appelants fournisseurs uniquement, et seulement après un 409 *_ID_AMBIGUOUS : l’ID de l’espace de travail de l’acheteur (se terminant par .buyer) ou son id de région, tiré de la liste buyers du 409. Seul le document de cet acheteur est pris en compte ; s’il n’y en a pas, c’est un 404. Un ID d’espace de travail .supplier donne 400 BUYER_QUALIFIER_INVALID (« The buyer parameter must be one buyer's Workspace ID (ending in .buyer), from the buyers list in the 409 response. »). Ignoré pour un appelant acheteur.

Retour

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

Plus de détails

Les commentaires d’un bon de commande, du plus ancien au plus récent : les commentaires internes de votre côté et tous les commentaires partagés. Un commentaire supprimé par son auteur reste dans le fil avec un corps vide, de sorte qu’il montre toujours que quelque chose a été dit, et quand. Même recherche que GetPurchaseOrder, donc un fournisseur accède aux bons de commande qui lui ont été émis.

Champs de la réponse

  • visibilitystring

    internal : uniquement le côté de l’auteur. shared : l’acheteur et le fournisseur le lisent tous les deux.

  • authorKey, mentionsstring, Array

    Uniquement sur les commentaires de votre côté : qui l’a écrit, par clé d’employé, et qui il mentionnait. L’autre partie voit authorName et authorOrgName.

  • bodystring

    Texte brut avec ses sauts de ligne. Vide une fois supprimé par l’auteur ; deletedAt indique alors quand.

  • viewerIsAuthorboolean

    Indique si l’appelant l’a écrit, et peut donc le supprimer. Toujours false pour une clé API.

Erreurs

  • 404 Not Found - Aucun bon de commande avec cet id n’existe dans l’espace de travail de l’appelant.
  • 409 Conflict - Appelants fournisseurs uniquement. Code PO_ID_AMBIGUOUS : plusieurs de vos acheteurs ont émis un bon de commande avec cet id (les id ne sont uniques qu’au sein d’un même acheteur), donc Pleaxy ne devine pas lequel vous visez. Rien n’est lu ni modifié. Le champ buyers du corps liste l’ID de l’espace de travail et le nom de chaque acheteur : relancez l’appel avec ?buyer=<that Workspace ID>.
  • 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}/purchase-orders/{poId}/comments
Requête
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-orders/{poId}/comments" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Réponse · 200 OK
{
   "comments": [
      {
         "id": "string",
         "documentKind": "invoice" | "purchase_order",
         "documentId": "string",
         "body": "string",
         "visibility": "internal" | "shared",
         "authorSide": "buyer" | "supplier",
         "authorKey": "string",
         "authorName": "string",
         "authorOrgName": "string",
         "mentions": [ { "employeeKey": "string", "name": "string" } ],
         "createdAt": "string",
         "deletedAt": "string",
         "viewerIsAuthor": boolean
      }
   ]
}

Ajouter un commentaire à un bon de commande

Ajoute un commentaire à un bon de commande.

POST/v1/workspaces/{regionId}/purchase-orders/{poId}/comments

Paramètres

  • poIdstringObligatoire

    L’identifiant du bon de commande.

  • buyerstring

    Appelants fournisseurs uniquement, et seulement après un 409 *_ID_AMBIGUOUS : l’ID de l’espace de travail de l’acheteur (se terminant par .buyer) ou son id de région, tiré de la liste buyers du 409. Seul le document de cet acheteur est pris en compte ; s’il n’y en a pas, c’est un 404. Un ID d’espace de travail .supplier donne 400 BUYER_QUALIFIER_INVALID (« The buyer parameter must be one buyer's Workspace ID (ending in .buyer), from the buyers list in the 409 response. »). Ignoré pour un appelant acheteur.

Corps

  • bodystringObligatoire

    Texte brut, jusqu’à 2 000 caractères. Les sauts de ligne sont conservés ; les caractères de contrôle, de texte bidirectionnel et invisibles sont supprimés.

  • visibility"internal" | "shared"Obligatoire

    internal : votre propre équipe uniquement. shared : l’autre partie le lit et y répond aussi. Les commentaires d’un fournisseur sont toujours partagés.

  • mentionsstring[]

    Jusqu’à 10 clés d’employé de personnes de votre propre espace de travail à notifier (voir ListEmployees). La notification ne contient jamais le texte du commentaire.

Retour

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

Plus de détails

Commente un bon de commande : en interne pour votre équipe, ou en partage avec l’autre partie. Les commentaires ne sont jamais modifiés. Les personnes que vous mentionnez, les auteurs des commentaires précédents de votre côté et, pour un commentaire partagé, l’autre partie sont notifiés (po_comment) ; la notification ne contient jamais le texte.

Session connectée uniquement. Une clé API reçoit 403 HUMAN_SESSION_REQUIRED.

Erreurs

  • 400 Bad Request - Un corps vide (« Write something before you post the comment. »), plus de 2 000 caractères, plus de 10 mentions, la mention d’une personne extérieure à votre espace de travail, une visibilité autre que internal ou shared, un commentaire internal d’un fournisseur (« A supplier's comments are always shared with the buyer. »), ou un commentaire shared sur un document dont le fournisseur est absent de Pleaxy (publiez-le plutôt en internal).
  • 403 Forbidden - Code HUMAN_SESSION_REQUIRED : l’appelant est une clé API (« Comments are written by people. Sign in to Pleaxy to post one. »).
  • 404 Not Found - Aucun bon de commande avec cet id n’existe dans l’espace de travail de l’appelant.
  • 409 Conflict - Appelants fournisseurs uniquement. Code PO_ID_AMBIGUOUS : plusieurs de vos acheteurs ont émis un bon de commande avec cet id (les id ne sont uniques qu’au sein d’un même acheteur), donc Pleaxy ne devine pas lequel vous visez. Rien n’est lu ni modifié. Le champ buyers du corps liste l’ID de l’espace de travail et le nom de chaque acheteur : relancez l’appel avec ?buyer=<that Workspace ID>.
  • 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}/purchase-orders/{poId}/comments
Requête
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-orders/{poId}/comments" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "body": "string",
   "visibility": "internal" | "shared",
   "mentions": [ "string" ]
}
Réponse · 201 Created
{
   "id": "string",
   "documentKind": "invoice" | "purchase_order",
   "documentId": "string",
   "body": "string",
   "visibility": "internal" | "shared",
   "authorSide": "buyer" | "supplier",
   "authorKey": "string",
   "authorName": "string",
   "authorOrgName": "string",
   "mentions": [ { "employeeKey": "string", "name": "string" } ],
   "createdAt": "string",
   "deletedAt": "string",
   "viewerIsAuthor": boolean
}

Supprimer un commentaire d’un bon de commande

Supprime l’un de vos commentaires sur un bon de commande.

DELETE/v1/workspaces/{regionId}/purchase-orders/{poId}/comments/{commentId}

Paramètres

  • poIdstringObligatoire

    L’identifiant du bon de commande.

  • commentIdstringObligatoire

    Le commentaire, par exemple "CMT-1760313600000-3f9a1c2e".

  • buyerstring

    Appelants fournisseurs uniquement, et seulement après un 409 *_ID_AMBIGUOUS : l’ID de l’espace de travail de l’acheteur (se terminant par .buyer) ou son id de région, tiré de la liste buyers du 409. Seul le document de cet acheteur est pris en compte ; s’il n’y en a pas, c’est un 404. Un ID d’espace de travail .supplier donne 400 BUYER_QUALIFIER_INVALID (« The buyer parameter must be one buyer's Workspace ID (ending in .buyer), from the buyers list in the 409 response. »). Ignoré pour un appelant acheteur.

Retour

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

Plus de détails

Retire votre propre commentaire : son texte est supprimé et le fil garde la trace qu’un commentaire a été publié. Le supprimer à nouveau ne change rien.

Session connectée uniquement. Une clé API reçoit 403 HUMAN_SESSION_REQUIRED.

Erreurs

  • 403 Forbidden - Code HUMAN_SESSION_REQUIRED : l’appelant est une clé API (« Comments are written by people. Sign in to Pleaxy to post one. »).
  • 403 Forbidden - Le commentaire n’est pas le vôtre (« Only the person who wrote a comment can delete it. »).
  • 404 Not Found - Aucun commentaire avec cet id visible pour vous sur ce document (« Comment {commentId} not found. »), ou document inexistant.
  • 409 Conflict - Appelants fournisseurs uniquement. Code PO_ID_AMBIGUOUS : plusieurs de vos acheteurs ont émis un bon de commande avec cet id (les id ne sont uniques qu’au sein d’un même acheteur), donc Pleaxy ne devine pas lequel vous visez. Rien n’est lu ni modifié. Le champ buyers du corps liste l’ID de l’espace de travail et le nom de chaque acheteur : relancez l’appel avec ?buyer=<that Workspace ID>.
  • 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}/purchase-orders/{poId}/comments/{commentId}
Requête
curl -X DELETE "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-orders/{poId}/comments/{commentId}" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Réponse · 200 OK
{
   "id": "string",
   "documentKind": "invoice" | "purchase_order",
   "documentId": "string",
   "body": "string",
   "visibility": "internal" | "shared",
   "authorSide": "buyer" | "supplier",
   "authorKey": "string",
   "authorName": "string",
   "authorOrgName": "string",
   "mentions": [ { "employeeKey": "string", "name": "string" } ],
   "createdAt": "string",
   "deletedAt": "string",
   "viewerIsAuthor": boolean
}
Nous contacter