oneapi
Sign in
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. 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."
        }
    }
}

Error codes

CodeSlugWhen it occurs
401neautentificatToken missing, invalid, expired or revoked.
403feature_indisponibilThe current plan does not include the feature the route depends on.
422validareAn undeclared parameter or a value that fails validation (lat, lng, raza_km). The offending field is in detalii.
422parametri_invaliziThe lat and lng parameters are required.
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": "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."
            ]
        }
    }
}