openapi: 3.0.3 info: termsOfService: https://selfcare.notifichedigitali.it/termini-di-servizio x-api-id: api-external-b2b-pa title: 'Piattaforma Notifiche: API B2B per le Pubbliche Amministrazioni' x-summary: 'Piattaforma Notifiche: API B2B per le Pubbliche Amministrazioni' version: 1.0.0 description: >- ## Abstract API utilizzate dalle pubbliche amministrazioni per __inviare richieste di notifiche__ e __ottenere informazioni in modalità pull__ sullo stato della _"richiesta di notifica"_ (accettata o rifiutata) e, in caso di richiesta accettata, sulle comunicazioni effettuate, o solo tentate, nei confronti dei destinatari della notifica. ## Operazioni utilizzate, in sequenza temporale
![]() |
### Ciclo di vita della notifica lato mittente
#### 1. Caricamento dei documenti della notifica
Prima di invocare la richiesta di notifica è necessario caricare i documenti della notifica (documenti e bollettini/metadata di pagamento).
[Schema Metadata F24](#/components/schemas/F24Metadata)
#### 1.a. Richiesta presigned Url
Invocare l'operazione [presignedUploadRequest](#/NewNotification/presignedUploadRequest)
con cui prenotare il caricamento. Possono essere effettuate un massimo di 15 prenotazioni di caricamento
per ogni richiesta.
In risposta si ottengono le seguenti informazioni: \- httpMethod \- secret \- url L'url restituito ha una validità di 1h. #### 1.b Upload documenti della notifica Per ogni documento utilizzare un richiesta HTTP con metodo _httpMethod_ (POST o PUT) all'url indicato dal campo _url_. In tale richiesta vanno aggiunti i seguenti header: \- _content-type_: valorizzato come il campo "contentType" della richiesta di cui al punto (1.a) \- _x-amz-meta-secret_: valorizzato con il valore del campo "secret" della risposta di cui al punto (1.a) \- _trailer_: valorizzato con ```x-amz-checksum-sha256``` \- _x-amz-checksum-sha256_: valorizzato con il checksum sha256, codificato in base 64, del contenuto binario del file che verrà caricato. (__N.B.__ questo è un trailer HTTP non un header). Vedi [HTTP Trailer](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Trailer) __NOTA:__ se l'operazione di upload è stata eseguita con successo, si otterrà come risposta _status 200 OK_. Nell'header di questa risposta, si otterrà il campo __x-amz-version-id__ che dovrà essere utilizzato durante l'inserimento della notifica, nel campo ref.__versionToken__ in corrispondenza del documento ad esso associato. #### 2. Richiesta di invio della notifica Per effettuare una richiesta di invio notifica, invocare l'operazione [sendNewNotification](#/NewNotification/sendNewNotificationV21) valorizzando il campo payments (scegliendo in base alla tipologia di file caricato F24/pagoPa) e il campo documents utilizzando i riferimenti dei file caricati in precedenza nel seguente: - digests.sha256 : SHA256 associato all'allegato caricato - contentType : in caso la tipologia dell'allegato fosse documento e avviso di pagamento dovrà essere popolato con "application/pdf" in caso di F24 invece dovrà contenere "application/json" - ref.key: key ottenuta nella response della chiamata [presignedUploadRequest](#/NewNotification/presignedUploadRequest) - ref.versionToken: valore dell'header x-amz-version-id ottenuto dalla response in fase di upload dell'allegato ad esso associato. Nel caso si voglia valorizzare il campo payments con un bolletino di pagamento pagoPa oltre al riferimento al file tramite la sezione pagoPaForm con le indicazioni riportate sopra, sono da valorizzare i campi noticeCode "codice avviso pagoPA" ,univoco, di pagamento del sistema pagoPA utilizzato , usato per pagamento online; creditorTaxId: codice fiscale dell'ente a cui fa riferimento il "codice avviso pagoPA"; il campo applyCost: flag per indicare se l'avviso pagoPA deve contenere i costi di notifica e il campo Nel caso,invece, nel campo payments si voglia valorizzare un pagamento F24,oltre al riferimento al file caricato tramite la sezione metadataAttachment con le indicazioni riportate sopra, sono da valorizzare i campi title: titolo del documento pdf da mostrare all'utente e applyCost: flag per indicare se il modello F24 deve contenere i costi di notifica. ![]() |
{Iun}
della notifica di interesse: all'interno del campo timeline della response è possibile trovare l'elenco degli eventi di quella notifica ed i legalFactType e legalFactId in corrispondenza degli eventi che generano documenti.
IN_VALIDATION
vengono comunque pubblicati immediatamente. Per gli stream di tipo
STATUS, assicura che il primo stato pubblicato sia
ACCEPTED
o REFUSED
. Sebbene
normalmente gli eventi dello stream arrivino nell'ordine cronologico in cui
si verificano, non è garantito che possano arrivare in un ordine differente.
Gli ID dello stream sono comunque crescenti, ma la data dell'evento potrebbe
non essere sempre successiva agli eventi precedenti.
## Lettura degli eventi dallo stream
Le operazioni con il tag __Events__ sono quelle utilizzate per la [lettura
degli eventi](#/Events/consumeEventStream) filtrati in base alla
configurazione impostata negli streams.
La API restituisce un __massimo di 50
elementi per chiamata__.
Se esistono ulteriori eventi nello stream, allora la response del servizio
restituisce l'elemento `retryAfter = 0`; ed è quindi possibile richiamare
immediatamente il servizio per ottenere gli eventi successivi.
Per il corretto consumo degli eventi dello stream è necessario passare a
tutte le chiamate (ad esclusione della prima) il parametro _lastEventId_
valorizzato con l'ultimo _eventId_ della richiesta precedente. In questo
modo si informa che gli eventi precedenti sono stati elaborati e quindi
possibile procedere con la loro cancellazione dallo stream e restituire i
successivi.
Se non esistono ulteriori eventi nello stream, allora la response del
servizio restituisce il valore di `retryAfter > 0` ed è quindi necessario
attendere il tempo indicato dalla retryAfter per consumare eventualmente
nuovi eventi nello stream.
__NOTA__: gli eventi sono mantenuti per un massimo di __7 giorni__ dopo i quali sono automaticamente
cancellati anche se non sono stati consumati. Sarà comunque possibile
ottenere lo stato della notifica attraverso il servizio
[getNotificationRequestStatus](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/pagopa/pn-delivery/8e2dc3447abc5a338b9e7bc809fa2381d3dacada/docs/openapi/api-external-b2b-pa-bundle.yaml#/SenderReadB2B/retrieveSentNotificationV24)