Business v1 / Locații
Companies around a point
⭐ The companies whose registered office falls on a street passing through the given circle, ordered by distance. Companies have no coordinates of their own — the link is made through the street, so coverage is about 71%.
GET
https://oneapi.ro/api/business/v1/firme/aproape
Query parameters
NameTypeDescriptionAccepted values
latoptional
string | null
Latitude of the centre (WGS84), within Romania.
e.g. 46.77e.g. 44.4526e.g. 46.7712
lngoptional
string | null
Longitude of the centre (WGS84), within Romania.
e.g. 23.59e.g. 26.0855e.g. 23.6236
raza_kmoptional
string | null
Radius in km: between 0.05 and 25; default 0.5.
e.g. 0.3
stareoptional
string | null
Categoria de stare, nu denumirea ONRC: cele 197 de denumiri se reduc la şapte categorii, iar
„ce funcţionează aici" e o întrebare despre categorie.
o valoare greşită trebuie să dea 422, nu o zonă goală care arată ca o zonă fără firme. activasuspendatadizolvatalichidareradiatainsolventaalta
„ce funcţionează aici" e o întrebare despre categorie.
in: aici, nu permisiv ca restul:o valoare greşită trebuie să dea 422, nu o zonă goală care arată ca o zonă fără firme. activasuspendatadizolvatalichidareradiatainsolventaalta
How it behaves
- ⭐ Companies whose registered office sits on a street crossing the given circle, ordered by distance.
- ⚠️ Companies have no coordinates of their own. The link goes through the street: the office is linked to a thoroughfare, and the thoroughfare has OpenStreetMap geometry. Coverage, measured on 4 October 2026, is 2.75M of 3.91M companies (70.4%) — the rest cannot be found by radius, however close they are.
- Distance is measured to the centre of the thoroughfare, not to the exact office — at street scale the difference is below the office-linking error, but it does mean companies on the same street share a distance.
- The radius is capped at 25 km: beyond a few kilometres the question is no longer „which companies are around", but „which companies are in town" — the per-entity routes answer that.
- The aggregated variant, without the company list, is at
/firme/zona.
What it is for
- Field prospecting: which companies are within an agent's radius, ordered by distance.
- Site studies: what activities already exist around a location you are evaluating.
- Feeding an interactive map with the companies in the visible area.
Response structure
FieldTypeDescription
data[].cui
integer
The company tax ID.
data[].denumire
string
The company name.
data[].forma_juridica
string | null
Legal form (SRL, SA, PFA…).
data[].stare
string | null
Company status (active, struck off…).
data[].data_inmatriculare
string | null
Registration date at the trade register.
data[].caen_principal
string | null
Primary CAEN code, from the ANAF fiscal record.
data[].platitor_tva
boolean | null
VAT-registered as of the last sync.
data[].sediu.strada_id
integer | null
data[].sediu.strada
string | null
data[].sediu.numar
string | null
The street number of the registered office, as written by the source.
data[].sediu.localitate
string | null
The locality of the registered office.
data[].sediu.cod_siruta
integer | null
The locality SIRUTA code — chainable to /api/locations/v1/localitati/{cod}.
data[].sediu.judet
string | null
The county of the registered office.
data[].coordonate.lat
number
Latitude of the point (WGS84, 6 decimals ≈ 11 cm).
data[].coordonate.lng
number
Longitude of the point (WGS84).
data[].coordonate.precizie
string
⚠️ How fine the point is, in four steps that are NOT interchangeable:
numar (the OSM address point, matched exactly on the house number in the register — 1,308,114 companies), numar_aproximativ (the same kind of point, matched only on the integer part: "4A" placed at "4" — 115,040 companies), strada (street centroid) and localitate (the rest). Only drop a pin for the first two; a pin on strada claims a precision we do not have.
data[].distanta_m
integer | null
Distance in metres from the requested point to the POINT RETURNED on this row — i.e. to the house number where we know it, otherwise to the street centroid. ⚠️ The radius filter itself still runs on the street centroid, the only one with a spatial index, so a row may come out a few dozen metres beyond
raza_km. No guarantee is lost: "street centre within radius" never meant "company within radius" either.
meta.paginare.pagina
integer
Pagina curentă.
meta.paginare.per_pagina
integer
Rezultate pe pagină.
meta.paginare.total
integer
Total rezultate.
meta.paginare.pagini
integer
Număr de pagini.
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/business/v1/firme/aproape?lat=46.77&lng=23.59&raza_km=0.3
{
"data": [
{
"cui": 232949,
"denumire": "MEDEX SRL",
"forma_juridica": "SRL",
"stare": {
"cod": "1048",
"denumire": "funcțiune",
"categorie": "activa"
},
"data_inmatriculare": "1992-01-10",
"caen_principal": "8512",
"platitor_tva": false,
"sediu": {
"strada_id": 14967,
"strada": "Iuliu Maniu",
"numar": "1",
"localitate": "Cluj-Napoca",
"cod_siruta": 54984,
"judet": "Cluj"
},
"coordonate": {
"lat": 46.770235,
"lng": 23.590533,
"precizie": "numar"
},
"distanta_m": 48
}
],
"meta": {
"centru": {
"lat": 46.77,
"lng": 23.59
},
"raza_km": 0.3,
"stare": null,
"precizie": "strada",
"paginare": {
"pagina": 1,
"per_pagina": 20,
"total": 2479,
"pagini": 124
},
"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/business/v1/firme/aproape?lat=44.4526&lng=26.0855
{
"data": [
{
"cui": 17819426,
"denumire": "ATELIER CMAM SRL",
"forma_juridica": "SRL",
"stare": {
"cod": "2120",
"denumire": "perioadă de suspendare activitate expirată",
"categorie": "suspendata"
},
"data_inmatriculare": "2005-07-27",
"caen_principal": "7420",
"platitor_tva": false,
"sediu": {
"strada_id": 222727,
"strada": "Victoriei",
"numar": null,
"localitate": "București Sectorul 3",
"cod_siruta": 179169,
"judet": "București"
},
"coordonate": {
"lat": 44.452173,
"lng": 26.086032,
"precizie": "strada"
},
"distanta_m": 64
}
],
"meta": {
"centru": {
"lat": 44.4526,
"lng": 26.0855
},
"raza_km": 0.5,
"stare": null,
"precizie": "strada",
"paginare": {
"pagina": 1,
"per_pagina": 20,
"total": 3639,
"pagini": 182
},
"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/business/v1/firme/aproape?per_pagina=3&lat=46.7712&lng=23.6236&stare=activa
{
"data": [
{
"cui": 16884914,
"denumire": "GP INSTAL SRL",
"forma_juridica": "SRL",
"stare": {
"cod": "1048",
"denumire": "funcțiune",
"categorie": "activa"
},
"data_inmatriculare": "2004-10-26",
"caen_principal": "4933",
"platitor_tva": false,
"sediu": {
"strada_id": 15607,
"strada": "Slănic",
"numar": "11",
"localitate": "Cluj-Napoca",
"cod_siruta": 54984,
"judet": "Cluj"
},
"coordonate": {
"lat": 46.771129,
"lng": 23.623433,
"precizie": "numar"
},
"distanta_m": 15
}
],
"meta": {
"centru": {
"lat": 46.7712,
"lng": 23.6236
},
"raza_km": 0.5,
"stare": "activa",
"precizie": "strada",
"paginare": {
"pagina": 1,
"per_pagina": 3,
"total": 1364,
"pagini": 455
},
"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. |
| 422 | validare | An undeclared parameter or a value that fails validation (lat, lng, raza_km). The offending field is in detalii. |
| 422 | parametri_invalizi | The lat and lng parameters are required. |
| 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": "An undeclared parameter or a value that fails validation (lat, lng, raza_km). The offending field is in detalii.",
"detalii": {
"lat": [
"The value sent does not satisfy the parameter rule."
]
}
}
}