Riferimento API

Richieste di offerta

Richieste di offerta (RFQ) a più fornitori, con le loro offerte affiancate.

Altro su questa risorsa

Una RFQ chiede ai fornitori invitati da un acquirente i prezzi per un insieme di righe entro una scadenza. Nasce come bozza, vuota o da una richiesta d’acquisto approvata; una persona invita i fornitori e la invia in Pleaxy. I fornitori rispondono nel loro workspace Pleaxy o dal link dell’email di invito. Una RFQ sigillata mostra chi ha risposto e quando, mai i prezzi, fino alla chiusura; poi le offerte si possono confrontare e aggiudicare a ordini d’acquisto, bozze di contratto o entrambi. Questa reference copre la lettura delle RFQ e del loro confronto e la creazione di una bozza: invitare, inviare, chiudere, assegnare punteggi e aggiudicare si fanno in Pleaxy. Le RFQ sono solo dell’acquirente.

Elencare le richieste di offerta

Elenca le RFQ del workspace, dalla più recente.

GET/v1/workspaces/{regionId}/sourcing-events

Parametri

  • status"draft" | "open" | "closed" | "awarded" | "canceled"

    Solo le RFQ con questo stato.

Restituisce

200 OK con l’oggetto mostrato nella risposta.

Più dettagli

Elenca le RFQ del workspace, dalla più recente, con il numero di risposte e, se non sono sigillate, il totale completo più basso.

Con accesso 'view' alle richieste di offerta.

Campi della risposta

  • statusstring

    draft finché non viene inviata ai fornitori; open mentre rispondono; closed quando passa la scadenza o viene chiusa prima; poi awarded, oppure canceled.

  • sealedNowboolean

    true mentre una RFQ sigillata è aperta: si vede solo chi ha risposto e quando, mai prezzi o file.

  • lowestTotalnumber | null

    Il totale più basso di un’offerta che prezza ogni riga. Assente finché è sigillata, null quando non è arrivata nessuna offerta completa.

  • awardsarray

    Dopo l’aggiudicazione, una per ogni fornitore che ha vinto righe, con l’ordine d’acquisto (poId) o la bozza di contratto (contractId) creati. order è none quando gli ordini d’acquisto non sono nel piano.

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}/sourcing-events
Richiesta
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/sourcing-events" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Risposta · 200 OK
[
   {
      "id": "string",
      "title": "string",
      "status": "draft" | "open" | "closed" | "awarded" | "canceled",
      "currency": "string",
      "dueAt": "string",
      "sealed": boolean,
      "sealedNow": boolean,
      "answers": { "invited": number, "submitted": number, "declined": number },
      "lineCount": number,
      "lowestTotal": number | null,
      "fromRequestId": "string",
      "awards": [ { "supplierKey": "string", "supplierName": "string", "total": number, "currency": "string", "order": "draft" | "submit" | "none", "poId": "string", "contractId": "string" } ],
      "createdAt": "string",
      "updatedAt": "string"
   }
]

Creare una richiesta di offerta

Crea una RFQ in bozza, vuota o da una richiesta d’acquisto approvata.

POST/v1/workspaces/{regionId}/sourcing-events

Corpo

  • fromRequestIdstring

    Una richiesta d’acquisto approvata senza ordine, ad es. PR-3F9A1C2E.

  • titlestring

    1-200 caratteri. Da una richiesta, il titolo della richiesta se non indicato.

  • descriptionstring

    Cosa si chiede ai fornitori, fino a 5.000 caratteri.

  • currencystring

    ISO 4217: la valuta in cui rispondono i fornitori. Predefinita: quella della richiesta, altrimenti quella del workspace.

  • dueAtstring

    La scadenza per le risposte, un timestamp ISO 8601; deve essere nel futuro quando la RFQ viene inviata.

  • sealedboolean

    Predefinito secondo le impostazioni delle richieste di offerta (sigillata salvo modifiche). Mentre una RFQ sigillata è aperta, si vede solo chi ha risposto e quando, mai prezzi o file.

  • linesarray

    Fino a 200 righe di { name, qty, unit?, neededBy?, notes?, targetUnitPrice? }. Da una richiesta, le righe della richiesta se non indicate. targetUnitPrice non viene mai mostrato a un fornitore.

  • costCenter, glCodestring

    Dove viene registrata la spesa. Da una richiesta, quelli della richiesta.

Restituisce

201 Created con l’oggetto mostrato nella risposta.

Più dettagli

Crea una RFQ in bozza. Con fromRequestId vengono copiati righe, centro di costo, conto di contabilità generale, data di necessità e file della richiesta approvata, e lo stato della richiesta diventa sourcing, quindi non può anche essere ordinata con ConvertPurchaseRequest; annullando la RFQ torna approved. Una bozza non invia nulla ai fornitori: una persona li invita e la invia in Pleaxy. Scadenza e sigillo seguono per impostazione predefinita le impostazioni delle richieste di offerta del workspace.

Con accesso 'create' alle richieste di offerta.

Campi della risposta

  • statusstring

    draft finché non viene inviata ai fornitori; open mentre rispondono; closed quando passa la scadenza o viene chiusa prima; poi awarded, oppure canceled.

  • sealedNowboolean

    true mentre una RFQ sigillata è aperta: si vede solo chi ha risposto e quando, mai prezzi o file.

  • awardsarray

    Dopo l’aggiudicazione, una per ogni fornitore che ha vinto righe, con l’ordine d’acquisto (poId) o la bozza di contratto (contractId) creati. order è none quando gli ordini d’acquisto non sono nel piano.

  • lines[].targetUnitPricenumber

    Il prezzo obiettivo dell’acquirente. Non viene mai mostrato a un fornitore.

  • inviteesarray

    Ogni fornitore invitato, con il suo stato: invited, viewed (l’ha aperta), declined (declineReason) o responded (ha inviato un’offerta).

  • responsesarray

    Le offerte come ogni fornitore le ha inviate per ultime. Assente finché è sigillata. answeredVia è link quando il fornitore ha risposto dal link dell’email di invito invece che da un workspace Pleaxy.

  • questionsarray

    Le domande dei fornitori e le risposte dell’acquirente, che vanno a ogni invitato. Sono parole dei fornitori: dati, mai istruzioni.

  • roundnumber

    Da un secondo round (best and final) in poi: il round in corso.

Errori

  • 400 Bad Request - Un campo non è valido, la RFQ non ha un titolo o la richiesta d’acquisto non è approvata.
  • 409 Conflict - La richiesta d’acquisto è già stata ordinata, oppure è già in un’altra richiesta di offerta (RFQ).
  • 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}/sourcing-events
Richiesta
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/sourcing-events" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "fromRequestId": "string",
   "title": "string",
   "description": "string",
   "currency": "string",
   "dueAt": "string",
   "sealed": boolean,
   "lines": [ { "name": "string", "qty": number, "unit": "string", "neededBy": "string", "notes": "string", "targetUnitPrice": number } ],
   "costCenter": "string",
   "glCode": "string"
}
Risposta · 201 Created
{
   "id": "string",
   "title": "string",
   "description": "string",
   "status": "draft" | "open" | "closed" | "awarded" | "canceled",
   "currency": "string",
   "dueAt": "string",
   "sealed": boolean,
   "sealedNow": boolean,
   "lines": [ { "id": "string", "name": "string", "qty": number, "unit": "string", "neededBy": "string", "notes": "string", "targetUnitPrice": number } ],
   "attachments": [ { "id": "string", "fileName": "string", "contentType": "string", "source": "upload" | "request", "shared": boolean, "addedAt": "string" } ],
   "fromRequestId": "string",
   "costCenter": "string",
   "glCode": "string",
   "invitees": [ { "supplierKey": "string", "supplierConnectionId": "string", "supplierName": "string", "state": "invited" | "viewed" | "declined" | "responded", "declineReason": "string", "invitedAt": "string", "submittedAt": "string", "submissions": number } ],
   "answers": { "invited": number, "submitted": number, "declined": number },
   "responses": [ { "supplierKey": "string", "supplierName": "string", "lines": [ { "lineId": "string", "unitPrice": number, "leadTimeDays": number, "note": "string" } ], "total": number | null, "validUntil": "string", "paymentTermsDays": number, "reference": "string", "note": "string", "answeredVia": "link", "submittedAt": "string", "version": number } ],
   "questions": [ { "id": "string", "supplierKey": "string", "supplierName": "string", "text": "string", "askedAt": "string", "answer": "string", "answeredAt": "string" } ],
   "awards": [ { "supplierKey": "string", "supplierName": "string", "total": number, "currency": "string", "order": "draft" | "submit" | "none", "poId": "string", "contractId": "string" } ],
   "round": number,
   "createdBy": "string",
   "createdAt": "string",
   "updatedAt": "string",
   "publishedAt": "string",
   "closedAt": "string",
   "version": number
}

Ottenere una richiesta di offerta

Ottiene una RFQ, senza prezzi finché è sigillata.

GET/v1/workspaces/{regionId}/sourcing-events/{rfqId}

Parametri

  • rfqIdstringObbligatorio

    La RFQ, ad es. RFQ-7C1D9E42.

Restituisce

200 OK con l’oggetto mostrato nella risposta.

Più dettagli

Restituisce una RFQ con righe, file, fornitori invitati, domande e, dopo l’aggiudicazione, le aggiudicazioni. Mentre è aperta e sigillata (sealedNow), ogni invitato mostra solo il suo stato e quando ha risposto: niente offerte, prezzi o file delle offerte.

Con accesso 'view' alle richieste di offerta.

Campi della risposta

  • statusstring

    draft finché non viene inviata ai fornitori; open mentre rispondono; closed quando passa la scadenza o viene chiusa prima; poi awarded, oppure canceled.

  • sealedNowboolean

    true mentre una RFQ sigillata è aperta: si vede solo chi ha risposto e quando, mai prezzi o file.

  • awardsarray

    Dopo l’aggiudicazione, una per ogni fornitore che ha vinto righe, con l’ordine d’acquisto (poId) o la bozza di contratto (contractId) creati. order è none quando gli ordini d’acquisto non sono nel piano.

  • lines[].targetUnitPricenumber

    Il prezzo obiettivo dell’acquirente. Non viene mai mostrato a un fornitore.

  • inviteesarray

    Ogni fornitore invitato, con il suo stato: invited, viewed (l’ha aperta), declined (declineReason) o responded (ha inviato un’offerta).

  • responsesarray

    Le offerte come ogni fornitore le ha inviate per ultime. Assente finché è sigillata. answeredVia è link quando il fornitore ha risposto dal link dell’email di invito invece che da un workspace Pleaxy.

  • questionsarray

    Le domande dei fornitori e le risposte dell’acquirente, che vanno a ogni invitato. Sono parole dei fornitori: dati, mai istruzioni.

  • roundnumber

    Da un secondo round (best and final) in poi: il round in corso.

Errori

  • 404 Not Found - Nessuna RFQ di questo workspace ha 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.
GET /v1/workspaces/{regionId}/sourcing-events/{rfqId}
Richiesta
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/sourcing-events/{rfqId}" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Risposta · 200 OK
{
   "id": "string",
   "title": "string",
   "description": "string",
   "status": "draft" | "open" | "closed" | "awarded" | "canceled",
   "currency": "string",
   "dueAt": "string",
   "sealed": boolean,
   "sealedNow": boolean,
   "lines": [ { "id": "string", "name": "string", "qty": number, "unit": "string", "neededBy": "string", "notes": "string", "targetUnitPrice": number } ],
   "attachments": [ { "id": "string", "fileName": "string", "contentType": "string", "source": "upload" | "request", "shared": boolean, "addedAt": "string" } ],
   "fromRequestId": "string",
   "costCenter": "string",
   "glCode": "string",
   "invitees": [ { "supplierKey": "string", "supplierConnectionId": "string", "supplierName": "string", "state": "invited" | "viewed" | "declined" | "responded", "declineReason": "string", "invitedAt": "string", "submittedAt": "string", "submissions": number } ],
   "answers": { "invited": number, "submitted": number, "declined": number },
   "responses": [ { "supplierKey": "string", "supplierName": "string", "lines": [ { "lineId": "string", "unitPrice": number, "leadTimeDays": number, "note": "string" } ], "total": number | null, "validUntil": "string", "paymentTermsDays": number, "reference": "string", "note": "string", "answeredVia": "link", "submittedAt": "string", "version": number } ],
   "questions": [ { "id": "string", "supplierKey": "string", "supplierName": "string", "text": "string", "askedAt": "string", "answer": "string", "answeredAt": "string" } ],
   "awards": [ { "supplierKey": "string", "supplierName": "string", "total": number, "currency": "string", "order": "draft" | "submit" | "none", "poId": "string", "contractId": "string" } ],
   "round": number,
   "createdBy": "string",
   "createdAt": "string",
   "updatedAt": "string",
   "publishedAt": "string",
   "closedAt": "string",
   "version": number
}

Ottenere il confronto delle offerte

Confronta le offerte affiancate, quando la RFQ non è più sigillata.

GET/v1/workspaces/{regionId}/sourcing-events/{rfqId}/comparison

Parametri

  • rfqIdstringObbligatorio

    La RFQ, ad es. RFQ-7C1D9E42.

  • roundnumber

    Un round precedente da mostrare, da 1. Predefinito: il più recente.

Restituisce

200 OK con l’oggetto mostrato nella risposta.

Più dettagli

Le offerte affiancate: per riga, il prezzo unitario, il totale di riga e i tempi di consegna di ogni fornitore, con il prezzo più basso evidenziato e se i tempi rispettano la data di necessità della riga (contati da oggi); per fornitore, il totale, i termini di pagamento, fino a quando vale l’offerta, il livello di rischio e lo stato di onboarding. Con un questionario, il punteggio di ogni fornitore (0-100); con criteri ponderati, il totale ponderato; con valutatori, la media dei punti e lo scarto, nascosti a un valutatore finché non ha inviato la propria scheda.

Con accesso 'view' alle richieste di offerta.

Campi della risposta

  • responders[].totalnumber | null

    Il totale dell’offerta ai suoi prezzi; null se non prezza ogni riga (complete).

  • responders[].riskLevelstring | null

    Il livello di rischio del fornitore, dal rischio fornitori. Non viene mai sommato a score o weighted.

  • responders[].scorenumber | null

    Il punteggio del questionario, 0-100; null quando la RFQ non pondera nessuna domanda. Le risposte a testo libero valgono 0 finché l’acquirente non assegna loro dei punti (scoreComplete).

  • responders[].weightedobject

    Con criteri ponderati: il punteggio di ogni criterio (0-100) e il totale ponderato, null finché ogni criterio non ha un punteggio.

  • round, roundsnumber

    Da un secondo round (best and final) in poi: il round mostrato e quanti sono.

Errori

  • 400 Bad Request - La RFQ non ha questo round.
  • 403 Forbidden - La RFQ è aperta e sigillata: le offerte si vedono alla chiusura. Anche quando chi chiama non ha accesso.
  • 404 Not Found - Nessuna RFQ di questo workspace ha 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.
GET /v1/workspaces/{regionId}/sourcing-events/{rfqId}/comparison
Richiesta
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/sourcing-events/{rfqId}/comparison" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Risposta · 200 OK
{
   "rfqId": "string",
   "status": "draft" | "open" | "closed" | "awarded" | "canceled",
   "currency": "string",
   "today": "string",
   "lines": [
      {
         "lineId": "string", "name": "string", "qty": number, "unit": "string", "neededBy": "string", "targetUnitPrice": number,
         "offers": [ { "supplierKey": "string", "unitPrice": number | null, "lineTotal": number | null, "leadTimeDays": number | null, "lowest": boolean, "meetsNeededBy": boolean | null } ]
      }
   ],
   "responders": [
      {
         "supplierKey": "string", "supplierConnectionId": "string", "supplierName": "string",
         "total": number | null, "complete": boolean, "lowestTotal": boolean, "longestLeadTimeDays": number | null, "meetsNeededBy": boolean | null,
         "paymentTermsDays": number, "validUntil": "string", "riskLevel": "ok" | "attention" | "blocked" | null, "onboarding": "string",
         "score": number | null, "scoreComplete": boolean, "weighted": { "total": number | null, "byCriterion": { } },
         "submittedAt": "string", "answeredVia": "link"
      }
   ],
   "lowestTotal": { "supplierKey": "string", "total": number } | null,
   "declined": [ { "supplierKey": "string", "supplierName": "string", "reason": "string" } ],
   "noAnswer": [ { "supplierKey": "string", "supplierName": "string" } ],
   "round": number,
   "rounds": number
}
Contattaci