Derivă un draft dintr-o sursă existentă
Construieşte un DRAFT de declaraţie din ce ai deja: D394 şi D390 din facturile e-Factura, D710 din două D100 (cel initial şi cel corectat). Draftul merge apoi la build, după ce îl verifici.
Parametri de cale
Corpul cererii
Se trimite ca JSON, în corpul cererii (Content-Type: application/json) — nu în şirul de interogare.
{form}/build: cui, den, adresa, nume, prenume, functie, telefon, fax, mail (plus caen la D394). O cheie necunoscută — de pildă denumire în loc de den — întoarce 422 cu lista cheilor acceptate. Ce rămâne necompletat apare în warnings.
D390/D394: lotul de facturi e-Factura (CIUS-RO) din care se derivă. Un element e fie XML-ul direct (text ori base64), fie obiectul {id, xml}. Nu se trimite la D710 — acolo corpul e {initial, corectat}.
D390/D394: luna raportată, 1–12. Nu se trimite la D710.
D390/D394: anul raportat, cel puţin 2016. Nu se trimite la D710.
D710: declaraţia D100 depusă, XML brut ori base64.
D710: declaraţia D100 corectă, XML brut ori base64.
{
"luna": 9,
"an": 2026,
"declarant": {
"cui": "990000005",
"den": "Exemplu Furnizor SRL"
},
"facturi": [
"@efactura.xml"
]
}
În exemplu, @efactura.xml ţin locul unor documente întregi: trimiţi conţinutul fişierului — XML-ul ca text sau base64, un PDF ca base64 — nu numele lui.
{
"luna": 9,
"an": 2026,
"declarant": {
"cui": "990000005",
"den": "Exemplu Furnizor SRL"
},
"facturi": [
"@efactura-intracomunitara.xml"
]
}
În exemplu, @efactura-intracomunitara.xml ţin locul unor documente întregi: trimiţi conţinutul fişierului — XML-ul ca text sau base64, un PDF ca base64 — nu numele lui.
{
"initial": "@d100.xml",
"corectat": "@d100-rectificat.xml"
}
În exemplu, @d100.xml, @d100-rectificat.xml ţin locul unor documente întregi: trimiţi conţinutul fişierului — XML-ul ca text sau base64, un PDF ca base64 — nu numele lui.
Parametri de interogare
Cum se comportă
- Întoarce un DRAFT de declarație în forma pe care o acceptă
{form}/build, derivat din date pe care le ai deja. Două surse, după formular: D390 și D394 se derivă dintr-un lot de facturi e-Factura (CIUS-RO), iar D710 se derivă din două declarații D100 — cea depusă și cea corectată. - D390: se păstrează doar facturile către clienți intracomunitari (țară UE ≠ RO, cu cod TVA), grupate pe (cod TVA, tip) cu baza netă în lei întregi. CIUS-RO nu distinge bunuri de servicii, așa că tipul e implicit
L(livrări) — corectează-l per rând (L/T/A/P/S/R). - D394: se păstrează facturile B2B interne (client din RO cu cod TVA), grupate pe (CUI, cotă) cu baza + TVA. Antetul (reprezentant, întocmit, CAEN, telefon) nu se poate deriva din facturi și rămâne de completat — vezi
warnings. - D710 (rectificativă la D100): corpul e
{initial, corectat}— cele două declarații D100 (XML sau base64), cea depusă și cea corectată. Obligațiile se împerechează pe (cod obligație, cod bugetar) și sumele intră în perechile_i/_cale lui D710. Maparea e 1:1, fără euristică: D710 poartă exact aceleași sume ca D100, doar desfăcute pe două coloane. În draft rămân doar obligațiile ale căror sume diferă (asta e semantica unei rectificative); câte au rămas neschimbate afli dinnr_neschimbate. Se refuză explicit derivarea dacă cele două declarații sunt pe perioade diferite, ale unor CUI diferite, sau dacă nu diferă nimic. - E un draft de revizuit, nu o declarație finală: verifică rândurile și avertismentele, completează câmpurile marcate, apoi trimite rezultatul la
POST /anaf/v1/declaratii/{form}/build. O factură invalidă din lot e sărită cu un avertisment, nu oprește derivarea. - Zero retenție și fără submitere la SPV — nu se depune și nu se construiește nimic definitiv aici.
La ce folosește
- Pornirea rapidă a unei D390/D394 din facturile lunii, fără a recopia manual partenerii și bazele.
- Rectificarea unei D100 deja depuse: dai declarația veche și varianta corectă, primești D710-ul cu coloanele „inițial"/„corectat" completate, fără să le transcrii manual.
Structura răspunsului
{form}/build.
RO.
RO.
Exemple de răspuns
body: {"luna": 9, "an": 2026, "declarant": {"cui": "990000005", "den": "Exemplu Furnizor SRL"}, "facturi": ["@efactura.xml"]}
{
"data": {
"formular": "D394",
"draft": {
"luna": 9,
"an": 2026,
"tip_D394": "L",
"declarant": {
"cui": "990000005",
"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
}
]
},
"warnings": [
{
"cod": "atentie",
"mesaj": "Toate rândurile au fost derivate cu tip „L\" (livrări) și tip_partener „1\" (persoană înregistrată în scopuri de TVA). Verifică pentru fiecare partener tipul operațiunii (A/L/C/V/LS/AS/AI/N) și tipul de partener (1–4).",
"camp": "parteneri"
}
],
"nr_facturi": 1,
"nr_randuri": 1
},
"meta": {
"generat_la": "2026-10-06T23: 59: 42+03: 00",
"note": "Rezultatul e un DRAFT de revizuit, nu o declarație finală: verifică rândurile și avertismentele, completează câmpurile marcate, apoi trimite draftul la POST /anaf/v1/declaratii/D394/build. Nu s-a depus și nu s-a construit nimic definitiv."
}
}
body: {"luna": 9, "an": 2026, "declarant": {"cui": "990000005", "den": "Exemplu Furnizor SRL"}, "facturi": ["@efactura-intracomunitara.xml"]}
{
"data": {
"formular": "D390",
"draft": {
"luna": 9,
"an": 2026,
"declarant": {
"cui": "990000005",
"den": "Exemplu Furnizor SRL"
},
"operatiuni": [
{
"tip": "L",
"tara": "DE",
"cod": "999000009",
"denumire": "Exemplu Client GmbH",
"baza": 1200
}
]
},
"warnings": [
{
"cod": "atentie",
"mesaj": "Factura #1 e în EUR — baza e însumată în moneda facturii; convertește manual în lei înainte de depunere.",
"camp": "facturi.0"
}
],
"nr_facturi": 1,
"nr_randuri": 1
},
"meta": {
"generat_la": "2026-10-06T23: 59: 42+03: 00",
"note": "Rezultatul e un DRAFT de revizuit, nu o declarație finală: verifică rândurile și avertismentele, completează câmpurile marcate, apoi trimite draftul la POST /anaf/v1/declaratii/D390/build. Nu s-a depus și nu s-a construit nimic definitiv."
}
}
body: {"initial": "@d100.xml", "corectat": "@d100-rectificat.xml"}
{
"data": {
"formular": "D710",
"draft": {
"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": "25.10.2026",
"nr_evid": "1",
"suma_dat_i": 1200,
"suma_dat_c": 1850,
"suma_ded_i": 0,
"suma_ded_c": 0,
"suma_plata_i": 1200,
"suma_plata_c": 1850,
"suma_rest_i": 0,
"suma_rest_c": 0
}
]
},
"warnings": [],
"nr_obligatii": 1,
"nr_neschimbate": 0
},
"meta": {
"generat_la": "2026-10-06T23: 59: 42+03: 00",
"note": "Rezultatul e un DRAFT de revizuit: conține doar obligațiile ale căror sume diferă între cele două D100 (restul, 0, au rămas neschimbate și nu se rectifică). Verifică-l, completează temeiul dacă e cazul, apoi trimite-l la POST /anaf/v1/declaratii/D710/build."
}
}
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 nederivabil (doar D390 și D394). |
| 422 | xml_invalid | luna/an invalide sau facturi lipsă. |
| 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": "luna/an invalide sau facturi lipsă.",
"camp": "form",
"request_id": "0199c1f0-6e1a-7c3d-9b2f-4a8e5d1c7b04"
}
}