oneapi
Autentificare
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

etva-precompletat.xml application/xml · 0,5 KB — se trimite ca atare, în corpul cererii.

Decont propriu

etva-propriu.xml application/xml · 0,5 KB — se trimite ca atare, în corpul cererii.

Decont cu TVA de rambursat

etva-rambursare.xml application/xml · 0,6 KB — se trimite ca atare, în corpul cererii.

Parametri de interogare

Ruta nu acceptă parametri de interogare.

Cum se comportă

  • Documentul se poate trimite şi ca fişier: multipart/form-data cu câmpul fisier (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ă fisier dă 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"
    }
}

Coduri de eroare

CodSlugCând apare
401neautentificatToken lipsă, invalid, expirat sau revocat.
403feature_indisponibilPlanul curent nu include funcţia de care ţine ruta.
422xml_invalidXML care nu se poate parsa sau nu e un decont D300.
429cota_depasitaCota 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"
    }
}