Riferimento API

Catene di approvazione

Chi approva gli ordini d’acquisto e i pagamenti delle fatture.

Altro su questa risorsa

Configura chi approva gli ordini d’acquisto e i pagamenti delle fatture, separatamente dalle impostazioni di autonomia di Liquidazione, che determinano se serva o meno una persona, non quale persona. Ognuno dei due processi (purchase_order, invoice_payment) ha un flusso di approvazione, in Flussi di lavoro in Pleaxy, oppure è collegato per condividere il flusso dell’altro processo. Un flusso è un elenco ordinato di gruppi, eseguiti uno dopo l’altro. Un gruppo sequenziale è un passaggio con un approvatore; un gruppo parallelo è composto da più passaggi che devono essere tutti approvati, in qualsiasi ordine, da persone diverse. Un gruppo con condizioni viene eseguito solo quando ogni condizione corrisponde al documento (importo, fornitore o richiedente); un passaggio contrassegnato con highValueOnly viene eseguito solo quando l’importo supera l’approvalThreshold di Liquidazione. Ogni passaggio indica un dipendente specifico, e solo quel dipendente può agire su di esso. Una nuova regione parte con un passaggio, 'Region administrator'. Quando viene creato un OdA o una fattura, la sua catena è un’istantanea del flusso in quel momento, quindi modificare il flusso in seguito non cambia i documenti già in attesa.

Recuperare le impostazioni della catena di approvazione

Restituisce il flusso di approvazione di un processo.

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

Parametri

  • process"purchase_order" | "invoice_payment"Obbligatorio

    Il flusso di cui recuperare la catena di approvazione.

Restituisce

200 OK con l’oggetto mostrato nella risposta.

Più dettagli

Restituisce il flusso di approvazione di un processo, oppure { process, groups: [] } se il processo non ne ha mai avuto uno. Accetta una chiave API acquirente.

Campi della risposta

  • linkedTo"purchase_order" | "invoice_payment"

    Se impostato, questo processo usa il flusso dell’altro processo (un collegamento attivo, non una copia) e groups viene ignorato.

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

    sequential: esattamente un passaggio. parallel: ogni passaggio deve essere approvato, in qualsiasi ordine, ciascuno da un dipendente diverso.

  • groups[].conditionsarray

    Se presente, il gruppo viene eseguito solo se ogni condizione corrisponde. amount usa gt, gte, lt o lte con un numero nella valuta della regione; supplier usa is o is_not con l’ID del workspace di un fornitore (che termina con .supplier); requester usa is o is_not con una chiave dipendente. Un documento in una valuta diversa da quella della regione soddisfa ogni condizione sull’importo.

  • groups[].stages[].approverEmployeeKeystring

    L’unico dipendente che può agire sul passaggio. '' significa che il passaggio non ha ancora un approvatore: deve esserne assegnato uno prima che chiunque possa agire. Può contenerlo solo un flusso salvato prima che gli approvatori nominativi diventassero obbligatori.

  • groups[].stages[].highValueOnlyboolean

    Il passaggio viene eseguito solo quando l’importo supera l’approvalThreshold di Liquidazione (la soglia per importi elevati).

  • source"default"

    Presente quando Pleaxy ha scritto questo flusso come predefinito della regione. Qualsiasi altro salvataggio lo rimuove.

  • defaultApproverIsAdminboolean

    Solo con source "default": se l’approvatore del passaggio predefinito è ancora un amministratore della regione.

  • requesterRule.eligibleApproverCountnumber

    Quanti membri acquirente possono approvare i documenti di questo processo. Un richiedente può approvare il proprio documento solo quando nessun altro potrebbe farlo.

Errori

  • 401 Unauthorized - Non è stata presentata alcuna credenziale, oppure il token Bearer o il valore di X-Api-Key è mancante, non valido, scaduto o revocato.
  • 403 Forbidden - Il token Bearer o la chiave API del chiamante non dà accesso a questo workspace (regionId), oppure non ha il ruolo richiesto.
GET /v1/workspaces/{regionId}/approval-chains/{process}
Richiesta
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/approval-chains/{process}" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Risposta · 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 }
}

Aggiornare le impostazioni della catena di approvazione

Sostituisce il flusso di approvazione di un processo.

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

Parametri

  • process"purchase_order" | "invoice_payment"Obbligatorio

    Il flusso di cui aggiornare la catena di approvazione.

Corpo

  • groupsarray

    Il nuovo flusso, in ordine. Ciascuno { id, mode, label?, stages, conditions? }. stages sono { id, label, approverEmployeeKey, highValueOnly? }: un gruppo sequenziale ne ha esattamente uno, un gruppo parallelo almeno uno, con id univoci e approvatori diversi. Fino a 10 condizioni per gruppo. Almeno un gruppo.

  • linkedTo"purchase_order" | "invoice_payment"

    Usa il flusso dell’altro processo invece di quello proprio.

  • useDefaulttrue

    Ripristina il predefinito della regione: un passaggio, 'Region administrator', che indica l’amministratore titolare della regione o, in mancanza, il primo amministratore in ordine di nome. Non può essere combinato con groups, stages o linkedTo.

  • stagesarray

    Struttura piatta legacy, un passaggio sequenziale per voce, { id, label, approverEmployeeKey, highValueOnly? }. Salvata come i groups equivalenti.

Restituisce

200 OK con l’oggetto mostrato nella risposta.

Più dettagli

Sostituisce il flusso di un processo con groups, lo collega al flusso dell’altro processo con linkedTo, oppure lo riporta al predefinito della regione con useDefault: true. Inviare groups rimuove qualsiasi linkedTo; inviare linkedTo conserva i groups attuali, ma inattivi finché il collegamento resta. Ogni approverEmployeeKey viene verificato rispetto ai dipendenti del workspace. Il flusso deve mantenere almeno un gruppo senza condizioni che si applichi agli importi ordinari, così ogni documento arriva a una persona. stages, un elenco piatto di gruppi a passaggio singolo, è ancora accettato per i client meno recenti; preferisci groups.

Modificato il 2026-09-27, una correzione di sicurezza all’interno della v1: solo sessione con accesso effettuato, per ogni processo: una catena di approvazione decide chi approva la spesa, quindi una chiave API riceve 403 HUMAN_SESSION_REQUIRED qualunque sia il suo ruolo procurement.

Errori

  • 400 Bad Request - Un passaggio non ha approvatore ("'{label}' has no approver - every approval step must name a specific employee.") o indica qualcuno che non è un dipendente del workspace; un gruppo parallelo indica due volte lo stesso approvatore; un gruppo sequenziale non ha esattamente un passaggio; una condizione è malformata; il flusso non ha alcun gruppo senza condizioni che si applichi agli importi ordinari ("A chain needs at least one approval step with no conditions that applies to ordinary purchase amounts…"); groups o stages è vuoto; linkedTo indica questo stesso processo, o un processo già collegato a questo; oppure useDefault è combinato con groups, stages o linkedTo.
  • 409 Conflict - Codice NO_REGION_ADMIN, con useDefault: "This region has no administrator to route approvals to. Make someone an administrator first."
  • 403 Forbidden - Codice HUMAN_SESSION_REQUIRED. Il chiamante non è una persona che ha effettuato l’accesso (ad esempio, una chiave API), per qualsiasi processo ("Approval chains can only be changed by a signed-in person. Change them in Pleaxy."). Nulla viene salvato.
  • 401 Unauthorized - Non è stata presentata alcuna credenziale, oppure il token Bearer o il valore di X-Api-Key è mancante, non valido, scaduto o revocato.
  • 403 Forbidden - Il token Bearer o la chiave API del chiamante non dà accesso a questo workspace (regionId), oppure non ha il ruolo richiesto.
PATCH /v1/workspaces/{regionId}/approval-chains/{process}
Richiesta
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" }
         ]
      }
   ]
}
Risposta · 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 }
}
Contattaci