Business v1 / Firme
Financial statements
The company's annual financial statements (2008–present), with the indicators decoded through a dictionary (name + value). Filter one year with ?an=. Add ?raw=true for the raw values (code→value).
GET
https://oneapi.ro/api/business/v1/firme/{cui}/financiar
Path parameters
NameTypeDescriptionExample
cuirequired
string
The company tax identification number, without the
RO prefix (e.g. 6719278).
Query parameters
NameTypeDescriptionAccepted values
anoptional
integer | null
Optional: a single fiscal year. Without it, the whole series.
e.g. 2023e.g. 2009
rawoptional
boolean | null
true also adds the raw indicator codes.
e.g. true
How it behaves
- This route does not require the company to be in the trade register. The Ministry of Finance also receives filings from entities outside it — associations, foundations, institutions: 103,953 entities, with 905,993 rows. Their financial statements are served normally, but
/firme/{cui}answers 404, because a trade-register profile genuinely does not exist.data.in_registru_onrctells you which case you are in, so the 404 on the profile does not look inconsistent. - When a company filed twice for the same year, the specialised set (the complete one) is served, not the generic
webmirror. If the two genuinely disagree on figures — 17 cases in the whole database, all in 2009 — the year carries aconflictfield naming the other family and the indicators that differ. The source gives neither a filing date nor a restatement marker, so we cannot say which figure is correct; we serve the more complete one and flag that a disagreement existed. - The company's annual balance sheets, as filed with the Ministry of Finance, decoded from a compact storage format into a set of named indicators (turnover, profit, assets, debts, number of employees, etc.).
- Decoding uses an indicator dictionary per family and year — the same "I1…In" code means different things across years and balance-sheet types. When a family has no dictionary of its own for a year, it falls back gracefully to the nearest available year.
- With
?an=you request a single year; without it, you get the whole series. With?raw=trueyou also get the raw codes, useful for verification. - See also the derived variants:
/financiar/eur(converted at the year-end rate) and/financiar/real(inflation-adjusted against a base year).
What it is for
- Financial analysis and risk scoring based on the evolution of turnover and profit.
- Checking the size of a partner before a contract.
- Historical series for reports and visualisations.
Response structure
All fields below live inside data.
FieldTypeDescription
cui
integer
The tax ID.
in_registru_onrc
boolean
Whether the entity also has a profile at
/firme/{cui}. false for those filing with the Ministry of Finance without being in the trade register.
ani[]
object[]
The balance sheets by year, with each one's indicators.
ani[].conflict[].familie
string
The other filing submitted for the same year. Present only when the figures genuinely differ.
ani[].conflict[].indicatori[]
array
Codes of the indicators the two filings disagree on. Missing and zero do not count as a disagreement.
Response examples
GEThttps://oneapi.ro/api/business/v1/firme/6719278/financiar
{
"data": {
"cui": 6719278,
"in_registru_onrc": true,
"ani": [
{
"an": 2008,
"tip": "SOCIETATI COMERCIALE CARE DEPUN BILANT LUNG, BILANT SCURT SI RAPORTARI ANUALE",
"familie": "web",
"caen": 4711,
"decodat": true,
"indicatori": [
{
"cod": "I1",
"denumire": "ACTIVE IMOBILIZATE - TOTAL",
"valoare": 111431788
}
]
}
]
}
}
GEThttps://oneapi.ro/api/business/v1/firme/5829256/financiar
{
"data": {
"cui": 5829256,
"in_registru_onrc": false,
"ani": [
{
"an": 2008,
"tip": "ONG-uri",
"familie": "webong",
"caen": 0,
"decodat": true,
"indicatori": [
{
"cod": "I1",
"denumire": "A. Active imobilizate - total",
"valoare": 534467
}
]
}
]
}
}
GEThttps://oneapi.ro/api/business/v1/firme/6719278/financiar?an=2023
{
"data": {
"cui": 6719278,
"in_registru_onrc": true,
"ani": [
{
"an": 2023,
"tip": "SOCIETATI COMERCIALE CARE DEPUN BILANT LUNG, BILANT SCURT SI RAPORTARI ANUALE",
"familie": "webblbssl",
"caen": 4711,
"decodat": true,
"indicatori": [
{
"cod": "I1",
"denumire": "ACTIVE IMOBILIZATE - TOTAL",
"valoare": 2377113847
}
]
}
]
}
}
GEThttps://oneapi.ro/api/business/v1/firme/969470/financiar?an=2009
{
"data": {
"cui": 969470,
"in_registru_onrc": true,
"ani": [
{
"an": 2009,
"tip": "SOCIETATI COMERCIALE CARE DEPUN BILANT LUNG, BILANT SCURT SI RAPORTARI ANUALE",
"familie": "webblbssl",
"caen": 3109,
"decodat": true,
"indicatori": [
{
"cod": "I1",
"denumire": "ACTIVE IMOBILIZATE - TOTAL",
"valoare": 15953623
}
],
"conflict": [
{
"familie": "web",
"indicatori": [
"I2",
"I3",
"I10",
"I15",
"I18",
"I20"
]
}
]
}
]
}
}
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. |
| 404 | negasit | The company with tax ID [{cui}] was not found. |
| 422 | validare | An undeclared parameter or a value that fails validation (an, raw). 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, raw). The offending field is in detalii.",
"detalii": {
"cui": [
"The value sent does not satisfy the parameter rule."
]
}
}
}