oneapi
Autentificare
Anaf v1 / Declarații D

Câmpurile unui formular

Contractul unui formular, derivat MECANIC din XSD-ul oficial: elementele, atributele fiecăruia, care sunt obligatorii şi ce valori acceptă. Nu e scris de mână, deci nu rămâne în urma schemei.

GET
https://oneapi.ro/api/anaf/v1/declaratii/{form}/campuri

Parametri de cale

NumeTipDescriereExemplu
formobligatoriu string Codul formularului (D100, D112, D300, D394…). Lista completă e la /anaf/v1/declaratii/forms.

Parametri de interogare

Ruta nu acceptă parametri de interogare.

Cum se comportă

  • Întoarce ce are voie să conțină formularul: elementele lui, atributele fiecăruia, care sunt obligatorii, ce tip au, ce valori sunt permise (enumerările), ce tipar (pattern) trebuie respectat și ce limite (lungimi, minim/maxim, zecimale).
  • Totul e derivat mecanic din XSD-ul oficial ANAF pe care îl folosim la validare — nu din documentație rescrisă de noi. Dacă schema spune că cod_oblig acceptă exact 72 de valori, exact alea le primești. Ce nu scrie în schemă nu apare aici: nu inventăm etichete.
  • Răspunde la întrebarea care blochează cel mai des o integrare: „am primit o eroare de validare și nu știu ce aveam voie să trimit". În loc să cauți prin formularul ANAF pe hârtie, ceri contractul.
  • Util și pentru generarea automată a unui formular în interfața ta: ai tipurile, obligativitatea și listele de valori gata de legat la câmpuri.

La ce folosește

  • Afli ce coduri acceptă cod_oblig (D100) sau ce rânduri există în decont (D300) fără să deschizi documentația ANAF.
  • Construiești dinamic un formular în UI-ul tău, cu validare locală identică cu a schemei oficiale.
  • Verifici înainte de trimitere că valorile tale se încadrează în enumerări și tipare, ca să nu iei 422.

Structura răspunsului

CâmpTipDescriere
data.formular string Codul formularului descris.
data.schema string Fișierul XSD oficial din care s-a derivat descrierea.
data.namespace string Namespace-ul XML al formularului.
data.elemente object Element → {atribute, elemente_copil}. Fiecare atribut: {nume, obligatoriu, tip, valori_permise, tipar, lungime_max, lungime_min, min, max, zecimale, implicit} (apar doar câmpurile pe care schema chiar le impune). elemente_copil dă numele și numărul de apariții (0..n).
data.elemente.declaratie100.atribute[].nume string Numele, aşa cum îl publică sursa.
data.elemente.declaratie100.atribute[].obligatoriu boolean
data.elemente.declaratie100.atribute[].tip string
data.elemente.declaratie100.atribute[].min string
data.elemente.declaratie100.atribute[].max string
data.elemente.declaratie100.elemente_copil[].nume string Numele, aşa cum îl publică sursa.
data.elemente.declaratie100.elemente_copil[].aparitii string
data.elemente.obligatie.atribute[].nume string Numele, aşa cum îl publică sursa.
data.elemente.obligatie.atribute[].obligatoriu boolean
data.elemente.obligatie.atribute[].tip string
data.elemente.obligatie.atribute[].valori_permise array
meta.generat_la string Momentul la care s-a construit răspunsul (ISO 8601).

Exemple de răspuns

GEThttps://oneapi.ro/api/anaf/v1/declaratii/D100/campuri
{
    "data": {
        "formular": "D100",
        "schema": "d100_v2.xsd",
        "namespace": "mfp:anaf:dgti:d100:declaratie:v2",
        "elemente": {
            "declaratie100": {
                "atribute": [
                    {
                        "nume": "luna",
                        "obligatoriu": true,
                        "tip": "integer",
                        "min": "1",
                        "max": "12"
                    }
                ],
                "elemente_copil": [
                    {
                        "nume": "obligatie",
                        "aparitii": "1..1300"
                    }
                ]
            },
            "obligatie": {
                "atribute": [
                    {
                        "nume": "cod_oblig",
                        "obligatoriu": true,
                        "tip": "integer",
                        "valori_permise": [
                            "102",
                            "103",
                            "106",
                            "105",
                            "150",
                            "121",
                            "122",
                            "710",
                            "611",
                            "615",
                            "616",
                            "614",
                            "604",
                            "605",
                            "609",
                            "617",
                            "606",
                            "608",
                            "620",
                            "613",
                            "690",
                            "612",
                            "140",
                            "810",
                            "750",
                            "755",
                            "756",
                            "780",
                            "111",
                            "211",
                            "216",
                            "212",
                            "217",
                            "213",
                            "214",
                            "215",
                            "221",
                            "222",
                            "224",
                            "225",
                            "231",
                            "232",
                            "233",
                            "234",
                            "235",
                            "236",
                            "238",
                            "237",
                            "270",
                            "244",
                            "242",
                            "243",
                            "261",
                            "275",
                            "504",
                            "945",
                            "941",
                            "942",
                            "943",
                            "944",
                            "510",
                            "535",
                            "619",
                            "450",
                            "758",
                            "621",
                            "781",
                            "711",
                            "712",
                            "713",
                            "130",
                            "607"
                        ]
                    }
                ]
            }
        }
    },
    "meta": {
        "generat_la": "2026-10-06T23: 59: 41+03: 00"
    }
}

Coduri de eroare

CodSlugCând apare
401neautentificatToken lipsă, invalid, expirat sau revocat.
403modul_interzisTokenul nu are acces la modulul rutei.
404negasitFormular necunoscut — vezi GET /anaf/v1/declaratii/forms.
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": "negasit",
        "mesaj": "Formular necunoscut — vezi GET /anaf/v1/declaratii/forms.",
        "camp": "form",
        "request_id": "0199c1f0-6e1a-7c3d-9b2f-4a8e5d1c7b04"
    }
}