DevPortalPagoPA


Tabella dei contenuti

API Reference - MESSAGE

Versione: 1.3.1
Titolo: Specifiche di Integrazione Messaggi di Cortesia (Server-to-Server) - PSP Integration
Contatto: PagoPA S.p.A. - messaggidicortesia@assistenza.pagopa.it

Panoramica

Questo API descrive le specifiche tecniche per l'integrazione server-to-server con il sistema Messaggi di Cortesia (anche denominato EMD). A differenza delle altre API EMD in cui è il PSP a chiamare PagoPA S.p.A., in questo caso è PagoPA S.p.A. che chiama il PSP. Il sistema EMD invia attivamente i messaggi di cortesia all'endpoint esposto dal PSP ogni volta che un messaggio deve essere recapitato a un Utente.
Per abilitare la ricezione dei messaggi, il PSP deve esporre due endpoint:
  1. Endpoint di Autenticazione (OAuth2): utilizzato da EMD per ottenere un token di accesso prima di inviare il messaggio.
  2. Endpoint di Ricezione Messaggi (Webhook): il destinatario effettivo del payload del messaggio di cortesia.

Flusso di Integrazione

Il flusso di una notifica in arrivo è il seguente:
  1. EMD chiama l'endpoint OAuth2 del PSP per ottenere un access_token.
  2. EMD usa il token ricevuto come Bearer nell'header Authorization.
  3. EMD esegue una chiamata POST all'endpoint webhook del PSP, includendo il payload del messaggio.
  4. Il PSP risponde con 200 OK per confermare la ricezione e la presa in carico del messaggio
  5. Il PSP risponde con 4xx KO (es: il messaggio non è conforme alle regole definite)

1. Configurazione dell'Autenticazione

Durante la fase di onboarding, vengono concordati e configurati con il team EMD i seguenti parametri:
  • URL dell'endpoint OAuth2: supporta placeholder dinamici (es. https://login.microsoftonline.com/{tenantId}/oauth2/token).
  • Parametri del body: le credenziali da inviare (es. client_id, client_secret, scope, grant_type) sono concordate in fase di onboarding e possono includere parametri aggiuntivi.
  • Formato della richiesta: il body viene inviato come application/x-www-form-urlencoded, che è lo standard de-facto per OAuth2.
  • Formato della risposta: il PSP deve restituire un JSON conforme allo standard OAuth2 contenente obbligatoriamente il campo access_token.
Importante: Attualmente il servizio supporta esclusivamente il protocollo OAuth2.

2. Endpoint di Autenticazione

POST /{auth_endpoint}
EMD chiama questo endpoint per ottenere il token di accesso. Il path completo è la concatenazione tra il auth_base_url e auth_endpoint, entrambi configurati in fase di onboarding.
Parametri di path:
ParametroTipoObbligatorioDescrizione
auth_endpointstringParte finale del percorso dell'endpoint (es. token). Non includere lo slash iniziale
Body della richiesta (application/x-www-form-urlencoded):
Il body è dinamico e contiene le credenziali concordate in fase di onboarding. Un esempio tipico:
1client_id=CLIENT_123&client_secret=SECRET_XYZ&grant_type=client_credentials
2
I parametri sono liberi (additionalProperties: string), ma nella maggior parte dei casi includeranno client_id, client_secret e grant_type.
Risposta di successo (200 OK):
1{
2  "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
3  "token_type": "Bearer",
4  "expires_in": 3600
5}
6
CampoTipoObbligatorioDescrizione
access_tokenstringToken di accesso da usare nelle successive chiamate
token_typestringNoTipo di token, solitamente Bearer
expires_inintegerNoDurata in secondi della validità del token

3. Endpoint di Ricezione Messaggi (Webhook)

POST /{message_endpoint}
EMD chiama questo endpoint per recapitare il messaggio di cortesia al PSP. La chiamata è autenticata tramite il token ottenuto al punto precedente, passato nell'header Authorization: Bearer <access_token>.
Parametri di path:
ParametroTipoObbligatorioDescrizione
message_endpointstringParte finale del percorso del webhook (es. notifiche/ricevi). Non includere lo slash iniziale
Autenticazione: Bearer token nell'header Authorization.
Body della richiesta (application/json):
1{
2  "messageId": "8a32fa8a-5036-4b39-8f2e-47d3a6d23f9e",
3  "recipientId": "RSSMRA85T10A562S",
4  "triggerDateTime": "2024-06-21T12:34:56",
5  "triggerDateTimeUTC": "2024-06-21T12:34:56.000Z",
6  "senderDescription": "Comune di Pontecagnano",
7  "messageUrl": "https://cittadini.dev.notifichedigitali.it",
8  "originId": "XRUZ-GZAJ-ZUEJ-202407-W-1",
9  "title": "Nuovo messaggio!",
10  "content": "Ciao, hai ricevuto una notifica SEND...",
11  "analogSchedulingDate": "2024-06-26T12:34:56.000Z",
12  "workflowType": "ANALOG",
13  "associatedPayment": true
14}
15
Risposta attesa:
Il PSP deve rispondere con HTTP 200 OK. Il contenuto del body di risposta non viene elaborato da EMD.

Schema del Payload di Notifica (NotificationPayload)

CampoTipoObbligatorioDescrizione
messageIdstringID univoco del messaggio (1-100 caratteri). Esempio: 8a32fa8a-5036-4b39-8f2e-47d3a6d23f9e
recipientIdstringCodice Fiscale del destinatario (1-100 caratteri). Esempio: RSSMRA85T10A562S
triggerDateTimestring (date-time)Data e ora locale in cui è stato richiesto l'invio. Esempio: 2024-06-21T12:34:56
triggerDateTimeUTCstring (date-time)Data e ora UTC in cui è stato richiesto l'invio, formato ISO 8601. Esempio: 2025-10-06T12:00:40.695Z
senderDescriptionstringDescrizione del mittente del messaggio, supporta UTF-8 (1-250 caratteri). Esempio: Comune di Pontecagnano
messageUrlstring (URI)URL per accedere al messaggio originale su piattaforma SEND (1-2048 caratteri). Esempio: https://cittadini.dev.notifichedigitali.it
originIdstringID del messaggio originale sulla piattaforma sorgente (1-100 caratteri). Esempio: XRUZ-GZAJ-ZUEJ-202407-W-1
titlestringTitolo del messaggio, supporta UTF-8 (1-250 caratteri). Esempio: Nuovo messaggio!
contentstringContenuto del messaggio in formato Markdown (1-100.000 caratteri). Il contenuto varia in base al workflowType
workflowTypestring (enum)Tipo di notifica. Valori possibili: ANALOG oppure DIGITAL
associatedPaymentbooleanNoIndica se alla notifica è associato un pagamento
analogSchedulingDatestring (date-time)CondizionaleData di scadenza per la deadline di 120 ore (ISO 8601). Obbligatorio solo quando workflowType è ANALOG

Differenza tra workflowType ANALOG e DIGITAL

Il campo workflowType determina il tipo di notifica ricevuta e di conseguenza il contenuto del campo content:
ANALOG: la notifica prevede una scadenza entro la quale l'Utente deve accedere al messaggio per evitare la consegna tramite raccomandata postale. Il campo analogSchedulingDate è obbligatorio e indica la data limite. Il campo content include informazioni sulla scadenza.
DIGITAL: la notifica è una comunicazione digitale standard senza scadenza per la consegna fisica. Include informazioni sulla consegna legale digitale. Il campo analogSchedulingDate non è presente.

Codici di Risposta

Codice HTTPDescrizione
200messaggio di cortesia ricevuto correttamente.
401Token mancante o non valido nell'header Authorization

Schemi di Autenticazione

AuthRequestDynamic

Schema del body per la richiesta di autenticazione. Accetta proprietà libere di tipo stringa (additionalProperties: string).
Esempio tipico:
CampoTipoDescrizione
client_idstringIdentificativo del client OAuth2
client_secretstringSegreto del client OAuth2
grant_typestringTipo di grant OAuth2, solitamente client_credentials

TokenResponse

CampoTipoObbligatorioDescrizione
access_tokenstringToken JWT da usare nelle chiamate successive
token_typestringNoTipo di token (es. Bearer)
expires_ininteger (int64)NoSecondi di validità del token