DevPortalPagoPA


Tabella dei contenuti

API Reference - PAYMENT

Versione: 1.4.1
Titolo: EMD Payment API - PSP Integration
Contatto: PagoPA S.p.A. - messaggidicortesia@assistenza.pagopa.it

Panoramica

Questa API gestisce il flusso di pagamento integrato all'interno del sistema EMD (Messaggi di Cortesia). Permette ai PSP di generare un token di recupero (retrievalToken) associato al messaggio di cortesia, recuperarne i dettagli, e redirezionare l'Utente verso l'app bancaria del PSP tramite deep link per completare il pagamento.
Il flusso tipico è:
  1. Il PSP riceve un messaggio di cortesia e chiama POST /retrievalTokens per salvare le informazioni di recupero, ottenendo un retrievalId.
  2. Il retrievalId viene incluso nel link mostrato all'Utente che effettua una redirect verso la piattaforma SEND
  3. Quando l'Utente entra nella piattaforma SEND cliccando sulla CTA "Paga con la tua Banca", viene chiamato GET /token (redirect) che genera il deep link verso l'app bancaria del PSP.

Ambienti

AmbienteURL Base
Development (DEV)https://api-emd.dev.cstar.pagopa.it/emd/payment
User Acceptance Test (UAT)https://api-emd.uat.cstar.pagopa.it/emd/payment
Produzione (PROD)https://api-emd.cstar.pagopa.it/emd/payment

Autenticazione

Le operazioni POST /retrievalTokens e GET /retrievalTokens/{retrievalId} richiedono autenticazione tramite OAuth2 con flusso Client Credentials. Il token JWT Bearer deve essere incluso nell'header Authorization.
L'endpoint GET /token (redirect) è pubblico e non richiede autenticazione.

Endpoint

1. Salva il retrieval payload

POST /retrievalTokens
Crea e salva un payload di recupero associato a un messaggio di cortesia. Restituisce un retrievalId univoco da utilizzare nei successivi passaggi del flusso di pagamento.
Parametri di header:
HeaderTipoObbligatorioDescrizione
Accept-LanguagestringLingua della risposta (es. it-IT). Default: it-IT
Body della richiesta (application/json):
1{
2  "agent": "iOS",
3  "originId": "XRUZ-GZAJ-ZUEJ-202407-W-1",
4  "linkVersion": "v1"
5}
6
CampoTipoObbligatorioDescrizione
agentstringIdentificatore del sistema operativo sorgente (es. iOS, Android). 2-50 caratteri alfanumerici
originIdstringIdentificatore univoco del messaggio originale. 24-36 caratteri alfanumerici con trattini
linkVersionstringNoVersione del deep link da utilizzare. Se non fornita, viene usata la versione predefinita concordata con il PSP. 1-50 caratteri
Risposta di successo (200 OK):
1{
2  "retrievalId": "0e4c6629-8753-234s-b0da-1f796999ec2-15038637960920"
3}
4
Il retrievalId è una stringa di esattamente 50 caratteri che identifica univocamente il payload salvato.

2. Recupera il retrieval payload

GET /retrievalTokens/{retrievalId}
Recupera i dettagli completi di un payload di recupero precedentemente salvato, inclusi il deep link generato e le informazioni sul PSP.
Parametri di path:
ParametroTipoObbligatorioDescrizione
retrievalIdstringIdentificativo univoco del retrieval payload (esattamente 50 caratteri)
Parametri di header:
HeaderTipoObbligatorioDescrizione
Accept-LanguagestringLingua della risposta (es. it-IT). Default: it-IT
Risposta di successo (200 OK):
1{
2  "retrievalId": "0e4c6629-8753-234s-b0da-1f796999ec2-15038637960920",
3  "tppId": "0e3bee29-8753-447c-b0da-1f7965558ec2-1706867960900",
4  "deeplink": "https://example.com/deeplink/123e4567-e89b-12d3-a456-426614174000?userId=1234567890&session=abcdef",
5  "pspDenomination": "Banca1",
6  "originId": "XRUZ-GZAJ-ZUEJ-202407-W-1",
7  "isPaymentEnabled": true
8}
9
CampoTipoDescrizione
retrievalIdstringID univoco del retrieval (50 caratteri)
tppIdstringID univoco del PSP sui sistemi PagoPA S.p.A.(50 caratteri)
deeplinkstringURL deep link per redirigere l'utente all'app bancaria del PSP (10-128 caratteri)
pspDenominationstringNome del provider di pagamento mostrato come etichetta del pulsante (1-15 caratteri)
originIdstringID del messaggio originale (24-36 caratteri)
isPaymentEnabledbooleanIndica se il PSP ha abilitato la funzionalità di pagamento

GET /token
Endpoint pubblico (senza autenticazione) che riceve i parametri di un pagamento e reindirizza il browser dell'Utente verso il deep link dell'app bancaria del PSP tramite risposta HTTP 302 Redirect.
Parametri di query:
ParametroTipoObbligatorioDescrizione
retrievalIdstringID univoco del retrieval payload (esattamente 50 caratteri)
fiscalCodestringCodice fiscale o P.IVA dell'amministrazione mittente (11-16 caratteri alfanumerici)
noticeNumberstringIdentificatore univoco del pagamento (18-20 caratteri, formato specifico)
Parametri di header:
HeaderTipoObbligatorioDescrizione
Accept-LanguagestringLingua della risposta (es. it-IT). Default: it-IT
Risposta di successo (302 Found):
La risposta non ha body. Il reindirizzamento avviene tramite l'header Location che contiene il deep link generato verso l'app bancaria del PSP.
HeaderDescrizione
LocationURL del deep link verso l'app bancaria del PSP (max 2048 caratteri, formato URI valido)

Schemi dei Dati

RetrievalRequestDTO

CampoTipoObbligatorioDescrizione
agentstringSistema operativo sorgente (es. iOS, Android). Pattern: ^[a-zA-Z0-9_-]{2,50}$
originIdstringID del messaggio originale. Pattern: ^[a-zA-Z0-9-]{24,36}$
linkVersionstringNoVersione del deep link. Pattern: ^[a-zA-Z0-9_-]{1,50}$

RetrievaIdResponseDTO

CampoTipoObbligatorioDescrizione
retrievalIdstringID univoco del retrieval (esattamente 50 caratteri)

RetrievalResponseDTO

CampoTipoObbligatorioDescrizione
retrievalIdstringID univoco del retrieval (esattamente 50 caratteri)
tppIdstringNoID univoco del PSP (esattamente 50 caratteri)
deeplinkstringNoURL deep link verso l'app bancaria del PSP (10-128 caratteri)
pspDenominationstringNoNome del provider di pagamento (1-15 caratteri alfanumerici)
originIdstringNoID del messaggio originale (24-36 caratteri)
isPaymentEnabledbooleanNoIndica se il PSP ha abilitato la funzionalità di pagamento

Codici di Errore

Tutti gli endpoint restituiscono errori nel seguente formato:
1{
2  "code": "TPP_NOT_FOUND",
3  "message": "TPP does not exist or is not active"
4}
5
Codice HTTPCodice ErroreDescrizione
400BAD_REQUESTRichiesta malformata o parametri non validi
401AUTHENTICATION_FAILEDAutenticazione fallita o token non valido
404TPP_NOT_FOUNDIl TPP non esiste o non è attivo
404RETRIEVAL_NOT_FOUNDIl retrieval non esiste o non è attivo
429TOO_MANY_REQUESTSSuperato il limite di richieste consentite
500RETRIEVAL_GENERIC_ERRORErrore interno del server

Header di Rate Limiting

Ogni risposta include i seguenti header per il controllo del traffico:
HeaderTipoDescrizione
RateLimit-LimitintegerNumero massimo di richieste consentite nel periodo corrente (max 240)
RateLimit-ResetintegerSecondi rimanenti al reset del periodo corrente (max 60)
Retry-AfterintegerSecondi da attendere prima di effettuare una nuova richiesta (max 240)
Access-Control-Allow-OriginstringIndica se la risposta può essere condivisa con l'origine richiedente