Anaf v1 / e-TVA
Citește decontul precompletat
Citeşte decontul de TVA (D300) — precompletat de ANAF sau propriu — şi întoarce rândurile ca JSON, cu codul fiecăruia şi suma lui.
POST
https://oneapi.ro/api/anaf/v1/etva/parse
Corpul cererii
Corpul cererii e documentul întreg, trimis brut (Content-Type: application/xml) — nu un obiect cu câmpuri.
Decont precompletat de ANAF
Decont propriu
Decont cu TVA de rambursat
Parametri de interogare
Ruta nu acceptă parametri de interogare.
Cum se comportă
- Documentul se poate trimite şi ca fişier:
multipart/form-datacu câmpulfisier(curl -F fisier=@document.xml), în locul corpului brut. Conţinutul fişierului devine corpul cererii, deci rezultatul e identic; opţiunile rămân în query string, iar alt câmp de formular lângăfisierdă422 camp_necunoscut. - Primește un decont precompletat RO e-TVA (format D300) și întoarce JSON-ul de business — antet + rânduri. Folosește același parser ca D300.
- Zero retenție: parsarea e stateless, in-memory.
La ce folosește
- Citirea structurată a decontului precompletat primit de la ANAF, fără a parsa XML de mână.
Structura răspunsului
CâmpTipDescriere
data
object
JSON-ul decontului (antet +
randuri), ca la D300.
data.luna
integer
Luna la care se referă datele.
data.an
integer
Anul la care se referă datele.
data.tip_decont
string
data.pro_rata
string
data.declarant.cui
string
Codul de identificare fiscală, fără prefixul
RO.
data.declarant.den
string
data.declarant.nume
string
Numele, aşa cum îl publică sursa.
data.declarant.prenume
string
data.declarant.functie
string
data.declarant.adresa
string
Adresa, în forma publicată de sursă.
data.declarant.banca
string
data.declarant.cont
string
data.declarant.caen
string
Codul CAEN al activităţii, în revizia seriei.
data.optiuni.temei
string
data.optiuni.nr_evid
string
data.optiuni.depusReprezentant
integer
data.optiuni.bifa_interne
integer
data.optiuni.bifa_cereale
string
data.optiuni.bifa_mob
string
data.optiuni.bifa_disp
string
data.optiuni.bifa_cons
string
data.optiuni.solicit_ramb
string
data.total_plata
integer
data.randuri.R9_1
integer
data.randuri.R9_2
integer
data.randuri.R64_1
integer
meta.generat_la
string
Momentul la care s-a construit răspunsul (ISO 8601).
Exemple de răspuns
body: @etva-precompletat.xml
POSThttps://oneapi.ro/api/anaf/v1/etva/parse
{
"data": {
"luna": 9,
"an": 2026,
"tip_decont": "L",
"pro_rata": "0",
"declarant": {
"cui": "990000005",
"den": "Exemplu Furnizor SRL",
"nume": "Exemplu",
"prenume": "Ion",
"functie": "Administrator",
"adresa": "Cluj-Napoca, Str. Memorandumului 28",
"banca": "Banca Exemplu",
"cont": "RO49AAAA1B31007593840000",
"caen": "6201"
},
"optiuni": {
"temei": "0",
"nr_evid": "0",
"depusReprezentant": 0,
"bifa_interne": 0,
"bifa_cereale": "N",
"bifa_mob": "N",
"bifa_disp": "N",
"bifa_cons": "N",
"solicit_ramb": "N"
},
"total_plata": 357,
"randuri": {
"R9_1": 1700,
"R9_2": 357,
"R64_1": 357
}
},
"meta": {
"generat_la": "2026-10-06T23: 59: 44+03: 00"
}
}
body: @etva-propriu.xml
POSThttps://oneapi.ro/api/anaf/v1/etva/parse
{
"data": {
"luna": 9,
"an": 2026,
"tip_decont": "L",
"pro_rata": "0",
"declarant": {
"cui": "990000005",
"den": "Exemplu Furnizor SRL",
"nume": "Exemplu",
"prenume": "Ion",
"functie": "Administrator",
"adresa": "Cluj-Napoca, Str. Memorandumului 28",
"banca": "Banca Exemplu",
"cont": "RO49AAAA1B31007593840000",
"caen": "6201"
},
"optiuni": {
"temei": "0",
"nr_evid": "0",
"depusReprezentant": 0,
"bifa_interne": 0,
"bifa_cereale": "N",
"bifa_mob": "N",
"bifa_disp": "N",
"bifa_cons": "N",
"solicit_ramb": "N"
},
"total_plata": 147,
"randuri": {
"R9_1": 700,
"R9_2": 147,
"R64_1": 147
}
},
"meta": {
"generat_la": "2026-10-06T23: 59: 44+03: 00"
}
}
body: @etva-rambursare.xml
POSThttps://oneapi.ro/api/anaf/v1/etva/parse
{
"data": {
"luna": 9,
"an": 2026,
"tip_decont": "L",
"pro_rata": "0",
"declarant": {
"cui": "990000005",
"den": "Exemplu Furnizor SRL",
"nume": "Exemplu",
"prenume": "Ion",
"functie": "Administrator",
"adresa": "Cluj-Napoca, Str. Memorandumului 28",
"banca": "Banca Exemplu",
"cont": "RO49AAAA1B31007593840000",
"caen": "6201"
},
"optiuni": {
"temei": "0",
"nr_evid": "0",
"depusReprezentant": 0,
"bifa_interne": 0,
"bifa_cereale": "N",
"bifa_mob": "N",
"bifa_disp": "N",
"bifa_cons": "N",
"solicit_ramb": "D"
},
"total_plata": 0,
"randuri": {
"R9_1": 700,
"R9_2": 147,
"R22_1": 2000,
"R22_2": 420,
"R65_1": 273
}
},
"meta": {
"generat_la": "2026-10-06T23: 59: 44+03: 00"
}
}
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 | xml_invalid | XML care nu se poate parsa sau nu e un decont D300. |
| 429 | cota_depasita | Cota lunară a planului a fost depăşită (vezi Retry-After). |
Erorile modulului Anaf au acelaşi plic ca restul platformei, cu două câmpuri în plus: {eroare: {cod, mesaj, camp, request_id}}. eroare.cod e stabil şi e cel după care ramifici în cod; la validare (422) codul e specific cazului: xml_invalid, xml_nu_e_factura, unitate_necunoscuta, luna_invalida ş.a. camp arată câmpul vinovat, când se poate identifica.
{
"eroare": {
"cod": "xml_invalid",
"mesaj": "XML care nu se poate parsa sau nu e un decont D300.",
"camp": null,
"request_id": "0199c1f0-6e1a-7c3d-9b2f-4a8e5d1c7b04"
}
}