oneapi
Sign in
Business v1 / Achiziții publice

Contracting authorities

The entities that have awarded at least one public contract, with the official name and county from Ministry of Finance records. Filter by county or name, sort by value, contract count or name.

GET
https://oneapi.ro/api/business/v1/autoritati

Query parameters

NameTypeDescriptionAccepted values
judetoptional string | null The county of the registered office: the name (with or without diacritics, with ș or ş) or the car-plate code — Cluj, cluj, CJ, Argeș, ARGEŞ all reach the same place. Bucharest is București or B. A county that does not exist returns 422, not an empty list. ⚠️ Authorities without an official identity have no county, so no county filter will return them. max 64 car.
qoptional string | null Searches the official name AND the one from the notice, anywhere in the text. Two characters minimum. max 120 car.
sortareoptional string | null valoare (default) — by amount awarded; contracte — by their count; denumire — alphabetical, with authorities lacking an official identity last. valoarecontractedenumire

How it behaves

  • This is NOT the list of public institutions in Romania. It is the list of entities that have awarded at least one public contract — which includes state-owned companies, utilities and research institutes, and leaves out institutions that have awarded nothing. The definition is repeated in the response, in meta.definitie. No canonical register of public institutions exists in our data: the taxpayer type only separates legal entities from natural persons, and "legal entity without a Trade Register match" would return over 300,000 entities, mostly associations, foundations and notarial offices.
  • The name and address come from a different source than the contracts. The name in a SEAP notice is typed by whoever publishes it and varies; the official name and county come from Ministry of Finance records, and an_identitate says which snapshot. For 3.5% of authorities that identity is missing — are_identitate is then false and the county is null, so the judet filter will not return them.
  • q searches both names, official and from the notice. Search the way the official source writes it: "MUNICIPIUL CLUJ-NAPOCA", not "Primăria Cluj".

What it is for

  • Building a target list of institutions by county, ordered by the budget they spend.
  • Finding an authority's tax ID by name, so you can then open its profile.
  • Feeding an index of per-authority pages with official names and addresses.

Response structure

FieldTypeDescription
data[].cui integer The tax ID.
data[].denumire string The name to display: the official one where we have it, otherwise the one from the notice.
data[].denumire_seap string The name from SEAP notices — the most frequent variant.
data[].are_identitate boolean true if the name comes from official records, false if it comes from the notice.
data[].localitate string The locality of the registered office, from official records. null without an identity.
data[].judet string The county of the registered office, from official records. null without an identity.
data[].stare string The tax status. null without an identity.
data[].an_identitate integer The year of the snapshot the name and locality come from. null without an identity.
data[].nr_contracte integer The number of contracts awarded.
data[].valoare_ron number The total value awarded, in RON. null when no contract states a value.
meta.definitie string What the list actually is — read it before presenting it as "the public institutions".
meta.paginare.pagina integer Current page, counted from 1.
meta.paginare.per_pagina integer How many records a page holds.
meta.paginare.total integer Total matching records, beyond the current page.
meta.paginare.pagini integer How many pages the list has.

Response examples

GEThttps://oneapi.ro/api/business/v1/autoritati?per_pagina=5
{
    "data": [
        {
            "cui": 16054368,
            "denumire": "COMPANIA NAŢIONALĂ DE ADMINISTRARE A INFRASTRUCTURII RUTIERE S.A.",
            "denumire_seap": "COMPANIA NATIONALA DE ADMINISTRARE A INFRASTRUCTURII RUTIERE S.A.",
            "are_identitate": true,
            "localitate": "Bucureşti",
            "judet": "MUNICIPIUL BUCUREŞTI",
            "stare": "INREGISTRAT",
            "an_identitate": 2026,
            "nr_contracte": 38814,
            "valoare_ron": 247815790850.72
        }
    ],
    "meta": {
        "definitie": "Entitățile care au atribuit cel puțin un contract public. NU e lista instituțiilor publice din România: include companii de stat și regii, iar instituțiile fără contracte atribuite lipsesc.",
        "paginare": {
            "pagina": 1,
            "per_pagina": 5,
            "total": 17479,
            "pagini": 3496
        }
    }
}

Error codes

CodeSlugWhen it occurs
401neautentificatToken missing, invalid, expired or revoked.
403feature_indisponibilThe current plan does not include the feature the route depends on.
422validareUnknown parameter, sortare outside the allowed list, or q shorter than two characters.
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": "Unknown parameter, sortare outside the allowed list, or q shorter than two characters.",
        "detalii": {
            "judet": [
                "The value sent does not satisfy the parameter rule."
            ]
        }
    }
}