oneapi
Autentificare
Anaf v1 / Declarații D

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.

POST
https://oneapi.ro/api/anaf/v1/declaratii/deriva/{form}

Parametri de cale

NumeTipDescriereExemplu
formobligatoriu string Codul formularului care se derivează din datele deja trimise.

Corpul cererii

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

NumeTipDescriereValori acceptate
declarantopțional object Antetul declarantului, cu cheile pe care le acceptă {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.
facturiopțional string[] | object[] La 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}.
lunaopțional integer La D390/D394: luna raportată, 1–12. Nu se trimite la D710.
anopțional integer La D390/D394: anul raportat, cel puţin 2016. Nu se trimite la D710.
initialopțional string La D710: declaraţia D100 depusă, XML brut ori base64.
corectatopțional string La D710: declaraţia D100 corectă, XML brut ori base64.
D394 din facturi Corpul cererii
{
    "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.

D390 dintr-o livrare intracomunitară Corpul cererii
{
    "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.

D710 din două D100 Corpul cererii
{
    "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

Ruta nu acceptă 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/_c ale 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 din nr_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

CâmpTipDescriere
data.formular string Codul formularului derivat.
data.draft object JSON-ul de business (draft) — aceeași formă pe care o acceptă {form}/build.
data.draft.luna integer Luna la care se referă valoarea.
data.draft.an integer Anul la care se referă valoarea.
data.draft.tip_D394 string
data.draft.declarant.cui string Codul de identificare fiscală, fără prefixul RO.
data.draft.declarant.den string
data.draft.parteneri[].tip string
data.draft.parteneri[].tip_partener integer
data.draft.parteneri[].cota integer
data.draft.parteneri[].cui string Codul de identificare fiscală, fără prefixul RO.
data.draft.parteneri[].den string
data.draft.parteneri[].nr_facturi integer
data.draft.parteneri[].baza integer
data.draft.parteneri[].tva integer
data.warnings[] array Avertismente: euristici aplicate (tip/tip_partener), facturi sărite, câmpuri de completat.
data.warnings[].cod string Codul din nomenclatorul sursei — cheia pe care se filtrează.
data.warnings[].mesaj string
data.warnings[].camp string
data.nr_facturi integer Câte facturi din lot au contribuit la draft.
data.nr_randuri integer Câte rânduri (operațiuni/parteneri) are draftul.
meta.generat_la string Momentul la care s-a construit răspunsul (ISO 8601).
meta.note string

Exemple de răspuns

body: {"luna": 9, "an": 2026, "declarant": {"cui": "990000005", "den": "Exemplu Furnizor SRL"}, "facturi": ["@efactura.xml"]}

POSThttps://oneapi.ro/api/anaf/v1/declaratii/deriva/D394
{
    "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."
    }
}

Coduri de eroare

CodSlugCând apare
401neautentificatToken lipsă, invalid, expirat sau revocat.
403feature_indisponibilPlanul curent nu include funcţia de care ţine ruta.
404negasitFormular nederivabil (doar D390 și D394).
422xml_invalidluna/an invalide sau facturi lipsă.
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": "luna/an invalide sau facturi lipsă.",
        "camp": "form",
        "request_id": "0199c1f0-6e1a-7c3d-9b2f-4a8e5d1c7b04"
    }
}