Documentazione API Verification of Payee
Autenticazione, endpoint di verifica, payload di richiesta e risposta, codici di esito dello schema SEPA e gestione errori — tutto ciò che serve a uno sviluppatore per integrare la verifica IBAN/nome, con esempi JSON e cURL pronti da copiare.
{BASE_URL}/vop/v1/verify - Autenticazione
- Bearer token (OAuth 2.0)
- Formato
- application/json
La base URL e le credenziali API vengono fornite all'onboarding — contattaci per ottenerle.
L'API Verification of Payee è un unico endpoint REST autenticato: invii in POST il nome del beneficiario e un IBAN e ricevi un esito standardizzato in tempo reale. Gli esempi qui sotto sono illustrativi; la base URL e le credenziali esatte vengono rilasciate in fase di onboarding.
Autenticazione
Ogni richiesta è autenticata con un bearer token su HTTPS. Invia il token nell'header Authorization; i token sono rilasciati per ambiente (sandbox e produzione).
Le stesse credenziali abilitano anche la dashboard RoxBusiness, dove puoi eseguire verifiche estemporanee senza scrivere codice.
Authorization: Bearer <YOUR_API_TOKEN>
Content-Type: application/json Richiesta
Invia in POST un body JSON con il nome del beneficiario e l'IBAN. Per le persone giuridiche puoi inviare anche un identificativo dell'organizzazione (es. Partita IVA / Codice Fiscale) e un external_id opzionale per la riconciliazione.
Corpo della richiesta
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| name | string | Obbligatorio | Nome del beneficiario da verificare, così come inserito da chi paga. |
| iban | string | Obbligatorio | IBAN di destinazione (validato per formato e checksum prima della chiamata allo schema). |
| account_type | enum | Opzionale | NATURAL_PERSON o LEGAL_PERSON. Aiuta la banca rispondente a confrontare correttamente. |
| organisation_id | string | Opzionale | Partita IVA / Codice Fiscale per le persone giuridiche. Verificato rispetto al titolare registrato. |
| external_id | string | Opzionale | Il tuo id di riferimento, restituito nella risposta per la riconciliazione. |
{
"name": "ACME Trading S.r.l.",
"iban": "IT60X0542811101000000123456",
"account_type": "LEGAL_PERSON",
"organisation_id": "IT01524770524",
"external_id": "invoice-2025-00842"
} curl -X POST "$BASE_URL/vop/v1/verify" \
-H "Authorization: Bearer $ROXPAY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "ACME Trading S.r.l.",
"iban": "IT60X0542811101000000123456",
"account_type": "LEGAL_PERSON",
"organisation_id": "IT01524770524",
"external_id": "invoice-2025-00842"
}' Risposta
Una risposta 200 restituisce l'esito normalizzato, il codice di corrispondenza dello schema SEPA, il BIC della banca rispondente e il tempo di elaborazione. In caso di corrispondenza parziale il nome verificato è restituito in suggested_name.
Corpo della risposta
| Campo | Tipo | Descrizione |
|---|---|---|
| verification_id | string | Id univoco di questa verifica, per il tuo audit trail. |
| result | enum | MATCH, CLOSE_MATCH, NO_MATCH o NOT_APPLICABLE. |
| scheme_code | string | Il codice dello schema SEPA VoP: MTCH, CMTC, NMTC o NOAP. |
| suggested_name | string | In caso di CLOSE_MATCH, il nome verificato del titolare da suggerire a chi paga. |
| responding_bic | string | BIC dell'istituto che ha risposto alla verifica. |
| processing_time_ms | integer | Tempo impiegato dal PSP rispondente, in millisecondi. |
| external_id | string | Il tuo id di riferimento, restituito invariato. |
{
"verification_id": "vop_3f9a1c2e7b",
"result": "CLOSE_MATCH",
"scheme_code": "CMTC",
"suggested_name": "ACME Trading SRL",
"responding_bic": "BCITITMMXXX",
"processing_time_ms": 412,
"external_id": "invoice-2025-00842"
} Codici di esito
Ogni risposta corrisponde a uno dei quattro codici dello schema SEPA VoP. Ramifica su scheme_code così la tua logica resta stabile.
| Codice | Esito | Significato | Azione consigliata |
|---|---|---|---|
| MTCH | MATCH | Il nome corrisponde al titolare. | Procedi con sicurezza. |
| CMTC | CLOSE_MATCH | Quasi esatto (es. nome commerciale vs ragione sociale). | Mostra suggested_name; chiedi conferma a chi paga. |
| NMTC | NO_MATCH | Il nome non appartiene all'IBAN. | Stop deciso — avvisa e blocca l'approvazione automatica. |
| NOAP | NOT_APPLICABLE | Verifica non completabile. | Informa chi paga; lascia decidere. |
Gestione errori
NO_MATCH è un esito 200 valido, non un errore — non trattarlo mai come un fallimento di trasporto. Gli errori veri usano codici di stato 4xx/5xx con un codice leggibile da macchina e un request_id per il supporto.
| HTTP | Codice errore | Quando si verifica |
|---|---|---|
| 400 | invalid_iban | L'IBAN ha fallito la validazione di formato o checksum. |
| 400 | missing_field | Manca un campo obbligatorio (name o iban). |
| 401 | unauthorized | Bearer token mancante o non valido. |
| 429 | rate_limited | Troppe richieste — applica backoff e riprova. |
| 503 | scheme_unavailable | Lo schema VoP / il PSP rispondente è temporaneamente irraggiungibile. |
{
"error": "invalid_iban",
"message": "The 'iban' field failed checksum validation.",
"request_id": "req_8a2b1f0c"
} Integra in quattro passaggi
Un'integrazione REST standard che si inserisce nel tuo flusso di pagamento esistente.
- 1
Ottieni le credenziali
Attivati e ricevi bearer token e base URL per sandbox e produzione.
- 2
Chiama /verify
Invia in POST nome e IBAN del beneficiario, con external_id e organisation_id opzionali.
- 3
Leggi scheme_code
Ramifica su MTCH / CMTC / NMTC / NOAP e salva il verification_id.
- 4
Agisci nella tua UI
Mostra un segnale chiaro a chi paga, o subordina all'esito una distinta o un mandato.
FAQ per sviluppatori
Le prime domande dei team di integrazione.
Un body JSON con name e iban (obbligatori), più account_type, organisation_id (Partita IVA / Codice Fiscale per le persone giuridiche) ed external_id opzionali. Vedi l'esempio di richiesta qui sopra.
NO_MATCH (codice di schema NMTC) è una risposta 200 valida, non un errore. Trattala come uno stop deciso: avvisa chi paga, blocca l'approvazione automatica e richiedi un ricontrollo prima dell'invio.
Sì. I token sono rilasciati per ambiente, così puoi integrare e testare in sandbox prima di passare la base URL alla produzione.
Sì — invia organisation_id con account_type LEGAL_PERSON. Utile quando il nome commerciale differisce dalla ragione sociale registrata.
Invia il tuo external_id nella richiesta: viene restituito invariato e ogni risposta riporta anche un verification_id univoco.
Ottieni le credenziali API
Attivati sullo schema SEPA VoP con un'unica integrazione REST e vai live prima della scadenza.