Financiar v1 / Validare
Validare IBAN
Verifică un IBAN după ISO 13616 (structură, lungime pe ţară, cifre de control mod-97) şi, pentru
IBAN-urile româneşti, identifică banca emitentă.
Un IBAN greşit NU e o eroare a cererii: răspunsul e 200 cu valid: false şi un cod în motiv
care spune ce e greşit — formă, lungime sau cifre de control.
POST
https://oneapi.ro/api/financiar/v1/validare/iban
Corpul cererii
Se trimite ca JSON, în corpul cererii (Content-Type: application/json) — nu în şirul de interogare.
NumeTipDescriereValori acceptate
ibanobligatoriu
string
Obligatoriu, în corpul cererii. Cu sau fără spaţii/cratime, majuscule sau minuscule.
max 42 car.
IBAN românesc
Corpul cererii
{
"iban": "RO49AAAA1B31007593840000"
}
IBAN german
Corpul cererii
{
"iban": "DE89370400440532013000"
}
Scris cu spaţii şi litere mici
Corpul cererii
{
"iban": "ro49 aaaa 1b31 0075 9384 0000"
}
Cifre de control greşite
Corpul cererii
{
"iban": "RO49AAAA1B31007593840001"
}
Parametri de interogare
Ruta nu acceptă parametri de interogare.
Cum se comportă
- Verifică un IBAN după ISO 13616: structura, lungimea pe ţară şi cifrele de control (mod-97). Pentru IBAN-urile româneşti identifică şi banca emitentă.
- Se acceptă orice formatare uzuală: spaţii de grupare, cratime, minuscule. Răspunsul întoarce forma canonică în
iban. - Un IBAN greşit nu e o eroare a cererii. Răspunsul e 200 cu
valid: falseşi un cod înmotiv:forma_invalida,lungime_gresita(culungime_asteptata) saucontrol_invalid. „Invalid" fără explicaţie n-ajută pe cineva care a inversat două cifre. - Metoda e
POST, nuGET, pentru că un IBAN identifică contul cuiva, iar un query-string ajunge în logurile de acces, în telemetrie şi în istoricul browserului. - Banca se declară numai când codul aparţine unei instituţii de credit confirmate. Registrul provine din GLEIF şi conţine toate deţinătoarele de BIC din România — inclusiv o fabrică de bere, Bursa de Valori şi case de brokeraj. Un IBAN construit pe codul unei astfel de entităţi nu poate exista, deci răspunsul e
motiv_banca: "nu_e_institutie_de_credit", nu numele entităţii. Numele apare separat, înentitate_cu_acest_cod, ca informaţie de depanare. - Identificarea băncii merge doar pentru România: directoarele BIC/SWIFT complete sunt licenţiate şi nu le folosim. Pentru IBAN-uri străine,
motiv_bancaedoar_pentru_romania— o limitare declarată, nu unnullfără explicaţie. - Acoperirea: 26 de instituţii de credit confirmate, inclusiv sucursalele băncilor străine (ING, Citibank, Revolut, BNP Paribas). Ele n-au LEI propriu, ci al societăţii-mamă, deci se confirmă prin potrivire pe denumire cu registrul BNR.
La ce folosește
- Validarea unui IBAN într-un formular, înainte de a-l salva.
- Identificarea băncii pentru afişare sau rutare de plăţi.
- Depanarea unui IBAN transcris greşit.
Structura răspunsului
CâmpTipDescriere
data[]
object[]
meta.temei
string
Temeiul legal al valorilor sau al modului de calcul.
meta.sursa_banci
string
meta.nota
string
Precizare despre cum se citesc datele din răspuns — o capcană, o convenţie sau o limită a sursei.
data.iban
string
Forma canonică: majuscule, fără spaţii.
data.valid
boolean
Rezultatul verificării ISO 13616.
data.motiv
null
Codul defectului când
valid e false; null altfel.
data.lungime_asteptata
integer
Lungimea oficială pentru ţara respectivă.
null pentru ţările din afara tabelului, unde rămâne doar verificarea mod-97.
data.cod_banca
string
Cele 4 litere de după cifrele de control, la IBAN-urile româneşti.
data.banca
null
Instituţia de credit: denumirea din registrul BNR, BIC, CUI, LEI şi starea.
null când nu se poate identifica.
data[].banca.tip
institutie_credit sau trezoreria_statului — codul TREZ al conturilor de trezorerie, unde cui, lei şi stare sunt null.
data.motiv_banca
string
De ce lipseşte banca:
doar_pentru_romania, cod_necunoscut, nu_e_institutie_de_credit.
data[].entitate_cu_acest_cod
Apare doar la
nu_e_institutie_de_credit: ce entitate deţine codul, ca ajutor de depanare.
Exemple de răspuns
body: {"iban": "RO49AAAA1B31007593840000"}
POSThttps://oneapi.ro/api/financiar/v1/validare/iban
{
"data": {
"iban": "RO49AAAA1B31007593840000",
"valid": true,
"tara": "RO",
"lungime": 24,
"lungime_asteptata": 24,
"motiv": null,
"cod_banca": "AAAA",
"banca": null,
"motiv_banca": "cod_necunoscut"
},
"meta": {
"temei": "ISO 13616; control mod-97 calculat pe bucăţi.",
"sursa_banci": "GLEIF (mapare BIC↔LEI, licenţă CC0) + registrul BNR al instituţiilor de credit; codul `TREZ` al Trezoreriei Statului e ţinut local.",
"nota": "IBAN valid ca structură, dar codul de bancă nu apare în registru. Verifică transcrierea: cifrele de control nu prind o literă greşită în codul băncii dacă rezultatul rămâne divizibil."
}
}
body: {"iban": "DE89370400440532013000"}
POSThttps://oneapi.ro/api/financiar/v1/validare/iban
{
"data": {
"iban": "DE89370400440532013000",
"valid": true,
"tara": "DE",
"lungime": 22,
"lungime_asteptata": 22,
"motiv": null,
"cod_banca": null,
"banca": null,
"motiv_banca": "doar_pentru_romania"
},
"meta": {
"temei": "ISO 13616; control mod-97 calculat pe bucăţi.",
"sursa_banci": "GLEIF (mapare BIC↔LEI, licenţă CC0) + registrul BNR al instituţiilor de credit; codul `TREZ` al Trezoreriei Statului e ţinut local.",
"nota": "IBAN valid. Identificarea băncii e disponibilă doar pentru IBAN-urile româneşti: directoarele BIC/SWIFT complete sunt licenţiate şi nu le folosim."
}
}
body: {"iban": "ro49 aaaa 1b31 0075 9384 0000"}
POSThttps://oneapi.ro/api/financiar/v1/validare/iban
{
"data": {
"iban": "RO49AAAA1B31007593840000",
"valid": true,
"tara": "RO",
"lungime": 24,
"lungime_asteptata": 24,
"motiv": null,
"cod_banca": "AAAA",
"banca": null,
"motiv_banca": "cod_necunoscut"
},
"meta": {
"temei": "ISO 13616; control mod-97 calculat pe bucăţi.",
"sursa_banci": "GLEIF (mapare BIC↔LEI, licenţă CC0) + registrul BNR al instituţiilor de credit; codul `TREZ` al Trezoreriei Statului e ţinut local.",
"nota": "IBAN valid ca structură, dar codul de bancă nu apare în registru. Verifică transcrierea: cifrele de control nu prind o literă greşită în codul băncii dacă rezultatul rămâne divizibil."
}
}
body: {"iban": "RO49AAAA1B31007593840001"}
POSThttps://oneapi.ro/api/financiar/v1/validare/iban
{
"data": {
"iban": "RO49AAAA1B31007593840001",
"valid": false,
"tara": "RO",
"lungime": 24,
"lungime_asteptata": 24,
"motiv": "control_invalid",
"cod_banca": null,
"banca": null,
"motiv_banca": null
},
"meta": {
"temei": "ISO 13616; control mod-97 calculat pe bucăţi.",
"sursa_banci": "GLEIF (mapare BIC↔LEI, licenţă CC0) + registrul BNR al instituţiilor de credit; codul `TREZ` al Trezoreriei Statului e ţinut local.",
"nota": "Structura e corectă, dar cifrele de control nu se verifică — semn tipic de cifre inversate sau de un caracter greşit."
}
}
Coduri de eroare
| Cod | Slug | Când apare |
|---|---|---|
| 401 | neautentificat | Token lipsă, invalid, expirat sau revocat. |
| 403 | feature_indisponibil | Planul curent nu include funcţia de care ţine ruta. |
| 422 | validare | Lipseşte iban sau are o lungime imposibilă. Un IBAN prezent dar greşit întoarce 200 cu valid: false. |
| 429 | cota_depasita | Cota lunară a planului a fost depăşită (vezi Retry-After). |
Toate erorile au aceeași formă. eroare.cod e stabil și e cel după care trebuie să ramifici în cod — nu după textul din mesaj, care se poate schimba.
{
"eroare": {
"cod": "validare",
"mesaj": "Lipseşte iban sau are o lungime imposibilă. Un IBAN prezent dar greşit întoarce 200 cu valid: false."
}
}