oneapi
Sign in
Business v1 / Firme

Companies by phone

The companies that carry a given phone number (it can be shared — accountants, call centres), as summaries. Paginated.

GET
https://oneapi.ro/api/business/v1/firme/dupa-telefon/{telefon}

Path parameters

NameTypeDescriptionExample
telefonrequired string Phone number, with or without country prefix.

Query parameters

This route accepts no query parameters.

How it behaves

  • The companies that have a given phone number published. It returns a list of summaries, paginated, because the same number can belong to several companies (accountant, group).
  • ⚠️ The source is the phone field of the tax return, filled in by the COMPANY, not by the tax authority: out of 2.44 million values, 370,138 are not numbers at all — strings of zeros, registry numbers, even 1,333 e-mail addresses. They do not enter the search and are never shown as a phone.
  • The search works on the canonical form, not on the raw text. Before 29 Sep 2026 it compared exactly, and 44,937 companies were unfindable although the number was correct, simply because the source had written it differently.

What it is for

  • Identifying the caller in a call centre, from the displayed number.
  • Spotting companies sharing a number — often the same accountant or group.
  • Deduplicating a lead database by phone number.

Response structure

FieldTypeDescription
data[].cui integer The tax ID.
data[].denumire string | null The name.
data[].cod_inmatriculare string | null The trade register order number (J…).
data[].forma_juridica string | null Legal form (SRL, SA, PFA…).
data[].stare string | null The company status, as an object: denumire is the raw ONRC text (107 distinct values in use), categorie is our classification into 7 buckets — activa, suspendata, dizolvata, lichidare, radiata, insolventa, alta — which is what you filter or group by. cod is the ONRC code of the status.
data[].data_inmatriculare string | null The trade register incorporation date.
data[].radiere.vazut_la string
data[].radiere.dupa string | null
data[].sediu.judet string The county of the registered office.opțional
data[].sediu.localitate string The locality of the registered office.opțional
data[].sediu.cod_siruta integer The locality SIRUTA code — chainable to /api/locations/v1.opțional
data[].caen_principal.cod string The primary CAEN code.
data[].caen_principal.denumire string | null The name of the primary activity.
data[].fiscal.tva boolean VAT-registered.
data[].fiscal.inactiv boolean Declared fiscally inactive.
data[].fiscal.e_factura boolean Enrolled in e-Invoicing.
data[].financiar object The latest filed balance sheet (year, turnover, net profit, employees); null for companies without one — sole traders, new companies —, not zero.
data[].financiar.an integer The balance-sheet year.
data[].financiar.cifra_afaceri number | null Net turnover, in lei.
data[].financiar.profit_net number | null Net profit, in lei; negative = loss.
data[].financiar.salariati integer | null The average number of employees.
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.telefon string The number in canonical form, i.e. what was actually searched — so you can see how your input was read.
meta.fara_date Present when the number is valid but no company carries it, together with data: []. ⚠️ Absence does NOT mean the number is not a company's: the field is filled in by the company itself and is missing for 37% of them.
meta.fara_date_cod The short, STABLE word for the reason, for clients that branch on it in code: fara_date is prose and may be rephrased, this is not.
meta.atentie string ⚠️ Present ONLY when the number belongs to 10 companies or more. It is then almost certainly an INTERMEDIARY number (the accountant who registered them), not a phone the companies share: 88% of numbers belong to exactly one company, while a single one appears at 3,659. The number is true, but the conclusion "these companies are connected" would be false.

Response examples

GEThttps://oneapi.ro/api/business/v1/firme/dupa-telefon/0212246677
{
    "data": [
        {
            "cui": 5260249,
            "denumire": "GASTRO INTERNATIONAL SRL",
            "cod_inmatriculare": "J40/26843/1993",
            "forma_juridica": "SRL",
            "stare": {
                "cod": "1084",
                "denumire": "radiată",
                "categorie": "radiata"
            },
            "data_inmatriculare": "1993-12-03",
            "sediu": {
                "judet": "București",
                "localitate": "București Sectorul 1",
                "cod_siruta": 179141
            },
            "caen_principal": {
                "cod": "4711",
                "denumire": "Comerț cu amănuntul în magazine nespecializate, cu vânzare predominantă de produse alimentare, băuturi și tutun"
            },
            "fiscal": {
                "tva": false,
                "inactiv": false,
                "e_factura": false
            },
            "financiar": null
        }
    ],
    "meta": {
        "telefon": "0212246677",
        "paginare": {
            "pagina": 1,
            "per_pagina": 20,
            "total": 4,
            "pagini": 1
        }
    }
}

Error codes

CodeSlugWhen it occurs
401neautentificatToken missing, invalid, expired or revoked.
403feature_indisponibilThe current plan does not include the feature the route depends on.
404negasitNothing exists for the telefon in the path.
422validareThe value is not a phone number. ⚠️ The route's ONLY error response: if the number is valid but nobody has it, you get 200 with an empty list and a sentence in meta.fara_date, not a 404. With a 404, "the number belongs to nobody" and "the route does not exist" looked identical, and the client had to guess which one it was reading.
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": "The value is not a phone number. ⚠️ The route's ONLY error response: if the number is valid but nobody has it, you get **200 with an empty list** and a sentence in meta.fara_date, not a 404. With a 404, \"the number belongs to nobody\" and \"the route does not exist\" looked identical, and the client had to guess which one it was reading.",
        "detalii": {
            "telefon": [
                "The value sent does not satisfy the parameter rule."
            ]
        }
    }
}