oneapi
Sign in
Locations v1 / Profil & comparație

Profile of an administrative unit

⭐ The full record of a commune, town or municipality: demographics, companies with their top NACE sectors, unemployment and building permits — in a single call.

GET
https://oneapi.ro/api/locations/v1/uat/{cod}/profil

Path parameters

NameTypeDescriptionExample
codrequired string SIRUTA code of the administrative-territorial unit (e.g. 54975 for Cluj-Napoca).

Query parameters

NameTypeDescriptionAccepted values
includelistoptional text Layers added to the profile, comma-separated: seism (earthquakes), aer (air quality), meteo (climate). seismaermeteo

How it behaves

  • ⭐ Composes the demographics, the company aggregates (with the top NACE sectors), unemployment at the latest month and building permits at the latest year.
  • As at county level, each section keeps its own period and comes back null when it has no data.
  • top_caen = the top 5 sectors by the number of companies registered in the unit.
  • Everything about this commune, in one call: include=seism,aer,meteo (any of them, in any combination) adds the layers from other zones, each exactly as its own route returns it — seism as /mediu/v1/seism/expunere, aer as /mediu/v1/aer/acum (3 stations within 25 km), meteo as /locations/v1/meteo/normale. A layer with no data comes back null.
  • The layers start from the unit's centroid, not from a given village: in a large commune the nearest weather or air station can be tens of kilometres away — punct.nivel and distanta_km in each layer say so.

What it is for

  • The record of a commune or town for a public page, in one call.
  • Area scoring: population, density, companies and unemployment together.
  • Quick due diligence on where an office is located.

Response structure

FieldTypeDescription
data.nivel string The entity level (uat).
data.cod string The code requested.
data.nume string The unit's canonical name.
data.populatie integer | null The census population.
data.suprafata_kmp number | null Area, in km².
data.densitate number | null Inhabitants per km².
data.firme.total integer The total number of companies registered in the entity.
data.firme.platitori_tva integer How many of them are VAT-registered.
data.firme.densitate number | null Companies per km²; null where there is no area.
data.somaj.numar number | null The number of registered unemployed at the latest published month.
data.somaj.pondere number | null The share of labour resources, as a percentage.
data.somaj.numitor string | null What the share is measured against — this is not the unemployment rate.
data.somaj.perioada.an integer The year of the latest published month.
data.somaj.perioada.luna integer The month (1–12).
data.autorizatii.an integer The latest year with published permits.
data.autorizatii.categorii[].categorie string The construction category.
data.autorizatii.categorii[].numar number | null How many permits were issued.
data.autorizatii.categorii[].mp_utili number | null The usable floor area permitted, in m².
data.top_caen[].cod string The NACE (CAEN) code of the sector.
data.top_caen[].denumire string | null The name of the sector.
data.top_caen[].nr integer How many companies have this as their main NACE code.
meta.actualizat object Prospețimea datelor pe domenii (dată ISO 8601).
data.seism object Only with include=seism: the unit's seismic exposure, in the shape of /mediu/v1/seism/expunere.
data.aer object Only with include=aer: the latest values at the nearest stations, in the shape of /mediu/v1/aer/acum.
data.meteo object Only with include=meteo: the climate normals of the reference station, in the shape of /locations/v1/meteo/normale.
meta.distanta object How the distances in the response are measured. Present on every response that carries a distance.
meta.distanta.metoda string Always linie_dreapta (straight line): the geodesic distance over the Earth's surface, not by road.
meta.distanta.detaliu string The same information, in words.

Response examples

GEThttps://oneapi.ro/api/locations/v1/uat/54975/profil
{
    "data": {
        "nivel": "uat",
        "cod": "54975",
        "nume": "Cluj-Napoca",
        "populatie": 286598,
        "suprafata_kmp": 174.8759,
        "densitate": 1638.9,
        "firme": {
            "total": 114118,
            "platitori_tva": 16184,
            "densitate": 652.57
        },
        "somaj": {
            "numar": 756,
            "pondere": 0.4,
            "numitor": "resurse de muncă",
            "perioada": {
                "an": 2026,
                "luna": 7
            }
        },
        "autorizatii": {
            "an": 2025,
            "categorii": [
                {
                    "categorie": "administrative",
                    "numar": 2,
                    "mp_utili": 12195
                }
            ]
        },
        "top_caen": [
            {
                "nr": 3711,
                "cod": "4932",
                "denumire": "Transporturi cu taxiuri"
            }
        ]
    },
    "meta": {
        "actualizat": {
            "administrativ": "2026-08-15T16: 39: 14+03: 00",
            "populatie": "2026-08-15T16: 40: 07+03: 00"
        }
    }
}

Error codes

CodeSlugWhen it occurs
401neautentificatToken missing, invalid, expired or revoked.
403feature_indisponibilThe current plan does not include the feature the route depends on.
404negasitThe administrative unit does not exist.
422validareinclude contains an unknown layer.
429cota_depasitaThe plan's monthly quota has been exceeded (see Retry-After).

All errors share the same shape. eroare.cod is stable and is the value you should branch on in code — not the text in mesaj, which may change.

{
    "eroare": {
        "cod": "validare",
        "mesaj": "include contains an unknown layer.",
        "detalii": {
            "cod": [
                "The value sent does not satisfy the parameter rule."
            ]
        }
    }
}