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
nullwhen 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 —seismas/mediu/v1/seism/expunere,aeras/mediu/v1/aer/acum(3 stations within 25 km),meteoas/locations/v1/meteo/normale. A layer with no data comes backnull. - 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.nivelanddistanta_kmin 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"
}
}
}
GEThttps://oneapi.ro/api/locations/v1/uat/54975/profil?include=seism,aer,meteo
{
"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"
}
],
"seism": {
"punct": {
"lat": 46.775869737866465,
"lng": 23.60115997499754,
"sursa": "siruta",
"cod_siruta": 54975,
"nume": "Cluj-Napoca",
"nivel": "uat_centroid"
},
"prag_semnificativ": 4,
"raze": [
{
"raza_km": 25,
"evenimente": 41,
"fara_magnitudine": 0,
"magnitudine_maxima": 5.3,
"primul_an_inregistrat": 1603,
"pe_magnitudine": {
"sub_3": 38,
"3_4": 0,
"4_5": 2,
"5_6": 1,
"6_plus": 0
},
"cel_mai_mare": {
"cod": "17860215T000000",
"data_ora": "1786-02-15 01: 44: 24+01: 44: 24",
"an": 1786,
"latitudine": 46.8,
"longitudine": 23.6,
"adancime_km": 9.9,
"adancime_fixata": true,
"magnitudine": 5.3,
"tip_magnitudine": "Mw",
"magnitudini": {
"Mw": 5.3
},
"solutie": {
"calitate": "D"
}
},
"ultimul_semnificativ": {
"cod": "17860215T000000",
"data_ora": "1786-02-15 01: 44: 24+01: 44: 24",
"an": 1786,
"latitudine": 46.8,
"longitudine": 23.6,
"adancime_km": 9.9,
"adancime_fixata": true,
"magnitudine": 5.3,
"tip_magnitudine": "Mw",
"magnitudini": {
"Mw": 5.3
},
"solutie": {
"calitate": "D"
}
}
}
],
"observatie": "Numerele sunt evenimente ÎNREGISTRATE, nu evenimente produse. Catalogul are 1 eveniment în secolul X și peste 33.000 în secolul XXI — diferența e instrumentație, nu seismicitate. Sub magnitudinea 3, catalogul devine complet abia din anii 1980, odată cu rețeaua seismică modernă. Nu compara numărătorile între epoci.",
"nu_este": "Acesta NU este un studiu de hazard seismic. E o numărătoare de evenimente înregistrate în jurul unui punct, nu o estimare de accelerație la sol sau de perioadă de revenire. Pentru proiectare se folosește codul P100-1, nu datele astea.",
"sursa": {
"nume": "Catalogul ROMPLUS — Institutul Naţional de Cercetare-Dezvoltare pentru Fizica Pământului (INCDFP)",
"url": "https://www.infp.ro/index.php?i=romplus",
"licenta": "Date de sector public, reutilizabile conform Legii 109/2007, cu indicarea sursei."
}
},
"aer": {
"punct": {
"lat": 46.775869737866465,
"lng": 23.60115997499754,
"sursa": "siruta",
"cod_siruta": 54975,
"nume": "Cluj-Napoca",
"nivel": "uat_centroid"
},
"raza_km": 25,
"statii_gasite": 3,
"rezultate": [
{
"statie": {
"cod": "RO0074A",
"cod_national": "RO-CJ-2",
"latitudine": 46.775033,
"longitudine": 23.596619,
"altitudine": 336,
"tip": "background",
"zona": "urban",
"localitate": {
"cod_siruta": 54975,
"nume": "Cluj-Napoca"
},
"judet": "Cluj",
"judet_cod": "CJ",
"prima_observatie": "2006-01-01",
"ultima_observatie": null,
"activa": true,
"date": {
"are": false,
"zile": 0,
"prima_zi": null,
"ultima_zi": null,
"poluanti": []
}
},
"distanta_km": 0.4,
"valori": [
{
"poluant": "CO",
"valoare": 0.609,
"unitate": "mg/m³",
"ora": "2026-09-22 07: 00: 00+03",
"vechime_ore": 353,
"invechita": true,
"referinta_legala": {
"prag": 10,
"se_aplica_la": "maxim_8h",
"observatie": "Pragul se aplică maximului mediilor pe 8 ore, nu acestei valori izolate — decât dacă e chiar o valoare orară."
}
}
]
}
],
"observatie": "Valorile sunt măsurate la STAȚIE, nu în localitate: la câțiva kilometri, sau lângă o arteră aglomerată, pot fi complet diferite. Datele din fereastra curentă sunt NEVERIFICATE — operatorul le poate corecta sau invalida ulterior. Mediile zilnice se publică doar când ziua are cel puțin 18 ore valide; `ore_valide` spune întotdeauna pe ce se sprijină cifra. O zi cu `masurare: zilnica` e o probă de laborator pe 24 de ore (PM10/PM2,5 gravimetric): media e chiar proba, fără minim, maxim ori ore.",
"sursa": {
"nume": "European Environment Agency — Air Quality Download Service (date raportate de România prin RNMCA/ANPM)",
"url": "https://eeadmz1-downloads-webapp.azurewebsites.net/",
"licenta": "Politica de reutilizare a EEA — reutilizare permisă cu indicarea sursei."
}
},
"meteo": {
"punct": {
"lat": 46.775869737866465,
"lng": 23.60115997499754,
"sursa": "siruta",
"cod_siruta": 54975,
"nume": "Cluj-Napoca",
"nivel": "uat_centroid"
},
"statie": {
"wsi": "0-20000-0-15120",
"nume": "Cluj-Napoca",
"latitudine": 46.777778,
"longitudine": 23.571389,
"fara_catalog": false,
"localitate": {
"cod_siruta": 54975,
"nume": "Cluj-Napoca"
},
"judet": "Cluj",
"judet_cod": "CJ",
"primul_an": 1921,
"ultimul_an": 2026,
"zile_cu_date": 38525,
"parametri": [
"ff",
"p",
"r",
"ta",
"tn",
"tx"
],
"distanta_km": 2.3
},
"perioada": {
"de_la_anul": 1991,
"la_anul": 2020,
"standard": "OMM 1991–2020"
},
"normale": [
{
"luna": 1,
"temp_medie": -2.5,
"temp_minima_medie": -5.2,
"temp_maxima_medie": 0.9,
"temp_minima_absoluta": -19.9,
"temp_maxima_absoluta": 14.1,
"precipitatii_lunare_medii_mm": 27.3,
"zile": 930,
"zile_cu_temperatura": 930
}
],
"observatie": "Mediile ignoră zilele nemăsurate — `zile_cu_temperatura` spune pe câte zile se sprijină fiecare lună. O lună cu trei măsurători apare la fel de „netedă\" ca una completă dacă nu te uiți acolo.",
"reprezentativitate": {
"sursa": "cea_mai_apropiata_statie",
"distanta_km": 2.3,
"buna": true,
"observatie": "Stația e suficient de aproape pentru o estimare rezonabilă a climei locului."
},
"sursa": {
"nume": "Administrația Națională de Meteorologie (ANM) — date climatologice zilnice, controlate calitativ",
"url": "https://odp.meteoromania.ro/",
"licenta": "CC BY 4.0, cu indicarea sursei."
}
}
},
"meta": {
"actualizat": {
"administrativ": "2026-08-15T16: 39: 14+03: 00",
"populatie": "2026-08-15T16: 40: 07+03: 00"
},
"distanta": {
"metoda": "linie_dreapta",
"detaliu": "Distanţele sunt geodezice, în linie dreaptă pe suprafaţa Pământului (WGS84) — nu pe drum."
}
}
}
GEThttps://oneapi.ro/api/locations/v1/uat/155243/profil
{
"data": {
"nivel": "uat",
"cod": "155243",
"nume": "Timișoara",
"populatie": 250849,
"suprafata_kmp": 129.2217,
"densitate": 1941.2,
"firme": {
"total": 88695,
"platitori_tva": 10701,
"densitate": 686.38
},
"somaj": {
"numar": 858,
"pondere": 0.5,
"numitor": "resurse de muncă",
"perioada": {
"an": 2026,
"luna": 7
}
},
"autorizatii": {
"an": 2025,
"categorii": [
{
"categorie": "administrative",
"numar": 1,
"mp_utili": 378
}
]
},
"top_caen": [
{
"nr": 3171,
"cod": "4933",
"denumire": "Transporturi terestre de pasageri cu vehicule cu șofer, pe bază de comandă"
}
]
},
"meta": {
"actualizat": {
"administrativ": "2026-08-15T16: 39: 14+03: 00",
"populatie": "2026-08-15T16: 40: 07+03: 00"
}
}
}
GEThttps://oneapi.ro/api/locations/v1/uat/1071/profil?include=seism,aer
{
"data": {
"nivel": "uat",
"cod": "1071",
"nume": "Ciugud",
"populatie": 3285,
"suprafata_kmp": 43.9155,
"densitate": 74.8,
"firme": {
"total": 826,
"platitori_tva": 138,
"densitate": 18.81
},
"somaj": {
"numar": 17,
"pondere": 0.8,
"numitor": "resurse de muncă",
"perioada": {
"an": 2026,
"luna": 7
}
},
"autorizatii": {
"an": 2025,
"categorii": [
{
"categorie": "alte",
"numar": 10,
"mp_utili": 45858
}
]
},
"top_caen": [
{
"nr": 46,
"cod": "0150",
"denumire": "Activități în ferme mixte (cultura vegetală combinată cu creșterea animalelor)"
}
],
"seism": {
"punct": {
"lat": 46.06149722201394,
"lng": 23.63669247719131,
"sursa": "siruta",
"cod_siruta": 1071,
"nume": "Ciugud",
"nivel": "uat_centroid"
},
"prag_semnificativ": 4,
"raze": [
{
"raza_km": 25,
"evenimente": 111,
"fara_magnitudine": 1,
"magnitudine_maxima": 3,
"primul_an_inregistrat": 1971,
"pe_magnitudine": {
"sub_3": 109,
"3_4": 1,
"4_5": 0,
"5_6": 0,
"6_plus": 0
},
"cel_mai_mare": {
"cod": "19960306T105019",
"data_ora": "1996-03-06 12: 50: 19+02",
"an": 1996,
"latitudine": 46.23,
"longitudine": 23.58,
"adancime_km": null,
"adancime_fixata": false,
"magnitudine": 3,
"tip_magnitudine": "Mw",
"magnitudini": {
"Mw": 3,
"Mw_eroare": 0.1
},
"solutie": {
"eroare_orizontala_km": 2,
"rms": 0.53,
"nr_faze": 8,
"nr_statii": 7,
"nr_magnitudini": 2,
"gap_azimutal": 101,
"calitate": "D"
}
},
"ultimul_semnificativ": null
}
],
"observatie": "Numerele sunt evenimente ÎNREGISTRATE, nu evenimente produse. Catalogul are 1 eveniment în secolul X și peste 33.000 în secolul XXI — diferența e instrumentație, nu seismicitate. Sub magnitudinea 3, catalogul devine complet abia din anii 1980, odată cu rețeaua seismică modernă. Nu compara numărătorile între epoci.",
"nu_este": "Acesta NU este un studiu de hazard seismic. E o numărătoare de evenimente înregistrate în jurul unui punct, nu o estimare de accelerație la sol sau de perioadă de revenire. Pentru proiectare se folosește codul P100-1, nu datele astea.",
"sursa": {
"nume": "Catalogul ROMPLUS — Institutul Naţional de Cercetare-Dezvoltare pentru Fizica Pământului (INCDFP)",
"url": "https://www.infp.ro/index.php?i=romplus",
"licenta": "Date de sector public, reutilizabile conform Legii 109/2007, cu indicarea sursei."
}
},
"aer": {
"punct": {
"lat": 46.06149722201394,
"lng": 23.63669247719131,
"sursa": "siruta",
"cod_siruta": 1071,
"nume": "Ciugud",
"nivel": "uat_centroid"
},
"raza_km": 25,
"statii_gasite": 2,
"rezultate": [
{
"statie": {
"cod": "RO0092A",
"cod_national": "RO-AB-1",
"latitudine": 46.064275,
"longitudine": 23.563517,
"altitudine": 242,
"tip": "background",
"zona": "urban",
"localitate": {
"cod_siruta": 1017,
"nume": "Alba Iulia"
},
"judet": "Alba",
"judet_cod": "AB",
"prima_observatie": "2009-01-01",
"ultima_observatie": null,
"activa": true,
"date": {
"are": false,
"zile": 0,
"prima_zi": null,
"ultima_zi": null,
"poluanti": []
}
},
"distanta_km": 5.7,
"valori": [
{
"poluant": "CO",
"valoare": 0.077,
"unitate": "mg/m³",
"ora": "2026-09-22 09: 00: 00+03",
"vechime_ore": 351,
"invechita": true,
"referinta_legala": {
"prag": 10,
"se_aplica_la": "maxim_8h",
"observatie": "Pragul se aplică maximului mediilor pe 8 ore, nu acestei valori izolate — decât dacă e chiar o valoare orară."
}
}
]
}
],
"observatie": "Valorile sunt măsurate la STAȚIE, nu în localitate: la câțiva kilometri, sau lângă o arteră aglomerată, pot fi complet diferite. Datele din fereastra curentă sunt NEVERIFICATE — operatorul le poate corecta sau invalida ulterior. Mediile zilnice se publică doar când ziua are cel puțin 18 ore valide; `ore_valide` spune întotdeauna pe ce se sprijină cifra. O zi cu `masurare: zilnica` e o probă de laborator pe 24 de ore (PM10/PM2,5 gravimetric): media e chiar proba, fără minim, maxim ori ore.",
"sursa": {
"nume": "European Environment Agency — Air Quality Download Service (date raportate de România prin RNMCA/ANPM)",
"url": "https://eeadmz1-downloads-webapp.azurewebsites.net/",
"licenta": "Politica de reutilizare a EEA — reutilizare permisă cu indicarea sursei."
}
}
},
"meta": {
"actualizat": {
"administrativ": "2026-08-15T16: 39: 14+03: 00",
"populatie": "2026-08-15T16: 40: 07+03: 00"
},
"distanta": {
"metoda": "linie_dreapta",
"detaliu": "Distanţele sunt geodezice, în linie dreaptă pe suprafaţa Pământului (WGS84) — nu pe drum."
}
}
}
Error codes
| Code | Slug | When it occurs |
|---|---|---|
| 401 | neautentificat | Token missing, invalid, expired or revoked. |
| 403 | feature_indisponibil | The current plan does not include the feature the route depends on. |
| 404 | negasit | The administrative unit does not exist. |
| 422 | validare | include contains an unknown layer. |
| 429 | cota_depasita | The 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."
]
}
}
}