oneapi
Sign in
Business v1 / Achiziții publice

Procurement statistics

Aggregates across the whole base of awarded contracts: by year, county, CPV and procedure type. The amounts count each contract once, not once per SEAP republication.

GET
https://oneapi.ro/api/business/v1/achizitii/statistici

Query parameters

NameTypeDescriptionAccepted values
judet_autoritateoptional string | null The county of the AUTHORITY doing the buying — "how much was spent there". Not to be confused with judet_castigator. max 64 car.
judet_castigatoroptional string | null The county of the COMPANY being paid — "how much companies from there earned". Not to be confused with judet_autoritate. max 64 car.
anoptional integer | null Contract year; without it the statistic covers the whole series. e.g. 2023
autoritate_cuioptional integer | null The tax ID of a contracting authority — narrows every aggregate to its spending: pe_an becomes the institution's yearly chart, pe_tip shows what the total is made of. The numbers are THE SAME as those on /autoritati/{cui}: both read valid contracts, with the awarded value. Combinable with an and judet_castigator („who from Cluj won at this institution"); judet_autoritate makes no sense alongside, an authority being in a single county.

How it behaves

  • Not every contract has a declared value. Measured on 4 October 2026, across all 17.39 million rows: it is missing on 10.8% of contracts (312,587 rows), and almost never on direct awards (47 out of 13.68 million) or notices (52 out of 811,033). Any total is therefore the total of the rows that DO carry a figure, not of the whole set — for tip=contracte, of nine tenths of them. Contract counts cover all rows. The val_min/val_max filters work on the RON value, so they exclude rows without one.
  • Global aggregates over public procurement: volumes by year, by procedure type, by CPV. The macro picture of the procurement market.
  • Sums count each contract once, with each winner's share. SEAP republishes the award notice on every update (1.19 M contract rows are republications), repeats the contract value on every lot (0.52 M) and puts the value of the WHOLE framework agreement on every winner (228,000 rows). Read raw, the 2021–2026 contracts added up to 7,059 billion lei and Farmexim to 248 billion; corrected, 1,212 billion and 14.6. Impossible values (a 125.9-billion air-traffic simulator, 1.59 billion of dairy at a child-protection directorate) are left out of sums.

What it is for

  • The macro picture of the procurement market, for an annual report.
  • Comparing volumes by year and procedure type.
  • The context in which you place a single company's or authority's figures.

Response structure

All fields below live inside data.

FieldTypeDescription
total.nr integer The number of items.
total.ron string The value, in RON.
pe_an[].an integer The reference year.
pe_an[].nr integer The number of items.
pe_an[].ron string The value, in RON.
pe_tip[].tip string The type.
pe_tip[].nr integer The number of items.

Response examples

GEThttps://oneapi.ro/api/business/v1/achizitii/statistici
{
    "data": {
        "total": {
            "nr": "15566973",
            "ron": "1200888616420.51"
        },
        "pe_an": [
            {
                "an": 2020,
                "nr": "2224044",
                "ron": "12017816132.79"
            }
        ],
        "pe_tip": [
            {
                "tip": "directe",
                "nr": "13678154"
            }
        ]
    }
}

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 (an). The offending field is in detalii.
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 (an). The offending field is in detalii.",
        "detalii": {
            "judet_autoritate": [
                "The value sent does not satisfy the parameter rule."
            ]
        }
    }
}