Riferimento API

Ordini d’acquisto

Gli ordini che un acquirente emette verso un fornitore: righe, importi, stato e approvazione.

Altro su questa risorsa

Un ordine d’acquisto impegna un acquirente verso un fornitore per una o più righe d’ordine. Crearne uno avvia una catena di approvazione; una volta approvato, può essere trasformato in fattura. Ogni importo è nella valuta della regione (la valuta di un workspace è quella della sua regione, impostata nel profilo aziendale) e Pleaxy non converte le valute.

Elencare gli ordini d’acquisto

Elenca gli ordini d’acquisto del workspace, eventualmente in un intervallo di date.

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

Parametri

  • fromstring

    Data/timestamp ISO 8601: vengono restituiti solo gli elementi creati in questo momento o dopo.

  • tostring

    Data/timestamp ISO 8601: vengono restituiti solo gli elementi creati in questo momento o prima.

Restituisce

200 OK con l’oggetto mostrato nella risposta.

Più dettagli

Elenca tutti gli ordini d’acquisto del workspace, senza un ordine particolare. Con from/to puoi limitarli a un intervallo di createdAt: passa i limiti di un mese di calendario per avere una vista mensile. Un chiamante Fornitore riceve una vista ridotta di ogni OdA (vedi GetPurchaseOrder): la contabilità interna dell’acquirente e il flusso di approvazione completo non vengono restituiti.

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}/purchase-orders
Richiesta
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-orders" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Risposta · 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"
   }
]

Recuperare un ordine d’acquisto

Recupera un ordine d’acquisto.

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

Parametri

  • poIdstringObbligatorio

    L’identificativo dell’ordine d’acquisto.

  • buyerstring

    Solo per i chiamanti Fornitore, e solo dopo un 409 *_ID_AMBIGUOUS: l’ID del workspace dell’acquirente (che termina con .buyer) o il suo id di regione, preso dall’elenco buyers del 409. Viene considerato solo il documento di quell’acquirente; se lì non c’è, la risposta è 404. Un ID del workspace .supplier restituisce 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."). Ignorato per un chiamante Acquirente.

Restituisce

200 OK con l’oggetto mostrato nella risposta.

Più dettagli

Recupera un singolo ordine d’acquisto tramite id. Per un chiamante Acquirente, regionId è il workspace dell’OdA stesso. Per un chiamante Fornitore, regionId è il workspace del fornitore stesso e l’OdA viene cercato tra gli ordini d’acquisto ricevuti dall’organizzazione, indipendentemente dal workspace acquirente che l’ha emesso.

Campi della risposta

  • priorInvoicedobject

    Presente solo su un OdA creato da un’importazione di elenco che riportava un importo già fatturato dal sistema precedente dell’acquirente. amount (nella valuta dell’OdA) concorre al totale fatturato dell’OdA, così il saldo residuo è corretto. basis indica se il file riportava l’importo fatturato o il saldo residuo da cui è stato ricavato, e sourceSystem come quale export è stato letto l’elenco. importId, fileName e importedBy vengono restituiti solo all’acquirente.

  • billToPartyobject

    A chi fattura il fornitore: companyName, l’indirizzo in campi separati (address) oppure, per un indirizzo su una sola riga, addressText, e taxId. È una copia, non un collegamento: source "company_profile" sono i dati di fatturazione del profilo aziendale dell’acquirente com’erano alla creazione dell’ordine, così l’ordine mantiene l’indirizzo con cui è stato emesso anche se il profilo cambia in seguito; "custom" indica che è stato inserito sull’ordine. Una fattura relativa all’ordine prende da qui i dati dell’acquirente. Assente sugli ordini creati prima della sua introduzione, che hanno invece il campo di testo libero billTo.

  • supplierEmailobject

    Quando l’ordine emesso è stato inviato via email al fornitore come PDF, e a quale indirizzo. Impostato una sola volta; assente quando non è stato inviato (nessuna email di contatto, un provider cloud o un ordine non ancora emesso).

  • costCenterChangesArray

    Solo per l’acquirente. Ogni modifica a costCenter effettuata dopo la chiusura dell’ordine, dalla meno recente: from (assente se non ne aveva uno), to, reason, chi (by, byName) e quando. Vedi ChangeFinishedPurchaseOrderCostCenter.

Errori

  • 404 Not Found - Nel workspace del chiamante non esiste alcun OdA con questo id.
  • 409 Conflict - Solo per i chiamanti Fornitore. Codice PO_ID_AMBIGUOUS: più di uno dei tuoi acquirenti ha emesso un ordine d’acquisto con questo id (gli id sono univoci solo all’interno di un acquirente), quindi Pleaxy non tira a indovinare quale intendi. Nulla viene letto o modificato. Il campo buyers del corpo elenca l’ID del workspace e il nome di ogni acquirente: ripeti la chiamata con ?buyer=<quell’ID del workspace>.
  • 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}/purchase-orders/{poId}
Richiesta
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-orders/{poId}" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Risposta · 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"
}

Recuperare il PDF di un ordine d’acquisto

Scarica un ordine d’acquisto in formato PDF.

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

Parametri

  • poIdstringObbligatorio

    L’identificativo dell’ordine d’acquisto.

  • buyerstring

    Solo per i chiamanti Fornitore, e solo dopo un 409 *_ID_AMBIGUOUS: l’ID del workspace dell’acquirente (che termina con .buyer) o il suo id di regione, preso dall’elenco buyers del 409. Viene considerato solo il documento di quell’acquirente; se lì non c’è, la risposta è 404. Un ID del workspace .supplier restituisce 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."). Ignorato per un chiamante Acquirente.

Restituisce

200 OK con l’oggetto mostrato nella risposta.

Più dettagli

L’ordine d’acquisto in PDF, da scaricare, stampare o inoltrare: il tuo logo, l’intestatario della fattura (billToParty, con indirizzo e partita IVA), il fornitore, la data dell’ordine, la valuta, i termini di pagamento, il numero di preventivo del fornitore, le righe e il totale, e come fatturarlo. È la copia del fornitore, chiunque la richieda (niente centro di costo, responsabile del budget, note o approvazioni), e un ordine in bozza, in attesa, rifiutato o annullato dichiara chiaramente che non va evaso. Lo stesso PDF è allegato all’email che il fornitore riceve quando l’ordine viene emesso. Invia Accept: application/pdf, altrimenti il corpo viene restituito codificato in base64.

Errori

  • 404 Not Found - Nel workspace del chiamante non esiste alcun OdA con questo id.
  • 409 Conflict - Solo per i chiamanti Fornitore. Codice PO_ID_AMBIGUOUS: più di uno dei tuoi acquirenti ha emesso un ordine d’acquisto con questo id (gli id sono univoci solo all’interno di un acquirente), quindi Pleaxy non tira a indovinare quale intendi. Nulla viene letto o modificato. Il campo buyers del corpo elenca l’ID del workspace e il nome di ogni acquirente: ripeti la chiamata con ?buyer=<quell’ID del workspace>.
  • 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}/purchase-orders/{poId}/pdf
Richiesta
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-orders/{poId}/pdf" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Risposta · 200 OK
application/pdf

Creare un ordine d’acquisto

Crea un ordine d’acquisto o lo salva come bozza.

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

Corpo

  • poNumberstring

    Il tuo numero di OdA da usare come id di questo OdA al posto di uno generato, ad es. PO-2026-0042. Lettere, numeri, '.', '_' e '-', fino a 40 caratteri, univoco all’interno della regione.

  • supplierstringObbligatorio

    Nome visualizzato del fornitore / della controparte.

  • supplierRegionIdstring

    regionId dell’organizzazione fornitore registrata a cui viene emesso questo OdA, se noto. Devi avere una connessione fornitore approvata con essa; qualsiasi altra regione viene rifiutata. Collega l’OdA al workspace fornitore reale di quell’organizzazione invece che a un semplice nome in testo libero.

  • currencystring

    ISO 4217: la valuta in cui è espresso l’ordine. Per un fornitore su Pleaxy (supplierRegionId), una di quelle in cui la sua regione applica i prezzi, per impostazione predefinita la sua valuta principale (altrimenti 400 PO_CURRENCY_NOT_OFFERED). Per un provider cloud o un fornitore non presente su Pleaxy, qualsiasi codice; per impostazione predefinita la valuta "Valuta di fatturazione" impostata per quel fornitore (SetSupplierCurrencies), altrimenti quella del tuo workspace. Ogni riga è in questa valuta. Un ordine in una valuta diversa da quella del tuo workspace passa per tutti i passaggi di approvazione e non viene mai approvato automaticamente, perché i limiti di approvazione sono nella valuta del tuo workspace.

  • supplierContactEmailstring

    Solo per un fornitore non presente su Pleaxy (senza supplierRegionId né provider): la sua email di contatto. Quando l’OdA viene inviato, subito o all’invio di una bozza, Pleaxy lo invita oppure collega il fornitore già presente in questo workspace.

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

    Il provider cloud coperto da questo OdA, se presente.

  • payerAccountsArray<{ id, label, detail }>

    Solo con provider: le connessioni cloud di questa regione con quel provider a cui si applica l’OdA, per id. Una connessione ancora in fase di configurazione viene rifiutata. L’OdA memorizza l’etichetta e il dettaglio di ciascuna connessione; quelli che invii vengono ignorati, ma devono essere stringhe.

  • billToParty{ companyName?, address, taxId? }

    A chi fattura il fornitore, quando non sono i dati di fatturazione del tuo profilo aziendale. companyName (fino a 200 caratteri) è per impostazione predefinita il nome della tua azienda; address accetta gli stessi campi e le stesse regole per paese di billingAddressParts di UpdateOrgProfile; taxId arriva fino a 64 caratteri. Se omesso, l’ordine copia il nome, l’indirizzo di fatturazione e la partita IVA attuali del tuo profilo aziendale.

  • billTostring

    Deprecato: usa billToParty. Un indirizzo di fatturazione su una sola riga per la tua azienda, fino a 500 caratteri, conservato così come digitato. Ignorato quando viene inviato billToParty.

  • costCenterstring

    Codice interno del centro di costo.

  • budgetOwnerstring

    Nome del responsabile del budget.

  • buyerNamestring

    Nome del referente dell’acquirente; se impostato, viene usato anche come richiedente della catena di approvazione.

  • supplierSitestring

    Identificativo della sede o della località del fornitore.

  • notesstring

    Note in testo libero.

  • contractIdstring

    Il tuo contratto attivo con questo fornitore a cui fa capo l’ordine. Le righe senza paymentTerms ne prendono i termini di pagamento predefiniti, e le fatture relative all’ordine vengono verificate rispetto a esso.

  • draftboolean

    Salva come bozza invece di inviare per l’approvazione. Inviala in seguito con SubmitPurchaseOrderDraft.

  • lineItemsArray<LineItem>Obbligatorio

    Almeno una riga d’ordine. Ogni riga: scopeType ("sku" | "service" | "account" | "custom"), scopeId, name, ruleType ("quantity" | "amount"), unit, unitPrice, qty, nteAmount, currency (facoltativo), paymentTerms (facoltativo, fino a 40 caratteri: se omesso, la riga prende i termini di pagamento predefiniti del contratto da cui deriva il prezzo o di quello indicato dall’ordine in contractId, altrimenti quelli dell’articolo di catalogo, altrimenti "Net 30"), validFrom, validUntil, customerLineNo (facoltativo: il tuo numero per la riga, fino a 40 caratteri, mostrato accanto al lineNo del server), lineType (facoltativo: "goods", beni spediti e ricevuti con un ricevimento merci, oppure "service", lavoro come assistenza o formazione, confermato con una scheda di registrazione servizi e mai spedito; se omesso, la riga prende il tipo del suo articolo di catalogo, altrimenti è un servizio quando la sua unità è di tempo, come hr, day o month, e beni negli altri casi). Ogni riga è nella valuta della regione, che viene scritta dal server: ometti currency oppure invia la valuta della regione (maiuscole o minuscole indifferenti). Pleaxy non converte le valute, quindi qualsiasi altra valuta viene rifiutata.

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

    Una riga di IA (controlli della spesa in IA): chi la fattura, il produttore del modello, l’id del modello come fatturato, il contatore (input_tokens, output_tokens, cached_input_tokens, batch_input_tokens, gpu_hours, ..., o prepaid_credit per un acquisto di crediti prepagati) e la regione, dove il prezzo dipende dalla regione. Una riga a quantità nell’unità del contatore (milioni di token, ore). Le righe di IA di una fattura vengono abbinate a queste in base all’ambito, mai alla descrizione. SuggestAiPoLines le precompila.

Restituisce

201 Created con l’oggetto mostrato nella risposta.

Più dettagli

Crea un ordine d’acquisto a partire da una o più righe d’ordine, oppure lo salva come bozza. L’importo totale è la somma degli importi delle righe (qty × unitPrice per una riga a quantità, oppure nteAmount per una riga a importo). Se non è una bozza, la sua catena di approvazione viene costruita subito a partire dal flusso di approvazione degli ordini d’acquisto della regione, dalle impostazioni di autonomia, dalle regole di automazione e dai limiti di spesa. Se viene approvato automaticamente, l’OdA viene creato direttamente nello stato awaiting_fulfillment invece che pending_approval. Una volta emesso un OdA (awaiting_fulfillment, subito o alla sua approvazione finale), il fornitore riceve una notifica e, a meno che non sia un provider cloud, l’ordine in PDF via email (vedi GetPurchaseOrderPdf), all’indirizzo supplierContactEmail o altrimenti al contatto della tua scheda fornitore, con il richiedente come Reply-To. Viene inviato una sola volta per ordine e registrato come supplierEmail; un’email non riuscita non fa mai fallire l’ordine.

Campi della risposta

  • idstring

    Identificativo dell’OdA, ad es. "PO-AB12CD34".

  • statusstring

    "pending_approval", oppure "awaiting_fulfillment" se l’importo è stato approvato automaticamente.

  • amountnumber

    Somma degli importi di tutte le righe d’ordine.

  • currencystring

    Codice ISO 4217 in cui sono l’OdA e ogni riga: la valuta della regione, impostata dal server.

  • approvalApprovalChain

    La catena di approvazione costruita per questo OdA.

  • lineItemsArray<LineItem>

    Ogni riga d’ordine così come è memorizzata, più lineNo e consumed (parte da 0).

Errori

  • 400 Bad Request - Convalida non riuscita (anche per un indirizzo billToParty a cui manca una parte richiesta dal suo paese), la valuta di una riga d’ordine non è quella della regione ("Line items must be in this region's currency (EUR). Pleaxy doesn't convert currencies."), oppure il piano della regione ha raggiunto il limite di ordini d’acquisto sui 30 giorni mobili (piano Free: 10 ogni 30 giorni mobili).
  • 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.
POST /v1/workspaces/{regionId}/purchase-orders
Richiesta
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"
      }
    ]
  }'
Risposta · 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"
}

Aggiornare un ordine d’acquisto

Aggiorna i dettagli o le righe d’ordine di un ordine d’acquisto.

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

Parametri

  • poIdstringObbligatorio

    L’identificativo dell’ordine d’acquisto.

Corpo

  • lineItemsArray<LineItem>

    Sostituisce tutte le righe d’ordine, con la stessa struttura di CreatePurchaseOrder. Almeno una.

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

    A chi fattura il fornitore, come in CreatePurchaseOrder. null copia i dati di fatturazione attuali del tuo profilo aziendale. Campo contabile: non rimanda mai l’OdA in approvazione.

  • billTostring

    Deprecato: usa billToParty. Un indirizzo di fatturazione su una sola riga, fino a 500 caratteri; una stringa vuota copia quello del profilo aziendale. Ignorato quando viene inviato billToParty.

  • costCenterstring

    Codice interno del centro di costo.

  • budgetOwnerstring

    Nome del responsabile del budget.

  • buyerNamestring

    Nome del referente dell’acquirente.

  • notesstring

    Note in testo libero.

Restituisce

200 OK con l’oggetto mostrato nella risposta.

Più dettagli

Aggiorna i campi contabili di un ordine d’acquisto o ne sostituisce le righe d’ordine. Non consentito una volta che è chiuso, annullato o pagato. Inviare lineItems sostituisce l’intero insieme, ricalcola l’importo e ricostruisce da zero la catena di approvazione, scartando le approvazioni già raccolte: una bozza resta una bozza, altrimenti l’OdA diventa awaiting_fulfillment se la nuova catena lo approva automaticamente, o pending_approval se serve una persona. Quindi aumentare il totale di un OdA approvato può rimandarlo in approvazione. I limiti di spesa vengono verificati sia per il richiedente dell’OdA sia per chi lo modifica. Per riassegnare un OdA chiuso, annullato o pagato a un altro centro di costo, usa ChangeFinishedPurchaseOrderCostCenter.

Errori

  • 400 Bad Request - Convalida non riuscita; l’OdA è chiuso, annullato o pagato ("PO '{poId}' can't be edited once it's {status}"); oppure la valuta di una riga non è quella della regione.
  • 404 Not Found - Nel workspace non esiste alcun OdA con questo id.
  • 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}/purchase-orders/{poId}
Richiesta
curl -X PATCH "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-orders/{poId}" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Risposta · 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"
}

Inviare una bozza di ordine d’acquisto

Invia per l’approvazione una bozza di ordine d’acquisto.

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

Parametri

  • poIdstringObbligatorio

    L’identificativo dell’ordine d’acquisto.

Restituisce

201 Created con l’oggetto mostrato nella risposta.

Più dettagli

Invia una bozza per l’approvazione. La catena di approvazione viene costruita ora, a partire dal flusso di approvazione, dalle impostazioni di autonomia e dai limiti di spesa attuali, non da quelli in vigore quando la bozza è stata salvata, e le righe prendono la valuta attuale della regione. I limiti di spesa vengono verificati sia per il richiedente della bozza sia per chi la invia. Un fornitore non presente su Pleaxy con un supplierContactEmail viene invitato ora. Non accetta un corpo.

Errori

  • 400 Bad Request - L’OdA non è una bozza ("PO '{poId}' isn't a draft"), oppure supera un limite di spesa che indica come approvatore la persona che lo invia, per cui nessuno potrebbe approvarlo ("Not submitted. This draft is over a spend limit that names you as its approver…").
  • 404 Not Found - Nel workspace non esiste alcun OdA con questo id.
  • 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.
POST /v1/workspaces/{regionId}/purchase-orders/{poId}/submit
Richiesta
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-orders/{poId}/submit" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Risposta · 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"
}

Annullare un ordine d’acquisto

Annulla un ordine d’acquisto non ancora evaso.

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

Parametri

  • poIdstringObbligatorio

    L’identificativo dell’ordine d’acquisto.

Corpo

  • reasonstring

    Fino a 500 caratteri. Il fornitore lo vede esattamente come è scritto.

Restituisce

201 Created con l’oggetto mostrato nella risposta.

Più dettagli

Annulla un ordine d’acquisto in bozza, in attesa di approvazione, in attesa di evasione o scaduto. È l’acquirente che blocca l’ordine, non un approvatore che lo rifiuta. Il fornitore viene avvisato, con il tuo motivo se ne indichi uno.

Errori

  • 400 Bad Request - L’OdA è in uno stato che non consente l’annullamento ("PO '{poId}' can't be canceled once it's {status}"), oppure reason supera i 500 caratteri.
  • 404 Not Found - Nel workspace non esiste alcun OdA con questo id.
  • 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.
POST /v1/workspaces/{regionId}/purchase-orders/{poId}/cancel
Richiesta
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"
}
Risposta · 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"
}

Chiudere un ordine d’acquisto

Chiude un ordine d’acquisto che non ha più nulla da fatturare.

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

Parametri

  • poIdstringObbligatorio

    L’identificativo dell’ordine d’acquisto.

Restituisce

201 Created con l’oggetto mostrato nella risposta.

Più dettagli

Chiude un ordine d’acquisto in attesa di evasione, fatturato, pagato o scaduto, ad esempio uno interamente consumato senza più nulla da fatturare. Un OdA chiuso non può essere modificato. Non accetta un corpo.

Errori

  • 400 Bad Request - L’OdA è in uno stato che non consente la chiusura ("PO '{poId}' can't be closed while it's {status}").
  • 404 Not Found - Nel workspace non esiste alcun OdA con questo id.
  • 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.
POST /v1/workspaces/{regionId}/purchase-orders/{poId}/close
Richiesta
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-orders/{poId}/close" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Risposta · 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"
}

Cambiare il centro di costo di un ordine d’acquisto concluso

Sposta un ordine d’acquisto concluso su un altro centro di costo.

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

Parametri

  • poIdstringObbligatorio

    L’identificativo dell’ordine d’acquisto.

Corpo

  • costCenterstringObbligatorio

    Il centro di costo su cui registrare l’ordine, fino a 100 caratteri. Viene confrontato con l’elenco del workspace senza distinguere maiuscole e minuscole, e memorizzato come scritto nell’elenco.

  • reasonstringObbligatorio

    Il motivo dello spostamento, fino a 500 caratteri. Resta registrato sull’ordine.

Restituisce

201 Created con l’oggetto mostrato nella risposta.

Più dettagli

Riassegna a un altro centro di costo un ordine d’acquisto chiuso, annullato o pagato, indicando un motivo: ad esempio dopo una riorganizzazione o una scelta errata scoperta a fine mese. Cambia solo costCenter: le righe, l’importo e le approvazioni restano come sono stati approvati, e nulla torna in approvazione. La modifica resta registrata sull’ordine in costCenterChanges, con chi l’ha fatta e quando. Se il workspace gestisce un elenco di centri di costo, quello nuovo deve essere uno attivo di quell’elenco. Un OdA aperto cambia invece centro di costo con UpdatePurchaseOrder.

Solo un amministratore del workspace: un amministratore che ha effettuato l’accesso, o una chiave API generata con il ruolo di amministratore.

Campi della risposta

  • costCenterChangesArray

    Ogni modifica effettuata in questo modo, dalla meno recente: { from?, to, reason, by, byName, at }.

Errori

  • 400 Bad Request - Nessun motivo ("Say why the cost center is changing."); l’OdA è ancora aperto ("PO '{poId}' is still open. Change its cost center by editing the order."); il centro di costo non è uno di quelli attivi nell’elenco del workspace ("'{costCenter}' isn't an active cost center in this workspace. Pick one from the cost centers list."); è quello che l’OdA ha già; oppure un campo non supera la convalida.
  • 403 Forbidden - Il chiamante non è un amministratore di questo workspace acquirente ("Only an administrator of this workspace can add or change cost centers.").
  • 404 Not Found - Nel workspace non esiste alcun OdA con questo id.
  • 409 Conflict - L’OdA è cambiato mentre veniva salvata la modifica ("PO '{poId}' changed while you were editing it. Refresh and try again.").
  • 401 Unauthorized - Non è stata presentata alcuna credenziale, oppure il token Bearer o il valore di X-Api-Key è mancante, non valido, scaduto o revocato.
POST /v1/workspaces/{regionId}/purchase-orders/{poId}/cost-center
Richiesta
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"
}
Risposta · 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"
}

Approvare un ordine d’acquisto

Approva il passaggio di approvazione corrente di un ordine d’acquisto.

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

Parametri

  • poIdstringObbligatorio

    L’identificativo dell’ordine d’acquisto.

Restituisce

201 Created con l’oggetto mostrato nella risposta.

Più dettagli

Fa avanzare di una fase la catena di approvazione dell’OdA. Può chiamarlo solo il dipendente indicato dal passaggio corrente: nessun ruolo, permesso o diritto di amministratore sostituisce l’essere indicati, e una chiave API non può mai esserlo. Quando l’ultima fase approva, lo stato dell’OdA diventa awaiting_fulfillment, al fornitore viene inviata una notifica po_approved e l’ordine gli viene inviato via email come PDF (vedi CreatePurchaseOrder). Non accetta un corpo e agisce come il chiamante autenticato (una chiave API agisce come apikey:<keyId>).

Solo sessione con accesso effettuato. Qualsiasi altro chiamante, chiave API compresa, riceve 403 HUMAN_APPROVAL_REQUIRED prima che venga letto qualsiasi cosa.

Errori

  • 400 Bad Request - La catena di approvazione dell’OdA non ha alcuna fase in attesa (già approvato o rifiutato).
  • 403 Forbidden - Codice HUMAN_APPROVAL_REQUIRED. Il chiamante è una chiave API. I passaggi di approvazione indicano un dipendente specifico, e una chiave non può mai esserlo, quindi una chiave non può né approvare né rifiutare un passaggio. Chiedi al dipendente indicato dal passaggio di agire in Pleaxy.
  • 403 Forbidden - Codice APPROVER_NOT_ASSIGNED. Il passaggio corrente non ha alcun approvatore assegnato, quindi nessuno può agire su di esso. Prima un amministratore deve assegnarne uno con ReassignPurchaseOrderApprovalStage / ReassignInvoiceApprovalStage.
  • 403 Forbidden - Il chiamante non è il dipendente indicato dal passaggio corrente. Solo quel dipendente può approvarlo o rifiutarlo: nessun ruolo o permesso sostituisce l’essere indicati.
  • 404 Not Found - Nel workspace non esiste alcun OdA con questo id.
  • 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.
POST /v1/workspaces/{regionId}/purchase-orders/{poId}/approve
Richiesta
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-orders/{poId}/approve" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Risposta · 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"
}

Rifiutare un ordine d’acquisto

Rifiuta un ordine d’acquisto al suo passaggio di approvazione corrente.

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

Parametri

  • poIdstringObbligatorio

    L’identificativo dell’ordine d’acquisto.

Restituisce

201 Created con l’oggetto mostrato nella risposta.

Più dettagli

Rifiuta l’OdA alla sua fase di approvazione corrente. Può chiamarlo solo il dipendente indicato dal passaggio corrente: il rifiuto segue la stessa regola dell’approvazione. Lo stato diventa rejected e al fornitore viene inviata una notifica po_rejected. È definitivo: un OdA rifiutato non può essere inviato di nuovo. Non accetta un corpo e agisce come il chiamante autenticato (una chiave API agisce come apikey:<keyId>).

Errori

  • 400 Bad Request - La catena di approvazione dell’OdA non ha alcuna fase in attesa.
  • 403 Forbidden - Codice HUMAN_APPROVAL_REQUIRED. Il chiamante è una chiave API. I passaggi di approvazione indicano un dipendente specifico, e una chiave non può mai esserlo, quindi una chiave non può né approvare né rifiutare un passaggio. Chiedi al dipendente indicato dal passaggio di agire in Pleaxy.
  • 403 Forbidden - Codice APPROVER_NOT_ASSIGNED. Il passaggio corrente non ha alcun approvatore assegnato, quindi nessuno può agire su di esso. Prima un amministratore deve assegnarne uno con ReassignPurchaseOrderApprovalStage / ReassignInvoiceApprovalStage.
  • 403 Forbidden - Il chiamante non è il dipendente indicato dal passaggio corrente. Solo quel dipendente può approvarlo o rifiutarlo: nessun ruolo o permesso sostituisce l’essere indicati.
  • 404 Not Found - Nel workspace non esiste alcun OdA con questo id.
  • 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.
POST /v1/workspaces/{regionId}/purchase-orders/{poId}/reject
Richiesta
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-orders/{poId}/reject" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Risposta · 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"
}

Riassegnare una fase di approvazione di un ordine d’acquisto

Assegna un passaggio di approvazione in attesa a un’altra persona.

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

Parametri

  • poIdstringObbligatorio

    L’identificativo dell’ordine d’acquisto.

Corpo

  • stageIdstringObbligatorio

    Id del passaggio in attesa da riassegnare. Può trovarsi in qualsiasi gruppo della catena, non solo in quello corrente.

  • approverEmployeeKeystringObbligatorio

    Chiave dipendente (sub di Cognito) del nuovo approvatore. Deve essere un membro acquirente di questo workspace e non l’amministratore che esegue l’azione.

  • reasonstring

    Il motivo della riassegnazione del passaggio, fino a 280 caratteri. Mostrato nella cronologia delle approvazioni.

Restituisce

201 Created con l’oggetto mostrato nella risposta.

Più dettagli

Indirizza un passaggio in attesa della catena di approvazione di questo ordine a un altro dipendente indicato per nome. Solo per amministratori (approvalSettings:edit) e solo da sessioni con accesso effettuato. Poiché su un passaggio può agire solo il dipendente che indica, questo è l’unico modo per spostare un passaggio il cui approvatore se n’è andato o non è mai stato assegnato: non esiste un esecutore di riserva. Modifica solo la catena di questo documento: la catena configurata dell’organizzazione in Impostazioni resta invariata, e la modifica viene registrata nella cronologia delle approvazioni come voce reassigned.

Errori

  • 400 Bad Request - La catena è già approvata o rifiutata; il passaggio è già stato approvato o rifiutato; il nuovo approvatore non è un dipendente di questo workspace; il nuovo approvatore ha emesso l’ordine / inserito la fattura, è escluso per separazione dei compiti, ha già superato il limite di spesa con la propria autorità o occupa già un altro posto nello stesso passaggio; oppure il passaggio è la revisione del limite di spesa, il cui approvatore è un dato di audit congelato (modificalo in Impostazioni › Limiti di spesa).
  • 403 Forbidden - Il chiamante non ha approvalSettings:edit (amministratore), oppure ha indicato se stesso come nuovo approvatore: assegnare a sé un passaggio attivo rende una sola persona l’intera catena, senza traccia di policy. Codice HUMAN_APPROVAL_REQUIRED quando il chiamante è una chiave API: solo un amministratore che ha effettuato l’accesso può riassegnare un passaggio di approvazione.
  • 404 Not Found - Nel workspace non esiste alcun documento con questo id, oppure la catena non ha alcun passaggio con questo stageId.
  • 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.
POST /v1/workspaces/{regionId}/purchase-orders/{poId}/approval/reassign
Richiesta
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"
}
Risposta · 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"
}

Elencare i commenti di un ordine d’acquisto

Elenca i commenti di un ordine d’acquisto.

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

Parametri

  • poIdstringObbligatorio

    L’identificativo dell’ordine d’acquisto.

  • buyerstring

    Solo per i chiamanti Fornitore, e solo dopo un 409 *_ID_AMBIGUOUS: l’ID del workspace dell’acquirente (che termina con .buyer) o il suo id di regione, preso dall’elenco buyers del 409. Viene considerato solo il documento di quell’acquirente; se lì non c’è, la risposta è 404. Un ID del workspace .supplier restituisce 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."). Ignorato per un chiamante Acquirente.

Restituisce

200 OK con l’oggetto mostrato nella risposta.

Più dettagli

I commenti di un ordine d’acquisto, dal meno recente: quelli interni della tua parte e tutti quelli condivisi. Un commento eliminato dal suo autore resta nella conversazione con il corpo vuoto, così mostra comunque che qualcosa è stato detto e quando. Stessa ricerca di GetPurchaseOrder, quindi un fornitore raggiunge gli OdA che gli sono stati emessi.

Campi della risposta

  • visibilitystring

    internal: solo la parte dell’autore. shared: lo leggono sia l’acquirente sia il fornitore.

  • authorKey, mentionsstring, Array

    Solo sui commenti della tua parte: chi l’ha scritto, per chiave dipendente, e chi ha menzionato. L’altra parte vede authorName e authorOrgName.

  • bodystring

    Testo semplice con i suoi a capo. Vuoto una volta eliminato dall’autore; in tal caso deletedAt indica quando.

  • viewerIsAuthorboolean

    Se l’ha scritto il chiamante, che quindi può eliminarlo. Sempre false per una chiave API.

Errori

  • 404 Not Found - Nel workspace del chiamante non esiste alcun OdA con questo id.
  • 409 Conflict - Solo per i chiamanti Fornitore. Codice PO_ID_AMBIGUOUS: più di uno dei tuoi acquirenti ha emesso un ordine d’acquisto con questo id (gli id sono univoci solo all’interno di un acquirente), quindi Pleaxy non tira a indovinare quale intendi. Nulla viene letto o modificato. Il campo buyers del corpo elenca l’ID del workspace e il nome di ogni acquirente: ripeti la chiamata con ?buyer=<quell’ID del workspace>.
  • 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}/purchase-orders/{poId}/comments
Richiesta
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-orders/{poId}/comments" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Risposta · 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
      }
   ]
}

Aggiungere un commento a un ordine d’acquisto

Aggiunge un commento a un ordine d’acquisto.

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

Parametri

  • poIdstringObbligatorio

    L’identificativo dell’ordine d’acquisto.

  • buyerstring

    Solo per i chiamanti Fornitore, e solo dopo un 409 *_ID_AMBIGUOUS: l’ID del workspace dell’acquirente (che termina con .buyer) o il suo id di regione, preso dall’elenco buyers del 409. Viene considerato solo il documento di quell’acquirente; se lì non c’è, la risposta è 404. Un ID del workspace .supplier restituisce 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."). Ignorato per un chiamante Acquirente.

Corpo

  • bodystringObbligatorio

    Testo semplice, fino a 2.000 caratteri. Gli a capo vengono mantenuti; i caratteri di controllo, di testo bidirezionale e invisibili vengono rimossi.

  • visibility"internal" | "shared"Obbligatorio

    internal: solo il tuo team. shared: anche l’altra parte lo legge e risponde. I commenti di un fornitore sono sempre condivisi.

  • mentionsstring[]

    Fino a 10 chiavi dipendente di persone del tuo workspace da notificare (vedi ListEmployees). La notifica non contiene mai il testo del commento.

Restituisce

201 Created con l’oggetto mostrato nella risposta.

Più dettagli

Commenta un ordine d’acquisto: interno al tuo team oppure condiviso con l’altra parte. I commenti non vengono mai modificati. Ricevono una notifica (po_comment) le persone che menzioni, chi ha già commentato dalla tua parte e, per un commento condiviso, l’altra parte; la notifica non contiene mai il testo.

Solo sessione con accesso effettuato. Una chiave API riceve 403 HUMAN_SESSION_REQUIRED.

Errori

  • 400 Bad Request - Un corpo vuoto ("Write something before you post the comment."), più di 2.000 caratteri, più di 10 menzioni, una menzione di qualcuno che non è nel tuo workspace, una visibilità diversa da internal o shared, un commento interno di un fornitore ("A supplier's comments are always shared with the buyer."), oppure un commento condiviso su un documento il cui fornitore non è su Pleaxy (pubblicalo invece come internal).
  • 403 Forbidden - Codice HUMAN_SESSION_REQUIRED: il chiamante è una chiave API ("Comments are written by people. Sign in to Pleaxy to post one.").
  • 404 Not Found - Nel workspace del chiamante non esiste alcun OdA con questo id.
  • 409 Conflict - Solo per i chiamanti Fornitore. Codice PO_ID_AMBIGUOUS: più di uno dei tuoi acquirenti ha emesso un ordine d’acquisto con questo id (gli id sono univoci solo all’interno di un acquirente), quindi Pleaxy non tira a indovinare quale intendi. Nulla viene letto o modificato. Il campo buyers del corpo elenca l’ID del workspace e il nome di ogni acquirente: ripeti la chiamata con ?buyer=<quell’ID del workspace>.
  • 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.
POST /v1/workspaces/{regionId}/purchase-orders/{poId}/comments
Richiesta
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" ]
}
Risposta · 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
}

Eliminare un commento di un ordine d’acquisto

Elimina uno dei tuoi commenti su un ordine d’acquisto.

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

Parametri

  • poIdstringObbligatorio

    L’identificativo dell’ordine d’acquisto.

  • commentIdstringObbligatorio

    Il commento, ad es. "CMT-1760313600000-3f9a1c2e".

  • buyerstring

    Solo per i chiamanti Fornitore, e solo dopo un 409 *_ID_AMBIGUOUS: l’ID del workspace dell’acquirente (che termina con .buyer) o il suo id di regione, preso dall’elenco buyers del 409. Viene considerato solo il documento di quell’acquirente; se lì non c’è, la risposta è 404. Un ID del workspace .supplier restituisce 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."). Ignorato per un chiamante Acquirente.

Restituisce

200 OK con l’oggetto mostrato nella risposta.

Più dettagli

Ritira un tuo commento: il testo viene rimosso e la conversazione conserva il fatto che un commento è stato scritto. Eliminarlo di nuovo non cambia nulla.

Solo sessione con accesso effettuato. Una chiave API riceve 403 HUMAN_SESSION_REQUIRED.

Errori

  • 403 Forbidden - Codice HUMAN_SESSION_REQUIRED: il chiamante è una chiave API ("Comments are written by people. Sign in to Pleaxy to post one.").
  • 403 Forbidden - Il commento non è tuo ("Only the person who wrote a comment can delete it.").
  • 404 Not Found - Nessun commento con questo id visibile a te su questo documento ("Comment {commentId} not found."), oppure il documento non esiste.
  • 409 Conflict - Solo per i chiamanti Fornitore. Codice PO_ID_AMBIGUOUS: più di uno dei tuoi acquirenti ha emesso un ordine d’acquisto con questo id (gli id sono univoci solo all’interno di un acquirente), quindi Pleaxy non tira a indovinare quale intendi. Nulla viene letto o modificato. Il campo buyers del corpo elenca l’ID del workspace e il nome di ogni acquirente: ripeti la chiamata con ?buyer=<quell’ID del workspace>.
  • 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.
DELETE /v1/workspaces/{regionId}/purchase-orders/{poId}/comments/{commentId}
Richiesta
curl -X DELETE "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-orders/{poId}/comments/{commentId}" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Risposta · 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
}
Contattaci