Business v1 / Achiziții publice
Search procurement
Searches public contracts (SEAP/TED) by: ?cpv= (prefix), ?autoritate_cui=, ?castigator_cui=, ?an=, ?tip=, ?val_min=, ?val_max=. At least one filter is required. Paginated.
GET
https://oneapi.ro/api/business/v1/achizitii/cauta
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
The contract year.
e.g. 2024e.g. 2023
autoritate_cuioptional
integer | null
The contracting authority's tax ID.
1
castigator_cuioptional
integer | null
The winner's tax ID.
1
cpvoptional
string | null
CPV code.
e.g. 03000000-1
tipoptional
string | null
Procedure type:
contracte (classic awards), directe (direct purchases) or notificari. For notificari more than half the rows carry no value — any sum is that of the half that has a figure.
contractedirectenotificari
val_maxoptional
number | null
Maximum contract value, in RON. Same column as
val_min.
0
val_minoptional
number | null
Minimum contract value, in RON. The filter works on
valoare_ron, so it also catches contracts denominated in foreign currency.
0
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 search across public procurement contracts, with filters:
cpv,autoritate_cui,castigator_cui,an,tip,val_min,val_max. At least one filter is required — the base has ~17 million contracts. - Each contract appears once: older publications of a contract SEAP republished and the contract value repeated on other lots are not listed (
/achizitii/{id}opens them).valoare.ronis the declared value;valoare.atribuita_ron, this winner's share, is the one used in sums. - 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
- Monitoring contracts under a CPV code you care about.
- Market analysis before bidding: who wins, and at what values.
- Feeding an alert stream on public procurement.
Response structure
FieldTypeDescription
data[].id
integer
The contract identifier. Open it with
/achizitii/{id}, which carries the full SEAP notice (notice number, award criterion, EU funding).
data[].an
integer | null
The reference year.
data[].data_contract
string | null
The contract date.
data[].autoritate.nume
string | null
The name of the contracting authority.
data[].autoritate.cui
integer | null
The tax ID of the contracting authority.
data[].castigator.nume
string | null
The name of the winning company.
data[].castigator.cui
integer | null
The winner's tax ID. ⚠️ SEAP puts foreign identifiers in this same field: of 179,814 distinct identifiers, 8,656 (4.8%) are not valid Romanian tax IDs — see
cui_romanesc.
data[].obiect
string | null
The contract subject, as published.
data[].cpv
string | null
The CPV code of the subject.
data[].cpv_denumire
string | null
The official name of the CPV code, from the nomenclature. It is the fallback description when the authority wrote nothing useful in
obiect — 4,582 direct purchases have the word "directa" there. null for the 11 codes (out of 8,628) missing from the CPV 2008 nomenclature.
data[].valoare.ron
number | null
The contract value, in RON.
data[].valoare.eur
number | null
The contract value, in euro.
data[].valoare.moneda_originala
string | null
The currency the contract was published in.
data[].valoare.atribuita_ron
number | null
What falls to this winner: the declared value divided by the winners of the same framework agreement;
null if the declared value is impossible. All sums use it.
data[].valoare.castigatori
integer
How many winners share the same contract (framework agreement); usually 1.
data[].valoare.suspecta
boolean
true if the declared value is impossible (over 10 times the procedure estimate, or thousands of times the authority's usual contracts); still shown, but left out of sums.
data[].tip
string | null
The type.
data[].procedura
string | null
The award procedure type.
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.
data[].castigator.cui_romanesc
boolean
true if the value validates as a Romanian tax ID, check digit included. false only means it is NOT one — usually a foreign identifier (1,257 are longer than 10 digits) or a code with a wrong check digit (7,392). We do not claim to know whose it is. Worth reading before calling /firme/{cui}: with false, the company will not be found there.
Response examples
GEThttps://oneapi.ro/api/business/v1/achizitii/cauta?castigator_cui=6719278
{
"data": [
{
"id": 57979033,
"an": 2026,
"data_contract": "2026-03-31",
"autoritate": {
"nume": "Teatrul Municipal Lucia Sturdza Bulandra",
"cui": 4220955
},
"castigator": {
"nume": "Mega Image",
"cui": 6719278,
"cui_romanesc": true
},
"obiect": "alimente - recuzita consumabila spectacol Mascariciul",
"cpv": "15000000-8",
"cpv_denumire": "Alimente, băuturi, tutun şi produse conexe",
"valoare": {
"ron": 81.27,
"eur": null,
"moneda_originala": null,
"atribuita_ron": 81.27,
"castigatori": 1,
"suspecta": false
},
"tip": "notificari",
"procedura": "Furnizare"
}
],
"meta": {
"paginare": {
"pagina": 1,
"per_pagina": 20,
"total": 776,
"pagini": 39
}
}
}
GEThttps://oneapi.ro/api/business/v1/achizitii/cauta?judet_autoritate=CJ&an=2024&per_pagina=3
{
"data": [
{
"id": 53792523,
"an": 2024,
"data_contract": "2024-12-31",
"autoritate": {
"nume": "Compania de Apa Somes S.A.",
"cui": 201217
},
"castigator": {
"nume": "NTT DATA ROMANIA",
"cui": 13091574,
"cui_romanesc": true
},
"obiect": null,
"cpv": "48517000-5",
"cpv_denumire": "Pachete software IT",
"valoare": {
"ron": 1691916,
"eur": null,
"moneda_originala": null,
"atribuita_ron": 1691916,
"castigatori": 1,
"suspecta": false
},
"tip": "contracte",
"procedura": "Procedura simplificata"
}
],
"meta": {
"paginare": {
"pagina": 1,
"per_pagina": 3,
"total": 150741,
"pagini": 50247
}
}
}
GEThttps://oneapi.ro/api/business/v1/achizitii/cauta?cpv=03000000-1&per_pagina=3
{
"data": [
{
"id": 47402467,
"an": 2026,
"data_contract": "2026-03-31",
"autoritate": {
"nume": "GRADINITA CU PROGRAM PRELUNGIT NR.5",
"cui": 29034729
},
"castigator": {
"nume": "MUNTEAN VASILE-VALENTIN",
"cui": 30446928,
"cui_romanesc": true
},
"obiect": "LEGUME -FRUCTE",
"cpv": "03000000-1",
"cpv_denumire": "Produse agricole, de fermă, de pescuit, de silvicultură şi produse conexe",
"valoare": {
"ron": 2101.34,
"eur": null,
"moneda_originala": null,
"atribuita_ron": 2101.34,
"castigatori": 1,
"suspecta": false
},
"tip": "directe",
"procedura": "Furnizare"
}
],
"meta": {
"paginare": {
"pagina": 1,
"per_pagina": 3,
"total": 4894,
"pagini": 1632
}
}
}
GEThttps://oneapi.ro/api/business/v1/achizitii/cauta?tip=directe&an=2023&per_pagina=3
{
"data": [
{
"id": 56109553,
"an": 2023,
"data_contract": "2023-12-28",
"autoritate": {
"nume": "ACADEMIA DE STUDII ECONOMICE BUCURESTI",
"cui": 4433775
},
"castigator": {
"nume": "CRISCAT INVEST",
"cui": 39400533,
"cui_romanesc": true
},
"obiect": "Lucrari izolare fonica sala de sport Academia de Studii Economice din Bucuresti",
"cpv": "44112600-4",
"cpv_denumire": "Izolaţie acustică",
"valoare": {
"ron": 845000,
"eur": null,
"moneda_originala": null,
"atribuita_ron": 845000,
"castigatori": 1,
"suspecta": false
},
"tip": "directe",
"procedura": null
}
],
"meta": {
"paginare": {
"pagina": 1,
"per_pagina": 3,
"total": 2317110,
"pagini": 772370
}
}
}
GEThttps://oneapi.ro/api/business/v1/achizitii/cauta?val_min=1000000&an=2024&per_pagina=3
{
"data": [
{
"id": 53792575,
"an": 2024,
"data_contract": "2024-12-31",
"autoritate": {
"nume": "Compania Nationala Aeroporturi Bucuresti SA",
"cui": 26490194
},
"castigator": {
"nume": "BUSINESS PLUS",
"cui": 15732322,
"cui_romanesc": true
},
"obiect": null,
"cpv": "50100000-6",
"cpv_denumire": "Servicii de reparare şi de întreţinere a vehiculelor şi a echipamentelor aferente şi servicii conexe",
"valoare": {
"ron": 1718475,
"eur": null,
"moneda_originala": null,
"atribuita_ron": 1718475,
"castigatori": 1,
"suspecta": false
},
"tip": "contracte",
"procedura": "Licitatie deschisa"
}
],
"meta": {
"paginare": {
"pagina": 1,
"per_pagina": 3,
"total": 12066,
"pagini": 4022
}
}
}
GEThttps://oneapi.ro/api/business/v1/achizitii/cauta?autoritate_cui=4220955&per_pagina=3
{
"data": [
{
"id": 57979004,
"an": 2026,
"data_contract": "2026-03-31",
"autoritate": {
"nume": "Teatrul Municipal Lucia Sturdza Bulandra",
"cui": 4220955
},
"castigator": {
"nume": "Lica Flower Shop",
"cui": 40565934,
"cui_romanesc": true
},
"obiect": "aranjament florar",
"cpv": "44423000-1",
"cpv_denumire": "Diverse articole",
"valoare": {
"ron": 600,
"eur": null,
"moneda_originala": null,
"atribuita_ron": 600,
"castigatori": 1,
"suspecta": false
},
"tip": "notificari",
"procedura": "Furnizare"
}
],
"meta": {
"paginare": {
"pagina": 1,
"per_pagina": 3,
"total": 4588,
"pagini": 1530
}
}
}
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, autoritate_cui, castigator_cui, cpv, tip, val_max, val_min). The offending field is in detalii. |
| 422 | fara_filtru | Give at least one filter (cpv/autoritate_cui/castigator_cui/an/tip/val_min/val_max). |
| 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, autoritate_cui, castigator_cui, cpv, tip, val_max, val_min). The offending field is in detalii.",
"detalii": {
"judet_autoritate": [
"The value sent does not satisfy the parameter rule."
]
}
}
}