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. Theval_min/val_maxfilters 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"
}
]
}
}
GEThttps://oneapi.ro/api/business/v1/achizitii/statistici?an=2023
{
"data": {
"total": {
"nr": "2750191",
"ron": "149354468198.28"
},
"pe_an": [
{
"an": 2023,
"nr": "2750191",
"ron": "149354468198.28"
}
],
"pe_tip": [
{
"tip": "contracte",
"nr": "188608"
}
]
},
"meta": {
"an": 2023
}
}
GEThttps://oneapi.ro/api/business/v1/achizitii/statistici?judet_autoritate=CJ
{
"data": {
"total": {
"nr": "865999",
"ron": "57727720328.08"
},
"pe_an": [
{
"an": 2020,
"nr": "111161",
"ron": "479790497.91"
}
],
"pe_tip": [
{
"tip": "directe",
"nr": "717757"
}
]
},
"meta": {
"judet_autoritate": "CJ"
}
}
Error codes
| Code | Slug | When it occurs |
|---|---|---|
| 401 | neautentificat | Token missing, invalid, expired or revoked. |
| 403 | feature_indisponibil | The current plan does not include the feature the route depends on. |
| 422 | validare | An undeclared parameter or a value that fails validation (an). The offending field is in detalii. |
| 429 | cota_depasita | The 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."
]
}
}
}