oneapi
Sign in
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: necunoscut says 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."
    }
}

Error codes

CodeSlugWhen it occurs
401neautentificatToken missing, invalid, expired or revoked.
403feature_indisponibilThe current plan does not include the feature the route depends on.
404negasitThe tax ID does not exist in the trade register.
422cui_invalidThe tax ID is not shaped like a Romanian one (2–10 digits).
429cota_depasitaThe 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."
            ]
        }
    }
}