Skip to content

Open data and API

The platform's data, through a public JSON API.

What the data holds

Direct purchases

19,935,045

Offline purchases

1,803,854

Tenders

260,755

Entities (authorities and suppliers)

269,360

CC BY 4.0

PeBaniiNostri.ro's data and analyses are published under Creative Commons Attribution 4.0 International: you may use, redistribute and adapt them on one condition, crediting PeBaniiNostri.ro, for example "Source: PeBaniiNostri.ro", with a link to pebaniinostri.ro.

API documentation

The API is read-only: every address answers GET with JSON. The same queries sit behind the site's pages, so the figures always match.

Base address

GET /api/v1/<Endpoint>

A GET on the base address returns the discovery document: every endpoint, with its parameters and their types. It needs no key.

Authentication

Every data endpoint requires an API key, sent in the X-API-Key header or, where you cannot set headers, in the api_key parameter.

curl -H "X-API-Key: <key>" \
     "https://pebaniinostri.ro/api/v1/stats/totals"

API key and AI assistants

A key is issued automatically the first time you sign in with Google. The same key and the same daily budget serve the MCP server too, through which an AI assistant (Claude, ChatGPT and others) can query the data.

MCP server address

https://pebaniinostri.ro/mcp

How to connect it in each application Get a key

Daily limit

Each key has a maximum number of calls per day. The budget resets at midnight, Romanian time. Its state comes back on every response:

  • X-RateLimit-Limit
  • X-RateLimit-Remaining
  • X-RateLimit-Reset

Pagination and sorting

Numbered lists accept page (from 1) and per_page (at most 100), plus sort and dir (asc or desc) for the columns listed under each address. The purchase, authority and supplier lists are walked with after and before. The response carries the links to the previous and next page.

Endpoint reference

The table is generated from the API on every view, so it is always current. Parameter and field names stay in English, because they are part of the contract you code against.

Statistics and spend

Statistics and spend
Endpoint Description Parameters
GET /api/v1/stats/totals
stats.totals
National totals for each stream: direct purchases, offline purchases, tender notices and tender contracts.
Tender money is reported two ways: `tender_notice_value` is the value of the notices, `tender_contract_value` the sum of the contracts awarded under them.
—
GET /api/v1/stats/entities
stats.entity_counts
How many contracting authorities and suppliers the data holds. —
GET /api/v1/stats/counties
stats.counties
Spend per county, split by stream, with the number of contracting authorities registered there.
The county is the contracting authority's registered seat, not the place where the work was done.
page int
Page number, 1-based.
Default: 1
per_page int
Rows per page, at most 100.
Default: 50
sort enum
Column to sort by. Omit for the default ordering.
Values: denumire, direct_spend, award_spend, tender_spend, total_spend, auth_count
dir enum
Sort direction; defaults to the natural direction of the column.
Values: asc, desc
GET /api/v1/stats/counties/{county_id}
stats.county
One county by its id.
county_id int required
County id, from /reference/counties.
GET /api/v1/stats/counties/{county_id}/authorities
stats.county_authorities
The contracting authorities of one county that spent the most through direct and offline purchases, with their single-bidder rate and discretionary spend index.
Only authorities with at least one of the two scores are listed.
county_id int required
County id, from /reference/counties.
limit int
How many authorities to return.
Default: 20
GET /api/v1/stats/cpv
stats.cpv
Spend per CPV code, over all streams and years, with the number of awards behind each figure.
page int
Page number, 1-based.
Default: 1
per_page int
Rows per page, at most 100.
Default: 25
sort enum
Column to sort by. Omit for the default ordering.
Values: category, contract_count, total_value, pct
dir enum
Sort direction; defaults to the natural direction of the column.
Values: asc, desc
GET /api/v1/stats/periods
stats.periods
The years the data covers, with the months each one holds and whether each half-year is complete.
The data starts in April 2018 and runs to the latest update; the current year is always partial. Late December 2023 is missing from the data.
—
GET /api/v1/stats/dimensions
stats.dimensions
The values every statistics filter accepts: counties (with their development region), CPV domains, authority types and contract types. —
GET /api/v1/stats/summary
stats.summary
The headline figures for a filter set: money and awards per stream, active authorities and suppliers, competition, SMEs, and the same period a year earlier.
A partial year or half-year is compared with the same months a year earlier. Authority counts follow the period, county and authority type filters; supplier counts follow the period only.
year int
Year the money was spent in; 0 covers every year.
Default: 0
semester enum
Half-year: 1 January-June, 2 July-December; 0 the whole year.
Values: 0, 1, 2
Default: 0
contract_type enum
Contract type: 1 supply, 2 services, 3 works; 0 every type.
Values: 0, 1, 2, 3
Default: 0
county int
County of the contracting authority's seat, by id (see /stats/dimensions); 0 every county.
Default: 0
domain int
CPV domain id (see /stats/dimensions); 0 every domain.
Default: 0
cpv string
CPV division or group, as its leading one to three digits: 45 covers 450 through 459.
authority_type int
Authority type id (see /stats/dimensions); 0 every type.
Default: 0
GET /api/v1/stats/breakdown
stats.breakdown
Money and awards grouped by one dimension: stream, contract type, county, development region, CPV domain, division or group, authority type, year or, for the two direct streams, document type and distance from the legal ceiling.
County and region are the authority's seat, which puts ministries and national companies in Bucharest. By county and region, each row also carries the resident population and the spend per inhabitant. `doc_type` and `ceiling_band` cover the two direct streams only; ceiling bands are 1 <10%, 2 10-25%, 3 25-50%, 4 50-75%, 5 75-90%, 6 90-95%, 7 95-100% of the ceiling that applied.
year int
Year the money was spent in; 0 covers every year.
Default: 0
semester enum
Half-year: 1 January-June, 2 July-December; 0 the whole year.
Values: 0, 1, 2
Default: 0
contract_type enum
Contract type: 1 supply, 2 services, 3 works; 0 every type.
Values: 0, 1, 2, 3
Default: 0
county int
County of the contracting authority's seat, by id (see /stats/dimensions); 0 every county.
Default: 0
domain int
CPV domain id (see /stats/dimensions); 0 every domain.
Default: 0
cpv string
CPV division or group, as its leading one to three digits: 45 covers 450 through 459.
stream enum
Stream: 1 direct purchases, 2 offline purchases, 3 tenders; 0 all three.
Values: 0, 1, 2, 3
Default: 0
authority_type int
Authority type id (see /stats/dimensions); 0 every type.
Default: 0
by enum required
The dimension to group by.
Values: stream, contract_type, county, region, domain, division, cpv_group, authority_type, year, doc_type, ceiling_band
top int
Name the largest N groups and pool the rest into one remainder row; 0 lists them all.
Default: 0
by2 enum
`year` splits each group by year, one row per group per year (`top` then does not apply).
Values: , year
GET /api/v1/stats/cpv-codes
stats.cpv_codes
The CPV codes of one CPV group as a tree, each with the money spent under that code and beneath it, per stream, over all years.
Figures cover every year, county and contract type, so the period, county, contract type, stream and authority type filters are not applied; they are named in `ignored_filters`. A domain that does not contain the group returns no rows. Rows come in code order, each with its `parent` (the nearest existing code above it) and `depth`; `value` and the stream figures are the code's own, `tree_value` adds every code beneath it. Direct and offline purchases are counted by their own code; tenders count notices by their main code, at the sum of their contracts, as the tender listing filtered on the code does.
cpv string required
The CPV group, as its three leading digits (851).
year int
Year the money was spent in; 0 covers every year.
Default: 0
semester enum
Half-year: 1 January-June, 2 July-December; 0 the whole year.
Values: 0, 1, 2
Default: 0
contract_type enum
Contract type: 1 supply, 2 services, 3 works; 0 every type.
Values: 0, 1, 2, 3
Default: 0
county int
County of the contracting authority's seat, by id (see /stats/dimensions); 0 every county.
Default: 0
domain int
CPV domain id (see /stats/dimensions); 0 every domain.
Default: 0
stream enum
Stream: 1 direct purchases, 2 offline purchases, 3 tenders; 0 all three.
Values: 0, 1, 2, 3
Default: 0
authority_type int
Authority type id (see /stats/dimensions); 0 every type.
Default: 0
GET /api/v1/stats/timeline
stats.timeline
Money and awards over time, per stream, by month, half-year or year.
The monthly series does not accept the `cpv` filter; the half-yearly and yearly ones do.
year int
Year the money was spent in; 0 covers every year.
Default: 0
semester enum
Half-year: 1 January-June, 2 July-December; 0 the whole year.
Values: 0, 1, 2
Default: 0
contract_type enum
Contract type: 1 supply, 2 services, 3 works; 0 every type.
Values: 0, 1, 2, 3
Default: 0
county int
County of the contracting authority's seat, by id (see /stats/dimensions); 0 every county.
Default: 0
domain int
CPV domain id (see /stats/dimensions); 0 every domain.
Default: 0
cpv string
CPV division or group, as its leading one to three digits: 45 covers 450 through 459.
stream enum
Stream: 1 direct purchases, 2 offline purchases, 3 tenders; 0 all three.
Values: 0, 1, 2, 3
Default: 0
authority_type int
Authority type id (see /stats/dimensions); 0 every type.
Default: 0
grain enum
Time unit of the series.
Values: month, semester, year
Default: month
GET /api/v1/stats/lots
stats.lots
Tender lots with money spent on them, grouped by one dimension: how many, what they were estimated at, what was spent, how many offers they drew, and how much went to SMEs and associations.
A contract's money is split across the lots it names, as in indicator #05. Average offers and the single-offer share count only competitive lots whose offers are known, so they match #05. A lot with money in two years counts in both when grouped by year. Offer buckets: 0 unknown, 1, 2, 3, 4 = 4-5, 5 = 6-10, 6 = 11+.
year int
Year the money was spent in; 0 covers every year.
Default: 0
semester enum
Half-year: 1 January-June, 2 July-December; 0 the whole year.
Values: 0, 1, 2
Default: 0
contract_type enum
Contract type: 1 supply, 2 services, 3 works; 0 every type.
Values: 0, 1, 2, 3
Default: 0
county int
County of the contracting authority's seat, by id (see /stats/dimensions); 0 every county.
Default: 0
domain int
CPV domain id (see /stats/dimensions); 0 every domain.
Default: 0
cpv string
CPV division or group, as its leading one to three digits: 45 covers 450 through 459.
authority_type int
Authority type id (see /stats/dimensions); 0 every type.
Default: 0
by enum required
The dimension to group by.
Values: procedure, contract_type, award_criteria, legislation, eu_funded, eauction, joue, modality, lots, value_band, year, county, domain, authority_type, offers, perf_county
scope enum
`competitive` keeps the procedures with prior publication, as indicator #05 does.
Values: all, competitive
Default: all
GET /api/v1/stats/notices
stats.notices
Awarded procedures (one award notice each) grouped by one or two dimensions, with their lots, estimated value and the money spent under them.
A procedure is dated by the publication of its award notice. The data holds award notices only, so procedures are counted when awarded, not when launched, and cancelled procedures are missing. `modality`: 1 contract, 2 framework agreement, 3 dynamic purchasing system.
year int
Year the money was spent in; 0 covers every year.
Default: 0
semester enum
Half-year: 1 January-June, 2 July-December; 0 the whole year.
Values: 0, 1, 2
Default: 0
contract_type enum
Contract type: 1 supply, 2 services, 3 works; 0 every type.
Values: 0, 1, 2, 3
Default: 0
county int
County of the contracting authority's seat, by id (see /stats/dimensions); 0 every county.
Default: 0
domain int
CPV domain id (see /stats/dimensions); 0 every domain.
Default: 0
cpv string
CPV division or group, as its leading one to three digits: 45 covers 450 through 459.
authority_type int
Authority type id (see /stats/dimensions); 0 every type.
Default: 0
by enum required
The dimension to group by.
Values: procedure, contract_type, award_criteria, legislation, eu_funded, eauction, joue, modality, lots, value_band, year, county, domain, authority_type
by2 enum
Optional second dimension, for a cross-tabulation.
Values: , procedure, contract_type, award_criteria, legislation, eu_funded, eauction, joue, modality, lots, value_band, year, county, domain, authority_type
GET /api/v1/stats/market
stats.market
Supplier market structure for a period: how many suppliers were paid, how many for the first time, how concentrated the money was, and the SME share of tender money.
Returns the period's figures, the concentration curve (the share held by the largest 5%, 10% ... of suppliers) and the yearly series. Every supplier counts as new in 2018, the first year of the data. Only tender winners are marked as SMEs, so the SME figures cover tender money only.
year int
Year the money was spent in; 0 covers every year.
Default: 0
semester enum
Half-year: 1 January-June, 2 July-December; 0 the whole year.
Values: 0, 1, 2
Default: 0
stream enum
Stream: 1 direct purchases, 2 offline purchases, 3 tenders; 0 all three.
Values: 0, 1, 2, 3
Default: 0
GET /api/v1/stats/top/authorities
stats.top_authorities
The contracting authorities that spent the most in a period.
year int
Year the money was spent in; 0 covers every year.
Default: 0
semester enum
Half-year: 1 January-June, 2 July-December; 0 the whole year.
Values: 0, 1, 2
Default: 0
county int
County of the contracting authority's seat, by id (see /stats/dimensions); 0 every county.
Default: 0
authority_type int
Authority type id (see /stats/dimensions); 0 every type.
Default: 0
page int
Page number, 1-based.
Default: 1
per_page int
Rows per page, at most 100.
Default: 25
sort enum
Column to sort by. Omit for the default ordering.
Values: name, direct_spend, award_spend, tender_spend, total_spend
dir enum
Sort direction; defaults to the natural direction of the column.
Values: asc, desc
GET /api/v1/stats/top/suppliers
stats.top_suppliers
The suppliers paid the most in a period.
With a county, the money is what authorities seated there paid, `client_count` counts clients in that county, and only the head of the list is kept: every sort order is exact for its first 20 rows.
year int
Year the money was spent in; 0 covers every year.
Default: 0
semester enum
Half-year: 1 January-June, 2 July-December; 0 the whole year.
Values: 0, 1, 2
Default: 0
county int
County of the paying authority's seat, by id (see /stats/dimensions); 0 every county.
Default: 0
page int
Page number, 1-based.
Default: 1
per_page int
Rows per page, at most 100.
Default: 25
sort enum
Column to sort by. Omit for the default ordering.
Values: direct_spend, award_spend, tender_spend, client_count, total_spend
dir enum
Sort direction; defaults to the natural direction of the column.
Values: asc, desc
GET /api/v1/stats/top/awards
stats.top_awards
The largest single awards of a period: direct purchases, offline purchases or tender contracts.
A tender row is one contract at its full value; `supplier_cui` is the winner with the largest share of it. With a county, at most 20 awards per stream and half-year are kept.
year int
Year the money was spent in; 0 covers every year.
Default: 0
semester enum
Half-year: 1 January-June, 2 July-December; 0 the whole year.
Values: 0, 1, 2
Default: 0
county int
County of the contracting authority's seat, by id (see /stats/dimensions); 0 every county.
Default: 0
stream enum
Stream: 1 direct purchases, 2 offline purchases, 3 tenders; 0 all three.
Values: 0, 1, 2, 3
Default: 0
limit int
How many awards to return.
Default: 10

Risk indicators

Risk indicators
Endpoint Description Parameters
GET /api/v1/red-flags
red_flags.catalog
The ten indicators, with their slug, severity band and the path of their endpoints.
Use it to find the other indicator endpoints.
—
GET /api/v1/red-flags/overview
red_flags.overview
Case count and money at stake for each of the ten indicators.
The indicators count different units (a lot, a pair, an authority-year, a market), so their cases and money must not be added together; the totals in `meta` do so and are kept only for compatibility. For how many authorities and suppliers are flagged, use red_flags.coverage.
—
GET /api/v1/red-flags/coverage
red_flags.coverage
How many authorities and suppliers the indicators flag, out of every one that spent or was paid public money.
A flag is a finding. #06 counts at a single-bidder rate of 50% or more over at least 5 lots, #09 at an index above 60% in some year, and a supplier on #05 at a single-offer share of 50% or more over at least 5 lots; #05 is not counted per authority, because #06 is its authority form. Eight indicators apply to authorities, seven to suppliers.
—
GET /api/v1/red-flags/convergence
red_flags.convergence
Authorities and suppliers by the number of indicators that flag them.
One row per count from 1 up, counted as in red_flags.coverage. Suppliers have seven indicators, so their counts stop at 7.
—
GET /api/v1/red-flags/cooccurrence
red_flags.cooccurrence
For every pair of authority indicators, how many authorities both flag, and what share of the first indicator's authorities that is.
The shares are not symmetric: `share_pct` is taken over the authorities `flag_a` flags. Where `flag_a` = `flag_b`, the row is the indicator's own count, at 100%.
—
GET /api/v1/red-flags/most-flagged/authorities
red_flags.most_flagged_authorities
The contracting authorities flagged by the most indicators, the biggest spenders first among equals.
`flags` lists the indicators that flag the authority and `cases` how many cases each holds. When an indicator holds the case only in a given year, `flag_year` names it.
limit int
How many authorities to return.
Default: 20
GET /api/v1/red-flags/most-flagged/suppliers
red_flags.most_flagged_suppliers
The suppliers flagged by the most indicators, the biggest earners first among equals.
As red_flags.most_flagged_authorities, over the seven indicators that name a supplier.
limit int
How many suppliers to return.
Default: 20
GET /api/v1/red-flags/overview/years
red_flags.overview_years
Cases and money per indicator per year, and for the indicators that measure one, the eligible population and the rate against it.
Each indicator files its cases under its own year: the year the money was spent for #01, #05 and #07-#10, the finalisation year for #02 and the year of the first win for #03. For #01-#03, `eligible` is: groups of direct purchases with at least two purchases (#01), direct purchases at 50-100% of the ceiling of their date (#02), companies receiving their first public money that year (#03). #04 and #06 have no year, so they have no rows. `partial` marks a year the data does not cover in full.
flag int
Only the rows of this indicator (1-10); 0 returns every indicator.
Default: 0
GET /api/v1/red-flags/overview/cpv
red_flags.overview_cpv
Each indicator's flagged money by CPV division, as a share of that indicator's total, for the divisions that weigh most across the indicators.
Seven indicators carry a CPV code: #01, #02, #05, #07, #08, #09 and #10. Divisions are ranked by their mean share across them, so each indicator weighs the same whatever its money. #08 counts the flagged December windows and #09 the discretionary spend of the ranked authorities. The pooled row carries a null division and `"remainder": true`, so every indicator's shares sum to 100.
top int
How many divisions to name before the rest are pooled.
Default: 12
GET /api/v1/red-flags/by-county
red_flags.by_county
Per county, the authorities that spent public money and how many of them the indicators flag.
The county is the authority's seat. Flags are counted as in red_flags.coverage.
—
GET /api/v1/red-flags/by-authority/{cui}
red_flags.by_authority
How many cases each indicator holds for one contracting authority.
#06 and #09 score the authority rather than list cases: each counts 1 when the authority crosses the dashboard's line (a single-bidder rate of 50% or more over at least 5 lots; an index above 60% in some year) and returns the figure as `score`, a percentage. #03 names only suppliers, so its `cases` is null. When an indicator holds the case only in a given year, `flag_year` names it, and `cases` counts the cases of that year.
cui int required
The contracting authority's CUI.
GET /api/v1/red-flags/by-supplier/{cui}
red_flags.by_supplier
How many cases each indicator holds for one supplier.
Seven indicators name the supplier. On #05 and #07 every member of an association counts; #10 counts the markets where the supplier is the largest. #06, #08 and #09 score only the authority and return null `cases`. `flag_year` works as in red_flags.by_authority.
cui int required
CUI of the supplier.
GET /api/v1/red-flags/sbr/national-rate
red_flags.sbr.national_rate
The national single-bidder rate (single-offer lots over every lot with money spent and a known offer count): the benchmark an authority's rate is read against. —
GET /api/v1/red-flags/fractionare/cpv-spend
red_flags.fractionare.cpv_spend
Sliced spend by CPV group: the biggest groups named one by one, everything below them pooled into a single remainder.
The pooled row has a null `cpv_group` and `"remainder": true`; `meta` says how many groups it holds.
top int
How many groups to name before the rest are pooled.
Default: 20
GET /api/v1/red-flags/praguri/contract-types
red_flags.praguri.contract_types
Purchases just below the ceiling and their value, by contract type.
Three rows, one per contract type, each with its case count and money.
—
GET /api/v1/red-flags/praguri/cpv-spend
red_flags.praguri.cpv_spend
Money on purchases just below the ceiling, by CPV group: the largest groups named, the rest pooled.
A group is the first three digits of the CPV code, and `cases` counts purchases. Purchases without a code form a row with a null `cpv_group`, so the rows sum to the indicator total. The pooled row has a null `cpv_group` and `"remainder": true`.
top int
How many groups to name before the rest are pooled.
Default: 10
GET /api/v1/red-flags/clientelism-hhi/stream-spend
red_flags.clientelism_hhi.stream_spend
Money of the flagged authority/supplier pairs, by stream.
Three rows, one per stream, each with the money and how many pairs have money in it. The three sum to the indicator total, also given in `meta`.
—
GET /api/v1/red-flags/concentrare/cpv-spend
red_flags.concentrare.cpv_spend
Money of the flagged markets, by CPV group: the largest groups named, the rest pooled.
Each market counts once, over the whole period. Each named row also gives how many suppliers sold in that group nationally. The pooled row has a null `cpv_group` and `"remainder": true`.
top int
How many groups to name before the rest are pooled.
Default: 12
GET /api/v1/red-flags/firme-noi/stream-spend
red_flags.firme_noi.stream_spend
Money won by new companies in their first 90 days, by stream.
Three rows, one per stream, each with the money, the contracts and how many suppliers won in it. The money sums to the indicator total, also given in `meta`; the supplier counts do not, because a supplier can win in several streams.
—
GET /api/v1/red-flags/ofertant-unic/cpv-spend
red_flags.ofertant_unic.cpv_spend
Money spent on single-offer lots, by CPV group: the largest groups named, the rest pooled.
A group is the first three digits of the lot's CPV code. `cases` counts lots, so a lot with money in several years is one case. The pooled row has a null `cpv_group` and `"remainder": true`; `meta` says how many groups it holds.
top int
How many groups to name before the rest are pooled.
Default: 20
GET /api/v1/red-flags/pret-la-virgula/offers-spread
red_flags.pret_la_virgula.offers_spread
Exact price matches by the number of offers the lot received: every eligible lot, how many were paid exactly at the estimate, and the money on each side.
One row per offer count. `offers_received` 0 means the count is missing from the data: a lot with money spent on it received at least one offer.
—
GET /api/v1/red-flags/pret-la-virgula/cpv-spend
red_flags.pret_la_virgula.cpv_spend
Money spent on lots paid exactly at their estimate, by CPV group: the largest groups named, the rest pooled.
A group is the first three digits of the lot's CPV code, and `cases` counts lots. Lots without a code form a row with a null `cpv_group`, so the rows sum to the indicator total. The pooled row has a null `cpv_group` and `"remainder": true`.
top int
How many groups to name before the rest are pooled.
Default: 10
GET /api/v1/red-flags/sbr/authority-spend
red_flags.sbr.authority_spend
Money spent on single-offer lots, by ranked authority: the largest named, the rest pooled.
Only the ranked authorities, those with at least 5 lots. The pooled row has a null `cui` and `"remainder": true`.
top int
How many authorities to name before the rest are pooled.
Default: 10
GET /api/v1/red-flags/sindromul-decembrie/cpv-spend
red_flags.sindromul_decembrie.cpv_spend
What the flagged authorities bought on 10-31 December, by CPV group: the largest groups named, the rest pooled.
A group is the first three digits of the CPV code, and `cases` counts purchases. The money is everything spent on 10-31 December, not the excess, which belongs to the authority-year and cannot be split by code. The pooled row has a null `cpv_group` and `"remainder": true`.
top int
How many groups to name before the rest are pooled.
Default: 12
GET /api/v1/red-flags/dsi/cpv-spend
red_flags.dsi.cpv_spend
What the ranked authorities bought without a competitive procedure, by CPV group: the largest groups named, the rest pooled.
A group is the first three digits of the CPV code, and `cases` counts purchases. The money is direct and offline purchases together, the discretionary side of the index; tenders are not included. The pooled row has a null `cpv_group` and `"remainder": true`.
top int
How many groups to name before the rest are pooled.
Default: 12
GET /api/v1/red-flags/concentrare/years
red_flags.concentrare.years
How many markets are flagged over the whole period and in each year, for the same filters as the listing.
One row per year with a flagged market, plus `fiscal_year` 0 for the whole period. The whole-period row is a separate test over all years together, with higher floors, not the sum of the years: a market can be flagged in a year and not over the whole period. Never add the rows together.
ca string
Contracting authority, as a CUI or as words from its name.
supplier string
A supplier of the market, as a CUI or as words from its name. Every supplier the market names matches, not only the largest.
cpv_group string
CPV group, or its leading digits: 45 covers 450 through 459.
min_hhi number
Smallest concentration score to return, on the 0-10000 HHI scale.
Default: 0
GET /api/v1/red-flags/fractionare
red_flags.fractionare.list
Groups of direct purchases (one authority, supplier, CPV group and year) whose total exceeds the legal ceiling although each purchase stays under it.
`meta.stats` holds the totals for the same filters.
ca string
Contracting authority, as a CUI or as words from its name.
supplier string
Supplier, as a CUI or as words from its name.
cpv_group string
CPV group, or its leading digits: 45 covers 450 through 459.
year int
Year to filter on; 0 returns every year.
Default: 0
contract_type enum
Contract type: 1 supply, 2 services, 3 works. 0 returns every type.
Values: 1, 2, 3
Default: 0
page int
Page number, 1-based.
Default: 1
per_page int
Rows per page, at most 100.
Default: 25
sort enum
Column to sort by. Omit for the default ordering.
Values: ca_name, supplier_name, cpv_group, fiscal_year, contract_type_id, slice_count, cumulative_spend, avg_contract_value, max_contract_value
dir enum
Sort direction; defaults to the natural direction of the column.
Values: asc, desc
GET /api/v1/red-flags/fractionare/distribution
red_flags.fractionare.distribution
Flagged groups per year. —
GET /api/v1/red-flags/praguri
red_flags.praguri.list
Direct purchases priced just below the ceiling above which a competitive procedure becomes mandatory.
`meta.stats` holds the totals for the same filters.
ca string
Contracting authority, as a CUI or as words from its name.
supplier string
Supplier, as a CUI or as words from its name.
cpv string
CPV code, or the leading digits of one: 45 covers the whole branch. The check digit is optional.
year int
Year of finalisation to restrict to; 0 returns every year.
Default: 0
contract_type enum
Contract type: 1 supply, 2 services, 3 works. 0 returns every type.
Values: 1, 2, 3
Default: 0
min_pct enum
Only purchases reaching at least this percentage of the ceiling.
Values: 95, 98, 99
Default: 95
page int
Page number, 1-based.
Default: 1
per_page int
Rows per page, at most 100.
Default: 25
sort enum
Column to sort by. Omit for the default ordering.
Values: ca_name, supplier_name, contract_type_id, cpv_code, finalization_date, closing_value, pct_of_legal_threshold
dir enum
Sort direction; defaults to the natural direction of the column.
Values: asc, desc
GET /api/v1/red-flags/praguri/distribution
red_flags.praguri.distribution
Flagged purchases by how close they come to the ceiling, in bands from 95% to 100%. —
GET /api/v1/red-flags/firme-noi
red_flags.firme_noi.list
Suppliers that won public money within 90 days of registration, with what they won in each of the three streams.
`meta.stats` holds the totals for the same filters.
supplier string
Supplier, as a CUI or as words from its name.
stream enum
Only suppliers that won in this stream within the 90 days: 1 tenders, 2 direct purchases, 3 offline purchases. 0 returns every supplier.
Values: 1, 2, 3
Default: 0
year int
Year the supplier was registered; 0 returns every year.
Default: 0
max_days enum
Most days between registration and the first win in any stream.
Values: 30, 60, 90
Default: 90
page int
Page number, 1-based.
Default: 1
per_page int
Rows per page, at most 100.
Default: 25
sort enum
Column to sort by. Omit for the default ordering.
Values: supplier_name, registration_date, t_contracts, t_value, t_days, d_contracts, d_value, d_days, a_contracts, a_value, a_days, total_value
dir enum
Sort direction; defaults to the natural direction of the column.
Values: asc, desc
GET /api/v1/red-flags/firme-noi/distribution
red_flags.firme_noi.distribution
Flagged suppliers and their money by company age at the first win: 0-30, 31-60 and 61-90 days. —
GET /api/v1/red-flags/clientelism-hhi
red_flags.clientelism_hhi.list
Authority/supplier pairs where the supplier draws most of its revenue from that one authority.
`meta.stats` holds the totals for the same filters.
ca string
Contracting authority, as a CUI or as words from its name.
supplier string
Supplier, as a CUI or as words from its name.
min_sdr int
Minimum share of the supplier's revenue that comes from the authority, in percent.
Default: 80
min_captured int
Minimum share of the authority's spending that goes to the supplier, in percent; 0 returns every pair.
Default: 0
stream enum
Only pairs with money in this stream: 1 tenders, 2 direct purchases, 3 offline purchases. 0 returns every pair.
Values: 1, 2, 3
Default: 0
page int
Page number, 1-based.
Default: 1
per_page int
Rows per page, at most 100.
Default: 25
sort enum
Column to sort by. Omit for the default ordering.
Values: ca_name, supplier_name, pair_spend, pair_spend_tender, pair_spend_direct, pair_spend_offline, supplier_captivity_pct, authority_budget_captured_pct, contracts_together
dir enum
Sort direction; defaults to the natural direction of the column.
Values: asc, desc
GET /api/v1/red-flags/clientelism-hhi/distribution
red_flags.clientelism_hhi.distribution
Pairs and their money by the supplier's dependence on the authority, in bands from 50% to 100%. —
GET /api/v1/red-flags/ofertant-unic
red_flags.ofertant_unic.list
Tender lots under a competitive procedure that received a single offer, with the money spent on them.
`meta.stats` holds the totals for the same filters.
ca string
Contracting authority, as a CUI or as words from its name.
supplier string
A winner of the lot, as a CUI or as words from its name. Every member of an association matches.
procedure int
Procedure type id, from /reference/procedure-types; 0 returns every type.
Default: 0
cpv string
CPV code of the lot, or the leading digits of one: 45 covers the whole branch. The check digit is optional.
year int
Year the money was spent in, by contract date: each lot with that year's contracts and money. 0 returns each lot once, with its totals across all years.
Default: 0
page int
Page number, 1-based.
Default: 1
per_page int
Rows per page, at most 100.
Default: 25
sort enum
Column to sort by. Omit for the default ordering.
Values: ca_name, supplier_name, notice_number, cpv_code, procedure_name, fiscal_year, contracts_count, estimated_value, spent_value
dir enum
Sort direction; defaults to the natural direction of the column.
Values: asc, desc
GET /api/v1/red-flags/ofertant-unic/distribution
red_flags.ofertant_unic.distribution
Per year: single-offer lots, every lot with a known offer count, the rate and the money spent on single-offer lots. —
GET /api/v1/red-flags/sbr
red_flags.sbr.list
Contracting authorities ranked by the share of their tender lots (with money spent) that received a single offer.
`meta.stats` holds the totals for the same filters.
ca string
Contracting authority, as a CUI or as words from its name.
page int
Page number, 1-based.
Default: 1
per_page int
Rows per page, at most 100.
Default: 25
sort enum
Column to sort by. Omit for the default ordering.
Values: ca_name, total_lots, single_bidder_lots, single_bidder_rate_pct, total_spent, single_bidder_spent, single_bidder_spent_pct
dir enum
Sort direction; defaults to the natural direction of the column.
Values: asc, desc
GET /api/v1/red-flags/sbr/distribution
red_flags.sbr.distribution
Ranked authorities by single-bidder rate, in bands of ten points, with their money on single-offer lots. —
GET /api/v1/red-flags/pret-la-virgula
red_flags.pret_la_virgula.list
Tender lots on which the money spent equals the authority's estimated value, to the leu.
`meta.stats` holds the totals for the same filters.
ca string
Contracting authority, as a CUI or as words from its name.
supplier string
A winner of the lot, as a CUI or as words from its name. Every member of an association matches.
procedure int
Procedure type id, from /reference/procedure-types; 0 returns every type.
Default: 0
cpv string
CPV code of the lot, or the leading digits of one: 45 covers the whole branch. The check digit is optional.
year int
Award year, read off the first contract on the lot; 0 returns every year.
Default: 0
min_offers int
Fewest offers the lot must have received; 2 keeps only lots with real competition. 0 returns every lot.
Default: 0
page int
Page number, 1-based.
Default: 1
per_page int
Rows per page, at most 100.
Default: 25
sort enum
Column to sort by. Omit for the default ordering.
Values: ca_name, supplier_name, notice_number, cpv_code, procedure_name, offers_received, fiscal_year, contracts_count, estimated_value, spent_value
dir enum
Sort direction; defaults to the natural direction of the column.
Values: asc, desc
GET /api/v1/red-flags/pret-la-virgula/distribution
red_flags.pret_la_virgula.distribution
Per year: lots paid exactly at the estimate, every eligible lot, the rate and the money on the matching lots. —
GET /api/v1/red-flags/sindromul-decembrie
red_flags.sindromul_decembrie.list
Authorities that spent a far larger share of their year on 10-31 December than the country did, ranked by the excess money.
`meta.stats` holds the totals for the same filters.
year int
Year to filter on; 0 returns every year.
Default: 0
ca string
Contracting authority, as a CUI or as words from its name.
min_lift number
Only authorities whose December share is at least this many times the national one. Every case is at 3 or more.
Default: 0
page int
Page number, 1-based.
Default: 1
per_page int
Rows per page, at most 100.
Default: 25
sort enum
Column to sort by. Omit for the default ordering.
Values: ca_name, fiscal_year, total_year_spend, late_december_spend, december_dump_pct, dump_lift, window_purchases, excess_spend
dir enum
Sort direction; defaults to the natural direction of the column.
Values: asc, desc
GET /api/v1/red-flags/sindromul-decembrie/distribution
red_flags.sindromul_decembrie.distribution
Per year: eligible authorities, how many were flagged, the national December share and the excess money of the flagged ones. —
GET /api/v1/red-flags/dsi
red_flags.dsi.list
Contracting authorities ranked by the share of their spending that did not go through a competitive procedure.
`meta.stats` holds the totals for the same filters.
ca string
Contracting authority, as a CUI or as words from its name.
year int
Year to restrict to; 0 (the default) gives each authority's figure over the whole period.
Default: 0
min_dsi number
Smallest index to return, as a percentage.
Default: 0
page int
Page number, 1-based.
Default: 1
per_page int
Rows per page, at most 100.
Default: 25
sort enum
Column to sort by. Omit for the default ordering.
Values: ca_name, fiscal_year, direct_spend, award_spend, discretionary_spend, tender_spend, total_spend, dsi_pct
dir enum
Sort direction; defaults to the natural direction of the column.
Values: asc, desc
GET /api/v1/red-flags/dsi/distribution
red_flags.dsi.distribution
Per year: eligible authorities, how many exceed 60%, the national index and the discretionary money. —
GET /api/v1/red-flags/concentrare
red_flags.concentrare.list
Markets (one authority, one CPV group, one year) where the money went to a handful of suppliers although many sold in that group nationally.
`meta.stats` holds the totals for the same filters.
ca string
Contracting authority, as a CUI or as words from its name.
supplier string
A supplier of the market, as a CUI or as words from its name. Every supplier the market names matches, not only the largest.
cpv_group string
CPV group, or its leading digits: 45 covers 450 through 459.
year int
Year to restrict to; 0 (the default) gives each market over the whole period.
Default: 0
min_hhi number
Smallest concentration score to return, on the 0-10000 HHI scale.
Default: 0
page int
Page number, 1-based.
Default: 1
per_page int
Rows per page, at most 100.
Default: 25
sort enum
Column to sort by. Omit for the default ordering.
Values: ca_name, cpv_group, fiscal_year, total_spend, purchases, suppliers_used, suppliers_available, hhi, top_supplier_name, top_supplier_pct
dir enum
Sort direction; defaults to the natural direction of the column.
Values: asc, desc
GET /api/v1/red-flags/concentrare/distribution
red_flags.concentrare.distribution
Per year: eligible markets, how many were flagged, the national concentration score and the flagged money. —

Acquisitions

Acquisitions
Endpoint Description Parameters
GET /api/v1/acquisitions/direct
acquisitions.direct.list
Direct purchases from the electronic catalogue, made without a tender.
Rows come back newest first and cannot be reordered. Walk the results by following `links.next`; there is no page number and no total. A search on a common word is slow: combine it with a year or a party.
code string
SICAP identifier of the purchase, e.g. "da41104694". Matched exactly.
ca string
Contracting authority: a CUI when the value is all digits, otherwise words from its name.
supplier string
Supplier, read the same way as `ca`.
q string
Free-text search in the purchase description.
contract_type int
Contract type id: 1 supply, 2 services, 3 works.
Default: 0
county int
County of the contracting authority's seat, an id from /stats/dimensions.
Default: 0
domain int
CPV domain id, from /stats/dimensions.
Default: 0
cpv string
CPV code prefix: "45" matches every works code, "45211" narrows it, a full code pins one. The check digit is optional, so "45211000" and "45211000-9" are the same filter.
year int
Finalisation year; 0 returns every year.
Default: 0
date_from string
Earliest date, inclusive, as YYYY-MM-DD.
date_to string
Latest date, inclusive, as YYYY-MM-DD.
value_min number
Lowest value in RON, inclusive.
value_max number
Highest value in RON, inclusive.
after int
Return the rows that follow this cursor. Take it from `meta.next_cursor`.
Default: 0
before int
Return the rows that precede this cursor. Take it from `meta.prev_cursor`.
Default: 0
per_page int
Rows per page, at most 100.
Default: 25
GET /api/v1/acquisitions/awards
acquisitions.awards.list
Offline purchases: direct purchases made outside the electronic catalogue.
Rows come back newest first and cannot be reordered. Walk the results by following `links.next`; there is no page number and no total. A search on a common word is slow: combine it with a year or a party.
code string
SICAP notice number, e.g. "dan2847736". Matched exactly.
ca string
Contracting authority: a CUI when the value is all digits, otherwise words from its name.
supplier string
Supplier, read the same way as `ca`.
q string
Free-text search in the purchase description.
contract_type int
Contract type id: 1 supply, 2 services, 3 works.
Default: 0
county int
County of the contracting authority's seat, an id from /stats/dimensions.
Default: 0
domain int
CPV domain id, from /stats/dimensions.
Default: 0
cpv string
CPV code prefix: "45" matches every works code, "45211" narrows it, a full code pins one. The check digit is optional, so "45211000" and "45211000-9" are the same filter.
year int
Publication year; 0 returns every year.
Default: 0
date_from string
Earliest date, inclusive, as YYYY-MM-DD.
date_to string
Latest date, inclusive, as YYYY-MM-DD.
value_min number
Lowest value in RON, inclusive.
value_max number
Highest value in RON, inclusive.
dated_by enum
Which date `year`, `date_from` and `date_to` read. Rows stay in publication order either way.
Values: publication, finalization
Default: publication
after int
Return the rows that follow this cursor. Take it from `meta.next_cursor`.
Default: 0
before int
Return the rows that precede this cursor. Take it from `meta.prev_cursor`.
Default: 0
per_page int
Rows per page, at most 100.
Default: 25
GET /api/v1/acquisitions/tenders
acquisitions.tenders.list
Tender notices, with their value and procedure type.
Rows come back newest first and cannot be reordered. Walk the results by following `links.next`; there is no page number and no total. A search on a common word is slow: combine it with a year or a party.
code string
SICAP notice number, e.g. "can1173855". Matched exactly.
ca string
Contracting authority: a CUI when the value is all digits, otherwise words from its name.
winner string
A company that won one of the notice's contracts, read the same way as `ca`. A tender notice names no supplier of its own.
q string
Free-text search in the notice title and description.
contract_type int
Contract type id of the notice: 1 supply, 2 services, 3 works.
Default: 0
procedure_type int
Procedure type id, from /reference/procedure-types.
Default: 0
notice_type int
Notice type id, from /reference/notice-types.
Default: 0
county int
County of the contracting authority's seat, an id from /stats/dimensions.
Default: 0
domain int
CPV domain id, from /stats/dimensions.
Default: 0
cpv string
CPV code prefix: "45" matches every works code, "45211" narrows it, a full code pins one. The check digit is optional, so "45211000" and "45211000-9" are the same filter.
year int
Publication year; 0 returns every year.
Default: 0
date_from string
Earliest date, inclusive, as YYYY-MM-DD.
date_to string
Latest date, inclusive, as YYYY-MM-DD.
value_min number
Lowest value in RON, inclusive.
value_max number
Highest value in RON, inclusive.
after int
Return the rows that follow this cursor. Take it from `meta.next_cursor`.
Default: 0
before int
Return the rows that precede this cursor. Take it from `meta.prev_cursor`.
Default: 0
per_page int
Rows per page, at most 100.
Default: 25
GET /api/v1/acquisitions/tenders/contracts
acquisitions.tenders.contracts
The awarded contracts of one or more tender notices, each with its winners.
One entry per notice that has contracts, in the order the ids were given. `contracts[].winners` is empty when no winner was reported and lists every member when an association won; a member's `contract_value` is its equal share, not the contract total. All values are in RON. `estimated_value` is the sum of the lot estimates, null when the lots carry none; the listing's `total_acquisition_value` is the awarded total, not an estimate. `contracts[].lots` lists the lots a contract covers, each with the offers it received (withdrawn offers left out, null when unknown). On a multi-lot contract, the contract's own `offers_received` is the sum over its lots.
notice_ids string
Comma-separated notice ids (the `id` field of the tender listing), at most 100, so one page of the listing fits in one call.
per_notice int
How many contracts to return per notice, largest RON value first. `contract_count` and `awarded_value` always describe the whole notice.
Default: 50
winner string
A company, read the same way as on the listing. The contracts it won come first and carry `matches_winner`, so they are returned even when a notice has more contracts than `per_notice`.

Contracting authorities

Contracting authorities
Endpoint Description Parameters
GET /api/v1/authorities
authorities.list
The contracting authorities that have spent public money, in alphabetical order, with their main figures and the indicators that flag them.
Rows come back in alphabetical order and cannot be reordered. Walk the results by following `links.next`; there is no page number and no total. Only authorities with money spent are listed.
q string
The authority: a CUI or words from its name.
county int
County id, from /reference/counties; 0 returns every county.
Default: 0
min_spend number
Only authorities whose total spend across the three streams reaches this many lei.
Default: 0
max_spend number
Only authorities whose total spend stays below this many lei; 0 sets no ceiling.
Default: 0
flag enum
Only authorities holding at least one case of this indicator; 0 returns every authority.
Values: 1, 2, 4, 5, 6, 7, 8, 9, 10
Default: 0
after int
Return the rows that follow this cursor. Take it from `meta.next_cursor`.
Default: 0
before int
Return the rows that precede this cursor. Take it from `meta.prev_cursor`.
Default: 0
per_page int
Rows per page, at most 100.
Default: 25
GET /api/v1/authorities/{cui}
authorities.get
One contracting authority by CUI, with its county and city.
cui int required
The contracting authority's CUI.
GET /api/v1/authorities/{cui}/spend
authorities.spend
What one authority spent, in direct purchases, offline purchases and tenders.
`tender_count` counts the tender procedures (notices) the authority ran; `tender_contract_count` the contracts its tender money was paid through.
cui int required
The contracting authority's CUI.
GET /api/v1/authorities/{cui}/scores
authorities.scores
The authority's scores: single-bidder rate, discretionary spend index and supplier concentration.
cui int required
The contracting authority's CUI.
GET /api/v1/authorities/{cui}/suppliers
authorities.top_suppliers
The suppliers one authority paid the most, across all three streams.
Tender money is credited to each winner by its share of the contract, so an association is not counted once per member. On a few very large contracts those shares add up to less than the contract, so `meta.covered_spend` gives the money the list can attribute: use it, not the authority's total spend, to compute a share.
cui int required
The contracting authority's CUI.
limit int
How many suppliers to return.
Default: 10
sort enum
Column to sort by. Omit for the default ordering.
Values: supplier_name, direct_spend, award_spend, tender_spend, total_spend, share, contract_count
dir enum
Sort direction; defaults to the natural direction of the column.
Values: asc, desc
GET /api/v1/authorities/{cui}/years
authorities.years
What one authority spent each year, split into direct purchases, offline purchases and tenders.
The year is when the money was spent: finalisation for direct and offline purchases, the contract date for tenders. Summed over the years, the streams equal /authorities/{cui}/spend. Years with no spend are omitted.
cui int required
CUI of the contracting authority.
GET /api/v1/authorities/{cui}/cpv
authorities.cpv
What one authority buys: its spend by CPV group, the largest groups named and the rest pooled.
A group is the first three digits of the CPV code. Tender money is filed under the notice's main code, an approximation for a notice with several lots. The pooled row has a null `cpv_group` and `"remainder": true`; `meta` says how many groups it holds.
cui int required
CUI of the contracting authority.
top int
How many groups to name before the rest are pooled.
Default: 12
GET /api/v1/authorities/{cui}/benchmarks
authorities.benchmarks
Where one authority sits nationally on each of its three scores: its own figure, the national reference and its rank among scored authorities.
Each score covers its own set of authorities, given as `population`; an authority below a score's minimum size has a null figure and no rank. The single-bidder reference is the national rate (/red-flags/sbr/national-rate); the other two are medians.
cui int required
CUI of the contracting authority.
GET /api/v1/authorities/{cui}/county
authorities.county
One authority against its county: what the county spent, what share of it this authority is, and where it ranks there.
The county is the authority's registered seat, as in the statistics endpoints. An authority with no spend, or with no county on record, returns nulls.
cui int required
CUI of the contracting authority.

Suppliers

Suppliers
Endpoint Description Parameters
GET /api/v1/suppliers
suppliers.list
Every company paid with public money, in alphabetical order, with what it was paid and the indicators that flag it.
Rows come back in alphabetical order and cannot be reordered. Walk the results by following `links.next`; there is no total, but `meta.population` gives the size of the whole list. Public entities that were paid are included. Tender money is credited to each winner by its share of the contract. `flags` lists the indicators that flag the supplier (#10 only when it is the largest supplier of a flagged market); when an indicator holds the case only in a given year, `flag_year` names it.
q string
The supplier: a CUI or words from its name.
county int
County id, from /reference/counties; 0 returns every county.
Default: 0
min_revenue number
Only suppliers paid at least this many lei across the three streams.
Default: 0
max_revenue number
Only suppliers paid less than this many lei; 0 sets no ceiling.
Default: 0
flag enum
Only suppliers flagged by this indicator; 0 returns every supplier. Indicators 6, 8 and 9 score only authorities and are not accepted.
Values: 1, 2, 3, 4, 5, 7, 10
Default: 0
after int
Return the rows that follow this cursor. Take it from `meta.next_cursor`.
Default: 0
before int
Return the rows that precede this cursor. Take it from `meta.prev_cursor`.
Default: 0
per_page int
Rows per page, at most 100.
Default: 25
GET /api/v1/suppliers/{cui}
suppliers.get
One supplier by CUI, with its legal form, county and city.
cui int required
The supplier's CUI.
GET /api/v1/suppliers/{cui}/revenue
suppliers.revenue
What one supplier was paid with public money, by stream, with how many authorities paid it and over which years.
The tender stream is `public_value` and `public_count`: the supplier's share of each contract it won, and the number of those contracts. `client_count` is the number of distinct authorities across the three streams.
cui int required
The supplier's CUI.
GET /api/v1/suppliers/{cui}/years
suppliers.years
What one supplier was paid each year, split into direct purchases, offline purchases and tenders.
The year is when the money was paid: finalisation for direct and offline purchases (publication when an offline purchase has no finalisation date), the contract date for tenders. Summed over the years, the streams equal /suppliers/{cui}/revenue. Years with no revenue are omitted.
cui int required
CUI of the supplier.
GET /api/v1/suppliers/{cui}/cpv
suppliers.cpv
What one supplier sells: its revenue by CPV group, the largest groups named and the rest pooled.
A group is the first three digits of the CPV code. Tender money is filed under the notice's main code, an approximation for a notice with several lots. The pooled row has a null `cpv_group` and `"remainder": true`.
cui int required
CUI of the supplier.
top int
How many groups to name before the rest are pooled.
Default: 12
GET /api/v1/suppliers/{cui}/clients
suppliers.clients
The authorities that paid one supplier, with the money on each stream and what share it is of both sides' totals.
`supplier_share_pct` is the pair's money over the supplier's whole revenue (what indicator #04 measures) and `authority_share_pct` the same money over everything the authority spent. `clientelism_flagged` is 1 when #04 flags the pair. Money with no authority on record is left out, so the rows can sum to less than /suppliers/{cui}/revenue.
cui int required
CUI of the supplier.
page int
Page number, 1-based.
Default: 1
per_page int
Rows per page, at most 100.
Default: 25
sort enum
Column to sort by. Omit for the default ordering.
Values: ca_name, direct_spend, award_spend, tender_spend, total_spend, supplier_share_pct, authority_share_pct, purchases, last_date
dir enum
Sort direction; defaults to the natural direction of the column.
Values: asc, desc
GET /api/v1/suppliers/{cui}/partners
suppliers.partners
The companies one supplier won tender contracts jointly with, as members of the same association.
A partner is another winner of the same contract. `shared_spend` is this supplier's own share of those contracts, `contract_spend` their full value. The years are contract years.
cui int required
CUI of the supplier.
page int
Page number, 1-based.
Default: 1
per_page int
Rows per page, at most 100.
Default: 25
sort enum
Column to sort by. Omit for the default ordering.
Values: partner_name, contracts, shared_spend, contract_spend, authorities, last_year
dir enum
Sort direction; defaults to the natural direction of the column.
Values: asc, desc
GET /api/v1/suppliers/{cui}/scores
suppliers.scores
The supplier's scores: how much of its tender money it won without competition or at exactly the estimate, and how much of its revenue comes from its largest client.
`tenders` is indicators #05 and #07 seen from the winner's side: its money on lots #05 covers and the part won with a single offer, and its money on lots #07 covers and the part paid exactly at the estimate. An association's contract is shared evenly among its members. `top_client` is the authority that paid it the most.
cui int required
CUI of the supplier.
GET /api/v1/suppliers/{cui}/benchmarks
suppliers.benchmarks
Where one supplier sits nationally on each of its three scores: its own figure, the national reference and its rank among scored suppliers.
Each score covers its own set of suppliers; below the minimum a supplier gets a null and no rank. The two tender scores need 5 lots the indicator covers, the client dependency 10 distinct clients, since a supplier with one sale depends on its one client entirely. The tender references are national rates weighted by money, the dependency reference is the median.
cui int required
CUI of the supplier.

Authorities and suppliers as a whole

Authorities and suppliers as a whole
Endpoint Description Parameters
GET /api/v1/entities
entities.summary
How many contracting authorities spent money, how many suppliers were paid, and how many buyer-seller relationships link them.
A relationship is one authority and one supplier with money between them in any stream. `authority_spend` is what the authorities spent; `supplier_revenue` is the part of it credited to a named supplier, slightly smaller because some tender money has no winner share.
—
GET /api/v1/entities/bands
entities.bands
Authorities and suppliers counted by band: by lifetime money, by number of counterparties, and suppliers by their dependence on their largest client.
Measures: `authority_size` and `supplier_size` (lifetime money: <100k, <1M, <10M, <100M, <1bn, >=1bn lei), `authority_suppliers` and `supplier_clients` (distinct counterparties: none, 1, 2-5, 6-20, 21-100, 101-500, >500), `supplier_dependency` (the largest client's share of the revenue, for suppliers with at least 10 clients). `lower` is inclusive and `upper` exclusive; a null `upper` is open. `links` counts the relationships of the band's entities. `flagged` and `flagged3` count the entities flagged by at least one and by three or more indicators, as in red_flags.coverage. The bands of one measure add up to its whole population and money.
measure enum
One measure; empty returns all five.
Values: , authority_size, authority_suppliers, supplier_size, supplier_clients, supplier_dependency
GET /api/v1/entities/authority-types
entities.authority_types
Contracting authorities by kind of institution: how many there are, what they spent, and how many are flagged.
The kind is inferred from the authority's name, as in the statistics endpoints; about 99.7% of the money falls outside "other".
—
GET /api/v1/entities/relationships
entities.relationships
The largest buyer–seller relationships: an authority and a supplier, with the money between them in each stream.
The 500 largest relationships by money; sorting reorders those. `supplier_share_pct` is the pair's share of the supplier's revenue (what indicator #04 measures) and `authority_share_pct` its share of the authority's spend. `clientelism_flagged` marks a pair indicator #04 flags, at 80% or more.
page int
Page number, 1-based.
Default: 1
per_page int
Rows per page, at most 100.
Default: 25
sort enum
Column to sort by. Omit for the default ordering.
Values: ca_name, supplier_name, direct_spend, award_spend, tender_spend, total_spend, supplier_share_pct, authority_share_pct, last_date
dir enum
Sort direction; defaults to the natural direction of the column.
Values: asc, desc
GET /api/v1/entities/counties
entities.counties
Money between counties: what the authorities seated in each county spent, what the suppliers seated there were paid, and the part that stayed in the county.
Both sides are placed by their registered seat, not by where the work was done. Only money credited to a named supplier is counted, so spending and revenue add up to the same national total. `balance` is revenue minus spending: positive where the county's companies were paid more than its authorities spent.
sort enum
Column to sort by. Omit for the default ordering.
Values: denumire, spent, received, balance, local_pct, authorities, suppliers
dir enum
Sort direction; defaults to the natural direction of the column.
Values: asc, desc
GET /api/v1/entities/years
entities.years
How many authorities spent and how many suppliers were paid each year, and how many suppliers were paid for the first time.
Years are the years the money was spent in. Every supplier counts as new in 2018, the first year of the data, so `new_suppliers` is meaningful from 2019 on.
—
GET /api/v1/entities/search
entities.search
Authorities or suppliers whose name holds every word searched for, largest by money first.
Only authorities that spent and suppliers that were paid are searched. Money is the total over all years and all three streams. Unlike /authorities and /suppliers, which are alphabetical, the matches are ranked by money.
q string required
A CUI, optionally prefixed by RO, or words from the name. Words shorter than three letters are ignored.
role enum
Which side to search: the authorities that spent money or the suppliers that were paid.
Values: authority, supplier
Default: authority
limit int
How many to return.
Default: 5

Reference lists

Reference lists
Endpoint Description Parameters
GET /api/v1/reference/years
reference.years
The years one dataset covers, newest first - the values its year filter accepts.
dataset enum required
Which dataset to read the years of.
Values: direct, awards, tenders, fractionare, ofertant-unic, firme-noi, pret-la-virgula, sindromul-decembrie
GET /api/v1/reference/procedure-types
reference.procedure_types
The procurement procedure types.
used_in enum
Only the types that occur in one indicator: single_bidder for #05, exact_match for #07.
Values: all, single_bidder, exact_match
Default: all
GET /api/v1/reference/notice-types
reference.notice_types
The notice types a tender notice can be published under. —
GET /api/v1/reference/contract-types
reference.contract_types
The three contract types: supply, services and works. —
GET /api/v1/reference/counties
reference.counties
The 41 counties plus Bucharest, with the ids the county parameters take. —
GET /api/v1/reference/cpv-codes
reference.cpv_codes
The CPV vocabulary used to classify what was bought.
q string
Free-text search over the code and its description.
page int
Page number, 1-based.
Default: 1
per_page int
Rows per page, at most 100.
Default: 50
GET /api/v1/reference/cpv-codes/{code}
reference.cpv_code
One CPV code: its name, its place in the CPV tree, the codes directly under it, and the money spent under it on each stream.
`ancestors` runs from the division (two digits) down to the code's parent; `children` are the codes directly beneath it. `own` counts the money spent under exactly this code, `tree` under this code or any code beneath it; each child has its own `tree`. Tenders (`tender_count`, `tender_value`) count notices by their main code, at the sum of their contracts, as the tender listing filtered on the code does.
code string required
The eight digits of the code, with or without its check digit (45233140 or 45233140-2).
GET /api/v1/reference/cpv-tree
reference.cpv_tree
The whole CPV vocabulary as a tree: every code with its parent and its domain.
One row per code, in code order, so a parent always comes before its children. `parent` is the nearest existing ancestor (CPV levels skip: the parent of 45233140 is 45233100) and is null for a division (two digits). `domain_id` and `domain` are the CPV domain the statistics use for the code.
—
GET /api/v1/reference/cpv-labels
reference.cpv_labels
Name and domain of up to 200 CPV codes or code prefixes at once.
codes string required
Comma-separated CPV codes or prefixes of 2 to 8 digits (45, 452, 45233140); a check digit after a dash is ignored.

Response shape

Every response has the same shape: meta describes the query, the source and the licence, data holds the result, and lists also get links.

{
  "meta": {
    "operation": "acquisitions.direct.list",
    "source": "data.gov.ro",
    "generated_at": "2026-10-08T02:42:27+03:00",
    "license": "CC BY 4.0",
    "attribution": "PeBaniiNostri.ro",
    "source_license": "OGL-ROU-1.0",
    "source_license_url": "https://data.gov.ro/base/images/logoinst/OGL-ROU-1.0.pdf",
    "source_attribution": "Conține informații publice în baza Licenței pentru Guvernare Deschisă v1.0",
    "count": 25,
    "per_page": 25,
    "prev_cursor": null,
    "next_cursor": 26
  },
  "data": [
    {
      "notice_code": "DA41104694",
      "name": "Servicii de mentenanta",
      "contracting_authority_cui": 4521094,
      "supplier_cui": 9876543,
      "finalization_date": "2024-03-15",
      "closing_value": 125000,
      "cpv_code": "72000000-5",
      "ca_name": "PRIMARIA ...",
      "supplier_name": "SC ... SRL"
    }
  ],
  "links": {
    "self": "/api/v1/acquisitions/direct",
    "prev": null,
    "next": "/api/v1/acquisitions/direct?after=26"
  }
}

Errors

An error returns a single error object, with a stable code you can branch on and the matching HTTP status.

{
  "error": {
    "code": "rate_limit_exceeded",
    "message": "Daily limit of 1000 calls reached.",
    "details": { "limit": 1000, "used": 1000 }
  }
}
Errors
HTTP code
400 bad_request
401 unauthorized
403 forbidden
404 not_found
405 method_not_allowed
429 rate_limit_exceeded
500 internal_error