Business v1 / Firme
Risk signals
Faptele publicate de autorităţi care contează pentru cine ar contracta cu firma — stare, inactivare
fiscală, datorii, situaţia ultimului bilanţ — fiecare cu punctajul şi explicaţia lui, plus ce NU s-a
putut verifica. ⚠️ Scorul nu vine cu etichetă de verdict: pragul îl alege cine afişează.
GET
https://oneapi.ro/api/business/v1/firme/{cui}/risc
Path parameters
NameTypeDescriptionExample
cuirequired
string
The company tax identification number, without the
RO prefix (e.g. 6719278).
Query parameters
This route accepts no query parameters.
How it behaves
- The risk signals of a company, gathered from the data the platform already holds: register status, insolvency, tax debts, sanctions, fiscal inactivity.
- ⚠️ The response carries NO verdict label ("high risk"). It gives the number and the facts behind it, and the threshold is chosen by whoever displays it — a verdict word ends up in screenshots cut off from the signals that produced it.
- ⚠️ MISSING DATA IS NOT RISK. A company with no filed accounts gets no points for that; it appears in
necunoscut. Otherwise the score would punish small companies, which report less, and reward the ones nothing is published about.
What it is for
- Screening a partner before a contract, with the facts in plain sight.
- Deciding whether to ask for an extra document:
necunoscutsays exactly what is missing. - Monitoring a client portfolio on signals rather than on a label.
Response structure
FieldTypeDescription
data[].cui
integer
Tax identification number, without the
RO prefix.
data[].stare
string | null
data[].scor
integer
data[].semnale[]
mixed[]
data[].necunoscut[].tip
string
data[].necunoscut[].de_ce
string
data.cui
integer
The company tax ID.
data.stare
object
The company status at the trade register, as the platform classifies it — the context without which the score cannot be read.
data.scor
integer
The score, 0–100. ⚠️
0 means "no signal found", NOT "a good company": whatever could not be checked is in necunoscut. The heaviest signal sets the base and the rest add at most 15 points on top — severity does not add up linearly, otherwise three minor facts would outweigh an insolvency.
data.semnale[]
array
The facts found, each with its type, weight and source. Only facts published by authorities and found for the requested tax ID.
data.necunoscut[]
array
What could NOT be checked, with the reason. This is not a footnote, it is half of the answer: a low score for a company we know nothing about means something different from the same score for one checked on every front. 42.6% of companies have filed no financial statements at all.
meta.metoda
string
The method, in the response and not only in the documentation — a score without a method is an anonymous opinion, and whoever displays it must be able to say where it comes from.
Response examples
GEThttps://oneapi.ro/api/business/v1/firme/6719278/risc
{
"data": {
"cui": 6719278,
"stare": {
"cod": "1048",
"denumire": "funcțiune",
"categorie": "activa"
},
"scor": 25,
"semnale": [
{
"tip": "datorii_anaf",
"puncte": 25,
"explicatie": "Firma apare pe lista datornicilor publicată de ANAF."
}
],
"necunoscut": []
},
"meta": {
"metoda": "Scorul se calculează DOAR din fapte publicate de autorităţi şi regăsite pentru firma asta. Absenţa datelor nu adaugă puncte — apare în `necunoscut`. Semnalul cel mai greu dă baza, iar restul adaugă cel mult 15 puncte peste el: gravitatea nu se adună liniar."
}
}
GEThttps://oneapi.ro/api/business/v1/firme/14399840/risc
{
"data": {
"cui": 14399840,
"stare": {
"cod": "1048",
"denumire": "funcțiune",
"categorie": "activa"
},
"scor": 12,
"semnale": [
{
"tip": "profit_negativ",
"puncte": 12,
"explicatie": "Ultimul bilanț depus arată pierdere.",
"valoare": "bilanţul pe 2025"
}
],
"necunoscut": []
},
"meta": {
"metoda": "Scorul se calculează DOAR din fapte publicate de autorităţi şi regăsite pentru firma asta. Absenţa datelor nu adaugă puncte — apare în `necunoscut`. Semnalul cel mai greu dă baza, iar restul adaugă cel mult 15 puncte peste el: gravitatea nu se adună liniar."
}
}
GEThttps://oneapi.ro/api/business/v1/firme/2054341/risc
{
"data": {
"cui": 2054341,
"stare": {
"cod": "1084",
"denumire": "radiată",
"categorie": "radiata"
},
"scor": 100,
"semnale": [
{
"tip": "radiata",
"puncte": 100,
"explicatie": "Firma e radiată din registrul comerțului: nu mai există ca entitate.",
"valoare": "radiată"
}
],
"necunoscut": []
},
"meta": {
"metoda": "Scorul se calculează DOAR din fapte publicate de autorităţi şi regăsite pentru firma asta. Absenţa datelor nu adaugă puncte — apare în `necunoscut`. Semnalul cel mai greu dă baza, iar restul adaugă cel mult 15 puncte peste el: gravitatea nu se adună liniar."
}
}
GEThttps://oneapi.ro/api/business/v1/firme/24890577/risc
{
"data": {
"cui": 24890577,
"stare": {
"cod": "1048",
"denumire": "funcțiune",
"categorie": "activa"
},
"scor": 0,
"semnale": [],
"necunoscut": []
},
"meta": {
"metoda": "Scorul se calculează DOAR din fapte publicate de autorităţi şi regăsite pentru firma asta. Absenţa datelor nu adaugă puncte — apare în `necunoscut`. Semnalul cel mai greu dă baza, iar restul adaugă cel mult 15 puncte peste el: gravitatea nu se adună liniar."
}
}
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 tax ID does not exist in the trade register. |
| 422 | cui_invalid | The tax ID is not shaped like a Romanian one (2–10 digits). |
| 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": "cui_invalid",
"mesaj": "The tax ID is not shaped like a Romanian one (2–10 digits).",
"detalii": {
"cui": [
"The value sent does not satisfy the parameter rule."
]
}
}
}