{ "components": { "schemas": { "Account": { "properties": { "additionalData": { "description": "Dati aggiuntivi sull'account, in particolare i dati si riferiscono allo stato attuale del consenso che FlowPay ha sull'account", "properties": { "consentActive": { "example": "true", "type": "boolean" }, "consentValidUntil": { "example": "2020-03-03T17:32:28Z", "format": "date-time", "type": "string" }, "hasAccessRight": { "example": "true", "type": "boolean" } }, "required": [ "consentActive" ], "type": "object" }, "bankID": { "description": "ID FlowPay della banca all'interno del Bank Gateway.\n\nIdentifica l'istituto di pagamento dove è collocato l'account", "example": "string", "type": "string" }, "currency": { "description": "Valuta dell'account (e.g. `EUR`, `CHF`).\n\nVerrà probabilmente codificato in futuro con una enum", "example": "string", "type": "string" }, "iban": { "description": "IBAN dell'account", "example": "string", "type": "string" }, "id": { "example": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "format": "uuid", "type": "string" }, "label": { "description": "Testo libero per identificare meglio l'account", "example": "string", "type": "string" }, "userIDs": { "items": { "example": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "format": "uuid", "type": "string" }, "type": "array" }, "vatCode": { "description": "Partita iva a cui appartiene questo account", "example": "string", "type": "string" } }, "required": [ "iban", "currency", "vatCode", "bankID", "userIDs" ], "type": "object" }, "Accounts": { "items": { "$ref": "#/components/schemas/Account" }, "type": "array" }, "AIS-Session": { "properties": { "aisSessionID": { "example": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "format": "uuid", "type": "string" }, "url": { "example": "string", "type": "string" } }, "required": [ "url", "aisSessionID" ], "type": "object" }, "AdditionalData": { "properties": { "consentActive": { "example": "true", "type": "boolean" }, "consentValidUntil": { "example": "2020-03-03T17:32:28Z", "format": "date-time", "type": "string" }, "hasAccessRight": { "example": "true", "type": "boolean" } }, "required": [ "consentActive" ], "type": "object" }, "AisConsentType": { "enum": [ "transaction", "balance" ], "type": "string" }, "Array": { "items": { "$ref": "#/components/schemas/Item" }, "type": "array" }, "Attachment": { "properties": { "file": { "description": "Contenuto dell'allegato codificato in base64", "example": null, "format": "binary", "type": "string" }, "id": { "description": "Identificativo univoco dell'allegato", "example": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "format": "uuid", "type": "string" }, "name": { "description": "Nome dell'allegato", "example": "allegato.pdf", "type": "string" }, "type": { "example": "pdf", "type": "string" } }, "required": [ "name", "type" ], "type": "object" }, "Balance": { "properties": { "balance": { "example": "123.45", "format": "double", "type": "number" }, "balanceType": { "example": "string", "type": "string" }, "currency": { "example": "EUR", "type": "string" }, "date": { "example": "2020-03-03T17:32:28Z", "format": "date-time", "type": "string" }, "iban": { "example": "IT59Q0300203280162876621571", "type": "string" } }, "required": [ "iban", "balance", "date", "currency", "balanceType" ], "type": "object" }, "Balances": { "additionalProperties": { "additionalProperties": { "additionalProperties": { "items": { "$ref": "#/components/schemas/Balance" }, "type": "array" }, "type": "object" }, "type": "object" }, "type": "object" }, "Bank": { "properties": { "countryID": { "example": "IT", "type": "string" }, "details": { "properties": { "endDateSupported": { "example": "true", "type": "boolean" }, "executionRuleSupported": { "items": { "example": "string", "type": "string" }, "type": "array" }, "futurePaymentSupported": { "example": "true", "type": "boolean" }, "oneShotRecurringAvailable": { "example": "true", "type": "boolean" }, "recurringPaymentFrequencies": { "items": { "example": "string", "type": "string" }, "type": "array" }, "recurringPaymentSupported": { "example": "true", "type": "boolean" }, "sctInstSupported": { "example": "true", "type": "boolean" } }, "required": [ "endDateSupported", "oneShotRecurringAvailable", "futurePaymentSupported", "sctInstSupported", "recurringPaymentFrequencies", "executionRuleSupported", "recurringPaymentSupported" ], "type": "object" }, "email": { "example": "example@example.com", "type": "string" }, "flowpayID": { "example": "string", "type": "string" }, "icon": { "example": "string", "type": "string" }, "name": { "example": "string", "type": "string" }, "nationalCode": { "example": "string", "type": "string" }, "nestedIn": { "example": "string", "type": "string" }, "phoneNumber": { "example": "string", "type": "string" } }, "required": [ "name", "icon", "phoneNumber", "countryID" ], "type": "object" }, "BankInfo": { "properties": { "endDateSupported": { "example": "true", "type": "boolean" }, "executionRuleSupported": { "items": { "example": "string", "type": "string" }, "type": "array" }, "futurePaymentSupported": { "example": "true", "type": "boolean" }, "oneShotRecurringAvailable": { "example": "true", "type": "boolean" }, "recurringPaymentFrequencies": { "items": { "example": "string", "type": "string" }, "type": "array" }, "recurringPaymentSupported": { "example": "true", "type": "boolean" }, "sctInstSupported": { "example": "true", "type": "boolean" } }, "required": [ "endDateSupported", "oneShotRecurringAvailable", "futurePaymentSupported", "sctInstSupported", "recurringPaymentFrequencies", "executionRuleSupported", "recurringPaymentSupported" ], "type": "object" }, "Banks": { "items": { "$ref": "#/components/schemas/Bank" }, "type": "array" }, "Bulk": { "properties": { "amount": { "description": "Importo totale del bulk", "example": 48223.07, "format": "double", "type": "number" }, "documents": { "additionalProperties": { "items": { "$ref": "#/components/schemas/Fingerprint" }, "type": "array" }, "description": "Dizionario dei documenti relativi a bulk, con chiave il tipo di documento e con valore le fingerprint dei documenti", "type": "object" }, "fingerprint": { "$ref": "#/components/schemas/Fingerprint" } }, "type": "object" }, "ConsentDTO": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "description": "Id univoco del consenso" }, "bankID": { "type": "string", "description": "Nome univoco della banca per la quale è stato concesso il consenso" }, "expiresAt": { "type": "string", "format": "date-time", "description": "Data nella quale il consenso finisce di valere" }, "createdAt": { "type": "string", "format": "date-time", "description": "Data nella quale il consenso è stato creato" }, "recurring": { "type": "boolean", "description": "Indica se il consenso è di tipo ricorrente oppure no" }, "usableFor": { "type": "array", "items": { "$ref": "#/components/schemas/ConsentType" }, "description": "Indica per cosa questo consenso può essere usato (e.g. Lettura conti, saldo, transazioni)" }, "userID": { "type": "string", "format": "uuid", "nullable": true } }, "required": [ "id", "bankID", "expiresAt", "createdAt", "recurring", "usableFor" ] }, "ConsentType": { "type": "string", "enum": [ "account", "balance", "transaction" ], "description": "Tipi di consenso disponibili: account, balance, transaction" }, "Categorization": { "properties": { "dateString": { "example": "string", "type": "string" }, "documentDate": { "example": "2020-03-03T17:32:28Z", "format": "date-time", "type": "string" }, "documentType": { "$ref": "#/components/schemas/DocumentType" }, "id": { "example": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "format": "uuid", "type": "string" }, "reference": { "example": "string", "type": "string" }, "transactionID": { "example": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "format": "uuid", "type": "string" } }, "type": "object" }, "Categorizations": { "items": { "$ref": "#/components/schemas/Categorization" }, "type": "array" }, "Chain": { "description": "Chain of documents", "properties": { "fingerprint": { "$ref": "#/components/schemas/Fingerprint" }, "targetFingerprint": { "$ref": "#/components/schemas/Fingerprint" }, "targetType": { "$ref": "#/components/schemas/DocumentKindEnum" }, "triggerFingerprint": { "$ref": "#/components/schemas/Fingerprint" }, "triggerType": { "$ref": "#/components/schemas/DocumentKindEnum" } }, "type": "object" }, "CheckoutRequest": { "properties": { "fingerprint": { "description": "Fingerprint del documento per il quale si sta creando il checkout", "example": "d41d8cd98f00b204e9800998ecf8427e", "type": "string" }, "nokRedirect": { "description": "URL di reindirizzamento in caso di checkout fallito.\nPoiché questa URL deve essere pubblica e raggiungibile dal browser dell'utente si consiglia di inserire al suo interno qualcosa che possa provare la correttezza del redirect.\nAd esempio un jwt firmato dall'integratore con al suo interno un id univoco riconoscibile nel momento del redirect.", "example": "https://www.google.com/search?q=nok", "type": "string" }, "okRedirect": { "description": "URL di reindirizzamento in caso di checkout andato a buon fine.\nPoiché questa URL deve essere pubblica e raggiungibile dal browser dell'utente si consiglia di inserire al suo interno qualcosa che possa provare la correttezza del redirect.\nAd esempio un jwt firmato dall'integratore con al suo interno un id univoco riconoscibile nel momento del redirect.", "example": "https://www.google.com/search?q=ok", "type": "string" }, "type": { "$ref": "#/components/schemas/DocumentType" } }, "required": [ "type", "fingerprint" ], "type": "object" }, "CheckoutResponse": { "properties": { "code": { "description": "Codice univoco del checkout", "example": "LjJ5imbL", "type": "string" }, "expire": { "description": "Data di scadenza del codice di checkout", "example": "2020-03-03T17:32:28Z", "format": "date-time", "type": "string" }, "payments": { "items": { "$ref": "#/components/schemas/PaymentDTO" }, "type": "array" } }, "required": [ "code", "expire", "payments" ], "type": "object" }, "CollectionMethodEnum": { "type": "string", "enum": [ "sct", "sctInst", "card", "ssd" ] }, "CheckoutPreferences": { "type": "object", "properties": { "strict": { "type": "boolean", "default": false }, "terms": { "type": "array", "items": { "type": "string", "format": "uuid" } }, "paymentMethodID": { "type": "string", "format": "uuid" }, "connectorMethodID": { "type": "string", "format": "uuid" }, "allowedMethods": { "description": "Lista di metodi di pagamento che il debitore puó selezionare, in caso non sia stato indicato un metodo di pagamento specifico", "type": "array", "items": { "$ref": "#/components/schemas/CollectionMethodEnum" }, "default": [ "sct", "sctInst", "card", "ssd" ] }, "canEditRemittance": { "type": "boolean", "default": true } }, "required": [ "allowedMethods" ] }, "CheckoutPreferencesResponse": { "type": "object", "properties": { "strict": { "type": "boolean", "default": false }, "allowedMethods": { "description": "Lista di metodi di pagamento che il debitore puó selezionare, in caso non sia stato indicato un metodo di pagamento specifico", "type": "array", "items": { "$ref": "#/components/schemas/CollectionMethodEnum" }, "default": [ "sct", "sctInst", "card", "ssd" ] }, "canEditRemittance": { "type": "boolean", "default": true } }, "required": [ "strict", "allowedMethods", "canEditRemittance" ] }, "CompanyVATNumber": { "description": "VAT number of the company, full european format", "example": "IT12345678901", "pattern": "/^((AT)(U\\d{8})|(BE)(0\\d{9})|(BG)(\\d{9,10})|(CY)(\\d{8}[LX])|(CZ)(\\d{8,10})|(DE)(\\d{9})|(DK)(\\d{8})|(EE)(\\d{9})|(EL|GR)(\\d{9})|(ES)([\\dA-Z]\\d{7}[\\dA-Z])|(FI)(\\d{8})|(FR)([\\dA-Z]{2}\\d{9})|(HU)(\\d{8})|(IE)(\\d{7}[A-Z]{2})|(IT)(\\d{11})|(LT)(\\d{9}|\\d{12})|(LU)(\\d{8})|(LV)(\\d{11})|(MT)(\\d{8})|(NL)(\\d{9}(B\\d{2}|BO2))|(PL)(\\d{10})|(PT)(\\d{9})|(RO)(\\d{2,10})|(SE)(\\d{12})|(SI)(\\d{8})|(SK)(\\d{10}))$", "type": "string", "x-faker": "finance.vat" }, "Contact": { "properties": { "SDICode": { "description": "Codice SDI", "example": "string", "type": "string" }, "address": { "description": "Indirizzo dell'azienda", "example": "string", "type": "string" }, "certifiedEmail": { "description": "posta certificata dell'azienda", "example": "example@example.com", "type": "string" }, "email": { "description": "email di contatto dell'azienda", "example": "example@example.com", "type": "string" }, "icon": { "description": "URL dove trovare l'icona dell'azienda", "example": "string", "type": "string" }, "latitude": { "description": "Latitudine dell'indirizzo dell'azienda", "example": "123.45", "format": "double", "type": "number" }, "longitude": { "description": "Longitudine dell'indirizzo dell'azienda", "example": "123.45", "format": "double", "type": "number" }, "name": { "description": "Nome comune dell'azienda", "example": "string", "type": "string" }, "onFlowpay": { "example": "true", "type": "boolean" }, "phoneNumber": { "description": "Numero di contatto dell'azienda", "example": "string", "type": "string" }, "vatCode": { "description": "Partita iva dell'azienda", "example": "string", "type": "string" } }, "required": [ "onFlowpay", "name", "vatCode" ], "type": "object" }, "CountryCode": { "enum": [ "AL", "AD", "AT", "AZ", "BH", "BE", "BA", "BR", "BG", "CR", "HR", "CY", "CZ", "DK", "DO", "TL", "EG", "SV", "EE", "FO", "FI", "FR", "GE", "DE", "GI", "GR", "GL", "GT", "HU", "IS", "IQ", "IE", "IL", "IT", "JO", "KZ", "XK", "KW", "LV", "LB", "LY", "LI", "LT", "LU", "MK", "MT", "MR", "MU", "MC", "MD", "ME", "NL", "NO", "PK", "PS", "PL", "PT", "QA", "RO", "LC", "SM", "ST", "SA", "RS", "SC", "SK", "SI", "ES", "SD", "SE", "CH", "TN", "TR", "UA", "AE", "GB", "VA", "VG" ], "type": "string" }, "CreateAisSessionRequest": { "properties": { "consentType": { "$ref": "#/components/schemas/AisConsentType" }, "iban": { "example": "IT59Q0300203280162876621571", "type": "string" }, "name": { "example": "string", "type": "string" }, "nokRedirect": { "example": "https://www.google.com/search?q=nok", "type": "string" }, "okRedirect": { "example": "https://www.google.com/search?q=ok", "type": "string" }, "surname": { "example": "string", "type": "string" }, "vatCode": { "example": "string", "type": "string" } }, "required": [ "okRedirect", "nokRedirect" ], "type": "object" }, "Detail": { "properties": { "eventName": { "description": "Nome dell'evento registrato", "example": "string", "type": "string" }, "lastCalledAt": { "description": "Data dell'ultima chiamata (ISO 8601)", "example": "2020-03-03T17:32:28Z", "format": "date-time", "type": "string" }, "lastError": { "description": "Descrizione sull'ultimo errore", "example": "string", "type": "string" }, "lastErroredAt": { "description": "Data dell'ultima chiamata fallita (ISO 8601)", "example": "2020-03-03T17:32:28Z", "format": "date-time", "type": "string" }, "numberOfErroredCalls": { "description": "Numero di chiamate fallite", "example": "12345678", "format": "int64", "type": "integer" }, "numberOfSuccessfulCalls": { "description": "Numero di chiamate riuscite", "example": "12345678", "format": "int64", "type": "integer" } }, "required": [ "eventName", "numberOfErroredCalls", "numberOfSuccessfulCalls" ], "type": "object" }, "DocumentKindEnum": { "enum": [ "bill", "bulk", "chain", "construction", "invoice", "pagopa", "transfer" ], "type": "string" }, "DocumentType": { "description": "Tipo di documento del checkout", "enum": [ "invoice", "bill" ], "type": "string" }, "Dossier": { "properties": { "clientID": { "description": "Identificativo univoco del client che ha inserito la pratica", "example": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "format": "uuid", "type": "string" }, "code": { "description": "Codice univoco che identifica la richiesta dei pagamento relativa alla pratica, da inviare al ceduto", "example": "string", "type": "string" }, "createdAt": { "description": "Data di creazione della pratica", "example": "2020-03-03T17:32:28Z", "format": "date-time", "type": "string" }, "creditor": { "description": "Identificativo univoco creditore all'interno della piataforma FlowPay", "example": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "format": "uuid", "type": "string" }, "currency": { "description": "Valuta della pratica. Una pratica può contenere documenti solamente della stessa valuta", "example": "EUR", "type": "string" }, "debtor": { "description": "ID univoco del debitore all'interno della piataforma FlowPay", "example": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "format": "uuid", "type": "string" }, "deletedAt": { "description": "Data della rimozione della pratica", "example": "2020-03-03T17:32:28Z", "format": "date-time", "type": "string" }, "documents": { "description": "Lista dei documenti all'interno della pratica", "items": { "$ref": "#/components/schemas/DossierDocument" }, "type": "array" }, "externalID": { "description": "Identificativo univoco che ricollega la pratica inserita nella piattaforma FlowPay con quella contenuta nella piattaforma del client", "example": "string", "type": "string" }, "fingerprint": { "description": "Identificativo univoco del dossier definito come HEX SHA256 di [codice_instant][anno_di_caricamento][creditore]", "example": "d41d8cd98f00b204e9800998ecf8427e", "type": "string" }, "id": { "description": "Identificativo univoco della pratica all'interno della piattaforma FlowPay", "example": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "format": "uuid", "type": "string" }, "updatedAt": { "description": "Data dell'ultimo aggiornamento della pratica", "example": "2020-03-03T17:32:28Z", "format": "date-time", "type": "string" } }, "required": [ "clientID", "creditor", "debtor", "code", "fingerprint", "currency", "externalID", "documents" ], "type": "object" }, "DossierDocument": { "properties": { "createdAt": { "description": "Data di creazione del documento", "example": "2020-03-03T17:32:28Z", "format": "date-time", "type": "string" }, "deletedAt": { "description": "Data della rimozione del documento", "example": "2020-03-03T17:32:28Z", "format": "date-time", "type": "string" }, "fingerprint": { "description": "Identificativo univoco del documento all'interno della pratica definito come HEX SHA256 di [numero][anno][partita_iva_mittente]", "example": "d41d8cd98f00b204e9800998ecf8427e", "type": "string" }, "id": { "description": "Identificativo univoco della pratica all'interno della piattaforma FlowPay", "example": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "format": "uuid", "type": "string" }, "updatedAt": { "description": "Data dell'ultimo aggiornamento del documento", "example": "2020-03-03T17:32:28Z", "format": "date-time", "type": "string" } }, "required": [ "fingerprint" ], "type": "object" }, "DossierInput": { "properties": { "externalID": { "description": "Identificativo univoco che ricollega la pratica inserita nella piattaforma FlowPay con quella contenuta nella piattaforma del client", "example": "string", "type": "string" }, "invoices": { "description": "Lista dei documenti da caricare. Posso essere in formato plain text oppure in Base64", "items": { "example": "string", "type": "string" }, "type": "array" } }, "required": [ "externalID", "invoices" ], "type": "object" }, "EditInvoiceRequest": { "properties": { "creditorIban": { "description": "Iban del creditore, modificabile dal creditore o dal debitore nel caso il creditore non abbia già modificato l'iban.", "example": "string", "type": "string" }, "debtorIban": { "description": "Iban del debitore, modificabile dal debitore", "example": "string", "type": "string" }, "terms": { "description": "Lista di termini da aggiornare, a seconda della parte che richiede la modifica (creditore o debitore) tale modifica potrebbe essere rifiutata.\nInoltre un termine è modificabile fintanto che non esiste un pagamento relativo a tale termine.", "items": { "$ref": "#/components/schemas/EditTerm" }, "type": "array" } }, "type": "object" }, "EditTerm": { "properties": { "amount": { "description": "Nuovo importo del termine, modificabile dal creditore", "example": "123.45", "format": "double", "type": "number" }, "description": { "description": "Nuova descrizione del termine, modificabile dal creditore", "example": "string", "type": "string" }, "expire": { "description": "Nuova data di scadenza del termine, modificabile dal creditore", "example": "2020-03-03T17:32:28Z", "format": "date-time", "type": "string" }, "id": { "description": "Identificativo univoco del termine da modificare", "example": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "format": "uuid", "type": "string" }, "information": { "description": "Nuova causale del termine, modificabile dal creditore, (max 100 caraterri)", "example": "string", "type": "string" }, "method": { "description": "Indica la tipologia di pagamento scelta per il termine, modificabile da creditore", "example": "string", "type": "string" }, "recurringinfo": { "description": "Modifica o rende il termine pagabile a rate, modificabile dal creditore", "properties": { "executionRule": { "$ref": "#/components/schemas/ExecutionRule" }, "frequency": { "$ref": "#/components/schemas/FrequencyEnum" }, "installments": { "example": "12345678", "format": "int64", "type": "integer" } }, "required": [ "frequency", "installments" ], "type": "object" } }, "required": [ "id" ], "type": "object" }, "ErrorDTO": { "description": "Formato errore standard\n \nLista dei possibili codici di errore:\n\n| codice | descrizione |\n| ------ | ----------- |\n| 401 | Errore generale di codifica |\n| 402 | Campo necessario mancante |\n| 403 | Valore di un campo del tipo sbagliato |\n| 404 | Valore di un campo assente |\n| 405 | Errore di codifica sconosciuto |\n| 406 | Null pointer exception |\n| 407 | Campo necessario mancante |\n| 408 | Errore di connessione |\n| 409 | Errore di input output |\n| 410 - 428 | Errore generico con il database |\n| 429, 432, 433 | Errore di logica con il database |\n| 430 | Campo invalido |\n| 431 | Campo assente |\n| 434 | Risultati non trovati |\n| 500 | Errore generico |\n| 2000 | Tenant non specificato |\n| 2001 | Non autorizzato ad operare su questa risorsa |\n| 2002 | Impossibile eliminare il documento poiché sono presente dei pagamenti collegati |\n| 2003 | Non autorizzato a creare la risorsa |\n| 2004 | Non autorizzato ad operare su questa risorsa |\n| 2005 | Si sta provando a modificare un termine non di questo documento |\n| 2006 | Codice istant scaduto |\n| 2007 | Non autorizzato generare un codice instant |\n| 2008 | Codice instant inesistente o non autorizzato a leggerlo |\n| 2012 | Si sta provando a caricare un documento già esistente |\n| 3001 | Tenant non specificato |\n| 4001 | Tenant non specificato |\n| 5001 | Corpo richiesta mancante |\n| 5002 | Corpo richiesta non valido |\n| 5003 | Vatcode del ricevente fattura mancante |\n| 6001 | Tenant non specificato |\n| 6002 | Ricevuta non trovata |\n| 8005 | Non puoi modificare questo conto |\n| 8010 | Troppi risultati ottenuti |\n| 11001 | Non autorizzato ad accedere a questa risorsa |\n| 11002 | Si sta provando a caricare un documento già esistente |\n| 13001 | Azienda non trovata |\n| 13003 | vatcode non è valido |", "properties": { "code": { "description": "Codice errore", "example": "12345678", "format": "int64", "type": "integer" }, "errorDescription": { "description": "Descrizione errore", "example": "string", "type": "string" }, "errorURI": { "description": "URI dell'errore se presente", "example": "string", "type": "string" }, "expectedType": { "description": "Nel caso di un errore di codifica indica il tipo di dato che non si è riuscito a decodificare", "example": "string", "type": "string" }, "field": { "description": "Nel caso di un errore di codifica indica il campo che non si è riuscito a decodificare", "example": "string", "type": "string" }, "requestID": { "description": "ID della richiesta da comunicare per poter fornire un supporto", "example": "string", "type": "string" }, "service": { "description": "ID interno del servizio", "example": "12345678", "format": "int64", "type": "integer" }, "statusCode": { "description": "Codice di stato HTTP", "example": "12345678", "format": "int64", "type": "integer" } }, "required": [ "service", "code", "errorDescription", "statusCode" ], "type": "object" }, "ExecutionRule": { "enum": [ "following", "preceeding" ], "type": "string" }, "FeeBearer": { "enum": [ "debtor", "creditor", "followingServiceLevel", "shared" ], "type": "string" }, "Fingerprint": { "description": "Fingerprint del documento", "example": "d41d8cd98f00b204e9800998ecf8427e", "type": "string" }, "FrequencyEnum": { "enum": [ "monthly" ], "type": "string" }, "GetCheckoutResponse": { "properties": { "code": { "description": "Codice univoco del checkout", "example": "LjJ5imbL", "type": "string" }, "expire": { "description": "Data di scadenza del codice di checkout", "example": "2020-03-03T17:32:28Z", "format": "date-time", "type": "string" } }, "required": [ "code" ], "type": "object" }, "GetSCAResponse": { "properties": { "fees": { "items": { "$ref": "#/components/schemas/SCAFee" }, "type": "array" }, "scaLink": { "example": "string", "type": "string" } }, "required": [ "scaLink" ], "type": "object" }, "Invoice": { "properties": { "amount": { "description": "Totale del documento", "example": "123.45", "format": "double", "type": "number" }, "attachments": { "description": "Allegati al documento", "items": { "$ref": "#/components/schemas/Attachment" }, "type": "array" }, "currency": { "description": "Valuta del documento (e.g. EUR)", "example": "EUR", "type": "string" }, "date": { "description": "Data di emissione del documento", "example": "2020-03-03T17:32:28Z", "format": "date-time", "type": "string" }, "fingerprint": { "example": "d41d8cd98f00b204e9800998ecf8427e", "type": "string" }, "id": { "description": "Identificativo univoco del documento", "example": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "format": "uuid", "type": "string" }, "items": { "description": "Lista di oggetti a cui il documento fa riferimento", "items": { "$ref": "#/components/schemas/Item" }, "type": "array" }, "number": { "description": "Numero del documento", "example": "string", "type": "string" }, "recipientIban": { "description": "IBAN del ricevente documento e quindi del debitore", "example": "string", "type": "string" }, "recipientVat": { "description": "Codice fiscale/Partita iva del ricevente compreso il country code (e.g. IT12345678901)", "example": "string", "type": "string" }, "rootSubstitutedBy": { "properties": { "fingerprint": { "example": "d41d8cd98f00b204e9800998ecf8427e", "type": "string" }, "type": { "example": "string", "type": "string" } }, "required": [ "fingerprint", "type" ], "type": "object" }, "senderIban": { "description": "IBAN del mittente del documento e quindi creditore,\ntale valore deve essere valorizzato prima di poter generare un link di checkout. Il sistema lo valorizza automaticamente nel caso l'azienda abbia definito una preferenza per l'incasso sulla nostra piattaforma.\nAltrimenti è necessario che tale valore venga aggiunto dal client.", "example": "string", "type": "string" }, "senderVat": { "description": "Codice fiscale/Partita iva del mittente compreso il country code (e.g. IT12345678901)", "example": "string", "type": "string" }, "substitutedBy": { "properties": { "fingerprint": { "example": "d41d8cd98f00b204e9800998ecf8427e", "type": "string" }, "type": { "example": "string", "type": "string" } }, "required": [ "fingerprint", "type" ], "type": "object" }, "terms": { "description": "Lista di termini di pagamento per il documento", "items": { "$ref": "#/components/schemas/Term" }, "type": "array" } }, "required": [ "senderVat", "recipientVat", "terms", "items", "date", "amount", "number", "currency" ], "type": "object" }, "InvoicePreference": { "properties": { "incomingAccount": { "description": "Account di default sul quale incassare le fatture", "properties": { "bankID": { "example": "string", "type": "string" }, "currency": { "example": "EUR", "type": "string" }, "iban": { "example": "IT59Q0300203280162876621571", "type": "string" } }, "required": [ "iban", "currency", "bankID" ], "type": "object" }, "outgoingAccount": { "description": "Account di default dal quale pagare le fatture", "properties": { "bankID": { "example": "string", "type": "string" }, "currency": { "example": "EUR", "type": "string" }, "iban": { "example": "IT59Q0300203280162876621571", "type": "string" } }, "required": [ "iban", "currency", "bankID" ], "type": "object" }, "warnings": { "description": "Identificativi dei messaggi silenziati", "items": { "example": "string", "type": "string" }, "type": "array" } }, "type": "object" }, "Invoices": { "items": { "$ref": "#/components/schemas/Invoice" }, "type": "array" }, "Item": { "properties": { "amount": { "example": "123.45", "format": "double", "type": "number" }, "description": { "example": "string", "type": "string" }, "id": { "example": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "format": "uuid", "type": "string" }, "quantity": { "example": "123.45", "format": "double", "type": "number" } }, "required": [ "description", "quantity", "amount" ], "type": "object" }, "LatestBalances": { "additionalProperties": { "additionalProperties": { "additionalProperties": { "$ref": "#/components/schemas/Balance" }, "type": "object" }, "type": "object" }, "type": "object" }, "LinkedDocument": { "properties": { "fingerprint": { "example": "d41d8cd98f00b204e9800998ecf8427e", "type": "string" }, "type": { "example": "string", "type": "string" } }, "required": [ "fingerprint", "type" ], "type": "object" }, "NewInvoice": { "properties": { "attachments": { "description": "Allegati al documento", "items": { "$ref": "#/components/schemas/Attachment" }, "type": "array" }, "currency": { "description": "Valuta del documento (e.g. EUR)", "example": "EUR", "type": "string" }, "date": { "description": "Data di emissione del documento", "example": "2020-03-03T17:32:28Z", "format": "date-time", "type": "string" }, "items": { "description": "Lista di oggetti a cui il documento fa riferimento", "items": { "$ref": "#/components/schemas/NewItem" }, "type": "array" }, "number": { "description": "Numero del documento", "example": "string", "type": "string" }, "recipientIban": { "description": "IBAN del ricevente documento e quindi del debitore", "example": "string", "type": "string" }, "recipientVat": { "description": "Codice fiscale/Partita iva del ricevente compreso il country code (e.g. IT12345678901)", "example": "string", "type": "string" }, "senderIban": { "description": "IBAN del mittente del documento e quindi creditore,\ntale valore deve essere valorizzato prima di poter generare un link di checkout. Il sistema lo valorizza automaticamente nel caso l'azienda abbia definito una preferenza per l'incasso sulla nostra piattaforma.\nAltrimenti è necessario che tale valore venga aggiunto dal client.", "example": "string", "type": "string" }, "senderVat": { "description": "Codice fiscale/Partita iva del mittente compreso il country code (e.g. IT12345678901)", "example": "string", "type": "string" }, "terms": { "description": "Lista di termini di pagamento per il documento", "items": { "$ref": "#/components/schemas/NewTerm" }, "type": "array" } }, "required": [ "senderVat", "recipientVat", "terms", "items", "date", "number", "currency" ], "type": "object" }, "NewItem": { "properties": { "amount": { "description": "Numero di unità dell'oggetto", "example": "123.45", "format": "double", "type": "number" }, "description": { "description": "Descrizione dell'oggetto del documento", "example": "string", "type": "string" }, "quantity": { "description": "Quantità dell'oggetto", "example": "123.45", "format": "double", "type": "number" } }, "required": [ "description", "quantity", "amount" ], "type": "object" }, "NewTerm": { "properties": { "amount": { "description": "Importo del termine di pagamento viene controllato che il valore abbia al massimo due cifre decimali", "example": "123.45", "format": "double", "type": "number" }, "description": { "description": "Descrizione del termine di pagamento", "example": "string", "type": "string" }, "expire": { "description": "Data di scadenza del termine di pagamento. Indica la data nel quale il termine di pagamento deve essere incassato", "example": "2020-03-03T17:32:28Z", "format": "date-time", "type": "string" }, "information": { "description": "Causale del termine di pagamento", "example": "string", "type": "string" }, "method": { "description": "Indica la tipologia di pagamento scelta per il termine", "example": "string", "type": "string" }, "recurringInfo": { "properties": { "executionRule": { "$ref": "#/components/schemas/ExecutionRule" }, "frequency": { "$ref": "#/components/schemas/FrequencyEnum" }, "installments": { "example": "12345678", "format": "int64", "type": "integer" } }, "required": [ "frequency", "installments" ], "type": "object" } }, "required": [ "expire", "amount", "description", "information" ], "type": "object" }, "PaidOutsideFlowPayTerm": { "items": { "$ref": "#/components/schemas/PaidOutsideFlowPayTerm" }, "type": "array" }, "PaidOutsideFlowPayTermList": { "items": { "$ref": "#/components/schemas/PaidOutsideFlowPayTerm" }, "type": "array" }, "Payment": { "properties": { "createdAt": { "description": "Data di creazione del pagamento, corrisponde al momento in cui il pagamento è stato autorizzato dal debitore", "example": "2020-03-03T17:32:28Z", "format": "date-time", "type": "string" }, "creditor": { "description": "Codice fiscale del creditore (vat code in caso di azienda, codice fiscale in caso di privato)", "example": "string", "type": "string" }, "debtor": { "description": "Codice fiscale del debitore (vat code in caso di azienda, codice fiscale in caso di privato)", "example": "string", "type": "string" }, "fingerprint": { "description": "fingerprint del documento per il quale è stato creato il pagamento", "example": "d41d8cd98f00b204e9800998ecf8427e", "type": "string" }, "identifier": { "description": "ID univoco del pagamento", "example": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "format": "uuid", "type": "string" }, "method": { "$ref": "#/components/schemas/PaymentMethodInfo" }, "status": { "$ref": "#/components/schemas/PaymentStatusEnum" }, "termID": { "description": "ID univoco del termine di pagamento del documento al quale questo pagamento si riferisce", "example": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "format": "uuid", "type": "string" }, "type": { "description": "Tipo di documento per il quale è stato creato il pagamento", "example": "string", "type": "string" } }, "required": [ "identifier", "fingerprint", "termID", "creditor", "debtor", "status" ], "type": "object" }, "PaymentDTO": { "properties": { "createdAt": { "description": "Data di creazione del pagamento, corrisponde al momento in cui il pagamento è stato autorizzato dal debitore", "example": "2020-03-03T17:32:28Z", "format": "date-time", "type": "string" }, "creditor": { "description": "Codice fiscale del creditore (vat code in caso di azienda, codice fiscale in caso di privato)", "example": "string", "type": "string" }, "debtor": { "description": "Codice fiscale del debitore (vat code in caso di azienda, codice fiscale in caso di privato)", "example": "string", "type": "string" }, "debtorIban": { "example": "string", "type": "string" }, "fingerprint": { "description": "fingerprint del documento per il quale è stato creato il pagamento", "example": "d41d8cd98f00b204e9800998ecf8427e", "type": "string" }, "identifier": { "description": "ID univoco del pagamento", "example": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "format": "uuid", "type": "string" }, "method": { "$ref": "#/components/schemas/PaymentMethodInfo" }, "status": { "$ref": "#/components/schemas/PaymentStatusEnum" }, "terms": { "items": { "description": "ID univoco del termine di pagamento del documento al quale questo pagamento si riferisce", "example": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "format": "uuid", "type": "string" }, "type": "array" }, "type": { "description": "Tipo di documento per il quale è stato creato il pagamento", "example": "string", "type": "string" } }, "required": [ "identifier", "fingerprint", "terms", "creditor", "debtor", "status", "method" ], "type": "object" }, "PaymentMethodInfo": { "enum": [ "card" ], "type": "string" }, "PaymentStatusEnum": { "description": "Stato di un pagamento:\n * `concluded` - Indica che il pagamento è stato addebitato sul conto del debitore\n * `not_concluded` - Indica che il pagamento è stato autorizzato ma ancora non è stato addebitato (ad esempio per un pagamento a data futura)\n * `rejected` - Indica che il pagamento è stato rifiutato (ad esempio il pagamento è stato annullato dal debitore oppure non erano presenti i fondi nel momento di eseguire il pagamento)\n * `not_available` - Indica che è avvenuto un errore di comunicazione con la banca per controllare lo stato del pagamento, riprovando dovrebbe risolversi\n * `outside_flowpay_creditor` - Indica che il pagamento non è avvenuto attraverso il sistema FlowPay, e l'azione di indicare tale pagamento come avvenuto all'esterno di FlowPay è stata fatta dal creditore\n * `outside_flowpay_debtor` - Indica che il pagamento non è avvenuto attraverso il sistema FlowPay, e l'azione di indicare tale pagamento come avvenuto all'esterno di FlowPay è stata fatta dal debitore\n\nGli stati `concluded`, `rejected`, `outside_flowpay_creditor`, `outside_flowpay_debtor` sono stati finali per un pagamento", "enum": [ "concluded", "not_concluded", "rejected", "not_available", "outsideFlowPay", "outside_flowpay_creditor", "outside_flowpay_debtor", "forwarded" ], "type": "string" }, "Payments": { "items": { "$ref": "#/components/schemas/Payment" }, "type": "array" }, "PlanType": { "oneOf": [ { "properties": { "number": { "type": "integer" }, "type": { "enum": [ "singleTerms" ], "type": "string" } }, "required": [ "number" ], "type": "object" }, { "properties": { "frequency": { "$ref": "#/components/schemas/FrequencyEnum" }, "number": { "type": "integer" }, "type": { "enum": [ "recurringTerms" ], "type": "string" } }, "required": [ "number", "frequency" ], "type": "object" } ], "type": "object" }, "PostWebHook": { "properties": { "events": { "description": "Lista di eventi da registrare sul webhook", "items": { "example": "string", "type": "string" }, "type": "array" }, "expiresAt": { "description": "Data di scadenza del webhook (ISO 8601). Max 1 mese rispetto al momento della chiamata", "example": "2020-03-03T17:32:28Z", "format": "date-time", "type": "string" }, "url": { "description": "Url alla quale si vuole essere contattati", "example": "string", "type": "string" } }, "required": [ "events", "url", "expiresAt" ], "type": "object" }, "PreferenceAccount": { "properties": { "bankID": { "description": "ID FlowPay della banca all'interno del Bank Gateway.\n\nIdentifica l'istituto di pagamento dove è collocato l'account", "example": "string", "type": "string" }, "currency": { "description": "Valuta dell'account (e.g. `EUR`, `CHF`).\n\nVerrà probabilmente codificato in futuro con una enum", "example": "EUR", "type": "string" }, "iban": { "description": "IBAN che identifica l'account", "example": "IT59Q0300203280162876621571", "type": "string" } }, "required": [ "iban", "currency", "bankID" ], "type": "object" }, "PutWebHook": { "properties": { "events": { "description": "Nuovi eventi da collegare al webhook.", "items": { "example": "string", "type": "string" }, "type": "array" }, "expiresAt": { "description": "Data di scadenza del webhook (ISO 8601). Max 1 mese rispetto al momento della chiamata", "example": "2020-03-03T17:32:28Z", "format": "date-time", "type": "string" } }, "type": "object" }, "RecurringInfo": { "properties": { "executionRule": { "$ref": "#/components/schemas/ExecutionRule" }, "frequency": { "$ref": "#/components/schemas/FrequencyEnum" }, "installments": { "example": "12345678", "format": "int64", "type": "integer" } }, "required": [ "frequency", "installments" ], "type": "object" }, "SCAFee": { "properties": { "amount": { "example": "123.45", "format": "double", "type": "number" }, "bearer": { "$ref": "#/components/schemas/FeeBearer" }, "currency": { "example": "EUR", "type": "string" } }, "required": [ "amount", "currency", "bearer" ], "type": "object" }, "SalaryBatchUpdate": { "additionalProperties": { "$ref": "#/components/schemas/SalaryUpdate", "description": "Gli attributi dell'oggetto (o chiavi) sono le fingerprint dei documenti di tipo salary. Ciascuna fingerprint è associata a un aggiornamento delle informazioni relative al pagamento o bonifico." }, "description": "Gli attributi dell'oggetto (o chiavi) sono le fingerprint dei documenti di tipo salary. Ciascuna fingerprint è associata a un aggiornamento delle informazioni relative al pagamento o bonifico.", "type": "object" }, "SalaryEmployee": { "properties": { "name": { "description": "Nome del dipendente", "type": "string" }, "surname": { "description": "Cognome del dipendente", "type": "string" }, "tin": { "description": "Codice fiscale del dipendente", "type": "string" } }, "required": [ "tim", "name", "surname" ], "type": "object" }, "SalaryResponse": { "properties": { "amount": { "description": "Importo totale della busta paga (o cedolino)", "type": "number" }, "batchID": { "description": "", "format": "uuid", "type": "string" }, "currency": { "description": "Valuta in cui è espresso l'importo della busta paga (es. EUR)", "example": "EUR", "type": "string" }, "employee": { "$ref": "#/components/schemas/SalaryEmployee", "description": "Informazioni relative al dipendente destinatario della busta paga" }, "employeeIBAN": { "description": "Codice IBAN del dipendente per l'accredito della busta paga", "type": "string" }, "employeeTIN": { "description": "Codice fiscale del dipendente destinatario", "type": "string" }, "employerTIN": { "description": "Codice fiscale o Partita IVA del datore di lavoro", "type": "string" }, "fingerprint": { "description": "Fingerprint del documento salary", "example": "d41d8cd98f00b204e9800998ecf8427e", "type": "string" }, "month": { "description": "Mese di riferimento della busta paga (o cedolino)", "type": "integer" }, "paymentDate": { "description": "Data in cui viene effettuato il pagamento della busta paga (o cedolino)", "example": "2024-10-10T17:32:28Z", "format": "iso8601", "type": "string" }, "payslip": { "description": "Identificativo univoco del cedolino associato alla busta paga", "format": "uuid", "type": "string" }, "year": { "description": "Anno di riferimento della busta paga (o cedolino)", "type": "integer" } }, "required": [ "batchID", "employee", "employeeTIN", "employerTIN", "month", "year", "amount", "currency", "paymentDate", "fingerprint" ] }, "SalaryResponseTemp": { "properties": { "amount": { "description": "Importo totale della busta paga (o cedolino)", "type": "number" }, "batchID": { "description": "", "format": "uuid", "type": "string" }, "currency": { "description": "Valuta in cui è espresso l'importo della busta paga (es. EUR)", "example": "EUR", "type": "string" }, "employeeIBAN": { "description": "Codice IBAN del dipendente per l'accredito della busta paga", "type": "string" }, "fingerprint": { "description": "Fingerprint del documento salary", "example": "d41d8cd98f00b204e9800998ecf8427e", "type": "string" }, "month": { "description": "Mese di riferimento della busta paga (o cedolino)", "type": "integer" }, "paymentDate": { "description": "Data in cui viene effettuato il pagamento della busta paga (o cedolino)", "example": "2024-10-10T17:32:28Z", "format": "iso8601", "type": "string" }, "payslip": { "description": "Identificativo univoco del cedolino associato alla busta paga", "format": "uuid", "type": "string" }, "year": { "description": "Anno di riferimento della busta paga (o cedolino)", "type": "integer" } }, "required": [ "batchID", "month", "year", "amount", "currency", "paymentDate", "fingerprint" ] }, "SalaryUpdate": { "properties": { "iban": { "description": "Codice IBAN aggiornato del dipendente per l'accredito della busta paga", "type": "string" }, "paymentDate": { "description": "Data in cui viene effettuato il pagamento della busta paga (o cedolino)", "example": "2024-10-10T17:32:28Z", "format": "iso8601", "type": "string" }, "remittance": { "description": "Informazioni aggiornate relative al pagamento o al bonifico", "type": "string" } }, "type": "object" }, "Term": { "properties": { "amount": { "description": "Importo del termine di pagamento", "example": "123.45", "format": "double", "type": "number" }, "description": { "description": "Descrizione del termine di pagamento", "example": "string", "type": "string" }, "expire": { "description": "Data di scadenza del termine di pagamento", "example": "2020-03-03T17:32:28Z", "format": "date-time", "type": "string" }, "fingerprint": { "description": "Identificativo univoco di un documento calcolato come `HEX(SHA256([numero][anno][partita_iva_mittente]))`\n\nCome esempio: `[1][2021][06968160488] -> fe92051fc0d735f31f6e85ae8515838e6540ba994ede74c5cb2f19599e723d49`", "example": "d41d8cd98f00b204e9800998ecf8427e", "type": "string" }, "id": { "description": "Identificativo univoco del termine di pagamento", "example": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "format": "uuid", "type": "string" }, "information": { "description": "Causale del termine di pagamento", "example": "string", "type": "string" }, "method": { "description": "Indica la tipologia di pagamento scelta per il termine", "example": "string", "type": "string" }, "recurringInfo": { "properties": { "executionRule": { "$ref": "#/components/schemas/ExecutionRule" }, "frequency": { "$ref": "#/components/schemas/FrequencyEnum" }, "installments": { "example": "12345678", "format": "int64", "type": "integer" } }, "required": [ "frequency", "installments" ], "type": "object" }, "useFlowpay": { "example": "true", "type": "boolean" } }, "required": [ "expire", "amount", "description", "information" ], "type": "object" }, "Transaction": { "properties": { "amount": { "example": "123.45", "format": "double", "type": "number" }, "bookingDate": { "example": "2020-03-03T17:32:28Z", "format": "date-time", "type": "string" }, "creditorIban": { "example": "string", "type": "string" }, "creditorName": { "example": "string", "type": "string" }, "currency": { "example": "EUR", "type": "string" }, "debtorIban": { "example": "string", "type": "string" }, "debtorName": { "example": "string", "type": "string" }, "documentType": { "example": "string", "type": "string" }, "id": { "example": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "format": "uuid", "type": "string" }, "identifier": { "example": "string", "type": "string" }, "method": { "example": "string", "type": "string" }, "remittanceInformationUnstructured": { "example": "string", "type": "string" }, "type": { "example": "string", "type": "string" }, "valueDate": { "example": "2020-03-03T17:32:28Z", "format": "date-time", "type": "string" } }, "required": [ "type", "amount", "currency" ], "type": "object" }, "TransactionCategorization": { "properties": { "dateString": { "example": "string", "type": "string" }, "documentDate": { "example": "2020-03-03T17:32:28Z", "format": "date-time", "type": "string" }, "documentType": { "$ref": "#/components/schemas/DocumentType" }, "id": { "example": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "format": "uuid", "type": "string" }, "reference": { "example": "string", "type": "string" }, "transactionID": { "example": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "format": "uuid", "type": "string" } }, "type": "object" }, "Transactions": { "items": { "$ref": "#/components/schemas/Transaction" }, "type": "array" }, "Transfer": { "description": "Documento che permette di gestire richieste di pagamento con pochi vincoli. \n I Transfer sono indicati per rapidi prototipi o per evitare la gestione del ciclo di vita di specifici documenti. \n Nota< /b>: Per utilizzare i transfers in produzione è necessaria una due diligence più approfondita.", "properties": { "amount": { "description": "Importo del trasferimento", "example": 100.34, "type": "number", "x-faker": "finance.amount" }, "date": { "description": "Data del trasferimento", "example": "2020-01-01T00:00:00Z", "format": "iso8601", "type": "string" }, "fingerprint": { "$ref": "#/components/schemas/Fingerprint" } }, "type": "object" }, "UpdateBusiness": { "properties": { "SDICode": { "example": "string", "type": "string" }, "banner": { "example": "string", "type": "string" }, "email": { "example": "example@example.com", "type": "string" }, "icon": { "example": "string", "type": "string" }, "phoneNumber": { "example": "string", "type": "string" } }, "type": "object" }, "VerificationResult": { "enum": [ "valid", "invalid", "notSupported" ], "type": "string" }, "WalletInput": { "properties": { "externalID": { "description": "Identificativo univoco per ricollegare il wallet inserito nella piattaforma FlowPay con quello contenuto nella piattaforma del client", "example": "string", "type": "string" }, "iban": { "description": "L'iban del wallet", "example": "IT59Q0300203280162876621571", "type": "string" }, "provider": { "$ref": "#/components/schemas/WalletProvider" } }, "required": [ "iban", "externalID", "provider" ], "type": "object" }, "WalletProvider": { "enum": [ "lemonway", "flowpayBeta" ], "type": "string" }, "WebHook": { "properties": { "events": { "additionalProperties": { "items": { "example": "string", "type": "string" }, "type": "array" }, "description": "Dizionario,\nle chiavi sono i tenantID,\ni valori sono gli eventi registrati per tale tenant su questo webhook", "type": "object" }, "id": { "description": "Identificativo univoco del webhook", "example": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "format": "uuid", "type": "string" }, "url": { "description": "Url del webhook", "example": "string", "type": "string" } }, "required": [ "id", "url", "events" ], "type": "object" }, "WebHookDeleteRequest": { "properties": { "events": { "description": "Lista di eventi da eliminare per tale webhook. Se non presente vengono eliminati tutti", "items": { "example": "string", "type": "string" }, "type": "array" } }, "type": "object" }, "WebHookDetail": { "properties": { "createdAt": { "description": "Data di creazione del webhook (ISO 8601)", "example": "2020-03-03T17:32:28Z", "format": "date-time", "type": "string" }, "events": { "additionalProperties": { "items": { "$ref": "#/components/schemas/Detail" }, "type": "array" }, "description": "Dizionario,\nle chiavi sono i tenantID,\ni valori sono i dettagli sull'evento", "type": "object" }, "expiresAt": { "description": "Data di scadenza del webhook (ISO 8601)", "example": "2020-03-03T17:32:28Z", "format": "date-time", "type": "string" }, "id": { "description": "Identificativo univoco del webhook", "example": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "format": "uuid", "type": "string" }, "url": { "description": "Url del webhook", "example": "string", "type": "string" } }, "required": [ "id", "url", "createdAt", "expiresAt", "events" ], "type": "object" }, "WebHookType": { "properties": { "eventDescription": { "description": "Descrizione di cosa rappresenta l'evento", "example": "string", "type": "string" }, "eventName": { "description": "nome dell'evento", "example": "string", "type": "string" }, "necessaryAuthorizationCodeScope": { "description": "Scope di tipo `authorization code` necessari per attivare un webhook su tale evento.\n\nSe non presente indica che questo evento non può essere attivato tramite questo tipo di autorizzazione.", "items": { "example": "string", "type": "string" }, "type": "array" }, "necessaryClientCredentialScope": { "description": "Scope di tipo `client credential` necessari per attivare un webhook su tale evento\n\nSe non presente indica che questo evento non può essere attivato tramite questo tipo di autorizzazione.", "items": { "example": "string", "type": "string" }, "type": "array" }, "needsAccounts": { "description": "Indica se questo evento richiede un token abilitato alla gestione degli account dell'utente.\n\nIn caso di token `authorization_code` il token deve essere stato ottenuto secondo il flusso descritto nella documentazione.\nIn caso di token `client_credentials` il token deve essere ottenuto con lo scope `account:read`", "example": "true", "type": "boolean" } }, "required": [ "eventName", "eventDescription", "needsAccounts" ], "type": "object" }, "WebHookTypes": { "items": { "$ref": "#/components/schemas/WebHookType" }, "type": "array" }, "WebHooks": { "items": { "$ref": "#/components/schemas/WebHook" }, "type": "array" }, "XML": { "description": "Fattura elettronica in formato standard codificata in base64 oppure direttamente nel formato xml\nLa documentazione sul formato della fattura elettronica si puo' trovare a https://www.fatturapa.gov.it/it/norme-e-regole/documentazione-fattura-elettronica/formato-fatturapa/", "properties": {}, "type": "object" }, "check-iban": { "properties": { "result": { "$ref": "#/components/schemas/VerificationResult" } }, "required": [ "result" ], "type": "object" }, "pagoPaStatusEnum": { "enum": [ "PAYABLE", "PAID", "ACTIVATED", "PAID_FROM_OTHER_PSP", "ACTIVATED_FROM_OTHER_PSP" ], "type": "string" }, "pagoPA": { "description": "PagoPA payment information", "properties": { "ec": { "$ref": "#/components/schemas/CompanyVATNumber", "description": "Public administration VAT number" }, "fingerprint": { "$ref": "#/components/schemas/Fingerprint", "description": "Fingerprint generated for the document" }, "noticeNumber": { "description": "Notice number emitted by pagoPA", "example": "1234567890123456", "pattern": "^d{11}", "type": "string" }, "remittance": { "description": "Remittance information", "example": "Rata scuola A.S. 2019/2020", "type": "string" }, "id": { "description": "Identificativo univoco del documento PagoPA su flowpay", "example": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "format": "uuid", "type": "string" }, "date": { "description": "Due date of the PagoPa notice", "example": "2099-12-30T23:00:00Z", "format": "date-time", "type": "string" }, "amount": { "description": "amount due for the PagoPa notice", "example": "1", "format": "double", "type": "number" }, "status": { "$ref": "#/components/schemas/pagoPaStatusEnum" } }, "required": [ "fingerprint", "ec", "noticeNumber" ], "type": "object" }, "pagoPAFieldLess": { "description": "PagoPA payment information", "properties": { "ec": { "$ref": "#/components/schemas/CompanyVATNumber", "description": "Public administration VAT number" }, "fingerprint": { "$ref": "#/components/schemas/Fingerprint", "description": "Fingerprint generated for the document" }, "noticeNumber": { "description": "Notice number emitted by pagoPA", "example": "1234567890123456", "pattern": "^d{11}", "type": "string" }, "remittance": { "description": "Remittance information", "example": "Rata scuola A.S. 2019/2020", "type": "string" }, "id": { "description": "Identificativo univoco del documento PagoPA su flowpay", "example": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "format": "uuid", "type": "string" } }, "required": [ "fingerprint", "ec", "noticeNumber" ], "type": "object" } }, "securitySchemes": { "ThirdPartyAuthorizationCode": { "description": "Autorizzazione oauth ottenuta da terze parti con un authorization flow", "flows": { "authorizationCode": { "authorizationUrl": "https://core.flowpay.it/api/openid/authenticate", "refreshUrl": "https://core.flowpay.it/api/oauth/token", "scopes": { "account:read": "Operazioni di lettura sui conti", "bill:write": "Creazione e gestione di ricevute", "business:read": "Operazioni di lettura sulle informazioni della azienda", "contacts:read": "Operazioni di lettura sulla rete aziendale", "invoice:read": "Operazioni di lettura sulle fatture", "invoice:write": "Operazioni di scrittura sulle fatture", "payment:read": "Operazioni di lettura sui pagamenti", "salary:read": "Operazioni di lettura sulle buste paga", "salary:write": "Operazioni di scrittura sui salary", "statistic:read": "Lettura dei dati statistici raggruppati", "transfer:read": "Operazioni di lettura sui trasferimenti", "transfer:write": "Operazioni di scrittura sui trasferimenti" }, "tokenUrl": "https://core.flowpay.it/api/oauth/token" } }, "type": "oauth2" }, "ThirdPartyClientCredential": { "description": "Autorizzazione oauth ottenuta da terze parti con client credential flow", "flows": { "clientCredentials": { "refreshUrl": "https://core.flowpay.it/api/oauth/token", "scopes": { "account:read": "Operazioni di lettura sui conti", "account:write": "Operazione di modifica sui conti", "authorization_intent": "Creazione di intenti a consensi relativi a risorse di un utente", "bill": "Gestione di ricevute", "business:read": "Operazioni di lettura sulle informazioni della azienda", "invoice:read": "Operazioni di lettura sulle fatture", "invoice:write": "Operazioni di scrittura sulle fatture", "pagopa": "", "payment:read": "Operazioni di lettura sui pagamenti", "salary:read": "Operazioni di lettura sulle buste paga", "salary:write": "Operazioni di scrittura sui salary", "statistic:read": "Lettura dei dati statistici raggruppati", "transfer:read": "", "transfer:write": "" }, "tokenUrl": "https://core.flowpay.it/api/oauth/token" } }, "type": "oauth2" } } }, "info": { "contact": { "email": "federico.giuntoli@flowpay.it", "name": "Federico Giuntoli" }, "description": "\nHai uno use case di pagamento complesso come pagamenti massivi, split o pagopa? [chiedi qui](https://meetings.hubspot.com/rmancini)\n# Autenticazione\n​\n\n## Premesse\n ​\nPotete richiedere due tipi diversi di client a seconda delle vostre esigenze di implementazione:\n* Client pubblico: Possiede un `client_id` ma non un `client_secret` ed è pensato per applicativi che non sono in grado di mantenere un `client_secret` al sicuro (e.g. Un applicazione solamente frontend, o mobile).\n* Client confidenziale: Possiede un `client_id` e un `client_secret`ed è in grado di mantenere sicuro il `client_secret` (e.g. Un applicativo server, una combinazione di applicativi frontend + backend dove il backend si occupa delle chiamate API.)\n\n\n## Autenticazione con client credentials\n\nQuesto tipo di autenticazione è riservato per client confidenziali e attualmente permette di ottenere token collegato al vostro client utilizzato (per il momento) solamente presso l'endpoint di\ncreazione di un consenso di riconciliazione\n\n```\nPOST https://core.sandbox-new.flowpay.it/api/oauth/token\n```\n\ncon content-type `application/x-www-form-urlencoded`\n| nome | descrizione | esempio |\n|------|-------------|---------|\n| client_id | client ID fornito (il client id è un valore pubblico) | 9a585977-98c1-4f68-a0a5-651a192f7383 |\n| grant_type | Tipo di autenticazione fornita nella richiesta (in questo caso credenziali client) | client_credentials |\n| client_secret | vostro client secret fornito in fase di registrazione | client-secret |\n| scope | Tipi di scope da fornire nel token di risposta (notare che sono diversi da quelli di authorization code) | reconciliation |\n\nesempio di risposta\n\n```json\n {\n \"access_token\": \"1234567890-token-1234567890\",\n \"token_type\": \"bearer\",\n \"expires_in\": 3600,\n \"scope\": \"reconciliation\"\n }\n```\n\n\n## Flusso di autenticazione\n\n### Autorizzazione\n​\nIl flusso di autenticazione si basa su un flusso standard OAuth2 di `authorization code` quindi dal vostro applicativo l'utente deve essere rediretto da un browser al seguente link (il link vale per l'ambiente di sandbox):\n```\nhttps://core.sandbox-new.flowpay.it/api/openid/authenticate\n```\n​\nPassando nei query params del redirect i seguenti parametri obbligatori:\n​\n| nome | descrizione | esempio |\n|------|-------------|-----|\n| client_id | client ID fornito (il client id è un valore pubblico) | 9a585977-98c1-4f68-a0a5-651a192f7383 |\n| response_type | tipo di risposta del server (nel vostro caso dovrebbe essere code) | code |\n| scope | lista di scope richiesti separati dal carattere spazio | `invoice:read(spazio)invoice:write` Spazio indica il carattere |\n| redirect_uri | dove effettuare il redirect una volta completato il flusso di autorizzazione. Durante la creazione dell'applicativo è stato possibile (ed è sempre possibile modificarli) indicare le url autorizzate per la vostra applicazione | `https://ex.amp.le/redirect` |\n​| request | campo request standard openid si rimanda a **Flusso autorizzativo di riconciliazione** per un esempio | jwt encoded request |\n\nInoltre è possibile indicare un ulteriore parametro:\n​\n`state`: un valore in qualunque formato che verra' ripassato indietro invariato nel redirect al `redirect_uri`\n​\nNel caso il vostro applicativo sia un client pubblico è necesarrio utilizzare l'estensione [PKCE](https://datatracker.ietf.org/doc/html/rfc7636) di Oauth2 ed è quindi necessario passare nella url due ulteriori parametri: `code_challenge` e `code_challenge_method`\n\n**In sandbox sono forniti client confidenziali ma è comunque possibile effettuare un flusso di autenticazione con estensione PKCE per testare la propria implementazione, in ambiente di produzione il tipo di flusso utilizzabile sarà definito dal tipo di client** ​\n\n* `code_challenge`: questo valore corrisponde al BASE64URL(SHA256(`code_verifier`)) dove BASE64URL indica di codificare in base64urlencoded e SHA256 indica la funzione di hashing. `code_verifier` è una stringa casuale creata dall'applicativo all'inizio della richiesta di lunghezza compresa tra 43 e 128 caratteri\n* `code_challenge_method`: unico valore ammesso `S256`\n​\nUn esempio per generare una code_challenge in js potrebbe essere\n​\n```js\n​\nconst gen_code_challenge = async () => {\n const buffer = new Uint8Array(64)\n crypto.getRandomValues(buffer)\n const code_verifier = btoa(String.fromCharCode(...buffer))\n //crypto.subtle è presente se la pagina web è caricata su https\n const hash = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(codeVerifier))\n const code_challenge = btoa(String.fromCharCode(...new Uint8Array(hash)))\n .replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_')\n return { code_verifier, code_challenge }\n}\n```\n​\nQuindi un esempio di url di redirect finale potrebbe essere\n​\n```\nhttps://core.sandbox-new.flowpay.it/api/openid/authenticate?client_id=9a585977-98c1-4f68-a0a5-651a192f7383&scope=invoice:read invoice:write&response_type=code&redirect_uri=https://ex.amp.le/redirect&state=1234567890\n```\n​\n​\nL'utente a questo punto concedera' l'autorizzazione per gli scope richiesti (questa parte di flusso è gestita da FlowPay).\n​\nDopo che l'utente ha autorizzato verra' effettuato il redirect alla url indicata nella richiesta iniziale dove verra' inserito nei queri parameters i seguenti campi:\n​\n* `code`: Codice autorizzativo necessario nel prossimo step, di brevissima vita e mono uso\n* `state`: Se presente nella richiesta originaria, viene reinviato non modificato\n​\nquindi ad esempio\n​\n```\nhttps://ex.amp.le/redirect?code=423as23asdfweqf&state=1234567890\n```\n​\n### Ottenimento dell'Access Token\n​\neffettuato il redirect adesso è possibile scambiare il code ottenuto per access token + refresh token con una chiamata all'access token endpoint:\n​\n```\nPOST https://core.sandbox-new.flowpay.it/api/oauth/token\n```\n​\ncon content-type `application/x-www-form-urlencoded`\n​\ne body composto da:\n\n| parametro | valore |\n|--|--|\n| grant_type | authorization_code |\n| client_id | vostro client id |\n| code | codice ottenuto nel redirect |\n| redirect_uri | redirect uri della richiesta iniziale |\n\n\nInoltre nel caso il client sia privato è necessario aggiungere il parametro `client_secret` mentre nel caso di un client pubblico è necessario inviare il parametro `code_verifier` generato prima della richiesta iniziale.\n​\nLa risposta conterra' l'access_token e il refresh_token necessari per interagire con il gateway FlowPay\n\n\n## Flusso autorizzativo per lettura di dati relativi ad un conto\n\nPer poter ottenere un token autorizzativo che permetta di leggere dati sui conti un di un utente (iban, saldo, transazioni) è necessario per motivi di sicurezza essere un client di tipo confidenziale e quindi di avere a disposizione un client id e un client secret.\n\nIl flusso è diviso nei seguenti passaggi\n\n### Ottenimento di un token `client_credential` abilitato sullo scope `authorization_intent`\nUn token di questo tipo è collegato al client e non ad un utente e permette di invocare l'endpoint di creazione di un intento di consenso di accesso ai conti di un utente\n\nIn questo caso la chiamata è così composta:\n\n```\nPOST https://core.sandbox-new.flowpay.it/api/oauth/token\n```\n\n| nome | descrizione | esempio |\n|------|-------------|---------|\n| client_id | client ID fornito (il client id è un valore pubblico) | 9a585977-98c1-4f68-a0a5-651a192f7383 |\n| grant_type | Tipo di autenticazione fornita nella richiesta (in questo caso credenziali client) | client_credentials |\n| client_secret | vostro client secret fornito in fase di registrazione | client-secret |\n| scope | Tipi di scope da fornire nel token di risposta (notare che sono diversi da quelli di authorization code) in questo caso siamo interessati allo scope `authorization_intent` | authorization_intent |\n\n\nQuesta chiamata restituirà un access_token in grado di invocare l'endpoint di creazione di un consenso di riconciliazione necessario nel passaggio successivo\n\nesempio di risposta\n\n```json\n {\n \"access_token\": \"1234567890-token-1234567890\",\n \"token_type\": \"bearer\",\n \"expires_in\": 3600,\n \"scope\": \"authorization_intent\"\n }\n```\n\n\n### Creazione di un consenso di riconciliazione\n\nCon l'access token ottenuto al passaggio precedente si è in grado di invocare la rotta\n\n```\nPOST /authorization/intent/account\n```\n\nutilizzando tale token come bearer token.\n\nEsempio di body\n\n```json\n{\n \"transaction\": true,\n \"balance\": true,\n \"strict\": false,\n}\n```\n\nNel caso si voglia restringere la richiesta a degli account specifici dell'utente (sempre che si conoscano) è possibile inviare la lista di IBAN sui quale si vuole il consenso direttamente nella chiamata.\nLasciando il parametro a `null` sarà l'utente stesso a decidere su quali conti fornire il consenso.\n\nLa risposta conterrà l'id del consenso appena generato necessario nel prossimo passaggio\n\n```json\n{\n \"transaction\": true,\n \"balance\": true,\n \"id\": \"69EA2496-B2D1-4D29-BE22-9C93F2FE1699\"\n}\n```\n\n\n### Autorizzazione del consenso\n\nQuesti step del flusso sono avvenuti senza nessuna interazione con l'utente finale al quale si sta richiedendo il consenso.\nAdesso è necessario collegare il consenso creato ad un utente, per fare ciò il client deve generare un link di autorizzazione come già spiegato nella documentazione del flusso di autenticazione utilizzando un ulteriore parametro da aggiungere a quelli già discussi:\nIl parametro aggiuntivo è il parametro standard `request` nel contesto [OpenID](https://openid.net/specs/openid-connect-core-1_0.html#JWTRequests).\nIl parametro `request` ha il duplice scopo di verificare l'identità del client e di richiedere all'endpoint di autorizzazione ulteriori funzionalità.\nIn questo specifico caso viene richiesto di autorizzare un consenso alla lettura dei conti di un utente. \n\n### Generazione del campo request\n\nIl campo request è un JWT formato dai seguenti parametri:\n\n```json\nHEADER:\n{\n \"typ\": \"JWT\",\n \"alg\": \"algoritmo di firma applicato al token\",\n \"kid\": \"id univoco della chiave utilizzata per firmare il jwt\"\n}\nPAYLOAD:\n{\n \"iss\": \"9a585977-98c1-4f68-a0a5-651a192f7383\", //Issuer del JWT in questo caso voi e quindi il campo corrisponde al vostro client_id\n \"aud\": \"https://core.sandbox-new.flowpay.it/api/openid/\", //Audience al quale è rivolto il jwk in questo caso il nostro servizio di openid\n \"redirect_uri\": \"https://ex.amp.le\", //stesso redirect uri passato nel parametro dei query params\n \"client_id\": \"9a585977-98c1-4f68-a0a5-651a192f7383\", //vostro client_id\n \"state\": \"123456789\", //se presente, deve essere uguale al parametro nei query params\n \"scope\": \"openid authorization_intent\", //stessi scope inviati nei query params in questo caso lo scope openid è necessario per attivare le funzionalità openid e authorization_intent indica che si vuole attivare l'estensione di autorizzazione di uno specifico consenso\n \"response_type\": \"id_token code\", //stessi valori passati nel campo dei query params\n \"claims\": {\n \"id_token\": {\n \"account_access_intent\": {\n \"value\": \"69EA2496-B2D1-4D29-BE22-9C93F2FE1699\", //ID del consenso generato nel passaggio precedente.\n \"essential\": true\n }\n }\n }\n}\n```\n\nLa richiesta verso l'endpoint di autorizzazione che richiede di concedere il consenso in lettura degli account di un utente passa attraverso l'inserimento dell'id del consenso creato al punto precendete e non ancora speso\nnel campo `claims.id_token.account_access_intent`.\n\nCon un esempio concreto abbiamo:\n\n```json\nHEADER\n{\n \"typ\": \"JWT\",\n \"alg\": \"ES256\",\n \"kid\": \"12345678\"\n}\nPAYLOAD\n{\n \"iss\": \"9a585977-98c1-4f68-a0a5-651a192f7383\",\n \"aud\": \"https://core.sandbox-new.flowpay.it/api/openid\",\n \"redirect_uri\": \"https://ex.amp.le/redirect\",\n \"client_id\": \"9a585977-98c1-4f68-a0a5-651a192f7383\",\n \"state\": \"123456789\",\n \"scope\": \"invoice:read invoice:write openid authorization_intent\",\n \"response_type\": \"code\",\n \"claims\": {\n \"id_token\": {\n \"account_access_intent\": {\n \"value\": \"69EA2496-B2D1-4D29-BE22-9C93F2FE1699\",\n \"essential\": true\n }\n }\n }\n}\n```\n\nfirmando il jwt con la seguente chiave:\n```\nREDACTED_PRIVATE_KEY_EXAMPLE\n```\n\nOtteniamo il seguente risultato:\n```\neyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiIsImtpZCI6IjEyMzQ1Njc4In0.eyJpc3MiOiI5YTU4NTk3Ny05OGMxLTRmNjgtYTBhNS02NTFhMTkyZjczODMiLCJhdWQiOiJodHRwczovL2NvcmUuc2FuZGJveC1uZXcuZmxvd3BheS5pdC9hcGkvb3BlbmlkIiwicmVkaXJlY3RfdXJpIjoiaHR0cHM6Ly9leC5hbXAubGUvcmVkaXJlY3QiLCJjbGllbnRfaWQiOiI5YTU4NTk3Ny05OGMxLTRmNjgtYTBhNS02NTFhMTkyZjczODMiLCJzdGF0ZSI6IjEyMzQ1Njc4OSIsInNjb3BlIjoiaW52b2ljZTpyZWFkIGludm9pY2U6d3JpdGUgb3BlbmlkIGF1dGhvcml6YXRpb25faW50ZW50IiwicmVzcG9uc2VfdHlwZSI6ImNvZGUiLCJjbGFpbXMiOnsiaWRfdG9rZW4iOnsiYWNjb3VudF9hY2Nlc3NfaW50ZW50Ijp7InZhbHVlIjoiNjlFQTI0OTYtQjJEMS00RDI5LUJFMjItOUM5M0YyRkUxNjk5IiwiZXNzZW50aWFsIjp0cnVlfX19fQ.P0Pqeho32esd2crpw2q-AZoSlIPlZ5xy6w6e7GMBIznAB4ohcYIOquZGNC3f-IwXBGcJow-ZvCH7A6jiYKRLHA\n```\n\nquesto jwt deve essere incluso nella richiesta di autenticazione nel campo `request`\n\n\n**Notare che in sandbox non viene verificata la firma del jwt ma si consiglia comunque di applicarla in quanto in ambiente di produzione sarà necessaria,\n Quanto prima verrà fornita un'interfaccia dalla quale sarà possibile caricare la propria chiave pubblica che verrà utilizzata per tale scopo**\n\n**In ambiente di produzione le chiavi e algoritmi utilizzabili per firmare il jwt sono: `PS256` oppure `ES256`**\n\n\nPer quanto riguarda il valore aud in ambiente di sandbox deve essere valorizzato con la stringa\n`https://core.sandbox-new.flowpay.it/api/openid`\n\nPer l'ambiente di produzione invece è richiesta la stringa\n`https://core.flowpay.it/api`\n\nCome esempio la url comprensiva di tutti i parametri per questo flusso autorizzativo è:\nNotare che gli accapo sono stati aggiunti solo per aumentare la leggibilità\n```\nhttps://core.sandbox-new.flowpay.it/api/openid/authenticate\n?client_id=9a585977-98c1-4f68-a0a5-651a192f7383\n&scope=invoice:read invoice:write openid authorization_intent\n&response_type=code\n&redirect_uri=https://ex.amp.le/redirect\n&state=123456789\n&request=eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiIsImtpZCI6IjEyMzQ1Njc4In0.eyJpc3MiOiI5YTU4NTk3Ny05OGMxLTRmNjgtYTBhNS02NTFhMTkyZjczODMiLCJhdWQiOiJodHRwczovL2NvcmUuc2FuZGJveC1uZXcuZmxvd3BheS5pdC9hcGkvb3BlbmlkIiwicmVkaXJlY3RfdXJpIjoiaHR0cHM6Ly9leC5hbXAubGUvcmVkaXJlY3QiLCJjbGllbnRfaWQiOiI5YTU4NTk3Ny05OGMxLTRmNjgtYTBhNS02NTFhMTkyZjczODMiLCJzdGF0ZSI6IjEyMzQ1Njc4OSIsInNjb3BlIjoiaW52b2ljZTpyZWFkIGludm9pY2U6d3JpdGUgb3BlbmlkIGF1dGhvcml6YXRpb25faW50ZW50IiwicmVzcG9uc2VfdHlwZSI6ImNvZGUiLCJjbGFpbXMiOnsiaWRfdG9rZW4iOnsiYWNjb3VudF9hY2Nlc3NfaW50ZW50Ijp7InZhbHVlIjoiNjlFQTI0OTYtQjJEMS00RDI5LUJFMjItOUM5M0YyRkUxNjk5IiwiZXNzZW50aWFsIjp0cnVlfX19fQ.P0Pqeho32esd2crpw2q-AZoSlIPlZ5xy6w6e7GMBIznAB4ohcYIOquZGNC3f-IwXBGcJow-ZvCH7A6jiYKRLHA\n```\n\nA questo punto il flusso rientra nel già documentato flusso di autenticazione.\nIl token ottenuto alla fine di tale flusso potrà essere speso per effettuare le chiamate relative agli account\n\n\n# Refresh di un Token\n\nIl refresh token viene dato insieme all'access token in caso di grant_type authorization_code.\n\nNel momento in cui l'access token scade si può richiedere un nuovo access token con il refresh token.\n\nLa chiamata da effettuare in questo caso è simile alla chiamata per ottenere l'access token con le proprie client_credentials:\n\n```\nPOST https://core.sandbox-new.flowpay.it/api/oauth/token\n```\n\ncon content-type `application/x-www-form-urlencoded`\n\n\n| nome | descrizione | esempio |\n|------|-------------|---------|\n| client_id | client ID fornito (il client id è un valore pubblico) | 9a585977-98c1-4f68-a0a5-651a192f7383 |\n| grant_type | Tipo di autenticazione fornita nella richiesta (in questo caso token di refresh) | refresh_token |\n| client_secret | vostro client secret fornito in fase di registrazione | client-secret |\n| refresh_token | Refresh token che vogliamo utilizzare | 1234567890-refresh-1234567890 |\n\n\nesempio di risposta\n\n```json\n {\n \"access_token\": \"0987654321-token-0987654321\",\n \"token_type\": \"bearer\",\n \"expires_in\": 3600,\n \"refresh_token\": \"0987654321-refresh-0987654321\"\n }\n```\n\nLa risposta conterrà un nuovo access token ed un nuovo refresh token, **il refresh token appena utilizzato non è più valido. Ma è stato sostituito dal nuovo refresh token, ritornato in questo momento**.\n\n\n\n\n## Push Authorization Request\n\n**Questo endpoint è in fase di sviluppo, ma già utilizzabile in ambiente di sandbox**\n\nPer il flusso autorizzativo `authorization_code` è disponibile l'endpoint di par dove è possibile inviare i dati autorizzativi come post per poi essere successivamente utilizzati\nin una richiesta autorizzativa.\n\nL'endpoint di par è conforme alla sua [RFC](https://datatracker.ietf.org/doc/html/rfc9126).\n\nL'endpoint è disponibile al seguente url in produzione: `https://core.flowpay.it/api/oauth/par`\n\nAccetta richieste POST con content-type `application/x-www-form-urlencoded` e permette di inviare gli stessi dati che verrebbero inviati in una richiesta di autorizzazione.\nPer i client confidenziali è necessario inviare anche le proprie credenziali in particolare è necessario inviare il parametro `client_secret`\nLa risposta di tale endpoint è nel seguente formato\n\n```\n{\n \"request_uri\": \"urn:abc:def:123456789\",\n \"expires_in\": 60\n}\n```\nLa risposta contiene il campo expires_in che indica per quanto tempo il request_uri è valido.\nIl campo `request_uri` invece contiene un url che deve essere utilizzata per effettuare la richiesta di autorizzazione inviandola nel parametro `request_uri` della richiesta autorizzativa.\nTale `request_uri` è valida per un tempo limitato e monouso.\n\n### Esempio\n\nEseguendo la chiamata:\n\n```\nPOST https://core.sandbox-new.flowpay.it/api/oauth/par\nContent-Type: application/x-www-form-urlencoded\nclient_id=12345-6789&\nclient_secret=client-secret&\nscope=invoice:read&\nredirect_uri=https://ex.amp.le/redirect\n```\n\nRiceviamo la risposta:\n\n```\n{\n \"request_uri\": \"urn:abc:def:123456789\",\n \"expires_in\": 60\n}\n```\n\nIl `request_uri` ricevuto viene poi utilizzato per comporre la richiesta di autorizzazione:\n\n```\nGET https://core.sandbox-new.flowpay.it/api/openid/authenticate?\nrequest_uri=urn:abc:def:123456789&\nresponse_type=code\n```\n\nIn questo caso la richiesta completa di autorizzazione viene composta con i seguenti parametri:\n\n```\nclient_id=12345-6789\nscope=invoice:read\nredirect_uri=https://ex.amp.le/redirect\nresponse_type=code\n```\n\nche sono sufficienti per effettuare la richiesta di autorizzazione. Se nella get non fosse stato passato oltre al `request_uri` anche il parametro `response_type` allora la richiesta di autorizzazione avrebbe restituito l'errore:\n`missing required parameter 'response_type'`\n\nQuesto endpoint non va a sostituire nessuna delle funzionalità dell'endpoint di autenticazione, ma da agli integratori maggiore possibilità di scegliere come meglio gestire i flussi autorizzativi.\n\n### Request e Request uri\n\nIl parametro `request` e `request_uri` sono mutualmente esclusivi e non possono essere utilizzati insieme.\nNel caso si voglia utilizzare una delle funzionalità del campo `request` è possibile inviare il parametro `request` all'endpoint di par. e poi utilizzare il parametro `request_uri` per effettuare la richiesta di autorizzazione.\n\nSe il campo `request` viene inviato all'endpoint di par è possibile omettere il resto dei campi per la richiesta di autorizzazione a patto che il parametro `request` contenga abbastanza informazioni per comporre la richiesta autorizzativa.\n\n\n# Estensioni\n\n\n\n\n## Estensioni OpenID\n\nDurante il flusso autorizzativo è possibile attivare delle estensioni del protocollo OpenID. La prima è già stata documentata e si tratta della estensione per richiedere l'accesso ai conti dell'utente.\n\n\n\n\n### Richiesta esplicita di accesso\n\nPer i client che volessero dare agli utenti delle proprie piattaforme un meccanismo di collegamento dell'account FlowPay con meno frizioni possibili è possibile\nutilizzare le seguenti estensioni OpenID. Per l'attivazione di tali estensioni è necessario richiedere esplicitamente questa funzionalità, nel caso non ci sia già una via diretta di comunicazione è possibile [contattarci direttamente](mailto:support@flowpay.it)\n\n### Comunicazione dei dati dell'azienda durante l'accesso\n\nL'estensione OpenID in questo caso permette di comunicare i dati dell'azienda e dell'utente per il quale il client sta richiedendo l'accesso.\nIn questo modo nel caso l'azienda che deve concedere l'autorizzazione non sia già registrata a FlowPay potrà registrarsi utilizzando i dati comunicati dal client.\n\nTale estensione prevede di inviare i dati dell'azienda o del consumer nel jwt del campo `request` della richiesta di autorizzazione.\nIn particolare il campo `claims` del jwt deve contenere i seguenti campi per richiedere l'attivazione di tale estensione nel processo autorizzativo.\n\n```json\n{\n ...\n \"claims\": {\n \"userinfo\": {\n \"business\": { //Si richiede che l'azienda che concede l'autorizzazione rispetti i seguenti requisiti\n \"value\": {\n \"name\": \"Nome Azienda\", //Denominazione dell'azienda\n \"vat_code\": \"00000000001\", //Vat code dell'azienda (senza prefisso)\n \"vat_country_id\": \"IT\", //Codice nazione dell'azienda\n \"certified_email\": \"azienda@pec.com\", //Email certificata dell'azienda\n //I seguenti campi sono opzionali\n \"email\": \"email@email.com\", //Email di contatto dell'azienda\n \"address\": \"via Roma, 1\" //Indirizzo dell'azienda\n },\n \"essential\": true\n },\n \"user\": {\n \"value\": {\n \"name\": \"Mario\",\n \"surname\": \"Rossi\",\n //I seguenti campi sono opzionali\n \"vat_code\": \"RSSMRA22A01D612M\", //Codice fiscale dell'utente\n \"email\": \"email@email.com\", //Email dell'utente\n \"phone_number\": \"+39 123 456 789\", //Numero di telefono dell'utente\n \"address\": \"via Roma, 1\" //Indirizzo dell'utente\n }\n }\n }\n }\n```\n\nPer l'onboarding degli utenti consumer, è necessario valorizzare il campo `tenant_type=consumer` nei parametri query del link oauth, inoltre è necessario aggiungere lo scope `consumer`.\nPer gli utenti consumer il jwt deve contenere:\n\n```json\n{\n ...\n \"claims\": {\n \"userinfo\": {\n \"consumer\": {\n \"value\": {\n \"name\": \"Mario\",\n \"surname\": \"Rossi\",\n \"vat_code\": \"RSSMRA22A01D612M\", //Codice fiscale dell'utente\n //I seguenti campi sono opzionali\n \"email\": \"email@email.com\", //Email dell'utente\n \"phone_number\": \"+39 123456789\", //Numero di telefono dell'utente\n \"address\": \"via Roma 1, Firenze, Italia\" //Indirizzo dell'utente\n },\n \"essential\": true\n }\n }\n }\n```\n\n\n\n## Account Statement\n\nPer casi d'uso dove la terza parte voglia che l'utente attesti l'accesso ad uno o più conti, è possibile utilizzare l'estensione di Account Statement.\nQuesta estensione consente di richiedere, in fase di autorizzazione, che l'utente abbia l'accesso ad uno o più conti indicati dalla terza parte.\n\nIn questo modo la terza parte è in grado di richiedere un servizio equivalente al check iban.\n\nL'account statement è un custom claim che quindi deve essere inviato all'interno del jwt del campo `request` della richiesta di autenticazione.\nIl formato del custom claim è\n\nNel caso di singolo conto:\n```\n{\n...\n \"claims\": {\n \"id_token\": {\n \"account_statement\": {\n \"value\": \"IT43M0300203280178858532758\",\n \"essential\": true\n }\n }\n }\n...\n}\n```\n\nNel caso di attestazione su più conti:\n```\n{\n...\n \"claims\": {\n \"id_token\": {\n \"account_statement\": {\n \"values\": [\"IT43M0300203280178858532758\", \"IT56E0300203280397756918554\"],\n \"essential\": true\n }\n }\n }\n...\n}\n```\n\nPer attivare questa estensione all'interno degli scope richiesti deve essere presente lo scope `openid`.\n\nLa risposta a questo tipo di richiesta di autorizzazione comprenderà un `id_token` firmato da FlowPay al cui interno sarà compreso un campo `account_statement` dove vengono inseriti gli account verificati dall'utente.\n\nEsempio:\n\n```\n{\n...\n \"account_statement\": [\n {\n \"bankID\": \"flowpay_bank\",\n \"iban\": \"IT43M0300203280178858532758\"\n },\n {\n \"bankID\": \"flowpay_bank\",\n \"iban\": \"IT56E0300203280397756918554\"\n }\n ],\n...\n}\n```\n\nBasterà verificare l'autenticità dell'`id_token` con i classici metodi di verifica tra cui verifica dell'autenticità della firma e valori `iat` e `exp` conformi.\n\nL'`id_token` viene restituito a seconda del tipo di `response_type` richiesto secondo le normali specifiche OpenID.\n\nIn particolare:\n* nel caso di risposta `id_token` l'id_token viene inviato direttamente durante la redirezione verso la url di risposta.\n* nel caso di risposta `code` l'id_token viene inviato in risposta all'ottenimento dell'access token in un ulteriore campo della risposta `id_token`.\n* nel caso di risposta `code id_token` viene inviato sia nei query params sia a seguito dell'ottenimento dell'access token.\n\n### Spiegazione ad alto livello\nRichiedendo questa estensione il processo di autorizzazione renderà esplicito che la terza parte sta richiedendo che l'utente attesti che tali conti gli appartengano.\nNel caso i conti inviati dalla terza parte siano già stati collegati precedentemente dall'utente sarà sufficiente che l'utente autorizzi a condividere tali informazioni alla terza parte.\nPer i conti invece non collegati all'utente, sarà necessario che prima colleghi tali conti a FlowPay (e quindi che provi l'effettivo possesso di essi) per poter soddisfare la richiesta della terza parte.\n\n\n# Webhooks\n\nIn fase sperimentale e soggetta a breaking changes.\n\n\n\n\n## Creazione di un webhook\n\nGli endpoint di webhook permettono di attivare uno o più webhook per un determinato evento, avendo gli scope necessari per farlo.\n\nAd esempio per ricevere la notifica per l'evento **nuovo pagamento per una fattura** è necessario avere gli scope `invoice:read` e `payment:read`\n\nPer ciascun tipo di webhook sono definiti gli scope necessari per la sua attivazione.\n\nL'endpoint di attivazione di un webhook in produzione non permette di specificare un webhook che non utilizzi https.\n\n\n\n## Eventi WebHook\n\nL'endpoint di webhook permette di ottenere la lista dei webhook che possono essere attivati, ma forniamo anche qua la lista degli stessi eventi.\n\n* **nuovo pagamento per una fattura**: Nel momento in cui viene autorizzato il pagamento di un termine di pagamento relativo ad una fattura.\n* **nuovo pagamento per un salario**: Nel momento in cui viene autorizzato il pagamento di un termine di pagamento relativo ad un salario.\n* **nuovo pagamento per una ricevuta**: Nel momento in cui viene autorizzato il pagamento di un termine di pagamento relativo ad una ricevuta.\n* **un pagamento cambia stato**: Nel momento in cui un pagamento cambia stato rispetto allo stato precedente.\n\n\n\n## Attivazione di un webhook\n\nPer ciascun webhook creato, deve essere anche impostato un periodo di interesse. L'interesse è il periodo di tempo per il quale il webhook rimane attivo.\nNon può superare il mese di tempo, ma è sempre possibile rinnovare il periodo di interesse.\n\nQuesto permette di non sovraccaricare il sistema FlowPay con webhook non più attivi.\n\n\n### Disattivazione di un webhook\n\nSi fa presente che un webhook può essere disattivato contattando il relativo endpoint, ma è anche disattivato nel caso di revoca del token utilizzato per la\ncreazione del webhook, sia che il token venga revocato dall'utente oppure dall'applicazione.\n\n\n\n### Revoca di un token utilizzato per un webhook\n\nNel caso un token utilizzato per creare un webhook venga revocato, i webhook collegati a tale token vengono eliminati. Nel momento in cui vengono eliminati viene effettuata una ultima chiamata verso la url del webhook per indicare la sua disattivazione.\nIl formato della chiamata è il seguente:\n\nmetodo: DELETE\n\nbody:\n\n| parametro | tipo | descrizione |\n| --------- | ---- | ----------- |\n| `event` | string | Nome dell'evento per il quale è stato disattivato il webhook |\n| `tenantID` | string | ID dell'azienda per il quale è stato disattivato il webhook |\n| `webhookID` | string | ID del webhook per il quale è stato disattivato il webhook |\n\n\n\n## Funzionamento di un WebHook\n\nI WebHook vengono eseguiti con chiamate POST al link ricevuto.\n\nIl content-type della richiesta è `application/json`.\n\nInoltre per permettere al client di verificare la validità della richiesta vengono inclusi due header\n* `X-FlowPay-Timestamp` che contiene il timestamp della richiesta come secondi dal 1/1/1970\n* `X-FlowPay-Raw-Signature` e `X-FlowPay-Der-Signature` che contengono la firma della richiesta.\n\nUn webhook viene considerato consegnato quando la risposta alla richiesta fornisce una risposta con status code 200.\n\nIn tutti gli altri casi viene considerato che il webhook abbia fallito ad essere consegnato.\n\nAttraverso questi due headers è possibile verificare che la richiesta sia stata inviata da FlowPay.\n\nI webhook per motivi di sicurezza hanno delle policy restrittive sui tempi di esecuzione.\n\nQuindi è necessario che l'endpoint contattato risponda entro un massimo di 10 secondi.\n\nInoltre in ambiente di produzione, il sistema FlowPay controlla il certificato del server al quale la richiesta viene inviata, quindi non è possibile utilizzare dei certificati self signed in quanto la loro verifica fallirà.\n\nIl webhook in caso di errore verrà riprovato automaticamente più volte fino ad massimo numero di tentativi ad intervalli di tempo casuali con un backup esponenziale\n\n\n## Scadenza di un webhook\n\nUn webhook come già specificato, ha una scadenza, dopo che il webhook è scaduto, non verrà più contattato dal sistema FlowPay.\nPer evitare discontinuità di servizio, si invita ad implementare politiche di refresh del webhook.\n\nPer aiutare in questo compito, il sistema FlowPay effettua esso stesso una chiamata ad ogni webhook la cui data di scadenza sia inferiore ad un giorno.\n\nLa chiamata a differenza della richiesta normale, è una chiamata GET. Senza body. Viene firmata come le altre richieste, in questo caso la stringa che genera la firma è:\n`timestamp + '.'`\n\nSe la risposta che FlowPay si aspetta è una risposta con status code 201 (created).\nCon content-type `application/json`:\n\n| parametro | tipo | descrizione |\n| -------- | ---- | ----------- |\n| `expiresAt` | `string` | nuova data di scadenza del webhook in formato ISO 8601 (yyyy-MM-ddTHH:mm:SSZ), (MAX 1 mese rispetto alla chiamata) |\n\nIn questo caso il sistema FlowPay aggiorna la data di scadenza del webhook.\n\nCon qualunque altro tipo di risposta il sistema FlowPay non effettuerà alcuna azione ne applicherà nessun tipo di fallback.\n\n\n\n## Signature\n\nCome già menzionato per verificare la correttezza della richiesta effettuata sul webhook viene inclusa una firma.\n\nLa firma è composta utilizzando l'algoritmo ECDSA con SHA256 come funzione di hashing.\nLa firma in rappresentazione raw (r || s) è poi codificata in base64.\nEd inserita nel header `X-FlowPay-Raw-Signature`.\nLa firma in rappresentazione der è poi codificata in base64.\nEd inserita nell header `X-FlowPay-Der-Signature`.\n\nQuesti due header identificano la stessa identica firma, ma a seconda di linguaggi e librerie criptografiche utilizzate potrebbe essere necessario utilizzare l'una o l'altra rappresentazione.\n(Ad esempio `openssl` da linea di comando ha bisogno della rappresentazione der, la libreria `ecdsa` di python invece permette di convertire da uno all'altro formato, e permette di verificare in formato raw).\nPer aiutare nell'integrazione abbiamo deciso di includere entrambi i formati\n\nLa firma è calcolata come segue:\nil timestamp presente nell'header `X-FlowPay-Timestamp`.\nil carattere '.'\nil body della richiesta.\n\nQuindi ad esempio se il timestamp fosse `1564984123` e il body è `{\"foo\":\"bar\"}` allora la firma sarà calcolata a partire da `1564984123.{\"foo\":\"bar\"}`.\n\nSe la chiave privata fosse la seguente:\n```\nREDACTED_PRIVATE_KEY_EXAMPLE\n```\n\nLa firma ottenuta sarà:\n```\n62yjf/WdIsIXrKZWtgO0EMgaJdGIpT2/8YipH5XkhcVV3B3juNhq8r/UaBWva/GOVcE2vKUmTYp/I1F98lb1DA==\n```\n\n\n## Chiavi\n\nLe chiavi pubbliche utilizzate da FlowPay per firmare le richieste sono le seguenti:\n\n### Sandbox\n```\n-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEV8qSJfTqHfOqy3UI6xVGNFjpYpQV \nBBFZUXxrttYkxNrCcpn2MEKJ4lM50xDRdpdnoi3ORgW3SUCmTaMA4dNUoA==\n-----END PUBLIC KEY-----\n```\n\n### Production\n```\n-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAElKC85kYFZdNyaKeCWBwdfOt+kWNi\n/3jjVPihZgUTvwthdLIONHziSWrNlx4i0A5luWA0ZRbGbUggea8INtlNgA==\n-----END PUBLIC KEY-----\n```\n\n\n## Eventi in dettaglio\n\nPer ciascun evento viene definito in dettaglio i campi del body della richiesta.\nInoltre ciascun corpo comprende sempre:\n\n* `event`: identificativo dell'evento.\n* `tenantID`: l'identificativo dell'azienda interessata dall'evento.\n* `eventID`: Identificativo di idempotenza per la richiesta.\n* `payload`: il payload della richiesta.\n* `expiresAt`: quando il webhook contattato scade, questo campo è da intendersi come un reminder per permettere di riattivare il webhook. Il suo formato è una stringa che rappresenta una data in formato ISO8601 `YYYY-MM-DDTHH:mm:SSZ`.\n* `eventCreatedAt`: indica il momento di creazione dello specifico evento. Il suo formato è una stringa che rappresenta una data in formato ISO8601 `YYYY-MM-DDTHH:mm:SSZ`.\n\n### Token Revocato\n\n\nInvocato se uno qualunque dei token ottenuti dal client viene revocato.\n\nnome evento: `token_revoked`\n\nscope client credentials richiesti: qualunque token valido\n\nbody:\n\n| campo | formato | descrizione |\n| ----- | ------- | ----------- |\n| `tenantID` | `string` | Identificativo dell'azienda per il quale è stato revocato il token |\n| `tokenID` | `string` | Identificativo del token revocato |\n| `revokedAt` | `string` | Data e ora di revoca del token. (formato ISO8601 yyyy-MM-ddTHH:mm:SSZ) |\n\n### Nuovo pagamento per una fattura\n\nnome evento: `invoice_payment_authorized`\n\nscope authorization code richiesti: `invoice:read & payment:read`\n\nbody:\n\n| campo | formato | descrizione |\n| ---- | ---- | ---- |\n| `identifier` | `string` | Identificativo del pagamento |\n| `fingerprint` | `string` | Identificativo della fattura. |\n| `termID` | `string` | Identificativo del termine di pagamento all'interno della fattura. |\n| `creditor` | `string` | Codice fiscale del creditore (vat code in quanto si fa riferimento ad un documento B2B). |\n| `debtor` | `string` | Codice fiscale del debitore (vat code in quanto si fa riferimento ad un documento B2B). |\n| `amount` | `double` | Importo del pagamento. |\n| `status` | `string` | Stato del pagamento. |\n| `createdAt` | `string` | Data di creazione del pagamento. (formato ISO8601 yyyy-MM-ddTHH:mm:SSZ) |\n\n### Nuovo pagamento per un checkout creato dal client\n\nQuesto webhook viene eseguito quando un checkout creato dal client viene pagato.\n\nnome evento: `checkout_payment_authorized`\n\nscope client credential richiesti: `payment:read`\n\nbody:\n\n| campo | formato | descrizione |\n| ---- | ---- | ---- |\n| `type` | `string` | Tipo del documento (e.g. `bill`, `invoice`) |\n| `identifier` | `string` | Identificativo del pagamento (formato uuid) |\n| `tenantID` | `string` | Identificativo del tenant a cui si riferisce il pagamento, in particolare è il tenant che per il quale il client ha creato il checkout |\n| `fingerprint` | `string` | Identificativo del documento |\n| `termID` | `string` | Identificativo del termine di pagamento all'interno del documento (formato uuid) |\n| `creditor` | `string` | identificativo del creditore (vat code quando si fa riferimento ad un documento B2B) |\n| `debtor` | `string` | identificativo del debitore (vat code quando si fa riferimento ad un documento B2B, codice fiscale nel caso di documento B2C) |\n| `status` | `string` | Stato del pagamento |\n| `createdAt` | `string` | Data di creazione del pagamento. (formato ISO8601 yyyy-MM-ddTHH:mm:SSZ) |\n\n### Un pagamento per un checkout creato dal client ha cambiato stato\n\nnome evento: `checkout_payment_status_changed`\n\nscope client credential richiesti: `payment:read`\n\nbody:\n\n| campo | formato | descrizione |\n| ---- | ---- | ---- |\n| `type` | `string` | Tipo del documento (e.g. `bill`, `invoice`) |\n| `identifier` | `string` | Identificativo del pagamento (formato uuid) |\n| `tenantID` | `string` | Identificativo del tenant a cui si riferisce il pagamento, in particolare è il tenant che per il quale il client ha creato il checkout |\n| `fingerprint` | `string` | Identificativo del documento |\n| `termID` | `string` | Identificativo del termine di pagamento all'interno del documento (formato uuid) |\n| `creditor` | `string` | identificativo del creditore (vat code quando si fa riferimento ad un documento B2B) |\n| `debtor` | `string` | identificativo del debitore (vat code quando si fa riferimento ad un documento B2B, codice fiscale nel caso di documento B2C) |\n| `createdAt` | `string` | Data di creazione del pagamento. (formato ISO8601 yyyy-MM-ddTHH:mm:SSZ) |\n| `previousState` | `string` | Stato precedente del pagamento (opzionale nel caso non fosse presente uno stato precedente) |\n| `currentState` | `string` | Stato attuale del pagamento |\n\n\n### Nuovo pagamento per una ricevuta\n\nnome evento: `bill_payment_authorized`\n\nscope authorization code richiesti: `bill:write & payment:read`\nscope client credential richiesti: `bill`\n\nbody:\n\n| campo | formato | descrizione |\n| ---- | ---- | ---- |\n| `identifier` | `string` | Identificativo del pagamento |\n| `fingerprint` | `string` | Identificativo della fattura. |\n| `termID` | `string` | Identificativo del termine di pagamento all'interno della fattura. |\n| `creditor` | `string` | Codice fiscale del creditore (vat code o codice fiscale in quanto si fa riferimento ad un documento B2C). |\n| `debtor` | `string` | Codice fiscale del debitore (vat code o codice fiscale in quanto si fa riferimento ad un documento B2C). |\n| `amount` | `double` | Importo del pagamento. |\n| `status` | `string` | Stato del pagamento. |\n| `createdAt` | `string` | Data di creazione del pagamento. (formato ISO8601 yyyy-MM-ddTHH:mm:SSZ) |\n\n### Un pagamento per una fattura ha cambiato stato\n\nnome evento: `invoice_payment_status_changed`\n\nscope authorization code richiesti: `invoice:read payment:read`\n\nbody:\n\n| campo | formato | descrizione |\n| ---- | ---- | ---- |\n| `identifier` | `string` | Identificativo del pagamento |\n| `fingerprint` | `string` | Identificativo della fattura. |\n| `termID` | `string` | Identificativo del termine di pagamento all'interno della fattura. |\n| `creditor` | `string` | Codice fiscale del creditore (vat code in quanto si fa riferimento ad un documento B2B). |\n| `debtor` | `string` | Codice fiscale del debitore (vat code in quanto si fa riferimento ad un documento B2B). |\n| `amount` | `double` | Importo del pagamento. |\n| `status` | `string` | Stato del pagamento. |\n| `createdAt` | `string` | Data di creazione del pagamento. (formato ISO8601 yyyy-MM-ddTHH:mm:SSZ) |\n| `previousState` | `string or null` | Stato precedente del pagamento. (nullo nel caso il pagamento sia stato appena creato) |\n| `currentState` | `string` | Stato corrente del pagamento. |\n\n### Un pagamento per una ricevuta ha cambiato stato\n\nnome evento: `bill_payment_status_changed`\n\nscope authorization code richiesti: `bill:write payment:read`\nscope client credential richiesti: `bill`\n\nbody:\n\n| campo | formato | descrizione |\n| ---- | ---- | ---- |\n| `identifier` | `string` | Identificativo del pagamento |\n| `fingerprint` | `string` | Identificativo della fattura. |\n| `termID` | `string` | Identificativo del termine di pagamento all'interno della fattura. |\n| `creditor` | `string` | Codice fiscale del creditore (vat code o codice fiscale in quanto si fa riferimento ad un documento B2C). |\n| `debtor` | `string` | Codice fiscale del debitore (vat code o codice fiscale in quanto si fa riferimento ad un documento B2C). |\n| `amount` | `double` | Importo del pagamento. |\n| `status` | `string` | Stato del pagamento. |\n| `createdAt` | `string` | Data di creazione del pagamento. (formato ISO8601 yyyy-MM-ddTHH:mm:SSZ) |\n| `previousState` | `string or null` | Stato precedente del pagamento. (nullo nel caso il pagamento sia stato appena creato) |\n| `currentState` | `string` | Stato corrente del pagamento. |\n\n\n### Un consenso su una banca sta per scadere\n\nnome evento: `consent_expiring`\n\nscope authorization code richiesti: nessuno, ma il token deve essere stato ottenuto secondo il flusso per l'accesso ai conti dell'utente\nscope client credential richiesti: `account:read`\n\nbody:\n\n| campo | formato | descrizione |\n| ---- | ---- | ---- |\n| `bankID` | `string` | Identificativo della banca. all'interno di flowpay |\n| `expiresAt` | `date` | Data di scadenza del consenso. (formato ISO8601 yyyy-MM-ddTHH:mm:SSZ) |\n\nQuesto evento viene inviato circa 7 giorni prima della scadenza normale di un consenso.\n\n### Un consenso su una banca è scaduto\n\nnome evento: `consent_expired`\n\nscope authorization code richiesti: nessuno, ma il token deve essere stato ottenuto secondo il flusso per l'accesso ai conti dell'utente\nscope client credential richiesti: `account:read`\n\nbody:\n\n| campo | formato | descrizione |\n| ---- | ---- | ---- |\n| `bankID` | `string` | Identificativo della banca. all'interno di flowpay |\n| `expiresAt` | `date` | Data di scadenza del consenso. (formato ISO8601 yyyy-MM-ddTHH:mm:SSZ) |\n\n\nQuesto evento viene inviato quando un consenso scade. Questo può avvenire all scadenza normale di un consenso ricorrente: 90 giorni dopo la sua creazione.\nOppure in seguito alla revoca del consenso da parte dell'utente che in autonomia può accedere alla propria banca e richiedere di revocare il consenso.\n\n### Eventi relativi ad un flusso di checkout\n\nscope client credential richiesti: `invoice:read bill`\n\nbody:\n\n| campo | formato | descrizione |\n| ---- | ---- | ---- |\n| `code` | `string` | Codice del checkout |\n| `fingerprint` | `string` | Identificativo dell'documento al quale fa riferimento il checkout. |\n| `type` | `enum('invoice', 'bill')` | Tipo di documento al quale fa riferimento il checkout. |\n| `createdAt` | `string` | Data di creazione del checkout. (formato ISO8601 yyyy-MM-ddTHH:mm:SSZ) |\n| `previous` | `PreviousEvent` | Informazioni sullo stato precedente del checkout. (nullo se questo è il primo evento per questo checkout) |\n\nPreviousEvent:\n\n\n| campo | formato | descrizione |\n| ---- | ---- | ---- |\n| `name` | `enum('checkout_opened', 'checkout_closed', 'checkout_sca_opened', 'checkout_ok', 'checkout_ko')` | Nome dell'evento precedente. |\n| `createdAt` | `string` | Data di registrazione dell'evento precedente. (formato ISO8601 yyyy-MM-ddTHH:mm:SSZ) |\n\n* nome evento: `checkout_opened`\n * descrizione: Indica che un link di checkout creato dall'applicazione è stato aperto.\n* nome evento: `checkout_closed`\n * descrizione: Indica che la finestra di checkout è stata abbandonata.\n* nome evento: `checkout_sca_opened`\n * descrizione: Indica che il checkout è stato rediretto all'autorizzazione esterna al sistema FlowPay.\n* nome evento: `checkout_ok`\n * descrizione: Indica che l'autorizzazione esterna è stata effettuata con successo.\n* nome evento: `checkout_ko`\n * descrizione: Indica che l'autorizzazione esterna non è stata effettuata con successo.\n\nQuesti eventi possono essere utilizzati per monitorare lo stato di un checkout. E il flusso che l'utente sta seguendo.\nGli eventi possono essere inviati secondo uno specifico ordine.\nIl ciclo di vita di tali eventi è il seguente:\n\n### Evento ricevuto: `checkout_opened`\nL'utente chiude il checkout: -> `checkout_closed`\nL'utente viene redirezionato verso l'autorizzazione esterna: -> `checkout_sca_opened`\n\n### Evento ricevuto: `checkout_closed`\nL'utente ha abbandonato la finestra di checkout\n\n### Evento ricevuto: `checkout_sca_opened`\nL'utente si trova nella pagina di autorizzazione esterna.\nNel caso l'utente abbandoni la pagina in questo momento non abbiamo modo di monitorare la sua azione e quindi non verrà scatenato l'evento di `checkout_closed`\nRiceviamo un redirect dall'autorizzazione esterna a seguito dell'autorizzazione dell'utente -> Controlliamo l'esito dell'autorizzazione -> `checkout_ok` o `checkout_ko`\n\n### Evento ricevuto: `checkout_ok`\nL'utente ha autorizzato il checkout e l'utente adesso viene redirezionato. Nel caso il checkout comprenda okRedirect, l'utente viene redirezionato fuori dal checkout FlowPay.\nNel caso il checkout non comprenda un okRedirect l'utente viene nuovamente redirezionato alla pagina di checkout -> `checkout_opened`, l'utente non sarà in grado di riaprire la pagina di autorizzazione se tutti i termini di pagamento del checkout sono stati autorizzati.\n\n### Evento ricevuto: `checkout_ko`\nL'utente ha negato l'autorizzazione al pagamento. Nel caso il checkout comprenda koRedirect, l'utente viene redirezionato fuori dal checkout FlowPay.\nNel caso il checkout non comprenda un koRedirect l'utente viene nuovamente redirezionato alla pagina di checkout -> `checkout_opened`, l'utente può tentare nuovamente di autorizzare il pagamento.\n\n\n## Testare un WebHook\n\nIn ambiente solo di sandbox, è possibile testare un WebHook inviando una richiesta POST all'endpoint\n\n/:tenantID/webhooks/trigger\n\n\nIl body della richiesta deve includere il campo webHookID che indica quale webHook deve essere triggherato,\ninoltre accetta qualunque parametro che verrebbe inviato nella richiesta di webhook. I parametri passati saranno inviati al webhook così come sono.\nPer quelli non ricevuti il sistema provvederà a generarli in maniera casuale.\n\nQuesto tipo di trigger non attiva meccanismi di fallback nel caso il webhook non risponda, ma registrerà l'eventuale errore.\n\nPoiché la chiamata dal webhook viene eseguita dal sistema flowpay tale url deve essere contattabile dai nostri server. Quindi evitate di utilizzare localhost o simili in quanto non funzioneranno.\nPer testare in locale la chiamata si consiglia l'utilizzo di un proxy. Ad esempio [ngrok](https://ngrok.com/).\n\n# TenantID\n\n## Premessa\nIl tenantID è necessario per quasi tutti gli endpoint della piattaforma. Questo tenantID corrisponde all'id univoco fornito all'azienda dell'utente.\nQuesto è necessario in quanto FlowPay implementa un meccanismo di multi business dove lo stesso utente potrebbe aver accesso a più aziende contemporaneamente.\n\nPer ottenere tale valore una volta ottenuto un token autorizzativo è necessario invocare l'endpoint di token introspection si rimanda al suo [RFC](https://datatracker.ietf.org/doc/html/rfc7662)\n\nla cui rotta è\n```\nhttps://core.sandbox-new.flowpay.it/api/openid/token/introspection\n```\n\ncon content-type `application/x-www-form-urlencoded`\n\nparametro `token` valore il token per il quale si vuole fare introspezione\n\nNon è necessaria autenticazione per invocare tale endpoint e ritorna informazioni sul token inviato nella richiesta, si fornisce un esempio di risposta\n```json\n{\n \"client_id\": \"EC8D0335-186A-4C11-9BAA-15330FB34637\",\n \"scope\": [\n \"invoice:read\"\n ],\n \"exp\": 1627908504.210332,\n \"active\": true,\n \"iss\": \"https://core.sandbox-new.flowpay.it/api/openid\",\n \"aud\": \"EC8D0335-186A-4C11-9BAA-15330FB34637\",\n \"jti\": \"7FD9003C-C8B8-481D-AC9C-015CE6E56733\",\n \"business_id\": \"24EDB5F1-9C5D-498D-83C1-03B3DD7023BD\",\n \"token_type\": \"Bearer\",\n \"role\": 100,\n \"iat\": 1627907604.2105079,\n \"sub\": \"2E3F6F08-AC92-4924-8337-0CB82B6444BF\"\n}\n```\nil campo `business_id` corrisponde al tenantID collegato a questo token\n\n# Third party and user API endpoint.\n\n## Pagination\nIn every request which returns a list of object it accepts in the query the following parameters to paginate the results\n\n| name | type | default | description |\n|---|---|---|---|\n| `per` | `integer` | 15 | Results per page |\n| `page` | `integer` | 0 | Page number |\n", "termsOfService": "https://www.flowpay.it/tos", "title": "FlowPay", "version": "1.0.0" }, "openapi": "3.0.3", "paths": { "/ais": { "post": { "description": "Inizializza una sessione che genera un link di SCA per ottenere informazioni degli account con uso singolo del consenso.", "parameters": [], "requestBody": { "content": { "application/vnd.api+json; charset=utf-8": { "example": { "consentType": null, "iban": "IT59Q0300203280162876621571", "name": null, "nokRedirect": "https://www.google.com/search?q=nok", "okRedirect": "https://www.google.com/search?q=ok", "surname": null, "vatCode": null }, "schema": { "$ref": "#/components/schemas/CreateAisSessionRequest" } } }, "required": true }, "responses": { "201": { "content": { "application/json; charset=utf-8": { "example": { "aisSessionID": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "url": "hello" }, "schema": { "$ref": "#/components/schemas/AIS-Session" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyClientCredential": [ "account:read" ] } ], "summary": "", "tags": [ "AIS Service" ] } }, "/ais/check-iban/{iban}/{vatCode}": { "get": { "description": "Verifica se l'iban è associato a quel vatCode", "parameters": [ { "description": "IBAN in formato europeo", "example": "IT42Z0335300300000078000002", "in": "path", "name": "iban", "required": true, "schema": { "example": "IT42Z0335300300000078000002", "type": "string" } }, { "description": "Partita IVA dell'azienda in formato europeo", "example": "06968160488", "in": "path", "name": "vatCode", "required": true, "schema": { "example": "06968160488", "type": "string" } } ], "responses": { "200": { "content": { "application/json; charset=utf-8": { "example": { "result": "valid" }, "schema": { "$ref": "#/components/schemas/check-iban" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyClientCredential": [ "account:read" ] } ], "summary": "", "tags": [ "AIS Service" ] } }, "/ais/{aisSessionID}": { "get": { "description": "Ottiene lo stato attuale e valori richiesti di una sessione inizializzata.", "parameters": [ { "description": "Id univoco per ottenere le informazioni ottenuti in async dalla AIS service", "example": "E288220F-AB87-4736-8E2F-BC1863DFBBAB", "in": "path", "name": "aisSessionID", "required": true, "schema": { "example": "E288220F-AB87-4736-8E2F-BC1863DFBBAB", "format": "uuid", "type": "string" } } ], "responses": { "200": { "content": { "application/json; charset=utf-8": { "example": { "accountInformations": null, "status": "pending" }, "schema": { "$ref": "#/components/schemas/AIS-Session" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyClientCredential": [ "account:read" ] } ], "summary": "", "tags": [ "AIS Service" ] } }, "/banks": { "get": { "description": "", "parameters": [], "responses": { "200": { "content": { "application/json; charset=utf-8": { "example": [ { "countryID": "IT", "details": null, "email": "example@example.com", "flowpayID": null, "icon": "hello", "name": "hello", "nationalCode": null, "nestedIn": null, "phoneNumber": "hello" } ], "schema": { "$ref": "#/components/schemas/Banks" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [], "summary": "", "tags": [ "Banche" ] } }, "/banks/{flowpayID}": { "get": { "description": "", "parameters": [ { "description": "ID FlowPay della banca all'interno del Bank Gateway", "example": "banca_flowpay_di_campi_bisenzio", "in": "path", "name": "flowpayID", "required": true, "schema": { "example": "banca_flowpay_di_campi_bisenzio", "type": "string" } } ], "responses": { "200": { "content": { "application/json; charset=utf-8": { "example": { "countryID": "IT", "details": null, "email": "example@example.com", "flowpayID": null, "icon": "hello", "name": "hello", "nationalCode": null, "nestedIn": null, "phoneNumber": "hello" }, "schema": { "$ref": "#/components/schemas/Bank" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [], "summary": "", "tags": [ "Banche" ] } }, "/pagopa": { "get": { "description": "Recupera la lista dei documenti di tipo pagoPA", "parameters": [ { "description": "Codice fiscale dell'ente creditore (vat code in caso di azienda, codice fiscale in caso di privato)", "in": "query", "name": "paVatCode", "required": false, "schema": { "type": "string" } }, { "description": "Numero avviso PagoPA", "in": "query", "name": "noticeNumber", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "example": [ { "ec": "8008008008", "fingerprint": "aaa9994db24ee81c2831363a24bab2ddc56ae36d33567146c4e924d238927ada", "noticeNumber": "1234567890123456", "remittance": "Donazione" }, { "ec": "9000110009", "fingerprint": "ff894db24ee811c2831363a24bab20bc56ae366633567146c4e924d238927ede", "noticeNumber": "1234567890123457", "remittance": "Rinnovo" } ], "schema": { "items": { "$ref": "#/components/schemas/pagoPAFieldLess" }, "type": "array" } } }, "description": "Pagopa list retrieved" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" } }, "security": [ { "ThirdPartyClientCredential": [ "pagopa" ] } ], "summary": "pagoPA list", "tags": [ "pagoPA" ] }, "post": { "description": "Permette di caricare un avviso di pagamento pagoPA", "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "oneOf": [ { "type": "object", "properties": { "debtorMail": { "description": "Debtor email address", "example": "example@example.com", "format": "email", "type": "string" }, "debtorVatCode": { "description": "Codice fiscale del debitore (vat code in caso di azienda, codice fiscale in caso di privato)", "example": "string", "type": "string" }, "noticeNumber": { "description": "Notice number emitted by pagoPA", "example": "1234567890123456", "pattern": "^d{11}", "type": "string" }, "paVatCode": { "description": "P.iva della pubblica amministrazione", "example": "12345678901", "pattern": "^d{11}", "type": "string" } }, "required": [ "noticeNumber", "paVatCode" ] }, { "type": "object", "properties": { "debtorMail": { "description": "Debtor email address", "example": "example@example.com", "format": "email", "type": "string" }, "debtorVatCode": { "description": "Codice fiscale del debitore (vat code in caso di azienda, codice fiscale in caso di privato)", "example": "string", "type": "string" }, "vehicleType": { "description": "Vehicle type for car tax payment. Can be 'auto', 'moto', or 'rimorchio'.", "type": "string", "enum": [ "auto", "moto", "rimorchio" ] }, "licensePlate": { "description": "License plate for car tax payment", "type": "string" } }, "required": [ "vehicleType", "licensePlate" ] } ] } } }, "description": "Pagopa payment request" }, "responses": { "201": { "content": { "application/json": { "example": { "ec": "8008008008", "fingerprint": "aaa9994db24ee81c2831363a24bab2ddc56ae36d33567146c4e924d238927ada", "noticeNumber": "1234567890123456", "remittance": "Donazione", "status": "PAYABLE", "amount": 1, "date": "2099-12-30T23:00:00Z" }, "schema": { "$ref": "#/components/schemas/pagoPA" } } }, "description": "L'avviso non è presente nella nostra piattaforma, perciò viene effettuata una chiamata al nodo PagoPA per caricarla." }, "200": { "content": { "application/json": { "example": { "ec": "8008008008", "fingerprint": "aaa9994db24ee81c2831363a24bab2ddc56ae36d33567146c4e924d238927ada", "noticeNumber": "1234567890123456", "remittance": "Donazione" }, "schema": { "$ref": "#/components/schemas/pagoPAFieldLess" } } }, "description": "L'avviso risulta già caricato nella nostra piattaforma. Non viene effettuata alcuna chiamata al nodo PagoPA." }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" } }, "security": [ { "ThirdPartyClientCredential": [ "pagopa" ] } ], "summary": "pagoPA payment", "tags": [ "pagoPA" ] } }, "/pagopa/{fingerprint}": { "get": { "description": "Recupera il documento pagoPA usando la fingerprint", "parameters": [ { "in": "path", "name": "fingerprint", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "example": { "ec": "8008008008", "fee": 0, "fingerprint": "aaa9994db24ee81c2831363a24bab2ddc56ae36d33567146c4e924d238927ada", "noticeNumber": "1234567890123456", "remittance": "Donazione" }, "schema": { "$ref": "#/components/schemas/pagoPA" } } }, "description": "L'avviso recuperato dalla nostra piattaforma. Viene contatto il nodo PagoPA, per verifica." }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" } }, "security": [ { "ThirdPartyClientCredential": [ "pagopa" ] } ], "summary": "pagoPA document", "tags": [ "pagoPA" ] }, "patch": { "description": "Modifica la mail del debitore di un documento pagoPA", "parameters": [ { "in": "path", "name": "fingerprint", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "debtorMail": { "description": "Debtor email address", "example": "example@example.com", "format": "email", "type": "string" } }, "required": [ "debtorMail" ] } } }, "description": "edit Pagopa payment request" }, "responses": { "200": { "content": {}, "description": "Documento pagoPA modificato correttamente" }, "400": { "content": {}, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "403": { "content": {}, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": {}, "description": "La richiesta fa riferimento ad una risorsa inesistente" } }, "security": [ { "ThirdPartyClientCredential": [ "pagopa" ] } ], "summary": "edit pagoPA document", "tags": [ "pagoPA" ] } }, "/pagopa/receipts/:id": { "get": { "description": "Ottiene il pdf della ricevuta di pagamento di un documento pagoPA", "parameters": [ { "in": "path", "description": "Identificativo univoco del documento PagoPA su flowpay", "name": "id", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "content": { "application/pdf": { "schema": { "type": "string", "format": "binary" } } }, "description": "Pagopa document" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" } }, "security": [ { "ThirdPartyClientCredential": [ "pagopa" ] } ], "summary": "pagoPA receipts", "tags": [ "pagoPA" ] } }, "/webhooks": { "get": { "description": "Ottiene la lista dei webhook attivi registrati dal client per tutti i suoi tenant.", "parameters": [], "responses": { "200": { "content": { "application/json; charset=utf-8": { "example": [ { "events": { "hello": [ "hello" ] }, "id": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "url": "hello" } ], "schema": { "$ref": "#/components/schemas/WebHooks" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyClientCredential": [] } ], "summary": "", "tags": [ "Webhook" ] } }, "/webhooks/types": { "get": { "description": "Ottiene la lista dei webhook disponibili", "parameters": [], "responses": { "200": { "content": { "application/json; charset=utf-8": { "example": [ { "eventDescription": "hello", "eventName": "hello", "necessaryAuthorizationCodeScope": null, "necessaryClientCredentialScope": null, "needsAccounts": false } ], "schema": { "$ref": "#/components/schemas/WebHookTypes" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [], "summary": "", "tags": [ "Webhook" ] } }, "/webhooks/{id}": { "delete": { "description": "Elimina un webhook oppure elimina degli eventi associati ad un webhook.", "parameters": [ { "description": "identificativo del webhook", "example": "0C87AA6A-FDED-41A8-97A8-FCB5231B0B0C", "in": "path", "name": "id", "required": true, "schema": { "example": "0C87AA6A-FDED-41A8-97A8-FCB5231B0B0C", "format": "uuid", "type": "string" } } ], "requestBody": { "content": { "application/vnd.api+json; charset=utf-8": { "example": { "events": null }, "schema": { "$ref": "#/components/schemas/WebHookDeleteRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json; charset=utf-8": {} }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyClientCredential": [] } ], "summary": "", "tags": [ "Webhook" ] }, "get": { "description": "Ottiene il dettaglio di un webhook", "parameters": [ { "description": "identificativo del webhook", "example": "0C87AA6A-FDED-41A8-97A8-FCB5231B0B0C", "in": "path", "name": "id", "required": true, "schema": { "example": "0C87AA6A-FDED-41A8-97A8-FCB5231B0B0C", "format": "uuid", "type": "string" } } ], "responses": { "200": { "content": { "application/json; charset=utf-8": { "example": { "createdAt": "2020-03-03T17:32:28Z", "events": { "hello": [ { "eventName": "hello", "lastCalledAt": null, "lastError": null, "lastErroredAt": null, "numberOfErroredCalls": 12345678, "numberOfSuccessfulCalls": 12345678 } ] }, "expiresAt": "2020-03-03T17:32:28Z", "id": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "url": "hello" }, "schema": { "$ref": "#/components/schemas/WebHookDetail" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyClientCredential": [] } ], "summary": "", "tags": [ "Webhook" ] } }, "/webhooks/{id}/renew": { "put": { "description": "Rinnova un webhook per altri 7 giorni rispetto al momento della chiamata", "parameters": [ { "description": "identificativo del webhook", "example": "0C87AA6A-FDED-41A8-97A8-FCB5231B0B0C", "in": "path", "name": "id", "required": true, "schema": { "example": "0C87AA6A-FDED-41A8-97A8-FCB5231B0B0C", "format": "uuid", "type": "string" } } ], "responses": { "201": { "content": { "application/json; charset=utf-8": { "example": { "createdAt": "2020-03-03T17:32:28Z", "events": { "hello": [ { "eventName": "hello", "lastCalledAt": null, "lastError": null, "lastErroredAt": null, "numberOfErroredCalls": 12345678, "numberOfSuccessfulCalls": 12345678 } ] }, "expiresAt": "2020-03-03T17:32:28Z", "id": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "url": "hello" }, "schema": { "$ref": "#/components/schemas/WebHookDetail" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyClientCredential": [] } ], "summary": "", "tags": [ "Webhook" ] } }, "/{tenantID}/accounts": { "get": { "description": "Ottiene la lista di account relative all'azienda identificata da `tenantID`", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "F6E7643D-C4CF-4E1C-9FB3-D05E231E165C", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "F6E7643D-C4CF-4E1C-9FB3-D05E231E165C", "format": "uuid", "type": "string" } } ], "responses": { "200": { "content": { "application/json; charset=utf-8": { "example": [ { "additionalData": null, "bankID": "hello", "currency": "hello", "iban": "hello", "id": null, "label": null, "userIDs": [ "cb15b52a-91db-41ed-81a0-764a0cc4795d" ], "vatCode": "hello" } ], "schema": { "$ref": "#/components/schemas/Accounts" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyClientCredential": [ "account:read" ] }, { "ThirdPartyOauth": [ "account:read" ] } ], "summary": "", "tags": [ "Conti" ] } }, "/{tenantID}/consents": { "get": { "description": "Ottiene la lista di consensi che l'utente ha fornito", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "items": { "$ref": "#/components/schemas/ConsentDTO" }, "type": "array" } } }, "description": "Bulk payments list" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" } }, "security": [ { "ThirdPartyClientCredential": [] }, { "ThirdPartyAuthorizationCode": [] } ], "tags": [ "Consent" ] }, "post": { "description": "Il flusso previsto per questa chiamata prevede che la terza parte invii l'id della banca che l'utente desidera collegare o per la quale intende rinnovare il consenso.\n\nViene restituito un link valido una singola volta.\n\nL'utente deve essere redirezionato verso il link, l'utente deve effettuare una SCA presso la propria banca e a seconda del successo o del fallimento di tale operazione viene in seguito redirezionato verso i link di ok o di nok che sono stati forniti nella richiesta.", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "bankID": { "type": "string", "description": "id della banca da collegare, corrisponde al flowpayID ottenibile attraverso la relativa chiamata verso le api GET /banks." }, "okRedirect": { "type": "string", "description": "url di redirect in caso di flusso di collegamento conto completato con successo" }, "nokRedirect": { "type": "string", "description": "url di redirect in caso di flusso di collegamento completato con fallimento" } }, "required": [ "bankID", "okRedirect", "nokRedirect" ] } } } }, "responses": { "200": { "description": "risposta di successo.", "content": { "application/json": { "schema": { "type": "object", "properties": { "url": { "type": "string", "description": "url dove redirezionare l'utente per iniziare il processo di collegamento account" } }, "required": [ "url" ] } } } }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" } }, "security": [ { "ThirdPartyClientCredential": [] }, { "ThirdPartyAuthorizationCode": [] } ], "tags": [ "Consent" ] } }, "/{tenantID}/balances": { "get": { "description": "Ottiene la lista di tutti i punti saldo per ogni IBAN dell'azienda", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } } ], "responses": { "200": { "content": { "application/json; charset=utf-8": { "example": { "IT27H0300203280878355659528": { "EUR": { "available": { "balance": 123.45, "balanceType": "interimAvailable", "currency": "EUR", "date": 742596848.647101, "iban": "IT27H0300203280878355659528" } } }, "IT59Q0300203280162876621571": { "EUR": { "closingBooked": { "balance": 54.32, "balanceType": "closingBooked", "currency": "EUR", "date": 742596848.647087, "iban": "IT59Q0300203280162876621571" }, "interimAvailable": { "balance": 100, "balanceType": "interimAvailable", "currency": "EUR", "date": 742596848.647084, "iban": "IT59Q0300203280162876621571" } } } }, "schema": { "$ref": "#/components/schemas/Balances" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyClientCredential": [ "account:read" ] }, { "ThirdPartyAuthorizationCode": [ "account:read" ] } ], "summary": "Lista", "tags": [ "Saldo" ] } }, "/{tenantID}/balances/last": { "get": { "description": "Ottiene il saldo più recente per ogni IBAN dell'azienda", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } } ], "responses": { "200": { "content": { "application/json; charset=utf-8": { "example": { "IT27H0300203280878355659528": { "EUR": { "available": { "balance": 453, "balanceType": "interimAvailable", "currency": "EUR", "date": 742596848.647101, "iban": "IT27H0300203280878355659528" } } }, "IT59Q0300203280162876621571": { "EUR": { "closingBooked": { "balance": 98, "balanceType": "closingBooked", "currency": "EUR", "date": 742596848.647087, "iban": "IT59Q0300203280162876621571" }, "interimAvailable": { "balance": 100, "balanceType": "interimAvailable", "currency": "EUR", "date": 742596848.647084, "iban": "IT59Q0300203280162876621571" } }, "GBP": { "closingBooked": { "balance": 882, "balanceType": "closingBooked", "currency": "GBP", "date": 742596848.647093, "iban": "IT59Q0300203280162876621571" }, "interimAvailable": { "balance": 649, "balanceType": "interimAvailable", "currency": "GBP", "date": 742596848.647092, "iban": "IT59Q0300203280162876621571" } } } }, "schema": { "$ref": "#/components/schemas/LatestBalances" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyClientCredential": [ "account:read" ] }, { "ThirdPartyAuthorizationCode": [ "account:read" ] } ], "summary": "Ultimi dati disponibili", "tags": [ "Saldo" ] } }, "/{tenantID}/bulk": { "get": { "description": "Recupera la lista dei documenti di tipo bulk.", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "items": { "$ref": "#/components/schemas/Bulk" }, "type": "array" } } }, "description": "Bulk payments list" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" } }, "security": [ { "ThirdPartyClientCredential": [] }, { "ThirdPartyAuthorizationCode": [] } ], "summary": "List bulk documents", "tags": [ "Bulk" ] }, "post": { "description": "Crea un nuvo document Bulk. L'endpoint permette di collegare le fingerprint, presenti nel corpo della richiesta, (i campi indicano la tipologia di documento), in un unico documento bulk. \n Restituisce il documento bulk creato con una nuova fingerprint.", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "example": { "documents": { "invoice": [ "d41d8cd98f00b204e9800998ecf8427e", "GskefcByhlsgCSUODJPWTRFaOVsPGDdq" ], "pagopa": [ "RXi4PrrsOTiPxUVsbo12TAAD9kmTH2cM" ] } }, "minProperties": 1, "properties": { "documents": { "additionalProperties": { "description": "List of fingerprints to be linked to the bulk payment. I nomi delle proprieta sono le tipologie dei documenti.", "items": { "$ref": "#/components/schemas/Fingerprint" }, "minItems": 1, "type": "array", "uniqueItems": true }, "description": "Dizionario delle fingerprint che saranno collegate al pagemento bulk, i nomi delle proprieta sono le tipologie dei documenti.", "type": "object" } }, "propertyNames": { "$ref": "#/components/schemas/DocumentKindEnum" }, "required": [ "additionalProperties" ], "type": "object" } } }, "description": "Preferenze e fingerprints che faranno parte del bulk." }, "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Bulk" } } }, "description": "Bulk payment created" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" } }, "security": [ { "ThirdPartyClientCredential": [] }, { "ThirdPartyAuthorizationCode": [] } ], "tags": [ "Bulk" ] } }, "/{tenantID}/bulk/{fingerprint}": { "delete": { "description": "Elimina un bulk payment con la fingerprint.\n Non avrà effetto sui documenti collegati (non verranno eliminati).", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } }, { "in": "path", "name": "fingerprint", "required": true, "schema": { "type": "string" } } ], "responses": { "204": { "description": "Bulk payment deleted" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" } }, "security": [ { "ThirdPartyClientCredential": [] }, { "ThirdPartyAuthorizationCode": [] } ], "tags": [ "Bulk" ] }, "get": { "description": "Restituisce le informazioni relative a uno specifico documento di tipo bulk", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } }, { "in": "path", "name": "fingerprint", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Bulk" } } }, "description": "Bulk payment details" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" } }, "security": [ { "ThirdPartyClientCredential": [] }, { "ThirdPartyAuthorizationCode": [] } ], "tags": [ "Bulk" ] } }, "/{tenantID}/chain": { "get": { "description": "Recupera la lista dei documenti di tipo chain", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "items": { "$ref": "#/components/schemas/Chain" }, "type": "array" } } }, "description": "Chain payments list" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" } }, "security": [ { "ThirdPartyClientCredential": [] }, { "ThirdPartyAuthorizationCode": [] } ], "tags": [ "Chain" ] }, "post": { "description": "Crea un nuvo document chain. Specificando la fingerprint del documento che verra pagato e di quello che triggera il pagamento, insieme ai loro tipi.", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "properties": { "targetFingerprint": { "$ref": "#/components/schemas/Fingerprint" }, "targetType": { "$ref": "#/components/schemas/DocumentKindEnum" }, "triggerFingerprint": { "$ref": "#/components/schemas/Fingerprint" }, "triggerType": { "$ref": "#/components/schemas/DocumentKindEnum" } }, "required": [ "triggerType", "triggerFingerprint", "targetType", "targetFingerprint" ], "type": "object" } } } }, "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Chain" } } }, "description": "Chain payment created" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" } }, "security": [ { "ThirdPartyClientCredential": [] }, { "ThirdPartyAuthorizationCode": [] } ], "tags": [ "Chain" ] } }, "/{tenantID}/chain/{fingerprint}": { "get": { "description": "Restituisce le informazioni relative a uno specifico documento di tipo chain", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } }, { "in": "path", "name": "fingerprint", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Chain" } } }, "description": "Chain payment details" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" } }, "security": [ { "ThirdPartyClientCredential": [] }, { "ThirdPartyAuthorizationCode": [] } ], "summary": "Get document details", "tags": [ "Chain" ] } }, "/{tenantID}/checkout": { "post": { "description": "Crea un codice di checkout per il documento identificato da tipo e fingerprint.\nNel caso un codice sia già stato creato per il documento, viene restituito un errore.", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } } ], "requestBody": { "content": { "application/vnd.api+json; charset=utf-8": { "example": { "fingerprint": "d41d8cd98f00b204e9800998ecf8427e", "nokRedirect": "https://www.google.com/search?q=nok", "okRedirect": "https://www.google.com/search?q=ok", "type": "invoice" }, "schema": { "$ref": "#/components/schemas/CheckoutRequest" } } }, "required": true }, "responses": { "201": { "content": { "application/json; charset=utf-8": { "example": { "code": "hello", "expire": null }, "schema": { "$ref": "#/components/schemas/CheckoutResponse" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyClientCredential": [ "pagopa" ] }, { "ThirdPartyClientCredential": [ "pagopa" ] }, { "ThirdPartyClientCredential": [ "pagopa" ] }, { "ThirdPartyClientCredential": [ "pagopa" ] }, { "ThirdPartyClientCredential": [ "pagopa" ] }, { "ThirdPartyAuthorizationCode": [ "transfer:write" ] }, { "ThirdPartyAuthorizationCode": [ "transfer:write" ] }, { "ThirdPartyAuthorizationCode": [ "transfer:write" ] }, { "ThirdPartyAuthorizationCode": [ "transfer:write" ] } ], "summary": "", "tags": [ "Sessioni di checkout" ] } }, "/{tenantID}/checkout/intents": { "post": { "description": "", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } } ], "responses": { "201": { "content": { "application/json; charset=utf-8": {} }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyClientCredential": [ "transfer:write", "payment:read" ] }, { "ThirdPartyClientCredential": [ "transfer:write", "payment:read" ] }, { "ThirdPartyClientCredential": [ "transfer:write", "payment:read" ] } ], "summary": "", "tags": [ "Sessioni di checkout" ] } }, "/{tenantID}/checkout/{code}": { "delete": { "description": "Elimina un checkout esistente.", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } }, { "description": "code", "example": "LjJ5imbL", "in": "path", "name": "code", "required": true, "schema": { "example": "LjJ5imbL", "type": "string" } } ], "responses": { "200": { "content": { "application/json; charset=utf-8": {} }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyClientCredential": [ "pagopa" ] }, { "ThirdPartyClientCredential": [ "pagopa" ] }, { "ThirdPartyClientCredential": [ "pagopa" ] }, { "ThirdPartyClientCredential": [ "pagopa" ] }, { "ThirdPartyAuthorizationCode": [ "transfer:write" ] }, { "ThirdPartyAuthorizationCode": [ "transfer:write" ] }, { "ThirdPartyAuthorizationCode": [ "transfer:write" ] } ], "summary": "", "tags": [ "Sessioni di checkout" ] } }, "/{tenantID}/checkout/{code}/preferences": { "put": { "summary": "Update checkout preferences", "description": "This endpoint allows to update a checkout preferences specifying the code.", "security": [ { "ThirdPartyClientCredential": [ "pagopa" ] }, { "ThirdPartyClientCredential": [ "pagopa" ] }, { "ThirdPartyClientCredential": [ "pagopa" ] }, { "ThirdPartyClientCredential": [ "pagopa" ] }, { "ThirdPartyAuthorizationCode": [ "transfer:write" ] }, { "ThirdPartyAuthorizationCode": [ "transfer:write" ] }, { "ThirdPartyAuthorizationCode": [ "transfer:write" ] } ], "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } }, { "description": "Checkout code", "example": "LjJ5imbL", "in": "path", "name": "code", "required": true, "schema": { "example": "LjJ5imbL", "type": "string" } } ], "requestBody": { "content": { "application/vnd.api+json; charset=utf-8": { "example": { "allowedMethods": [ "sct", "sctInst" ] }, "schema": { "$ref": "#/components/schemas/CheckoutPreferences" } } }, "required": true }, "responses": { "200": { "description": "Checkout details", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CheckoutPreferencesResponse" } } } }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "tags": [ "Sessioni di checkout" ] } }, "/{tenantID}/checkout/{type}/{fingerprint}": { "get": { "description": "Restituisce le informazioni sullo stato del checkout identificato da tipo e fingerprint.", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } }, { "description": "tipo di documento", "example": "invoice", "in": "path", "name": "type", "required": true, "schema": { "example": "invoice", "format": "enum('invoice, 'bill')", "type": "string" } }, { "description": "Identificativo univoco della fattura definito come HEX SHA256 di [numero][anno][partita_iva_mittente]", "example": "[1][2021][06968160488] -> fe92051fc0d735f31f6e85ae8515838e6540ba994ede74c5cb2f19599e723d49", "in": "path", "name": "fingerprint", "required": true, "schema": { "example": "[1][2021][06968160488] -> fe92051fc0d735f31f6e85ae8515838e6540ba994ede74c5cb2f19599e723d49", "type": "string" } } ], "responses": { "200": { "content": { "application/json; charset=utf-8": { "example": { "code": "hello", "expire": null }, "schema": { "$ref": "#/components/schemas/GetCheckoutResponse" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyClientCredential": [ "pagopa" ] }, { "ThirdPartyClientCredential": [ "pagopa" ] }, { "ThirdPartyClientCredential": [ "pagopa" ] }, { "ThirdPartyClientCredential": [ "pagopa" ] }, { "ThirdPartyClientCredential": [ "pagopa" ] }, { "ThirdPartyAuthorizationCode": [ "transfer:read" ] }, { "ThirdPartyAuthorizationCode": [ "transfer:read" ] }, { "ThirdPartyAuthorizationCode": [ "transfer:read" ] }, { "ThirdPartyAuthorizationCode": [ "transfer:read" ] } ], "summary": "", "tags": [ "Sessioni di checkout" ] } }, "/{tenantID}/invoices": { "get": { "description": "Ottiene la lista delle fatture", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } } ], "responses": { "200": { "content": { "application/json; charset=utf-8": { "example": [ { "amount": 123.45, "attachments": null, "date": "2020-03-03T17:32:28Z", "example": "EUR", "fingerprint": "d41d8cd98f00b204e9800998ecf8427e", "id": null, "items": [ { "amount": 123.45, "description": "hello", "id": null, "quantity": 123.45 } ], "number": "hello", "recipientIban": null, "recipientVat": "hello", "rootSubstitutedBy": null, "senderIban": null, "senderVat": "hello", "substitutedBy": null, "terms": [ { "amount": 123.45, "description": "hello", "expire": "2020-03-03T17:32:28Z", "fingerprint": "d41d8cd98f00b204e9800998ecf8427e", "id": null, "information": "hello", "method": null, "recurringInfo": null, "useFlowpay": null } ] } ], "schema": { "$ref": "#/components/schemas/Invoices" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyClientCredential": [ "invoice:read" ] }, { "ThirdPartyAuthorizationCode": [ "invoice:read" ] } ], "summary": "", "tags": [ "Fatture" ] }, "post": { "description": "Effettua l'upload di una nuova fattura", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } } ], "requestBody": { "content": { "application/json; charset=utf-8": { "example": { "attachments": null, "date": "2020-03-03T17:32:28Z", "example": "EUR", "items": [ { "amount": 123.45, "description": "hello", "quantity": 123.45 } ], "number": "hello", "recipientIban": null, "recipientVat": "hello", "senderIban": null, "senderVat": "hello", "terms": [ { "amount": 123.45, "description": "hello", "expire": "2020-03-03T17:32:28Z", "information": "hello", "method": null, "recurringInfo": null } ] }, "schema": { "$ref": "#/components/schemas/NewInvoice" } }, "application/xml; charset=utf-8": { "example": {}, "schema": { "$ref": "#/components/schemas/XML" } } }, "required": true }, "responses": { "201": { "content": { "application/json; charset=utf-8": { "example": { "amount": 123.45, "attachments": null, "date": "2020-03-03T17:32:28Z", "example": "EUR", "fingerprint": "d41d8cd98f00b204e9800998ecf8427e", "id": null, "items": [ { "amount": 123.45, "description": "hello", "id": null, "quantity": 123.45 } ], "number": "hello", "recipientIban": null, "recipientVat": "hello", "rootSubstitutedBy": null, "senderIban": null, "senderVat": "hello", "substitutedBy": null, "terms": [ { "amount": 123.45, "description": "hello", "expire": "2020-03-03T17:32:28Z", "fingerprint": "d41d8cd98f00b204e9800998ecf8427e", "id": null, "information": "hello", "method": null, "recurringInfo": null, "useFlowpay": null } ] }, "schema": { "$ref": "#/components/schemas/Invoice" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyClientCredential": [ "invoice:write" ] }, { "ThirdPartyAuthorizationCode": [ "invoice:write" ] } ], "summary": "", "tags": [ "Fatture" ] } }, "/{tenantID}/invoices/preferences": { "get": { "description": "Ottiene le preferenze relative alle fatture", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } } ], "responses": { "200": { "content": { "application/json; charset=utf-8": { "example": { "incomingAccount": null, "outgoingAccount": null, "warnings": null }, "schema": { "$ref": "#/components/schemas/InvoicePreference" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [], "summary": "", "tags": [ "Fatture" ] }, "put": { "description": "Modifica le preferenze relative alle fatture", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } } ], "requestBody": { "content": { "application/vnd.api+json; charset=utf-8": { "example": { "incomingAccount": null, "outgoingAccount": null, "warnings": null }, "schema": { "$ref": "#/components/schemas/InvoicePreference" } } }, "required": true }, "responses": { "201": { "content": { "application/json; charset=utf-8": { "example": { "incomingAccount": null, "outgoingAccount": null, "warnings": null }, "schema": { "$ref": "#/components/schemas/InvoicePreference" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [], "summary": "", "tags": [ "Fatture" ] } }, "/{tenantID}/invoices/{fingerprint}": { "delete": { "description": "Elimina il documento identificato da `fingerprint`,\nL'eliminazione è consentita finché non esiste un pagamento per il documento.\nInoltre l'eliminazione è consentita allo stesso client che ha caricato il documento", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } }, { "description": "Identificativo univoco della fattura definito come HEX SHA256 di [numero][anno][partita_iva_mittente]", "example": "[1][2021][06968160488] -> fe92051fc0d735f31f6e85ae8515838e6540ba994ede74c5cb2f19599e723d49", "in": "path", "name": "fingerprint", "required": true, "schema": { "example": "[1][2021][06968160488] -> fe92051fc0d735f31f6e85ae8515838e6540ba994ede74c5cb2f19599e723d49", "type": "string" } } ], "responses": { "200": { "content": { "application/json; charset=utf-8": {} }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyAuthorizationCode": [ "invoice:write" ] }, { "ThirdPartyClientCredential": [ "invoice:write" ] } ], "summary": "", "tags": [ "Fatture" ] }, "get": { "description": "Ottiene il documento identificato dal `fingerprint`", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } }, { "description": "Identificativo univoco della fattura definito come HEX SHA256 di [numero][anno][partita_iva_mittente]", "example": "[1][2021][06968160488] -> fe92051fc0d735f31f6e85ae8515838e6540ba994ede74c5cb2f19599e723d49", "in": "path", "name": "fingerprint", "required": true, "schema": { "example": "[1][2021][06968160488] -> fe92051fc0d735f31f6e85ae8515838e6540ba994ede74c5cb2f19599e723d49", "type": "string" } } ], "responses": { "200": { "content": { "application/json; charset=utf-8": { "example": { "amount": 123.45, "attachments": null, "date": "2020-03-03T17:32:28Z", "example": "EUR", "fingerprint": "d41d8cd98f00b204e9800998ecf8427e", "id": null, "items": [ { "amount": 123.45, "description": "hello", "id": null, "quantity": 123.45 } ], "number": "hello", "recipientIban": null, "recipientVat": "hello", "rootSubstitutedBy": null, "senderIban": null, "senderVat": "hello", "substitutedBy": null, "terms": [ { "amount": 123.45, "description": "hello", "expire": "2020-03-03T17:32:28Z", "fingerprint": "d41d8cd98f00b204e9800998ecf8427e", "id": null, "information": "hello", "method": null, "recurringInfo": null, "useFlowpay": null } ] }, "schema": { "$ref": "#/components/schemas/Invoice" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyClientCredential": [ "invoice:read" ] }, { "ThirdPartyAuthorizationCode": [ "invoice:read" ] } ], "summary": "", "tags": [ "Fatture" ] }, "patch": { "description": "Modifica il documento identificato da `fingerprint`. Il ruolo (creditore/debitore) di chi effettua la chiamata è rilevante ai fini di ciò che è modificabile, più dettagli nella definizione del body", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } }, { "description": "Identificativo univoco della fattura definito come HEX SHA256 di [numero][anno][partita_iva_mittente]", "example": "[1][2021][06968160488] -> fe92051fc0d735f31f6e85ae8515838e6540ba994ede74c5cb2f19599e723d49", "in": "path", "name": "fingerprint", "required": true, "schema": { "example": "[1][2021][06968160488] -> fe92051fc0d735f31f6e85ae8515838e6540ba994ede74c5cb2f19599e723d49", "type": "string" } } ], "requestBody": { "content": { "application/vnd.api+json; charset=utf-8": { "example": { "creditorIban": null, "debtorIban": null, "terms": null }, "schema": { "$ref": "#/components/schemas/EditInvoiceRequest" } } }, "required": true }, "responses": { "202": { "content": { "application/json; charset=utf-8": { "example": { "amount": 123.45, "attachments": null, "date": "2020-03-03T17:32:28Z", "example": "EUR", "fingerprint": "d41d8cd98f00b204e9800998ecf8427e", "id": null, "items": [ { "amount": 123.45, "description": "hello", "id": null, "quantity": 123.45 } ], "number": "hello", "recipientIban": null, "recipientVat": "hello", "rootSubstitutedBy": null, "senderIban": null, "senderVat": "hello", "substitutedBy": null, "terms": [ { "amount": 123.45, "description": "hello", "expire": "2020-03-03T17:32:28Z", "fingerprint": "d41d8cd98f00b204e9800998ecf8427e", "id": null, "information": "hello", "method": null, "recurringInfo": null, "useFlowpay": null } ] }, "schema": { "$ref": "#/components/schemas/Invoice" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyClientCredential": [ "invoice:write" ] }, { "ThirdPartyAuthorizationCode": [ "invoice:write" ] } ], "summary": "", "tags": [ "Fatture" ] }, "put": { "description": "Setta pagati all'esterno di FlowPay i termini del documento identificato da `fingerprint`.\nIl ruolo di chi effettua la chiamata è rilevante ai fini di ciò che è possibile segnalare come già pagato.\nUn termine per il quale esiste un pagamento non è settabile a già pagato.\nIl debitore ha la facoltà di segnalare già pagato un termine per il quale non esiste un pagamento, oppure di settare a da pagare un termine precedentemente segnato già pagato dallo stesso debitore.\nIl creditore ha la facoltà di segnare già pagato un termine per il quale non esiste un pagamento,\nsettare egli stesso un termine già pagato già settato dal debitore (questo può essere visto come il fatto che il creditore conferma l'operato del debitore),\nsettare a da pagare un termine settato pagato sia da se stesso o dal debitore (in questo caso il creditore non conferma l'indicazione del debitore sul fatto che tale termine è già stato pagato per altre vie)", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } }, { "description": "Identificativo univoco della fattura definito come HEX SHA256 di [numero][anno][partita_iva_mittente]", "example": "[1][2021][06968160488] -> fe92051fc0d735f31f6e85ae8515838e6540ba994ede74c5cb2f19599e723d49", "in": "path", "name": "fingerprint", "required": true, "schema": { "example": "[1][2021][06968160488] -> fe92051fc0d735f31f6e85ae8515838e6540ba994ede74c5cb2f19599e723d49", "type": "string" } } ], "requestBody": { "content": { "application/vnd.api+json; charset=utf-8": { "example": [ { "id": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "paid": false } ], "schema": { "$ref": "#/components/schemas/PaidOutsideFlowPayTermList" } } }, "required": true }, "responses": { "201": { "content": { "application/json; charset=utf-8": { "example": { "amount": 123.45, "attachments": null, "date": "2020-03-03T17:32:28Z", "example": "EUR", "fingerprint": "d41d8cd98f00b204e9800998ecf8427e", "id": null, "items": [ { "amount": 123.45, "description": "hello", "id": null, "quantity": 123.45 } ], "number": "hello", "recipientIban": null, "recipientVat": "hello", "rootSubstitutedBy": null, "senderIban": null, "senderVat": "hello", "substitutedBy": null, "terms": [ { "amount": 123.45, "description": "hello", "expire": "2020-03-03T17:32:28Z", "fingerprint": "d41d8cd98f00b204e9800998ecf8427e", "id": null, "information": "hello", "method": null, "recurringInfo": null, "useFlowpay": null } ] }, "schema": { "$ref": "#/components/schemas/Invoice" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyClientCredential": [ "invoice:write" ] }, { "ThirdPartyAuthorizationCode": [ "invoice:write" ] } ], "summary": "", "tags": [ "Fatture" ] } }, "/{tenantID}/payments/{service}/{fingerprint}": { "get": { "description": "Ritorna i pagamenti esistenti per il documento identificato da `fingerprint`", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } }, { "description": "Nome del servizio, nel contesto Core, da contattare", "example": "invoice, salary, bill", "in": "path", "name": "service", "required": true, "schema": { "example": "invoice, salary, bill", "format": "enum", "type": "string" } }, { "description": "Identificativo univoco della fattura definito come HEX SHA256 di [numero][anno][partita_iva_mittente]", "example": "[1][2021][06968160488] -> fe92051fc0d735f31f6e85ae8515838e6540ba994ede74c5cb2f19599e723d49", "in": "path", "name": "fingerprint", "required": true, "schema": { "example": "[1][2021][06968160488] -> fe92051fc0d735f31f6e85ae8515838e6540ba994ede74c5cb2f19599e723d49", "type": "string" } } ], "responses": { "200": { "content": { "application/json; charset=utf-8": { "example": [ { "createdAt": null, "creditor": "hello", "debtor": "hello", "fingerprint": "d41d8cd98f00b204e9800998ecf8427e", "identifier": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "method": null, "status": "concluded", "termID": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "type": null } ], "schema": { "$ref": "#/components/schemas/Payments" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyClientCredential": [ "payment:read" ] }, { "ThirdPartyAuthorizationCode": [ "payment:read" ] } ], "summary": "", "tags": [ "Pagamenti" ] } }, "/{tenantID}/salaries": { "get": { "description": "Questa richiesta recupera i dati relativi agli stipendi dei dipendenti, inclusi importi, date di pagamento, e informazioni sul datore di lavoro.", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } } ], "responses": { "200": { "content": { "application/json; charset=utf-8": { "example": [ { "amount": 311.39, "batchID": "E047A2F8-718E-4D4D-A1B6-61C596191F55", "currency": "EUR", "employee": { "name": "KHLLBN19B01B838K", "surname": "", "tin": "KHLLBN19B01B838K" }, "employeeIBAN": "VRPRZO74E41C446S", "employeeTIN": "KHLLBN19B01B838K", "employerTIN": "IT12345678901", "fingerprint": "6171a600917ee119cfca1e8fef358755438456d19717b14202e3c3a649ea471f", "month": 11, "paymentDate": "2024-05-20T14:59:00Z", "year": 2024 }, { "amount": 919.94, "batchID": "E047A2F8-718E-4D4D-A1B6-61C596191F55", "currency": "EUR", "employee": { "name": "Crplns72B01F965I", "surname": "", "tin": "CRPLNS72B01F965I" }, "employeeIBAN": "LT050077900322650701", "employeeTIN": "CRPLNS72B01F965I", "employerTIN": "IT12345678901", "fingerprint": "446ae8258aeb13096a06e76eb7497693f9538304b85de0301856d0ce08aa506c", "month": 11, "paymentDate": "2024-05-20T14:59:00Z", "year": 2024 } ], "schema": { "items": { "$ref": "#/components/schemas/SalaryResponse" }, "type": "array" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyClientCredential": [ "salary:read" ] }, { "ThirdPartyAuthorizationCode": [ "salary:read" ] } ], "summary": "Recupera le buste paga.", "tags": [ "Stipendi" ] }, "patch": { "description": "Modifica gli stipendi in batch, aggiornando informazioni come IBAN, remittance e data di pagamento.", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } } ], "requestBody": { "content": { "application/json; charset=utf-8": { "example": { "b23a5d95-8492-43ff-89c9-e38da3512ac5": { "iban": "IT44U0300203280423537939792", "paymentDate": "2024-05-21T09:00:00Z", "remittance": "stipendio aggiornato 2" }, "dde00def-29c9-4fed-ac20-88da52dce45c": { "iban": "IT45S0300203280877589174726", "paymentDate": "2024-05-20T14:59:00Z", "remittance": "stipendio aggiornato" } }, "schema": { "$ref": "#/components/schemas/SalaryBatchUpdate" } } }, "required": true }, "responses": { "200": { "content": { "application/json; charset=utf-8": { "example": [ { "amount": 311.39, "batchID": "E047A2F8-718E-4D4D-A1B6-61C596191F55", "currency": "EUR", "employeeIBAN": "VRPRZO74E41C446S", "fingerprint": "6171a600917ee119cfca1e8fef358755438456d19717b14202e3c3a649ea471f", "month": 11, "paymentDate": "2024-05-20T14:59:00Z", "year": 2024 }, { "amount": 919.94, "batchID": "E047A2F8-718E-4D4D-A1B6-61C596191F55", "currency": "EUR", "employeeIBAN": "LT050077900322650701", "fingerprint": "446ae8258aeb13096a06e76eb7497693f9538304b85de0301856d0ce08aa506c", "month": 11, "paymentDate": "2024-05-20T14:59:00Z", "year": 2024 } ], "schema": { "items": { "$ref": "#/components/schemas/SalaryResponseTemp" }, "type": "array" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyClientCredential": [ "salary:write" ] }, { "ThirdPartyAuthorizationCode": [ "salary:write" ] } ], "summary": "Aggiorna i dati delle buste paga (precedentemente caricate)", "tags": [ "Stipendi" ] }, "post": { "description": "Effettua l'upload delle buste paga dei dipendenti, includendo le informazioni del datore di lavoro, dei dipendenti e dei relativi pagamenti.", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } } ], "requestBody": { "content": { "application/json; charset=utf-8": { "example": { "data": [ { "amount": 311.39, "employeeIBAN": "VRPRZO74E41C446S", "employeeTIN": "KHLLBN19B01B838K", "payslip": "dde00def-29c9-4fed-ac20-88da52dce45c" }, { "amount": 919.94, "employeeIBAN": "LT050077900322650701", "employeeTIN": "CRPLNS72B01F965I", "payslip": "b23a5d95-8492-43ff-89c9-e38da3512ac5" } ], "employerTIN": "IT12345678901", "month": 11, "paymentDate": "2024-05-20T14:59:00Z", "remittance": "stipendio", "year": 2024 }, "schema": { "properties": { "currency": { "description": "Valuta in cui è espresso l'importo della busta paga (es. EUR)", "example": "EUR", "type": "string" }, "data": { "description": "Elenco dei dipendenti con le relative informazioni sulla busta paga, tra cui TIN, IBAN, importo, e cedolino", "items": { "properties": { "amount": { "description": "Importo totale della busta paga (o cedolino)", "type": "number" }, "employeeIBAN": { "description": "Codice IBAN del dipendente", "type": "string" }, "employeeTIN": { "description": "Codice fiscale del dipendente", "type": "string" }, "metadata": { "additionalProperties": { "type": "string" }, "description": "Metadati aggiuntivi relativi alla transazione o alla busta paga", "type": "object" }, "payslip": { "description": "Identificativo univoco del cedolino associato alla busta paga", "format": "uuid", "type": "string" }, "remittance": { "description": "Dettagli del pagamento o bonifico specifico per il dipendente", "type": "string" } }, "type": "object" }, "required": [ "employeeTIN", "amount" ], "type": "array" }, "employerTIN": { "description": "Codice fiscale o Partita IVA del datore di lavoro", "type": "string" }, "month": { "description": "Mese di riferimento della busta paga (o cedolino)", "type": "integer" }, "paymentDate": { "description": "Data in cui viene effettuato il pagamento della busta paga (o cedolino)", "example": "2024-10-10T17:32:28Z", "format": "iso8601", "type": "string" }, "remittance": { "description": "Descrizione dell'oggetto del pagamento o del bonifico effettuato, es. 'stipendio'", "type": "string" }, "year": { "description": "Anno di riferimento della busta paga (o cedolino)", "type": "integer" } }, "required": [ "employerTIN", "year", "month", "paymentDate", "data" ] } } }, "required": true }, "responses": { "201": { "content": { "application/json; charset=utf-8": { "example": [ { "amount": 311.39, "batchID": "E047A2F8-718E-4D4D-A1B6-61C596191F55", "currency": "EUR", "employee": { "name": "KHLLBN19B01B838K", "surname": "", "tin": "KHLLBN19B01B838K" }, "employeeIBAN": "VRPRZO74E41C446S", "employeeTIN": "KHLLBN19B01B838K", "employerTIN": "IT12345678901", "fingerprint": "6171a600917ee119cfca1e8fef358755438456d19717b14202e3c3a649ea471f", "month": 11, "paymentDate": "2024-05-20T14:59:00Z", "year": 2024 }, { "amount": 919.94, "batchID": "E047A2F8-718E-4D4D-A1B6-61C596191F55", "currency": "EUR", "employee": { "name": "Crplns72B01F965I", "surname": "", "tin": "CRPLNS72B01F965I" }, "employeeIBAN": "LT050077900322650701", "employeeTIN": "CRPLNS72B01F965I", "employerTIN": "IT12345678901", "fingerprint": "446ae8258aeb13096a06e76eb7497693f9538304b85de0301856d0ce08aa506c", "month": 11, "paymentDate": "2024-05-20T14:59:00Z", "year": 2024 } ], "schema": { "items": { "$ref": "#/components/schemas/SalaryResponse" }, "type": "array" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyClientCredential": [ "salary:write" ] }, { "ThirdPartyAuthorizationCode": [ "salary:write" ] } ], "summary": "Carica le buste paga dei dipendenti", "tags": [ "Stipendi" ] } }, "/{tenantID}/salaries/{fingerprint}": { "delete": { "description": "Elimina il documento salary identificato dalla `fingerprint`.", "responses": { "204": { "content": { "application/json; charset=utf-8": {} }, "description": "Salary document deleted" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyClientCredential": [ "salary:write" ] }, { "ThirdPartyAuthorizationCode": [ "salary:write" ] } ], "summary": "Elimina uno stipendio specifico", "tags": [ "Stipendi" ] }, "get": { "description": "Recupera il documento salary identificato dalla `fingerprint`. Questa richiesta restituisce i dettagli dello stipendio, inclusi importi, data di pagamento, informazioni sul dipendente e sul datore di lavoro.", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } }, { "description": "Identificativo univoco della fattura definito come HEX SHA256 di [numero][anno][partita_iva_mittente]", "example": "[1][2021][06968160488] -> fe92051fc0d735f31f6e85ae8515838e6540ba994ede74c5cb2f19599e723d49", "in": "path", "name": "fingerprint", "required": true, "schema": { "example": "[1][2021][06968160488] -> fe92051fc0d735f31f6e85ae8515838e6540ba994ede74c5cb2f19599e723d49", "type": "string" } } ], "responses": { "200": { "content": { "application/json; charset=utf-8": { "example": { "amount": 919.94, "batchID": "E047A2F8-718E-4D4D-A1B6-61C596191F55", "currency": "EUR", "employee": { "name": "Crplns72B01F965I", "surname": "", "tin": "CRPLNS72B01F965I" }, "employeeIBAN": "LT050077900322650701", "employeeTIN": "CRPLNS72B01F965I", "employerTIN": "IT12345678901", "fingerprint": "446ae8258aeb13096a06e76eb7497693f9538304b85de0301856d0ce08aa506c", "month": 11, "paymentDate": "2024-05-20T14:59:00Z", "year": 2024 }, "schema": { "items": { "$ref": "#/components/schemas/SalaryResponse" }, "type": "array" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyClientCredential": [ "salary:read" ] }, { "ThirdPartyAuthorizationCode": [ "salary:read" ] } ], "summary": "Recupera i dettagli di una busta paga specifica", "tags": [ "Stipendi" ] }, "patch": { "description": "Modifica il documento salary identificato dalla `fingerprint`. Consente di aggiornare dettagli come l'IBAN, la causale del pagamento e la data di pagamento dello stipendio", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } }, { "description": "Identificativo univoco della fattura definito come HEX SHA256 di [numero][anno][partita_iva_mittente]", "example": "[1][2021][06968160488] -> fe92051fc0d735f31f6e85ae8515838e6540ba994ede74c5cb2f19599e723d49", "in": "path", "name": "fingerprint", "required": true, "schema": { "example": "[1][2021][06968160488] -> fe92051fc0d735f31f6e85ae8515838e6540ba994ede74c5cb2f19599e723d49", "type": "string" } } ], "requestBody": { "content": { "application/vnd.api+json; charset=utf-8": { "example": { "iban": null, "paymentDate": "2024-10-10T17:32:28Z", "remittance": null }, "schema": { "$ref": "#/components/schemas/SalaryUpdate" } } }, "required": true }, "responses": { "200": { "content": { "application/json; charset=utf-8": { "example": { "amount": 311.39, "batchID": "E047A2F8-718E-4D4D-A1B6-61C596191F55", "currency": "EUR", "employeeIBAN": "VRPRZO74E41C446S", "fingerprint": "6171a600917ee119cfca1e8fef358755438456d19717b14202e3c3a649ea471f", "month": 11, "paymentDate": "2024-05-20T14:59:00Z", "year": 2024 }, "schema": { "items": { "$ref": "#/components/schemas/SalaryResponseTemp" }, "type": "array" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyClientCredential": [ "salary:write" ] }, { "ThirdPartyAuthorizationCode": [ "salary:write" ] } ], "summary": "Aggiorna i dati di una busta paga (precedentemente caricata)", "tags": [ "Stipendi" ] } }, "/{tenantID}/transactions": { "get": { "description": "Ottiene la lista di tutte le transazione del tenant.", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } } ], "responses": { "200": { "content": { "application/json; charset=utf-8": { "example": [ { "amount": 123.45, "bookingDate": null, "creditorIban": null, "creditorName": null, "debtorIban": null, "debtorName": null, "documentType": null, "example": "EUR", "id": null, "identifier": null, "method": null, "remittanceInformationUnstructured": null, "type": "hello", "valueDate": null } ], "schema": { "$ref": "#/components/schemas/Transactions" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyClientCredential": [ "account:read" ] }, { "ThirdPartyAuthorizationCode": [ "account:read" ] } ], "summary": "Lista", "tags": [ "Transazioni" ] } }, "/{tenantID}/transactions/{transactionID}": { "get": { "description": "Restituisce la transazione del tenant corrispondente all'identificativo", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } }, { "description": "Id univoco della transazione", "example": "3911CCAB-5A9E-48BF-8AD7-139033BA7A38", "in": "path", "name": "transactionID", "required": true, "schema": { "example": "3911CCAB-5A9E-48BF-8AD7-139033BA7A38", "format": "uuid", "type": "string" } } ], "responses": { "200": { "content": { "application/json; charset=utf-8": { "example": { "amount": 123.45, "bookingDate": null, "creditorIban": null, "creditorName": null, "debtorIban": null, "debtorName": null, "documentType": null, "example": "EUR", "id": null, "identifier": null, "method": null, "remittanceInformationUnstructured": null, "type": "hello", "valueDate": null }, "schema": { "$ref": "#/components/schemas/Transaction" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyClientCredential": [ "account:read" ] }, { "ThirdPartyAuthorizationCode": [ "account:read" ] } ], "summary": "Transazione corrispondente all'identificativo", "tags": [ "Transazioni" ] } }, "/{tenantID}/transfers": { "get": { "description": "Recupera la lista dei documenti di tipo transfer", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "example": [ { "amount": 15.75, "date": "2024-08-22T15:20:30Z", "debtor": "CMLLBR43E41C375Z", "fingerprint": "d41d8cd98f00b204e9800998ecf8427e" }, { "amount": 1, "date": "2024-08-22T15:20:30Z", "debtor": "CNTVTR74R01C070U", "fingerprint": "aa1d8cd98f00b204e9800998aaf842aa" } ], "schema": { "items": { "$ref": "#/components/schemas/Transfer" }, "type": "array" } } }, "description": "Transfer documents list" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" } }, "security": [ { "ThirdPartyClientCredential": [ "transfers:read" ] }, { "ThirdPartyAuthorizationCode": [ "transfers:read" ] } ], "tags": [ "Transfer" ] }, "post": { "description": "Consente di creare un nuovo documento trasfert. Il corpo della richiesta deve includere tutte le informazioni necessarie per completare il trasferimento, come l'importo, l'IBAN del creditore, il codice fiscale del creditore e del debitore, e la data della transazione.", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } } ], "requestBody": { "content": { "application/json": { "example": { "amount": 15.75, "creditor": "BRNMHL77L01Z602U", "creditorIBAN": "IT45S0300203280877589174726", "date": "2024-08-22T15:20:30Z", "debtor": "CMLLBR43E41C375Z", "remittance": "Pagamento due pizze" }, "schema": { "properties": { "amount": { "description": "Amount of the transfer", "example": 100.34, "format": "float", "type": "number", "x-faker": "finance.amount" }, "creditor": { "description": "Codice fiscale del creditore (vat code in caso di azienda, codice fiscale in caso di privato)", "example": "string", "type": "string" }, "creditorIBAN": { "description": "IBAN del creditore, modificabile dal creditore o dal debitore nel caso il creditore non abbia già modificato l'iban.", "example": "string", "type": "string" }, "date": { "example": "2020-03-03T17:32:28Z", "format": "date-time", "type": "string" }, "debtor": { "description": "Codice fiscale del debitore (vat code in caso di azienda, codice fiscale in caso di privato)", "example": "string", "type": "string" }, "remittance": { "description": "Remittance information of the SEPA Credit Transfer", "example": "Pizza at Pizzeria da Mario. Thank you!", "type": "string", "x-faker": "lorem.sentence" } }, "required": [ "amount", "creditor", "creditorIBAN", "date", "debtor", "remittance" ], "type": "object" } } }, "description": "Transfer details", "required": true }, "responses": { "201": { "content": { "application/json": { "example": { "amount": 15.75, "date": "2024-08-22T15:20:30Z", "debtor": "CMLLBR43E41C375Z", "fingerprint": "d41d8cd98f00b204e9800998ecf8427e" }, "schema": { "$ref": "#/components/schemas/Transfer" } } }, "description": "Transfer created" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" } }, "security": [ { "ThirdPartyClientCredential": [ "transfers:write" ] }, { "ThirdPartyAuthorizationCode": [ "transfers:write" ] } ], "summary": "Creazione di un nuovo documento trasfert", "tags": [ "Transfer" ] } }, "/{tenantID}/transfers/plan": { "post": { "description": "Crea un nuvo document transfer", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } } ], "requestBody": { "content": { "application/json": { "example": { "creditor": "12345678901", "creditorIBAN": "IT45S0300203280877589174726", "date": "2024-08-22T10:00:00Z", "debtor": "10987654321", "planType": { "singleTerms": { "number": 5 } }, "remittance": "Pagamento per servizi di consulenza", "singleAmount": 100.34 }, "schema": { "properties": { "creditor": { "description": "Codice fiscale del creditore (vat code in caso di azienda, codice fiscale in caso di privato)", "example": "string", "type": "string" }, "creditorIBAN": { "description": "IBAN del creditore, modificabile dal creditore o dal debitore nel caso il creditore non abbia già modificato l'iban.", "example": "string", "type": "string" }, "date": { "example": "2020-03-03T17:32:28Z", "format": "date-time", "type": "string" }, "debtor": { "description": "Codice fiscale del debitore (vat code in caso di azienda, codice fiscale in caso di privato)", "example": "string", "type": "string" }, "planType": { "description": "Rappresenta un tipo di piano che può essere a termini singoli o ricorrenti.", "oneOf": [ { "description": "Un piano con termini singoli, che non si ripetono.", "properties": { "singleTerms": { "properties": { "number": { "type": "integer" } }, "required": [ "number" ] } }, "required": [ "singleTerms" ] }, { "description": "Un piano con termini che si ripetono a una frequenza determinata.", "properties": { "recurringTerms": { "properties": { "frequency": { "enum": [ "monthly" ], "type": "string" }, "number": { "type": "integer" } }, "required": [ "number", "frequency" ] } }, "required": [ "recurringTerms" ] } ] }, "remittance": { "description": "Remittance information of the SEPA Credit Transfer", "example": "Pizza at Pizzeria da Mario. Thank you!", "type": "string", "x-faker": "lorem.sentence" }, "singleAmount": { "description": "Amount of the transfer", "example": 100.34, "format": "float", "type": "number", "x-faker": "finance.amount" } }, "required": [ "singleAmount", "creditor", "creditorIBAN", "debtor", "remittance", "date", "planType" ], "type": "object" } } }, "description": "Transfer details", "required": true }, "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Transfer" } } }, "description": "Transfer created" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" } }, "security": [ { "ThirdPartyClientCredential": [ "transfers:write" ] }, { "ThirdPartyAuthorizationCode": [ "transfers:write" ] } ], "tags": [ "Transfer" ] } }, "/{tenantID}/transfers/{fingerprint}": { "delete": { "description": "Cancella un documento transfer con la fingerprint, se ancora non è stato eseguito", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } }, { "in": "path", "name": "fingerprint", "required": true, "schema": { "type": "string" } } ], "responses": { "204": { "content": { "application/json; charset=utf-8": {} }, "description": "Transfer document deleted" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" } }, "security": [ { "ThirdPartyClientCredential": [ "transfers:write" ] }, { "ThirdPartyAuthorizationCode": [ "transfers:write" ] } ], "summary": "Cancella un documento transfer", "tags": [ "Transfer" ] }, "get": { "description": "Restituisce le informazioni relative a uno specifico documento di tipo transfer", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } }, { "in": "path", "name": "fingerprint", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Transfer" } } }, "description": "Transfer document details" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" } }, "security": [ { "ThirdPartyClientCredential": [ "transfers:read" ] }, { "ThirdPartyAuthorizationCode": [ "transfers:read" ] } ], "summary": "Recupera i dettagli di un documento transfer", "tags": [ "Transfer" ] } }, "/{tenantID}/webhooks": { "get": { "description": "Ottiene la lista dei webhook attivi per lo specifico tenant.", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } } ], "responses": { "200": { "content": { "application/json; charset=utf-8": { "example": [ { "events": { "hello": [ "hello" ] }, "id": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "url": "hello" } ], "schema": { "$ref": "#/components/schemas/WebHooks" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyAuthorizationCode": [] }, { "ThirdPartyClientCredential": [] } ], "summary": "", "tags": [ "Webhook" ] }, "post": { "description": "Crea un nuovo webhook. Se la url del webhook è già presente, vengono agganciati i nuovi eventi al webhook.", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } } ], "requestBody": { "content": { "application/vnd.api+json; charset=utf-8": { "example": { "events": [ "hello" ], "expiresAt": "2020-03-03T17:32:28Z", "url": "hello" }, "schema": { "$ref": "#/components/schemas/PostWebHook" } } }, "required": true }, "responses": { "201": { "content": { "application/json; charset=utf-8": { "example": { "createdAt": "2020-03-03T17:32:28Z", "events": { "hello": [ { "eventName": "hello", "lastCalledAt": null, "lastError": null, "lastErroredAt": null, "numberOfErroredCalls": 12345678, "numberOfSuccessfulCalls": 12345678 } ] }, "expiresAt": "2020-03-03T17:32:28Z", "id": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "url": "hello" }, "schema": { "$ref": "#/components/schemas/WebHookDetail" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyAuthorizationCode": [] }, { "ThirdPartyClientCredential": [] } ], "summary": "", "tags": [ "Webhook" ] } }, "/{tenantID}/webhooks/{id}": { "delete": { "description": "Elimina gli eventi dello specifico tenant associati ad un webhook oppure parte di essi", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } }, { "description": "identificativo del webhook", "example": "0C87AA6A-FDED-41A8-97A8-FCB5231B0B0C", "in": "path", "name": "id", "required": true, "schema": { "example": "0C87AA6A-FDED-41A8-97A8-FCB5231B0B0C", "format": "uuid", "type": "string" } } ], "requestBody": { "content": { "application/vnd.api+json; charset=utf-8": { "example": { "events": null }, "schema": { "$ref": "#/components/schemas/WebHookDeleteRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json; charset=utf-8": {} }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyAuthorizationCode": [] }, { "ThirdPartyClientCredential": [] } ], "summary": "", "tags": [ "Webhook" ] }, "get": { "description": "Ottiene il dettaglio di un webhook", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } }, { "description": "identificativo del webhook", "example": "0C87AA6A-FDED-41A8-97A8-FCB5231B0B0C", "in": "path", "name": "id", "required": true, "schema": { "example": "0C87AA6A-FDED-41A8-97A8-FCB5231B0B0C", "format": "uuid", "type": "string" } } ], "responses": { "200": { "content": { "application/json; charset=utf-8": { "example": { "createdAt": "2020-03-03T17:32:28Z", "events": { "hello": [ { "eventName": "hello", "lastCalledAt": null, "lastError": null, "lastErroredAt": null, "numberOfErroredCalls": 12345678, "numberOfSuccessfulCalls": 12345678 } ] }, "expiresAt": "2020-03-03T17:32:28Z", "id": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "url": "hello" }, "schema": { "$ref": "#/components/schemas/WebHookDetail" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyAuthorizationCode": [] }, { "ThirdPartyClientCredential": [] } ], "summary": "", "tags": [ "Webhook" ] }, "put": { "description": "Aggiorna un webhook", "parameters": [ { "description": "ID dell'owner della richiesta", "example": "84461172-4326-4D6B-AEA7-840ED1372200", "in": "path", "name": "tenantID", "required": true, "schema": { "example": "84461172-4326-4D6B-AEA7-840ED1372200", "format": "uuid", "type": "string" } }, { "description": "identificativo del webhook", "example": "0C87AA6A-FDED-41A8-97A8-FCB5231B0B0C", "in": "path", "name": "id", "required": true, "schema": { "example": "0C87AA6A-FDED-41A8-97A8-FCB5231B0B0C", "format": "uuid", "type": "string" } } ], "requestBody": { "content": { "application/vnd.api+json; charset=utf-8": { "example": { "events": null, "expiresAt": null }, "schema": { "$ref": "#/components/schemas/PutWebHook" } } }, "required": true }, "responses": { "201": { "content": { "application/json; charset=utf-8": { "example": { "createdAt": "2020-03-03T17:32:28Z", "events": { "hello": [ { "eventName": "hello", "lastCalledAt": null, "lastError": null, "lastErroredAt": null, "numberOfErroredCalls": 12345678, "numberOfSuccessfulCalls": 12345678 } ] }, "expiresAt": "2020-03-03T17:32:28Z", "id": "cb15b52a-91db-41ed-81a0-764a0cc4795d", "url": "hello" }, "schema": { "$ref": "#/components/schemas/WebHookDetail" } } }, "description": "" }, "400": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta sintatticamente, body, headers, path o query params non conformi alla documentazione" }, "401": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "Le credenziali fornite non sono sufficienti a completare la richiesta" }, "403": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è autorizzata a procedere con le credenziali fornite" }, "404": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta fa riferimento ad una risorsa inesistente" }, "417": { "content": { "application/json; charset=utf-8": { "example": { "code": 12345678, "errorDescription": "hello", "errorURI": null, "expectedType": null, "field": null, "requestID": null, "service": 12345678, "statusCode": 12345678 }, "schema": { "$ref": "#/components/schemas/ErrorDTO" } } }, "description": "La richiesta non è corretta semanticamente" } }, "security": [ { "ThirdPartyAuthorizationCode": [] }, { "ThirdPartyClientCredential": [] } ], "summary": "", "tags": [ "Webhook" ] } } }, "servers": [ { "url": "https://app.flowpay.it/api", "variables": {} } ], "tags": [ { "description": "Endpoint per il servizio di AIS in cui è possbile ottenere informazioni di un account o semplicemente un check iban", "name": "AIS Service" }, { "description": "Banche conformi allo standard PSD2", "name": "Banche" }, { "description": "Gestione del consenso per l'accesso ai dati bancari", "name": "Consent" }, { "description": "Endpoint di gestione dei webhook", "name": "Webhook" }, { "description": "Transazioni conto corrente\n\nLe transazioni possono essere filtrate per data e iban. utilizzando i seguenti parametri:\n- `dateFrom`: data di inizio del filtro in formato ISO8601\n- `dateTo`: data di fine del filtro in formato ISO8601\n- `iban`: iban del conto corrente\n\nad esempio: `//transactions?dateFrom=2022-07-19T19:29:48Z&dateTo=2022-10-19T19:29:48Z&iban=IT00A0000000000000000000000`", "name": "Transazioni" }, { "description": "I pagamenti generati dall'approvazione di uno o più termini di pagamento relativi a una fattura", "name": "Pagamenti" }, { "description": "\nGestione e creazione di un codici di checkout\n\nIl codice di checkout permette di far pagare un documento caricato su FlowPay attraverso il nostro flusso di checkout.\n\nIl flusso per il checkout passa dall'ottenere il codice di checkout e redirezionare il proprio utente verso la pagina\n* `https://checkout.flowpay.it/{code}` in produzione\n* `https://checkout.sandbox-new.flowpay.it/{code}` in sandbox \n", "name": "Sessioni di checkout" }, { "description": "", "name": "Stipendi" }, { "description": "Saldo conto corrente\n\n## Balance Type\nThe balance types given by this endpoint can be any of the following:\n\n| name | description |\n|---|---|\n| expected | Balance composed of booked entries and pending items known at the time of calculation, which projects the end of day balance if everything is booked on the account and no other entry is posted. |\n| authorised | The expected balance together with the value of a pre-approved credit line the ASPSP makes permanently available to the user. |\n| openingBooked | Book balance of the account at the beginning of the account reporting period. It always equals the closing book balance from the previous report. |\n| interimAvailable | Available balance calculated in the course of the account 'servicer's business day, at the time specified, and subject to further changes during the business day. The interim balance is calculated on the basis of booked credit and debit items during the calculation time/period specified. |\n| closingBooked | Balance of the account at the end of the pre-agreed account reporting period. It is the sum of the opening booked balance at the beginning of the period and all entries booked to the account during the pre-agreed account reporting period. |\n| forwardAvailable | Forward available balance of money that is at the disposal of the account owner on the date specified. |\n", "name": "Saldo" }, { "description": "Possibilità di visualizzare e creare documenti di pagamento tra l'azienda ed un consumatore.\n \nIl flusso per eseguire generare una ricevuta è:\n1. Creare una ricevuta con l'endpoint\n2. Comporre la url di checkout con il code contenuto nei campi della risposta. L'url è quindi:\n - https://app.sandbox-new.flowpay.it/instant/{code} nel caso della sandbox\n - https://app.flowpay.it/instant/{code} nel caso di produzione\n3. Far aprire in un popup l'url creata in precedenza.\n\n### Importante\n\nDurante il periodo di deprecazione delle API di instant, la creazione di una Ricevuta da API continuerà a generare il codice di checkout per tale Ricevuta.\nPer evitare che ciò accada è possibile inviare il parametro `skip-instant=true` nei query params della richiesta.\nDopo il periodi di deprecazione la creazione di un bill non creerà più in automatico il codice di checkout.", "name": "Ricevute" }, { "description": "Documenti senza Lifecycle", "name": "Transfer" }, { "description": "Questo endpoint consente di effettuare pagamenti bulk di documenti di diversi tipi.
Nota: l'API di questo endpoint non richiede scope specifici, il token di autorizzazione utilizzato deve avere accesso ai documenti che desidera pagare.\n\n

\n\n\n\n

\n\nIl diagramma sopra mostra come funziona bulk.\n\nSupponiamo il caso in cui un utente abbia due fatture per il beneficiario 1 (Ben1), una fattura per il beneficiario 2 (Ben2) e un pagamento PagoPA\n\nL'utente desidera pagare tutti in un'unica operazione.\n\nIl client dell'utente, che ha accesso a tutti i documenti, chiama l'endpoint in blocco con l'elenco dei documenti da pagare, l'endpoint restituisce un nuovo documento (Bulk) collegato a tutti i documenti da pagare.\n\nIl client fornisce il documento bulk all'utente, che ora può pagarlo con un'unica operazione di Payment Initiation (PIS). Il bonifico bancario consentito con PIS sul documento in blocco è indirizzato al conto tecnico FlowPay (TA). Quando il TA riceve il pagamento, divide l'importo tra i beneficiari e invia loro i pagamenti tramite bonifico bancario.\n\nIn caso di pagamento bulk allo stesso beneficiario, il beneficiario effettivo di avvio del pagamento è il beneficiario stesso, quindi il pagatore può riconoscere facilmente la transazione. In caso contrario, il beneficiario effettivo di avvio del pagamento è FlowPay.\n\nI bonifici bancari ai beneficiari vengono inviati con lo stesso pagatore originale, quindi i beneficiari possono identificare facilmente il pagatore.\n\nNota: il destinatario dei pagamenti pagoPA è FlowPay stesso, quindi i pagamenti correlati non vengono conteggiati nelle operazioni di suddivisione.\n\n", "name": "Bulk" }, { "description": "Questo endpoint consente di concatenare i pagamenti tra diversi documenti, automatizzando il pagamento di una fattura utilizzando l'importo ricevuto da un'altra fattura attiva.
Nota: L'API per questo endpoint non richiede scopi specifici; il token di autorizzazione utilizzato deve avere accesso ai documenti da pagare.\n\nIl processo della catena di pagamento funziona collegando un documento \"ring\" che collega un documento di attivazione a un documento di destinazione. Una volta creato il documento ring, esso stabilisce una connessione tra il documento di attivazione, che avvia la catena di pagamento, e il documento di destinazione, che riceverà il pagamento una volta che il documento di attivazione è stato pagato tramite FlowPay.\n\nAd esempio, supponiamo che ci siano due documenti. Il primo documento riguarda un pagamento che l'azienda A deve effettuare all'azienda B, mentre il secondo documento riguarda un pagamento che l'azienda B deve effettuare all'azienda C. Per automatizzare questi pagamenti, l'azienda B crea un \"anello\" utilizzando il suo token di autorizzazione. Questo anello collega il primo documento come \"trigger\" (documento di attivazione) e il secondo documento come \"target\" (documento di destinazione).\n\nUna volta creato l'anello, è possibile generare sessioni di checkout per ciascun documento. Il checkout per il documento di attivazione procede come un processo di pagamento standard, mentre il checkout per il documento di destinazione viene creato con un tipo di catena. Questo tipo di checkout a catena per il documento di destinazione non richiede un pagamento immediato, ma attende il pagamento del documento di attivazione.\n\nQuando l'azienda B accede e completa il checkout per il documento di destinazione, non viene effettuato alcun pagamento. Tuttavia, quando il documento di attivazione viene pagato, si attiva automaticamente il pagamento del documento di destinazione. Se c'è un importo residuo dopo il pagamento del documento di destinazione, l'azienda B lo riceverà.\n\nIn questo modo, l'automazione dei pagamenti assicura che tutti i documenti coinvolti siano regolati in modo sequenziale, utilizzando i fondi ricevuti da un documento attivo per pagare un altro documento in sospeso, riducendo al minimo l'intervento manuale e semplificando la gestione dei flussi di cassa tra le aziende coinvolte.\n\n### Utilizzo della catena di pagamento per il pagamento frazionato\n\nIn uno scenario di pagamento frazionato, la catena di pagamento può essere utilizzata per distribuire automaticamente i fondi tra più parti, anche trattenendo una parte del pagamento per il partner prima di inoltrare l'importo rimanente al creditore. Ad esempio, supponiamo che l'azienda A debba pagare l'azienda B, ma che una parte del pagamento sia trattenuta dall'azienda C (che agisce come partner o intermediario). L'azienda A crea un documento di attivazione che rappresenta il pagamento che deve all'azienda B. Viene quindi creato un documento ring che collega questo documento di attivazione a due documenti di destinazione: uno per l'azienda B e uno per l'azienda C.\n\nQuando l'azienda A effettua il pagamento, la catena di pagamento assicura che i fondi vengano prima instradati attraverso l'azienda C. La parte a cui l'azienda C ha diritto (come concordato) viene trattenuta, mentre il resto del pagamento viene automaticamente inoltrato all'azienda B. Questa configurazione assicura che il pagamento frazionato venga gestito senza problemi, con un intervento manuale minimo, e che tutte le parti ricevano gli importi dovuti secondo le regole predefinite della catena di pagamento.", "name": "Chain" }, { "description": "pagoPA è il sistema nazionale italiano che permette ai cittadini di pagare la pubblica amministrazione. FlowPay partecipa a pagoPA e consente agli utenti di pagare con l'open banking.", "name": "pagoPA" } ] }