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.
Parametri de cale
D112, D300…).
Corpul cererii
Se trimite ca JSON, în corpul cererii (Content-Type: application/json) — nu în şirul de interogare.
{form}/build.
{
"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"
}
}
]
}
{
"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
}
]
}
]
}
{
"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
xml (implicit) sau base64.
ex. base64
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=trueomite 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
true/false, sau null când validarea nu a putut rula.
strict=true.
{cod,mesaj,camp}.
{cod,mesaj,camp}.
total, valide, invalide.
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"}}]}
{
"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"
}
}
body: {"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}]}]}
{
"data": {
"formular": "D100",
"rezultate": [
{
"index": 0,
"valid": true,
"xml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<declaratie100 xmlns=\"mfp:anaf:dgti:d100:declaratie:v2\" luna=\"9\" an=\"2026\" d_anulare=\"0\" nume_declar=\"Exemplu\" prenume_declar=\"Ion\" functie_declar=\"Administrator\" cui=\"990000005\" den=\"Exemplu Furnizor SRL\" adresa=\"Cluj-Napoca, Str. Memorandumului 28\" totalPlata_A=\"2400\">\n <obligatie cod_oblig=\"102\" cod_bugetar=\"20100101\" scadenta=\"25.10.2026\" nr_evid=\"1\" suma_dat=\"1200\" suma_plata=\"1200\"/>\n</declaratie100>\n",
"errors": [],
"warnings": []
}
],
"sumar": {
"total": 2,
"valide": 2,
"invalide": 0
}
},
"meta": {
"generat_la": "2026-10-06T23: 59: 42+03: 00"
}
}
body: {"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}]}]}
{
"data": {
"formular": "D390",
"rezultate": [
{
"index": 0,
"valid": true,
"xml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<declaratie390 xmlns=\"mfp:anaf:dgti:d390:declaratie:v3\" luna=\"9\" an=\"2026\" d_rec=\"0\" nume_declar=\"Exemplu\" prenume_declar=\"Ion\" functie_declar=\"Administrator\" cui=\"990000005\" den=\"Exemplu Furnizor SRL\" adresa=\"Cluj-Napoca, Str. Memorandumului 28\" totalPlata_A=\"0\">\n <rezumat nr_pag=\"1\" nrOPI=\"1\" bazaL=\"15000\" bazaT=\"0\" bazaA=\"0\" bazaP=\"0\" bazaS=\"0\" bazaR=\"0\" total_baza=\"15000\"/>\n <operatie tip=\"L\" tara=\"DE\" codO=\"999000009\" denO=\"Exemplu Client GmbH\" baza=\"15000\"/>\n</declaratie390>\n",
"errors": [],
"warnings": []
}
],
"sumar": {
"total": 2,
"valide": 2,
"invalide": 0
}
},
"meta": {
"generat_la": "2026-10-06T23: 59: 42+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. |
| 404 | negasit | Formular nesuportat. |
| 422 | xml_invalid | Corp fără declaratii (sau gol), sau peste 200 de declarații. |
| 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": "Corp fără declaratii (sau gol), sau peste 200 de declarații.",
"camp": "form",
"request_id": "0199c1f0-6e1a-7c3d-9b2f-4a8e5d1c7b04"
}
}