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
404withcod: 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"
}
}
GEThttps://oneapi.ro/api/anaf/v1/efactura/codes/vat_categories
{
"data": {
"nomenclator": "vat_categories",
"valori": {
"S": {
"name": "Cotă standard sau redusă",
"zero": false
},
"AE": {
"name": "Taxare inversă",
"zero": true
},
"E": {
"name": "Scutit fără drept de deducere",
"zero": true
},
"K": {
"name": "Livrare intracomunitară",
"zero": true
},
"G": {
"name": "Export, scutit cu drept de deducere",
"zero": true
},
"O": {
"name": "În afara sferei TVA",
"zero": true
},
"Z": {
"name": "Cotă zero",
"zero": true
}
}
},
"meta": {
"generat_la": "2026-10-06T23: 59: 42+03: 00"
}
}
GEThttps://oneapi.ro/api/anaf/v1/efactura/codes/payment_means
{
"data": {
"nomenclator": "payment_means",
"valori": {
"1": "Nespecificat",
"10": "Numerar",
"20": "Cec",
"30": "Virament bancar",
"42": "Plată în cont bancar",
"48": "Card bancar",
"49": "Debit direct",
"58": "Transfer SEPA",
"97": "Compensare"
}
},
"meta": {
"generat_la": "2026-10-06T23: 59: 42+03: 00"
}
}
GEThttps://oneapi.ro/api/anaf/v1/efactura/codes/counties
{
"data": {
"nomenclator": "counties",
"valori": {
"ab": "RO-AB",
"alba": "RO-AB",
"ar": "RO-AR",
"arad": "RO-AR",
"ag": "RO-AG",
"arges": "RO-AG",
"bc": "RO-BC",
"bacau": "RO-BC",
"bh": "RO-BH",
"bihor": "RO-BH",
"bn": "RO-BN",
"bistrita-nasaud": "RO-BN",
"bistrita nasaud": "RO-BN",
"bt": "RO-BT",
"botosani": "RO-BT",
"bv": "RO-BV",
"brasov": "RO-BV",
"br": "RO-BR",
"braila": "RO-BR",
"bz": "RO-BZ",
"buzau": "RO-BZ",
"cs": "RO-CS",
"caras-severin": "RO-CS",
"caras severin": "RO-CS",
"cl": "RO-CL",
"calarasi": "RO-CL",
"cj": "RO-CJ",
"cluj": "RO-CJ",
"ct": "RO-CT",
"constanta": "RO-CT",
"cv": "RO-CV",
"covasna": "RO-CV",
"db": "RO-DB",
"dambovita": "RO-DB",
"dj": "RO-DJ",
"dolj": "RO-DJ",
"gl": "RO-GL",
"galati": "RO-GL",
"gr": "RO-GR",
"giurgiu": "RO-GR",
"gj": "RO-GJ",
"gorj": "RO-GJ",
"hr": "RO-HR",
"harghita": "RO-HR",
"hd": "RO-HD",
"hunedoara": "RO-HD",
"il": "RO-IL",
"ialomita": "RO-IL",
"is": "RO-IS",
"iasi": "RO-IS",
"if": "RO-IF",
"ilfov": "RO-IF",
"mm": "RO-MM",
"maramures": "RO-MM",
"mh": "RO-MH",
"mehedinti": "RO-MH",
"ms": "RO-MS",
"mures": "RO-MS",
"nt": "RO-NT",
"neamt": "RO-NT",
"ot": "RO-OT",
"olt": "RO-OT",
"ph": "RO-PH",
"prahova": "RO-PH",
"sm": "RO-SM",
"satu mare": "RO-SM",
"satu-mare": "RO-SM",
"sj": "RO-SJ",
"salaj": "RO-SJ",
"sb": "RO-SB",
"sibiu": "RO-SB",
"sv": "RO-SV",
"suceava": "RO-SV",
"tr": "RO-TR",
"teleorman": "RO-TR",
"tm": "RO-TM",
"timis": "RO-TM",
"tl": "RO-TL",
"tulcea": "RO-TL",
"vs": "RO-VS",
"vaslui": "RO-VS",
"vl": "RO-VL",
"valcea": "RO-VL",
"vn": "RO-VN",
"vrancea": "RO-VN",
"b": "RO-B",
"bucuresti": "RO-B",
"municipiul bucuresti": "RO-B"
}
},
"meta": {
"generat_la": "2026-10-06T23: 59: 42+03: 00"
}
}
Error codes
| Code | Slug | When it occurs |
|---|---|---|
| 401 | neautentificat | Token missing, invalid, expired or revoked. |
| 403 | modul_interzis | The token has no access to the route's module. |
| 404 | negasit | nomenclator_necunoscut: the name in the path matches no code list. |
| 429 | cota_depasita | The 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"
}
}