oneapi
Sign in
Business v1 / Locații

A company's neighbours

⭐ Which other companies are registered at the same address (by default) or on the same street (?scop=strada). The company asked about does not appear in the list.

GET
https://oneapi.ro/api/business/v1/firme/{cui}/vecini

Path parameters

NameTypeDescriptionExample
cuirequired string The company tax identification number, without the RO prefix (e.g. 6719278).

Query parameters

NameTypeDescriptionAccepted values
scopoptional string | null How close the neighbourhood is counted: adresa (default) or strada. e.g. strada

How it behaves

  • ⭐ Which other companies are registered at the same address (default) or on the same street (?scop=strada). The queried company is excluded from the list.
  • The numbers say something about the real economy: at the address with the most registered offices in the country — Bucureştii Noi no. 136 — 24,409 companies are registered. Registered-office services are a phenomenon, not an exception, and this route makes them visible.
  • Neighbourhood is computed on the street resolved in the register, not on the raw address text. For companies whose office could not be linked to a street (~21%) the answer is a 422 with the reason, not an empty list that would suggest the company has no neighbours.
  • scop=adresa matches the number exactly as the source writes it (26, 27-33, 1 bis) — it is not normalised, because no rule would do that without inventing.

What it is for

  • Spotting registered-office addresses shared by dozens of companies.
  • A risk signal at onboarding: an address with hundreds of companies deserves a second look.
  • Prospecting by building or street: who else is next to your customer.

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, in decimal degrees (WGS 84).
data[].coordonate.lng number Longitude, in decimal degrees (WGS 84).
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 Unused for neighbours (stays null) — it appears on /firme/aproape.
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.

Response examples

GEThttps://oneapi.ro/api/business/v1/firme/6719278/vecini
{
    "data": [
        {
            "cui": 54306506,
            "denumire": "VANGUARD ESTATES S.R.L.",
            "forma_juridica": "SRL",
            "stare": {
                "cod": "1048",
                "denumire": "funcțiune",
                "categorie": "activa"
            },
            "data_inmatriculare": "2026-03-20",
            "caen_principal": "6831",
            "platitor_tva": true,
            "sediu": {
                "strada_id": 221585,
                "strada": "Timișoara",
                "numar": "26",
                "localitate": "București Sectorul 6",
                "cod_siruta": 179196,
                "judet": "București"
            },
            "coordonate": {
                "lat": 44.428876,
                "lng": 26.036041,
                "precizie": "numar"
            },
            "distanta_m": null
        }
    ],
    "meta": {
        "scop": "adresa",
        "paginare": {
            "pagina": 1,
            "per_pagina": 20,
            "total": 95,
            "pagini": 5
        }
    }
}

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 company with tax ID [{cui}] was not found.
422validareAn undeclared parameter or a value that fails validation (scop). The offending field is in detalii.
422parametri_invaliziThe scope [{scop}] does not exist. Accepted: adresa, strada.
422sediu_nelegatThe office of company [{cui}] is not linked to a street in the nomenclature, so neighbours cannot be determined.
422sediu_fara_numarThe office of company [{cui}] has no street number, so address neighbours cannot be determined. Try ?scop=strada.
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 (scop). The offending field is in detalii.",
        "detalii": {
            "cui": [
                "The value sent does not satisfy the parameter rule."
            ]
        }
    }
}