Riferimento API

Richieste d’acquisto

Ciò che le persone chiedono di acquistare prima che esista un ordine: approvazione, controllo del budget, poi un ordine.

Altro su questa risorsa

Qualsiasi membro di un workspace acquirente può chiedere qualcosa, qualunque sia il suo ruolo negli acquisti: una richiesta non impegna denaro, e la sua approvazione è il controllo. Una richiesta inviata passa per il flusso di approvazione delle richieste d’acquisto del workspace (per impostazione predefinita quello degli ordini d’acquisto), il limite di spesa del richiedente e, quando i budget sono attivi, il budget del suo centro di costo. Una volta approvata, chi può emettere ordini la trasforma in un ordine d’acquisto con ConvertPurchaseRequest. L’ordine mantiene l’approvazione della richiesta se resta entro quanto approvato, sullo stesso centro di costo e sullo stesso conto contabile. Le richieste sono solo dell’acquirente e non vengono mai mostrate ai fornitori.

Elencare le richieste d’acquisto

Elenca le richieste d’acquisto che puoi vedere, dalla più recente.

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

Parametri

  • status"draft" | "pending_approval" | "approved" | "ordered" | "rejected" | "canceled"

    Solo le richieste con questo stato.

  • mineboolean

    true: solo le richieste di chi chiama.

  • awaitingMeboolean

    true: solo le richieste in attesa dell’approvazione di chi chiama, come nella sua coda di approvazioni. status e mine vengono allora ignorati.

Restituisce

200 OK con l’oggetto mostrato nella risposta.

Più dettagli

Elenca le richieste di chi chiama; con accesso 'view' agli ordini d’acquisto, quelle di tutti tranne le bozze altrui; e qualsiasi richiesta la cui catena di approvazione indichi chi chiama. Dalla più recente.

Campi della risposta

  • statusstring

    draft finché non viene inviata; pending_approval mentre la catena di approvazione è in corso; approved, poi ordered quando è diventata un ordine d’acquisto (poId); oppure rejected (rejectionReason) o canceled.

  • amountnumber

    Il totale delle righe (qty × unitPrice), in currency.

  • approvalobject

    La catena di approvazione, assente finché è una bozza. Costruita dal flusso di approvazione delle richieste d’acquisto del workspace (per impostazione predefinita quello degli ordini d’acquisto), dal limite di spesa del richiedente e dal controllo del budget.

  • approvalVersionnumber

    Aumenta a ogni modifica dell’approvazione. Invialo come expectedVersion quando approvi.

  • budgetCheckobject

    Il controllo del budget del centro di costo quando i budget sono attivi: l’ultimo, all’invio o all’approvazione finale. Gli importi sono nella valuta del budget.

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-requests
Richiesta
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-requests" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Risposta · 200 OK
[
   {
      "id": "string",
      "title": "string",
      "description": "string",
      "requesterEmployeeKey": "string",
      "requesterName": "string",
      "costCenter": "string",
      "glCode": "string",
      "supplier": { "name": "string", "supplierConnectionId": "string", "supplierRegionId": "string" },
      "lineItems": [
         { "name": "string", "lineType": "goods" | "service", "qty": number, "unit": "string", "unitPrice": number }
      ],
      "amount": number,
      "currency": "string",
      "neededBy": "string",
      "quoteDocument": { "importId": "string", "fileName": "string", "contentType": "string", "addedAt": "string", "quoteNumber": "string", "validUntil": "string" },
      "notes": "string",
      "status": "draft" | "pending_approval" | "approved" | "ordered" | "rejected" | "canceled",
      "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
       },
      "approvalVersion": number,
      "budgetCheck": { "outcome": "within" | "over" | "no_budget" | "no_rate" | "off", "mode": "off" | "warn" | "block", "costCenter": "string", "currency": "string", "budget": number, "remaining": number, "amount": number, "overBy": number, "checkedAt": "string" },
      "poId": "string",
      "rejectionReason": "string",
      "createdAt": "string",
      "updatedAt": "string",
      "submittedAt": "string",
      "decidedAt": "string",
      "canceledAt": "string",
      "canceledBy": "string"
   }
]

Creare una richiesta d’acquisto

Chiede qualcosa: salva una bozza o la invia per l’approvazione.

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

Corpo

  • titlestringObbligatorio

    Cosa serve, in poche parole. Fino a 200 caratteri.

  • descriptionstring

    Perché serve: la motivazione aziendale. Fino a 4.000 caratteri. Obbligatoria per l’invio.

  • costCenterstring

    Il codice o il nome di un centro di costo, salvato come suo codice. Obbligatorio per l’invio quando il workspace tiene un elenco di centri di costo.

  • glCodestring

    Il conto contabile (categoria di spesa), quando non è quello del centro di costo. Fino a 40 caratteri.

  • supplierobject

    Un fornitore suggerito dal richiedente: { name, supplierConnectionId?, supplierRegionId? }. Un nome da solo non instrada nulla; un fornitore approvato nell’elenco del workspace viene usato dai passaggi di approvazione per fornitore.

  • lineItemsArray<{ name, lineType?, qty, unit?, unitPrice }>Obbligatorio

    Cosa serve, da 1 a 50 righe: name (fino a 200 caratteri), qty (maggiore di 0), unit (facoltativo, ad es. each, hour, month), unitPrice (una stima, 0 o più, nella valuta della richiesta) e lineType (facoltativo: goods o service, riportato sulla riga dell’ordine; se omesso, un’unità di tempo la rende un servizio, qualsiasi altra un bene). Una riga basta per una stima.

  • currencystring

    ISO 4217. La valuta del workspace se omessa.

  • neededBystring

    Quando serve, YYYY-MM-DD.

  • quoteImportIdstring

    Un preventivo caricato con l’importazione dei preventivi, da allegare.

  • notesstring

    Ciò che l’ufficio acquisti dovrebbe sapere. Fino a 2.000 caratteri.

  • submitboolean

    true la invia subito per l’approvazione; altrimenti viene salvata come bozza.

Restituisce

201 Created con l’oggetto mostrato nella risposta.

Più dettagli

Crea una richiesta d’acquisto come bozza, con chi chiama come richiedente. Con submit: true viene inviata subito, come fa SubmitPurchaseRequest, e la risposta la mostra in pending_approval, oppure in approved quando l’autonomia o una regola di automazione la coprono.

Qualsiasi membro del workspace acquirente, qualunque sia il suo ruolo negli acquisti.

Campi della risposta

  • statusstring

    draft finché non viene inviata; pending_approval mentre la catena di approvazione è in corso; approved, poi ordered quando è diventata un ordine d’acquisto (poId); oppure rejected (rejectionReason) o canceled.

  • amountnumber

    Il totale delle righe (qty × unitPrice), in currency.

  • approvalobject

    La catena di approvazione, assente finché è una bozza. Costruita dal flusso di approvazione delle richieste d’acquisto del workspace (per impostazione predefinita quello degli ordini d’acquisto), dal limite di spesa del richiedente e dal controllo del budget.

  • approvalVersionnumber

    Aumenta a ogni modifica dell’approvazione. Invialo come expectedVersion quando approvi.

  • budgetCheckobject

    Il controllo del budget del centro di costo quando i budget sono attivi: l’ultimo, all’invio o all’approvazione finale. Gli importi sono nella valuta del budget.

Errori

  • 400 Bad Request - Un campo manca o non è valido. Con submit: true, anche quando la richiesta non ha una descrizione, un importo maggiore di 0 o un centro di costo in un workspace che tiene un elenco.
  • 409 Conflict - Codice over_budget. I budget sono applicati (modalità blocco) e la richiesta porterebbe il suo centro di costo oltre il budget, oppure non c’è un tasso di cambio per controllarla. Il budgetCheck nel corpo riporta gli importi. Non viene salvato nulla.
  • 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-requests
Richiesta
POST /v1/workspaces/reg_01k5x8p9j3q7vn2mhb4tzc6rde.buyer/purchase-requests
{
   "title": "Monitors for the design team",
   "description": "Two new designers start on November 3.",
   "costCenter": "CC-1000",
   "lineItems": [ { "name": "27-inch monitor", "lineType": "goods", "qty": 2, "unit": "each", "unitPrice": 320 } ],
   "neededBy": "2026-11-03",
   "submit": true
}
Risposta · 201 Created
{
   "id": "PR-3F9A1C2E",
   "title": "Monitors for the design team",
   "requesterName": "Priya Shah",
   "costCenter": "CC-1000",
   "amount": 640,
   "currency": "USD",
   "status": "pending_approval",
   "approvalVersion": 1,
   ...
}

Ottenere una richiesta d’acquisto

Ottiene una richiesta d’acquisto.

GET/v1/workspaces/{regionId}/purchase-requests/{requestId}

Parametri

  • requestIdstringObbligatorio

    La richiesta d’acquisto, ad es. PR-3F9A1C2E.

Restituisce

200 OK con l’oggetto mostrato nella risposta.

Più dettagli

Restituisce una richiesta d’acquisto con la sua catena di approvazione, il controllo del budget e, una volta ordinata, l’ordine d’acquisto in cui si è trasformata (poId). Visibile alle stesse persone di ListPurchaseRequests.

Campi della risposta

  • statusstring

    draft finché non viene inviata; pending_approval mentre la catena di approvazione è in corso; approved, poi ordered quando è diventata un ordine d’acquisto (poId); oppure rejected (rejectionReason) o canceled.

  • amountnumber

    Il totale delle righe (qty × unitPrice), in currency.

  • approvalobject

    La catena di approvazione, assente finché è una bozza. Costruita dal flusso di approvazione delle richieste d’acquisto del workspace (per impostazione predefinita quello degli ordini d’acquisto), dal limite di spesa del richiedente e dal controllo del budget.

  • approvalVersionnumber

    Aumenta a ogni modifica dell’approvazione. Invialo come expectedVersion quando approvi.

  • budgetCheckobject

    Il controllo del budget del centro di costo quando i budget sono attivi: l’ultimo, all’invio o all’approvazione finale. Gli importi sono nella valuta del budget.

Errori

  • 404 Not Found - Nessuna richiesta d’acquisto con questo id che chi chiama possa vedere. Chi non può vedere una richiesta non scopre se esiste.
  • 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-requests/{requestId}
Richiesta
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-requests/{requestId}" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Risposta · 200 OK
{
   "id": "string",
   "title": "string",
   "description": "string",
   "requesterEmployeeKey": "string",
   "requesterName": "string",
   "costCenter": "string",
   "glCode": "string",
   "supplier": { "name": "string", "supplierConnectionId": "string", "supplierRegionId": "string" },
   "lineItems": [
      { "name": "string", "lineType": "goods" | "service", "qty": number, "unit": "string", "unitPrice": number }
   ],
   "amount": number,
   "currency": "string",
   "neededBy": "string",
   "quoteDocument": { "importId": "string", "fileName": "string", "contentType": "string", "addedAt": "string", "quoteNumber": "string", "validUntil": "string" },
   "notes": "string",
   "status": "draft" | "pending_approval" | "approved" | "ordered" | "rejected" | "canceled",
   "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
    },
   "approvalVersion": number,
   "budgetCheck": { "outcome": "within" | "over" | "no_budget" | "no_rate" | "off", "mode": "off" | "warn" | "block", "costCenter": "string", "currency": "string", "budget": number, "remaining": number, "amount": number, "overBy": number, "checkedAt": "string" },
   "poId": "string",
   "rejectionReason": "string",
   "createdAt": "string",
   "updatedAt": "string",
   "submittedAt": "string",
   "decidedAt": "string",
   "canceledAt": "string",
   "canceledBy": "string"
}

Aggiornare una richiesta d’acquisto

Modifica una bozza, o una richiesta in attesa di approvazione.

PATCH/v1/workspaces/{regionId}/purchase-requests/{requestId}

Parametri

  • requestIdstringObbligatorio

    La richiesta d’acquisto, ad es. PR-3F9A1C2E.

Corpo

  • titlestring

    Cosa serve, in poche parole. Fino a 200 caratteri.

  • descriptionstring

    Perché serve: la motivazione aziendale. Fino a 4.000 caratteri. Obbligatoria per l’invio.

  • costCenterstring

    Il codice o il nome di un centro di costo, salvato come suo codice. Obbligatorio per l’invio quando il workspace tiene un elenco di centri di costo.

  • glCodestring

    Il conto contabile (categoria di spesa), quando non è quello del centro di costo. Fino a 40 caratteri.

  • supplierobject

    Un fornitore suggerito dal richiedente: { name, supplierConnectionId?, supplierRegionId? }. Un nome da solo non instrada nulla; un fornitore approvato nell’elenco del workspace viene usato dai passaggi di approvazione per fornitore.

  • lineItemsArray<{ name, lineType?, qty, unit?, unitPrice }>

    Cosa serve, da 1 a 50 righe: name (fino a 200 caratteri), qty (maggiore di 0), unit (facoltativo, ad es. each, hour, month), unitPrice (una stima, 0 o più, nella valuta della richiesta) e lineType (facoltativo: goods o service, riportato sulla riga dell’ordine; se omesso, un’unità di tempo la rende un servizio, qualsiasi altra un bene). Una riga basta per una stima.

  • currencystring

    ISO 4217. La valuta del workspace se omessa.

  • neededBystring

    Quando serve, YYYY-MM-DD.

  • quoteImportIdstring

    Un preventivo caricato con l’importazione dei preventivi, da allegare.

  • notesstring

    Ciò che l’ufficio acquisti dovrebbe sapere. Fino a 2.000 caratteri.

Restituisce

200 OK con l’oggetto mostrato nella risposta.

Più dettagli

Il richiedente modifica i campi inviati; il resto rimane. Inviare lineItems sostituisce tutte le righe. Una richiesta in attesa di approvazione ripassa dall’approvazione dall’inizio, perché le sue approvazioni riguardavano il contenuto precedente.

Solo il richiedente.

Campi della risposta

  • statusstring

    draft finché non viene inviata; pending_approval mentre la catena di approvazione è in corso; approved, poi ordered quando è diventata un ordine d’acquisto (poId); oppure rejected (rejectionReason) o canceled.

  • amountnumber

    Il totale delle righe (qty × unitPrice), in currency.

  • approvalobject

    La catena di approvazione, assente finché è una bozza. Costruita dal flusso di approvazione delle richieste d’acquisto del workspace (per impostazione predefinita quello degli ordini d’acquisto), dal limite di spesa del richiedente e dal controllo del budget.

  • approvalVersionnumber

    Aumenta a ogni modifica dell’approvazione. Invialo come expectedVersion quando approvi.

  • budgetCheckobject

    Il controllo del budget del centro di costo quando i budget sono attivi: l’ultimo, all’invio o all’approvazione finale. Gli importi sono nella valuta del budget.

Errori

  • 400 Bad Request - Un campo non è valido, oppure la richiesta è approvata, ordinata, rifiutata o annullata e non può essere modificata.
  • 403 Forbidden - Chi chiama non è il richiedente.
  • 404 Not Found - Nessuna richiesta d’acquisto con questo id che chi chiama possa vedere. Chi non può vedere una richiesta non scopre se esiste.
  • 409 Conflict - Codice over_budget. I budget sono applicati (modalità blocco) e la richiesta porterebbe il suo centro di costo oltre il budget, oppure non c’è un tasso di cambio per controllarla. Il budgetCheck nel corpo riporta gli importi. Non viene salvato nulla.
  • 409 Conflict - La richiesta è cambiata mentre questa chiamata la scriveva. Rileggila e riprova.
  • 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-requests/{requestId}
Richiesta
curl -X PATCH "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-requests/{requestId}" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Risposta · 200 OK
{
   "id": "string",
   "title": "string",
   "description": "string",
   "requesterEmployeeKey": "string",
   "requesterName": "string",
   "costCenter": "string",
   "glCode": "string",
   "supplier": { "name": "string", "supplierConnectionId": "string", "supplierRegionId": "string" },
   "lineItems": [
      { "name": "string", "lineType": "goods" | "service", "qty": number, "unit": "string", "unitPrice": number }
   ],
   "amount": number,
   "currency": "string",
   "neededBy": "string",
   "quoteDocument": { "importId": "string", "fileName": "string", "contentType": "string", "addedAt": "string", "quoteNumber": "string", "validUntil": "string" },
   "notes": "string",
   "status": "draft" | "pending_approval" | "approved" | "ordered" | "rejected" | "canceled",
   "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
    },
   "approvalVersion": number,
   "budgetCheck": { "outcome": "within" | "over" | "no_budget" | "no_rate" | "off", "mode": "off" | "warn" | "block", "costCenter": "string", "currency": "string", "budget": number, "remaining": number, "amount": number, "overBy": number, "checkedAt": "string" },
   "poId": "string",
   "rejectionReason": "string",
   "createdAt": "string",
   "updatedAt": "string",
   "submittedAt": "string",
   "decidedAt": "string",
   "canceledAt": "string",
   "canceledBy": "string"
}

Inviare una richiesta d’acquisto

Invia una bozza per l’approvazione.

POST/v1/workspaces/{regionId}/purchase-requests/{requestId}/submit

Parametri

  • requestIdstringObbligatorio

    La richiesta d’acquisto, ad es. PR-3F9A1C2E.

Restituisce

200 OK con l’oggetto mostrato nella risposta.

Più dettagli

Costruisce la catena di approvazione della richiesta e avvisa il primo approvatore. I passaggi di approvazione sono instradati per importo, fornitore, richiedente, centro di costo e conto contabile. Lo stato diventa pending_approval, oppure direttamente approved quando l’autonomia o una regola di automazione la coprono. Una richiesta in una valuta diversa da quella del workspace è instradata al tasso di cambio del giorno; senza tasso, va sempre a una persona. Senza corpo.

Solo il richiedente.

Campi della risposta

  • statusstring

    draft finché non viene inviata; pending_approval mentre la catena di approvazione è in corso; approved, poi ordered quando è diventata un ordine d’acquisto (poId); oppure rejected (rejectionReason) o canceled.

  • amountnumber

    Il totale delle righe (qty × unitPrice), in currency.

  • approvalobject

    La catena di approvazione, assente finché è una bozza. Costruita dal flusso di approvazione delle richieste d’acquisto del workspace (per impostazione predefinita quello degli ordini d’acquisto), dal limite di spesa del richiedente e dal controllo del budget.

  • approvalVersionnumber

    Aumenta a ogni modifica dell’approvazione. Invialo come expectedVersion quando approvi.

  • budgetCheckobject

    Il controllo del budget del centro di costo quando i budget sono attivi: l’ultimo, all’invio o all’approvazione finale. Gli importi sono nella valuta del budget.

Errori

  • 400 Bad Request - La richiesta è già stata inviata, oppure non ha una descrizione, un importo maggiore di 0 o un centro di costo in un workspace che tiene un elenco.
  • 403 Forbidden - Chi chiama non è il richiedente.
  • 404 Not Found - Nessuna richiesta d’acquisto con questo id che chi chiama possa vedere. Chi non può vedere una richiesta non scopre se esiste.
  • 409 Conflict - Codice over_budget. I budget sono applicati (modalità blocco) e la richiesta porterebbe il suo centro di costo oltre il budget, oppure non c’è un tasso di cambio per controllarla. Il budgetCheck nel corpo riporta gli importi. Non viene salvato nulla.
  • 409 Conflict - La richiesta è cambiata mentre questa chiamata la scriveva. Rileggila e riprova.
  • 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-requests/{requestId}/submit
Richiesta
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-requests/{requestId}/submit" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Risposta · 200 OK
{
   "id": "string",
   "title": "string",
   "description": "string",
   "requesterEmployeeKey": "string",
   "requesterName": "string",
   "costCenter": "string",
   "glCode": "string",
   "supplier": { "name": "string", "supplierConnectionId": "string", "supplierRegionId": "string" },
   "lineItems": [
      { "name": "string", "lineType": "goods" | "service", "qty": number, "unit": "string", "unitPrice": number }
   ],
   "amount": number,
   "currency": "string",
   "neededBy": "string",
   "quoteDocument": { "importId": "string", "fileName": "string", "contentType": "string", "addedAt": "string", "quoteNumber": "string", "validUntil": "string" },
   "notes": "string",
   "status": "draft" | "pending_approval" | "approved" | "ordered" | "rejected" | "canceled",
   "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
    },
   "approvalVersion": number,
   "budgetCheck": { "outcome": "within" | "over" | "no_budget" | "no_rate" | "off", "mode": "off" | "warn" | "block", "costCenter": "string", "currency": "string", "budget": number, "remaining": number, "amount": number, "overBy": number, "checkedAt": "string" },
   "poId": "string",
   "rejectionReason": "string",
   "createdAt": "string",
   "updatedAt": "string",
   "submittedAt": "string",
   "decidedAt": "string",
   "canceledAt": "string",
   "canceledBy": "string"
}

Approvare una richiesta d’acquisto

Approva il passaggio di approvazione corrente di una richiesta d’acquisto.

POST/v1/workspaces/{regionId}/purchase-requests/{requestId}/approve

Parametri

  • requestIdstringObbligatorio

    La richiesta d’acquisto, ad es. PR-3F9A1C2E.

Corpo

  • expectedVersionnumber

    L’approvalVersion vista da chi chiama. Se l’approvazione della richiesta è cambiata da allora, la chiamata viene rifiutata con 409 APPROVAL_VERSION_CHANGED invece di approvare qualcos’altro.

Restituisce

200 OK con l’oggetto mostrato nella risposta.

Più dettagli

Approva il passaggio che indica chi chiama. All’ultimo passaggio il budget viene ricontrollato prima che la richiesta risulti approvata; vengono avvisati il richiedente e le persone che possono emettere ordini. Valgono le stesse regole dell’approvazione di un ordine d’acquisto, compreso se un richiedente può approvare la propria richiesta.

Solo con sessione attiva e accesso 'edit' agli ordini d’acquisto. Qualsiasi altro chiamante, compresa una chiave API, riceve 403 HUMAN_APPROVAL_REQUIRED prima che venga letto qualcosa.

Campi della risposta

  • statusstring

    draft finché non viene inviata; pending_approval mentre la catena di approvazione è in corso; approved, poi ordered quando è diventata un ordine d’acquisto (poId); oppure rejected (rejectionReason) o canceled.

  • amountnumber

    Il totale delle righe (qty × unitPrice), in currency.

  • approvalobject

    La catena di approvazione, assente finché è una bozza. Costruita dal flusso di approvazione delle richieste d’acquisto del workspace (per impostazione predefinita quello degli ordini d’acquisto), dal limite di spesa del richiedente e dal controllo del budget.

  • approvalVersionnumber

    Aumenta a ogni modifica dell’approvazione. Invialo come expectedVersion quando approvi.

  • budgetCheckobject

    Il controllo del budget del centro di costo quando i budget sono attivi: l’ultimo, all’invio o all’approvazione finale. Gli importi sono nella valuta del budget.

Errori

  • 400 Bad Request - La richiesta non è in attesa di approvazione.
  • 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 - Nessuna richiesta d’acquisto con questo id che chi chiama possa vedere. Chi non può vedere una richiesta non scopre se esiste.
  • 409 Conflict - Codice APPROVAL_VERSION_CHANGED: expectedVersion non corrisponde più. Rileggi la richiesta.
  • 409 Conflict - Codice over_budget. I budget sono applicati (modalità blocco) e la richiesta porterebbe il suo centro di costo oltre il budget, oppure non c’è un tasso di cambio per controllarla. Il budgetCheck nel corpo riporta gli importi. Non viene salvato nulla.
  • 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-requests/{requestId}/approve
Richiesta
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-requests/{requestId}/approve" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "expectedVersion": number
}
Risposta · 200 OK
{
   "id": "string",
   "title": "string",
   "description": "string",
   "requesterEmployeeKey": "string",
   "requesterName": "string",
   "costCenter": "string",
   "glCode": "string",
   "supplier": { "name": "string", "supplierConnectionId": "string", "supplierRegionId": "string" },
   "lineItems": [
      { "name": "string", "lineType": "goods" | "service", "qty": number, "unit": "string", "unitPrice": number }
   ],
   "amount": number,
   "currency": "string",
   "neededBy": "string",
   "quoteDocument": { "importId": "string", "fileName": "string", "contentType": "string", "addedAt": "string", "quoteNumber": "string", "validUntil": "string" },
   "notes": "string",
   "status": "draft" | "pending_approval" | "approved" | "ordered" | "rejected" | "canceled",
   "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
    },
   "approvalVersion": number,
   "budgetCheck": { "outcome": "within" | "over" | "no_budget" | "no_rate" | "off", "mode": "off" | "warn" | "block", "costCenter": "string", "currency": "string", "budget": number, "remaining": number, "amount": number, "overBy": number, "checkedAt": "string" },
   "poId": "string",
   "rejectionReason": "string",
   "createdAt": "string",
   "updatedAt": "string",
   "submittedAt": "string",
   "decidedAt": "string",
   "canceledAt": "string",
   "canceledBy": "string"
}

Rifiutare una richiesta d’acquisto

Rifiuta una richiesta d’acquisto con una motivazione.

POST/v1/workspaces/{regionId}/purchase-requests/{requestId}/reject

Parametri

  • requestIdstringObbligatorio

    La richiesta d’acquisto, ad es. PR-3F9A1C2E.

Corpo

  • reasonstringObbligatorio

    Perché la richiesta viene rifiutata; il richiedente lo vede. Fino a 1.000 caratteri.

Restituisce

200 OK con l’oggetto mostrato nella risposta.

Più dettagli

Rifiuta la richiesta al passaggio che indica chi chiama. Lo stato diventa rejected e il richiedente viene avvisato con la motivazione. Definitivo: il richiedente fa una nuova richiesta.

Con accesso 'edit' agli ordini d’acquisto. Solo il dipendente indicato dal passaggio corrente; una chiave API riceve 403 HUMAN_APPROVAL_REQUIRED.

Campi della risposta

  • statusstring

    draft finché non viene inviata; pending_approval mentre la catena di approvazione è in corso; approved, poi ordered quando è diventata un ordine d’acquisto (poId); oppure rejected (rejectionReason) o canceled.

  • amountnumber

    Il totale delle righe (qty × unitPrice), in currency.

  • approvalobject

    La catena di approvazione, assente finché è una bozza. Costruita dal flusso di approvazione delle richieste d’acquisto del workspace (per impostazione predefinita quello degli ordini d’acquisto), dal limite di spesa del richiedente e dal controllo del budget.

  • approvalVersionnumber

    Aumenta a ogni modifica dell’approvazione. Invialo come expectedVersion quando approvi.

  • budgetCheckobject

    Il controllo del budget del centro di costo quando i budget sono attivi: l’ultimo, all’invio o all’approvazione finale. Gli importi sono nella valuta del budget.

Errori

  • 400 Bad Request - Manca la motivazione, oppure la richiesta non è in attesa di approvazione.
  • 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 - Nessuna richiesta d’acquisto con questo id che chi chiama possa vedere. Chi non può vedere una richiesta non scopre se esiste.
  • 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-requests/{requestId}/reject
Richiesta
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-requests/{requestId}/reject" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "reason": "string"
}
Risposta · 200 OK
{
   "id": "string",
   "title": "string",
   "description": "string",
   "requesterEmployeeKey": "string",
   "requesterName": "string",
   "costCenter": "string",
   "glCode": "string",
   "supplier": { "name": "string", "supplierConnectionId": "string", "supplierRegionId": "string" },
   "lineItems": [
      { "name": "string", "lineType": "goods" | "service", "qty": number, "unit": "string", "unitPrice": number }
   ],
   "amount": number,
   "currency": "string",
   "neededBy": "string",
   "quoteDocument": { "importId": "string", "fileName": "string", "contentType": "string", "addedAt": "string", "quoteNumber": "string", "validUntil": "string" },
   "notes": "string",
   "status": "draft" | "pending_approval" | "approved" | "ordered" | "rejected" | "canceled",
   "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
    },
   "approvalVersion": number,
   "budgetCheck": { "outcome": "within" | "over" | "no_budget" | "no_rate" | "off", "mode": "off" | "warn" | "block", "costCenter": "string", "currency": "string", "budget": number, "remaining": number, "amount": number, "overBy": number, "checkedAt": "string" },
   "poId": "string",
   "rejectionReason": "string",
   "createdAt": "string",
   "updatedAt": "string",
   "submittedAt": "string",
   "decidedAt": "string",
   "canceledAt": "string",
   "canceledBy": "string"
}

Annullare una richiesta d’acquisto

Ritira una richiesta d’acquisto finché non viene ordinata.

POST/v1/workspaces/{regionId}/purchase-requests/{requestId}/cancel

Parametri

  • requestIdstringObbligatorio

    La richiesta d’acquisto, ad es. PR-3F9A1C2E.

Restituisce

200 OK con l’oggetto mostrato nella risposta.

Più dettagli

Ritira una bozza, una richiesta in attesa di approvazione o una approvata non ancora ordinata. Lo stato diventa canceled. Senza corpo.

Il richiedente, o un amministratore del workspace.

Campi della risposta

  • statusstring

    draft finché non viene inviata; pending_approval mentre la catena di approvazione è in corso; approved, poi ordered quando è diventata un ordine d’acquisto (poId); oppure rejected (rejectionReason) o canceled.

  • amountnumber

    Il totale delle righe (qty × unitPrice), in currency.

  • approvalobject

    La catena di approvazione, assente finché è una bozza. Costruita dal flusso di approvazione delle richieste d’acquisto del workspace (per impostazione predefinita quello degli ordini d’acquisto), dal limite di spesa del richiedente e dal controllo del budget.

  • approvalVersionnumber

    Aumenta a ogni modifica dell’approvazione. Invialo come expectedVersion quando approvi.

  • budgetCheckobject

    Il controllo del budget del centro di costo quando i budget sono attivi: l’ultimo, all’invio o all’approvazione finale. Gli importi sono nella valuta del budget.

Errori

  • 400 Bad Request - La richiesta è già ordinata, rifiutata o annullata.
  • 403 Forbidden - Chi chiama non è né il richiedente né un amministratore.
  • 404 Not Found - Nessuna richiesta d’acquisto con questo id che chi chiama possa vedere. Chi non può vedere una richiesta non scopre se esiste.
  • 409 Conflict - La richiesta è cambiata mentre questa chiamata la scriveva. Rileggila e riprova.
  • 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-requests/{requestId}/cancel
Richiesta
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-requests/{requestId}/cancel" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Risposta · 200 OK
{
   "id": "string",
   "title": "string",
   "description": "string",
   "requesterEmployeeKey": "string",
   "requesterName": "string",
   "costCenter": "string",
   "glCode": "string",
   "supplier": { "name": "string", "supplierConnectionId": "string", "supplierRegionId": "string" },
   "lineItems": [
      { "name": "string", "lineType": "goods" | "service", "qty": number, "unit": "string", "unitPrice": number }
   ],
   "amount": number,
   "currency": "string",
   "neededBy": "string",
   "quoteDocument": { "importId": "string", "fileName": "string", "contentType": "string", "addedAt": "string", "quoteNumber": "string", "validUntil": "string" },
   "notes": "string",
   "status": "draft" | "pending_approval" | "approved" | "ordered" | "rejected" | "canceled",
   "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
    },
   "approvalVersion": number,
   "budgetCheck": { "outcome": "within" | "over" | "no_budget" | "no_rate" | "off", "mode": "off" | "warn" | "block", "costCenter": "string", "currency": "string", "budget": number, "remaining": number, "amount": number, "overBy": number, "checkedAt": "string" },
   "poId": "string",
   "rejectionReason": "string",
   "createdAt": "string",
   "updatedAt": "string",
   "submittedAt": "string",
   "decidedAt": "string",
   "canceledAt": "string",
   "canceledBy": "string"
}

Convertire una richiesta d’acquisto

Ordina una richiesta approvata: crea il suo ordine d’acquisto.

POST/v1/workspaces/{regionId}/purchase-requests/{requestId}/convert

Parametri

  • requestIdstringObbligatorio

    La richiesta d’acquisto, ad es. PR-3F9A1C2E.

Corpo

  • any CreatePurchaseOrder fieldobject

    Tutti i campi sono facoltativi e per impostazione predefinita sono quelli della richiesta. supplier serve quando la richiesta non ne indica uno. Inviare lineItems sostituisce le righe della richiesta.

Restituisce

201 Created con l’oggetto mostrato nella risposta.

Più dettagli

Crea un ordine d’acquisto da una richiesta approvata, come fa CreatePurchaseOrder: le righe della richiesta (una riga personalizzata a quantità ciascuna), il fornitore, il centro di costo, il conto contabile, il preventivo e le note, che il corpo può sostituire singolarmente. L’ordine indica la richiesta (requestId) e la richiesta diventa ordered, in un solo passaggio, quindi una richiesta diventa al massimo un ordine. Quando l’ordine usa lo stesso centro di costo e lo stesso conto contabile e il suo importo, nella valuta del workspace, non supera quanto approvato, mantiene l’approvazione della richiesta; altrimenti passa per il flusso di approvazione degli ordini d’acquisto. Il richiedente viene avvisato.

Con accesso 'create' agli ordini d’acquisto.

Errori

  • 400 Bad Request - La richiesta non è approvata, oppure né la richiesta né il corpo indicano un fornitore. Vale anche qualsiasi rifiuto di CreatePurchaseOrder.
  • 409 Conflict - La richiesta è già stata ordinata.
  • 404 Not Found - Nessuna richiesta d’acquisto con questo id che chi chiama possa vedere. Chi non può vedere una richiesta non scopre se esiste.
  • 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-requests/{requestId}/convert
Richiesta
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-requests/{requestId}/convert" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Risposta · 201 Created
{
   "request": {
      "id": "string",
      "title": "string",
      "description": "string",
      "requesterEmployeeKey": "string",
      "requesterName": "string",
      "costCenter": "string",
      "glCode": "string",
      "supplier": { "name": "string", "supplierConnectionId": "string", "supplierRegionId": "string" },
      "lineItems": [
         { "name": "string", "lineType": "goods" | "service", "qty": number, "unit": "string", "unitPrice": number }
      ],
      "amount": number,
      "currency": "string",
      "neededBy": "string",
      "quoteDocument": { "importId": "string", "fileName": "string", "contentType": "string", "addedAt": "string", "quoteNumber": "string", "validUntil": "string" },
      "notes": "string",
      "status": "draft" | "pending_approval" | "approved" | "ordered" | "rejected" | "canceled",
      "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
       },
      "approvalVersion": number,
      "budgetCheck": { "outcome": "within" | "over" | "no_budget" | "no_rate" | "off", "mode": "off" | "warn" | "block", "costCenter": "string", "currency": "string", "budget": number, "remaining": number, "amount": number, "overBy": number, "checkedAt": "string" },
      "poId": "string",
      "rejectionReason": "string",
      "createdAt": "string",
      "updatedAt": "string",
      "submittedAt": "string",
      "decidedAt": "string",
      "canceledAt": "string",
      "canceledBy": "string"
   },
   "purchaseOrder": {
      "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"
   }
}
Contattaci