Référence de l’API

Circuits de validation

Qui valide les bons de commande et les paiements de factures.

En savoir plus sur cette ressource

Configure qui valide les bons de commande et les paiements de factures, indépendamment des paramètres d’autonomie de Règlement, qui déterminent si une personne est nécessaire et non laquelle. Chacun des deux processus (purchase_order, invoice_payment) a un circuit de validation, sous Workflows dans Pleaxy, ou est lié pour partager le circuit de l’autre processus. Un circuit est une liste ordonnée de groupes, exécutés l’un après l’autre. Un groupe séquentiel est une étape avec un valideur ; un groupe parallèle est un ensemble de plusieurs étapes qui doivent toutes être validées, dans n’importe quel ordre, par des personnes différentes. Un groupe avec des conditions ne s’exécute que lorsque chaque condition correspond au document (montant, fournisseur ou demandeur) ; une étape marquée highValueOnly ne s’exécute que lorsque le montant est supérieur à l’approvalThreshold de Règlement. Chaque étape désigne un employé précis, et seul cet employé peut agir dessus. Une nouvelle région commence avec une seule étape, 'Region administrator'. Lorsqu’un bon de commande ou une facture est créé, sa chaîne est un instantané du circuit à ce moment-là, donc modifier le circuit ensuite ne change pas les documents déjà en attente.

Obtenir les paramètres du circuit de validation

Renvoie le circuit de validation d’un processus.

GET/v1/workspaces/{regionId}/approval-chains/{process}

Paramètres

  • process"purchase_order" | "invoice_payment"Obligatoire

    Le processus dont il faut récupérer le circuit de validation.

Retour

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

Plus de détails

Renvoie le circuit de validation d’un processus, ou { process, groups: [] } si le processus n’en a jamais eu. Accepte une clé API acheteur.

Champs de la réponse

  • linkedTo"purchase_order" | "invoice_payment"

    Lorsqu’il est défini, ce processus utilise le circuit de l’autre processus (un lien actif, pas une copie), et groups est ignoré.

  • groups[].mode"sequential" | "parallel"

    sequential : exactement une étape. parallel : chaque étape doit être validée, dans n’importe quel ordre, chacune par un employé différent.

  • groups[].conditionsarray

    Lorsqu’il est présent, le groupe ne s’exécute que si chaque condition correspond. amount utilise gt, gte, lt ou lte avec un nombre dans la devise de la région ; supplier utilise is ou is_not avec l’ID d’espace de travail d’un fournisseur (se terminant par .supplier) ; requester utilise is ou is_not avec une clé d’employé. Un document dans une autre devise que celle de la région remplit toutes les conditions de montant.

  • groups[].stages[].approverEmployeeKeystring

    Le seul employé qui peut agir sur l’étape. '' signifie que l’étape n’a pas encore de valideur : il faut en affecter un avant que quiconque puisse agir dessus. Seul un circuit enregistré avant que les valideurs nommés deviennent obligatoires peut contenir cette valeur.

  • groups[].stages[].highValueOnlyboolean

    L’étape ne s’exécute que lorsque le montant est supérieur à l’approvalThreshold de Règlement (le seuil de montant élevé).

  • source"default"

    Présent lorsque Pleaxy a écrit ce circuit comme circuit par défaut de la région. Tout autre enregistrement le supprime.

  • defaultApproverIsAdminboolean

    Uniquement avec source "default" : indique si le valideur de l’étape par défaut est toujours administrateur de la région.

  • requesterRule.eligibleApproverCountnumber

    Le nombre de membres acheteurs qui peuvent valider les documents de ce processus. Un demandeur ne peut valider son propre document que si personne d’autre ne le pourrait.

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}/approval-chains/{process}
Requête
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/approval-chains/{process}" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Réponse · 200 OK
{
   "process": "purchase_order" | "invoice_payment",
   "linkedTo": "purchase_order" | "invoice_payment",
   "groups": [
      {
         "id": "string",
         "mode": "sequential" | "parallel",
         "label": "string",
         "stages": [
            {
               "id": "string",
               "label": "string",
               "approverEmployeeKey": "string",
               "approverName": "string",
               "approverEmail": "string",
               "highValueOnly": boolean
            }
         ],
         "conditions": [
            { "field": "amount" | "supplier" | "requester", "operator": "gt" | "gte" | "lt" | "lte" | "is" | "is_not", "value": number | "string" }
         ]
      }
   ],
   "source": "default",
   "defaultApproverIsAdmin": boolean,
   "requesterRule": { "eligibleApproverCount": number }
}

Mettre à jour les paramètres du circuit de validation

Remplace le circuit de validation d’un processus.

PATCH/v1/workspaces/{regionId}/approval-chains/{process}

Paramètres

  • process"purchase_order" | "invoice_payment"Obligatoire

    Le processus dont il faut mettre à jour le circuit de validation.

Corps

  • groupsarray

    Le nouveau circuit, dans l’ordre. Chaque élément { id, mode, label?, stages, conditions? }. stages sont des { id, label, approverEmployeeKey, highValueOnly? } : un groupe séquentiel en a exactement un, un groupe parallèle au moins un, avec des id uniques et des valideurs différents. Jusqu’à 10 conditions par groupe. Au moins un groupe.

  • linkedTo"purchase_order" | "invoice_payment"

    Utiliser le circuit de l’autre processus au lieu du circuit propre à celui-ci.

  • useDefaulttrue

    Réinitialiser au circuit par défaut de la région : une étape, 'Region administrator', désignant l’administrateur propriétaire de la région ou, à défaut, le premier administrateur par ordre alphabétique. Ne peut pas être combiné avec groups, stages ou linkedTo.

  • stagesarray

    Ancien format plat, une étape séquentielle par entrée, { id, label, approverEmployeeKey, highValueOnly? }. Enregistré sous forme de groupes équivalents.

Retour

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

Plus de détails

Remplace le circuit d’un processus par groups, le lie au circuit de l’autre processus avec linkedTo, ou le réinitialise au circuit par défaut de la région avec useDefault: true. Envoyer groups supprime tout linkedTo ; envoyer linkedTo conserve les groupes actuels enregistrés, mais inactifs tant que le lien existe. Chaque approverEmployeeKey est vérifié par rapport aux employés de l’espace de travail. Le circuit doit conserver au moins un groupe sans condition qui s’exécute pour les montants ordinaires, pour que chaque document parvienne à une personne. stages, une liste plate de groupes à une seule étape, est toujours accepté pour les anciens clients ; préférez groups.

Modifié le 2026-09-27, correctif de sécurité au sein de la v1 : session connectée uniquement, pour tous les processus. Un circuit de validation décide qui valide les dépenses, donc une clé API reçoit 403 HUMAN_SESSION_REQUIRED quel que soit son rôle achats.

Erreurs

  • 400 Bad Request - Une étape n’a pas de valideur (« '{label}' has no approver - every approval step must name a specific employee. ») ou désigne une personne qui n’est pas employée de l’espace de travail ; un groupe parallèle désigne deux fois le même valideur ; un groupe séquentiel n’a pas exactement une étape ; une condition est mal formée ; le circuit n’a aucun groupe sans condition qui s’exécute pour les montants ordinaires (« A chain needs at least one approval step with no conditions that applies to ordinary purchase amounts… ») ; groups ou stages est vide ; linkedTo désigne ce processus, ou un processus déjà lié à celui-ci ; ou useDefault est combiné avec groups, stages ou linkedTo.
  • 409 Conflict - Code NO_REGION_ADMIN, avec useDefault : « This region has no administrator to route approvals to. Make someone an administrator first. »
  • 403 Forbidden - Code HUMAN_SESSION_REQUIRED. L’appelant n’est pas une personne connectée (par exemple, une clé API), quel que soit le processus (« Approval chains can only be changed by a signed-in person. Change them in Pleaxy. »). Rien n’est enregistré.
  • 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}/approval-chains/{process}
Requête
curl -X PATCH "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/approval-chains/{process}" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "groups": [
      {
         "id": "string",
         "mode": "sequential" | "parallel",
         "label": "string",
         "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "highValueOnly": boolean }
         ],
         "conditions": [
            { "field": "amount" | "supplier" | "requester", "operator": "gt" | "gte" | "lt" | "lte" | "is" | "is_not", "value": number | "string" }
         ]
      }
   ]
}
Réponse · 200 OK
{
   "process": "purchase_order" | "invoice_payment",
   "linkedTo": "purchase_order" | "invoice_payment",
   "groups": [
      {
         "id": "string",
         "mode": "sequential" | "parallel",
         "label": "string",
         "stages": [
            {
               "id": "string",
               "label": "string",
               "approverEmployeeKey": "string",
               "approverName": "string",
               "approverEmail": "string",
               "highValueOnly": boolean
            }
         ],
         "conditions": [
            { "field": "amount" | "supplier" | "requester", "operator": "gt" | "gte" | "lt" | "lte" | "is" | "is_not", "value": number | "string" }
         ]
      }
   ],
   "source": "default",
   "defaultApproverIsAdmin": boolean,
   "requesterRule": { "eligibleApproverCount": number }
}
Nous contacter