oneapi
Autentificare
Anaf v1 / Declarații D

Construiește un lot

Mai multe luni ale aceluiaşi formular într-un singur apel, fiecare cu XML-ul şi verdictul ei. Pentru regularizări şi pentru recuperarea unui istoric întreg.

POST
https://oneapi.ro/api/anaf/v1/declaratii/build-lot/{form}

Parametri de cale

NumeTipDescriereExemplu
formobligatoriu string Codul formularului pentru care se construieşte lotul (D112, D300…).

Corpul cererii

Se trimite ca JSON, în corpul cererii (Content-Type: application/json) — nu în şirul de interogare.

NumeTipDescriereValori acceptate
declaratiiobligatoriu object[] Declaraţiile de construit, cel mult 200, toate ale aceluiaşi formular. Fiecare element are forma pe care o acceptă {form}/build.
Două luni de D394 Corpul cererii
{
    "declaratii": [
        {
            "luna": 9,
            "an": 2026,
            "tip_D394": "L",
            "declarant": {
                "cui": "990000005",
                "caen": "6201",
                "telefon": "0264000000",
                "adresa": "Cluj-Napoca, Str. Memorandumului 28",
                "den": "Exemplu Furnizor SRL"
            },
            "parteneri": [
                {
                    "tip": "L",
                    "tip_partener": 1,
                    "cota": 21,
                    "cui": "990000072",
                    "den": "Exemplu Client SRL",
                    "nr_facturi": 1,
                    "baza": 700,
                    "tva": 147
                }
            ],
            "reprezentant": {
                "den": "Exemplu Reprezentant",
                "functie": "Administrator",
                "adresa": "Cluj-Napoca, Str. Memorandumului 28"
            },
            "intocmit": {
                "den": "Exemplu Contabil",
                "cif": "990000005"
            }
        },
        {
            "luna": 10,
            "an": 2026,
            "tip_D394": "L",
            "declarant": {
                "cui": "990000005",
                "caen": "6201",
                "telefon": "0264000000",
                "adresa": "Cluj-Napoca, Str. Memorandumului 28",
                "den": "Exemplu Furnizor SRL"
            },
            "parteneri": [
                {
                    "tip": "L",
                    "tip_partener": 1,
                    "cota": 21,
                    "cui": "990000072",
                    "den": "Exemplu Client SRL",
                    "nr_facturi": 2,
                    "baza": 1700,
                    "tva": 357
                }
            ],
            "reprezentant": {
                "den": "Exemplu Reprezentant",
                "functie": "Administrator",
                "adresa": "Cluj-Napoca, Str. Memorandumului 28"
            },
            "intocmit": {
                "den": "Exemplu Contabil",
                "cif": "990000005"
            }
        }
    ]
}
Două luni de D100 Corpul cererii
{
    "declaratii": [
        {
            "luna": 9,
            "an": 2026,
            "declarant": {
                "cui": "990000005",
                "den": "Exemplu Furnizor SRL",
                "nume": "Exemplu",
                "prenume": "Ion",
                "functie": "Administrator",
                "adresa": "Cluj-Napoca, Str. Memorandumului 28"
            },
            "obligatii": [
                {
                    "cod_oblig": "102",
                    "cod_bugetar": "20100101",
                    "scadenta": "2026-10-25",
                    "nr_evid": "1",
                    "suma_dat": 1200,
                    "suma_plata": 1200
                }
            ]
        },
        {
            "luna": 10,
            "an": 2026,
            "declarant": {
                "cui": "990000005",
                "den": "Exemplu Furnizor SRL",
                "nume": "Exemplu",
                "prenume": "Ion",
                "functie": "Administrator",
                "adresa": "Cluj-Napoca, Str. Memorandumului 28"
            },
            "obligatii": [
                {
                    "cod_oblig": "102",
                    "cod_bugetar": "20100101",
                    "scadenta": "2026-11-25",
                    "nr_evid": "2",
                    "suma_dat": 1500,
                    "suma_plata": 1500
                }
            ]
        }
    ]
}
Două luni de D390 Corpul cererii
{
    "declaratii": [
        {
            "luna": 9,
            "an": 2026,
            "declarant": {
                "cui": "990000005",
                "den": "Exemplu Furnizor SRL",
                "nume": "Exemplu",
                "prenume": "Ion",
                "functie": "Administrator",
                "adresa": "Cluj-Napoca, Str. Memorandumului 28"
            },
            "operatiuni": [
                {
                    "tip": "L",
                    "tara": "DE",
                    "cod": "999000009",
                    "denumire": "Exemplu Client GmbH",
                    "baza": 15000
                }
            ]
        },
        {
            "luna": 10,
            "an": 2026,
            "declarant": {
                "cui": "990000005",
                "den": "Exemplu Furnizor SRL",
                "nume": "Exemplu",
                "prenume": "Ion",
                "functie": "Administrator",
                "adresa": "Cluj-Napoca, Str. Memorandumului 28"
            },
            "operatiuni": [
                {
                    "tip": "A",
                    "tara": "HU",
                    "cod": "12345676",
                    "denumire": "Exemplu Furnizor Kft",
                    "baza": 8000
                }
            ]
        }
    ]
}

Parametri de interogare

NumeTipDescriereValori acceptate
formatopțional text Forma XML-ului per element: xml (implicit) sau base64. ex. base64
strictopțional boolean true omite XML-ul la elementele invalide (întorci doar erorile); implicit se întoarce XML-ul oricum. ex. false

Cum se comportă

  • Construiește mai multe declarații ale ACELUIAȘI formular ({form}, ex. D390) într-un singur apel. Corpul e JSON: {declaratii:[{...}, ...]}, fiecare element în forma pe care o acceptă {form}/build. Fiecare e generată (JSON→XML) și validată contra XSD-ului oficial.
  • O declarație defectă nu rupe lotul: input invalid sau eroare de build sunt izolate per element și raportate, restul se construiesc normal.
  • Plafon de 200 de declarații per apel. format=base64 întoarce XML-ul base64; strict=true omite XML-ul la elementele invalide (întorci doar erorile lor).
  • Zero retenție și fără submitere la SPV — livrăm XML-urile gata de depus; depunerea o face contribuabilul.

La ce folosește

  • Generarea în masă a XML-urilor (ex. o D390 per firmă dintr-un grup), într-o singură cerere.

Structura răspunsului

CâmpTipDescriere
data.formular string Codul formularului construit.
data.rezultate[] array Câte un rezultat per declarație, în ordinea trimisă.
data.rezultate[].index integer Indexul elementului din listă.
data.rezultate[].valid boolean Verdictul XSD: true/false, sau null când validarea nu a putut rula.
data.rezultate[].xml string XML-ul generat (text sau base64); absent la elementele invalide când strict=true.
data.rezultate[].errors array Erorile de build/validare {cod,mesaj,camp}.
data.rezultate[].warnings array Avertismente neblocante {cod,mesaj,camp}.
data.sumar object Agregat pe lot: total, valide, invalide.
data.sumar.total integer
data.sumar.valide integer
data.sumar.invalide integer
meta.generat_la string Momentul la care s-a construit răspunsul (ISO 8601).

Exemple de răspuns

body: {"declaratii": [{"luna": 9, "an": 2026, "tip_D394": "L", "declarant": {"cui": "990000005", "caen": "6201", "telefon": "0264000000", "adresa": "Cluj-Napoca, Str. Memorandumului 28", "den": "Exemplu Furnizor SRL"}, "parteneri": [{"tip": "L", "tip_partener": 1, "cota": 21, "cui": "990000072", "den": "Exemplu Client SRL", "nr_facturi": 1, "baza": 700, "tva": 147}], "reprezentant": {"den": "Exemplu Reprezentant", "functie": "Administrator", "adresa": "Cluj-Napoca, Str. Memorandumului 28"}, "intocmit": {"den": "Exemplu Contabil", "cif": "990000005"}}, {"luna": 10, "an": 2026, "tip_D394": "L", "declarant": {"cui": "990000005", "caen": "6201", "telefon": "0264000000", "adresa": "Cluj-Napoca, Str. Memorandumului 28", "den": "Exemplu Furnizor SRL"}, "parteneri": [{"tip": "L", "tip_partener": 1, "cota": 21, "cui": "990000072", "den": "Exemplu Client SRL", "nr_facturi": 2, "baza": 1700, "tva": 357}], "reprezentant": {"den": "Exemplu Reprezentant", "functie": "Administrator", "adresa": "Cluj-Napoca, Str. Memorandumului 28"}, "intocmit": {"den": "Exemplu Contabil", "cif": "990000005"}}]}

POSThttps://oneapi.ro/api/anaf/v1/declaratii/build-lot/D394
{
    "data": {
        "formular": "D394",
        "rezultate": [
            {
                "index": 0,
                "valid": true,
                "xml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<declaratie394 xmlns=\"mfp:anaf:dgti:d394:declaratie:v5\" luna=\"9\" an=\"2026\" tip_D394=\"L\" sistemTVA=\"0\" op_efectuate=\"1\" cui=\"990000005\" caen=\"6201\" den=\"Exemplu Furnizor SRL\" adresa=\"Cluj-Napoca, Str. Memorandumului 28\" telefon=\"0264000000\" totalPlata_A=\"701\" denR=\"Exemplu Reprezentant\" functie_reprez=\"Administrator\" adresaR=\"Cluj-Napoca, Str. Memorandumului 28\" tip_intocmit=\"0\" den_intocmit=\"Exemplu Contabil\" cif_intocmit=\"990000005\" calitate_intocmit=\"administrator\" optiune=\"0\" prsAfiliat=\"0\">\n  <informatii nrCui1=\"1\" nrCui2=\"0\" nrCui3=\"0\" nrCui4=\"0\" nr_BF_i1=\"0\" incasari_i1=\"0\" incasari_i2=\"0\" nrFacturi_terti=\"0\" nrFacturi_benef=\"0\" nrFacturi=\"1\" nrFacturiL_PF=\"0\" nrFacturiLS_PF=\"0\" val_LS_PF=\"0\" tvaDedAI24=\"0\" tvaDedAI21=\"0\" tvaDedAI11=\"0\" tvaDedAI20=\"0\" tvaDedAI19=\"0\" tvaDedAI9=\"0\" tvaDedAI5=\"0\" solicit=\"0\"/>\n  <rezumat1 tip_partener=\"1\" cota=\"21\" facturiL=\"1\" bazaL=\"700\" tvaL=\"147\"/>\n  <rezumat2 cota=\"21\" bazaFSLcod=\"0\" TVAFSLcod=\"0\" bazaFSL=\"0\" TVAFSL=\"0\" bazaFSA=\"0\" TVAFSA=\"0\" bazaFSAI=\"0\" TVAFSAI=\"0\" bazaBFAI=\"0\" TVABFAI=\"0\" nrFacturiL=\"1\" bazaL=\"700\" tvaL=\"147\" nrFacturiA=\"0\" bazaA=\"0\" tvaA=\"0\" nrFacturiAI=\"0\" bazaAI=\"0\" tvaAI=\"0\" bazaL_PF=\"0\" tvaL_PF=\"0\"/>\n  <op1 tip=\"L\" tip_partener=\"1\" cota=\"21\" cuiP=\"990000072\" denP=\"Exemplu Client SRL\" nrFact=\"1\" baza=\"700\" tva=\"147\"/>\n</declaratie394>\n",
                "errors": [],
                "warnings": []
            }
        ],
        "sumar": {
            "total": 2,
            "valide": 2,
            "invalide": 0
        }
    },
    "meta": {
        "generat_la": "2026-10-06T23: 59: 42+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.
404negasitFormular nesuportat.
422xml_invalidCorp fără declaratii (sau gol), sau peste 200 de declarații.
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": "Corp fără declaratii (sau gol), sau peste 200 de declarații.",
        "camp": "form",
        "request_id": "0199c1f0-6e1a-7c3d-9b2f-4a8e5d1c7b04"
    }
}