oneapi
Sign in
Anaf v1 / e-Factura

Code lists

The public codes you need in order to build a valid invoice: units of measure, VAT categories, payment means, country subdivisions. Exactly the lists validation checks against.

GET
https://oneapi.ro/api/anaf/v1/efactura/codes/{nomenclator}

Path parameters

NameTypeDescriptionExample
nomenclatorrequired string Name of the code list requested (units of measure, countries, operation types…).

Query parameters

This route accepts no query parameters.

How it behaves

  • Returns the values of a public code list used when building an invoice: units of measure (units), VAT categories (vat_categories), payment means (payment_means), counties (counties). The requested list comes in the path.
  • This is a discovery route, open — no feature gate — precisely so you can populate select lists or validate codes locally before calling build. The codes are the official CIUS-RO / EN 16931 ones.
  • An unknown code list returns 404 with cod: nomenclator_necunoscut, not an empty list — so a misspelled name is visible, not silent.

What it is for

  • Populating a dropdown of units of measure or payment means in the UI.
  • Validating a code locally (e.g. a VAT category) before sending it to build.
  • Mapping the codes in responses to legible labels, fetched once.

Response structure

FieldTypeDescription
data.nomenclator string The name of the requested code list, echoing the path parameter.
data.valori object The list of codes, each with its code and legible label.
meta.generat_la string When the response was built (ISO 8601).

Response examples

GEThttps://oneapi.ro/api/anaf/v1/efactura/codes/units
{
    "data": {
        "nomenclator": "units",
        "valori": {
            "buc": "H87",
            "bucata": "H87",
            "bucati": "H87",
            "pcs": "H87",
            "piece": "H87",
            "unitate": "C62",
            "unit": "C62",
            "ub": "C62",
            "serviciu": "C62",
            "abonament": "C62",
            "lucrare": "C62",
            "kg": "KGM",
            "kilogram": "KGM",
            "g": "GRM",
            "gram": "GRM",
            "t": "TNE",
            "tona": "TNE",
            "l": "LTR",
            "litru": "LTR",
            "litri": "LTR",
            "ml": "MLT",
            "m": "MTR",
            "metru": "MTR",
            "ml liniar": "MTR",
            "mp": "MTK",
            "m2": "MTK",
            "metru patrat": "MTK",
            "mc": "MTQ",
            "m3": "MTQ",
            "metru cub": "MTQ",
            "km": "KMT",
            "ora": "HUR",
            "h": "HUR",
            "ore": "HUR",
            "zi": "DAY",
            "zile": "DAY",
            "day": "DAY",
            "luna": "MON",
            "month": "MON",
            "an": "ANN",
            "ani": "ANN",
            "year": "ANN",
            "set": "SET",
            "pereche": "PR",
            "kwh": "KWH"
        }
    },
    "meta": {
        "generat_la": "2026-10-06T23: 59: 42+03: 00"
    }
}

Error codes

CodeSlugWhen it occurs
401neautentificatToken missing, invalid, expired or revoked.
403modul_interzisThe token has no access to the route's module.
404negasitnomenclator_necunoscut: the name in the path matches no code list.
429cota_depasitaThe plan's monthly quota has been exceeded (see Retry-After).

Errors in the Anaf module use the same envelope as the rest of the platform, with two extra fields: {eroare: {cod, mesaj, camp, request_id}}. eroare.cod is stable and is what you branch on; on validation (422) the code is case-specific: xml_invalid, xml_nu_e_factura, unitate_necunoscuta, luna_invalida and so on. camp points at the offending field when one can be identified.

{
    "eroare": {
        "cod": "negasit",
        "mesaj": "nomenclator_necunoscut: the name in the path matches no code list.",
        "camp": "nomenclator",
        "request_id": "0199c1f0-6e1a-7c3d-9b2f-4a8e5d1c7b04"
    }
}