Business v1 / Statistici
Benchmark sector
Distribuţia bilanţurilor unui sector CAEN într-un an: cuartilele cifrei de afaceri şi ale profitului, mediana salariaţilor, pe total şi pe clase de mărime.
GET
https://oneapi.ro/api/business/v1/caen/{cod}/benchmark
Parametri de cale
NumeTipDescriereExemplu
codobligatoriu
string
Codul CAEN Rev. 2, patru cifre (ex.
6201).
Parametri de interogare
NumeTipDescriereValori acceptate
caen_versiuneopțional
string | null
Revizia codului (
1, 2, 3), când forma lui e ambiguă.
123
anopțional
integer | null
Anul bilanţurilor. Implicit, cel mai nou an cu bilanţurile depuse în mare parte.
ex. 2025
judetopțional
string | null
Judeţul sediului: indicativul auto (
CJ) ori numele.
ex. CJ
clasa_marimeopțional
string | null
micro, mica, mijlocie ori mare. Cu ea, răspunsul are doar totalul clasei.
micromicamijlociemare
de_laopțional
integer | null
Primul an al seriei, patru cifre. ⚠️ Nu se trimite împreună cu
an: ori un singur an, ori interval.
ex. 2024-01-01
pana_laopțional
integer | null
Ultimul an al seriei, patru cifre. ⚠️ Nu se trimite împreună cu
an.
ex. 2024-12-31
Cum se comportă
- Distribuţia bilanţurilor firmelor dintr-un sector într-un an: cuartilele cifrei de afaceri şi ale profitului net, mediana salariaţilor, pe total şi pe clase de mărime. Codul din cale e de orice nivel (
G,62,4711). - Sectorul e CAEN-ul declarat în bilanţul acelui an (cum clasifică şi Ministerul Finanţelor), nu codul de azi din ANAF: benchmark-ul pe 2021 compară firmele care erau atunci în sector.
- Clasa de mărime se stabileşte după numărul mediu de salariaţi, pe pragurile Legii 346/2004 (0–9, 10–49, 50–249, 250+); cifra de afaceri nu intră în clasificare.
- Grupurile sub 5 firme nu se publică — percentilele ar descrie firme identificabile. Dacă totalul e sub prag, ruta întoarce
200cudata: nullşimeta.fara_date; clasele sub prag lipsesc dinpe_clasa_marime. - Media cifrei de afaceri e trasă în sus de câteva firme mari (în comerţul alimentar, media e de 17 ori mediana). Pentru „firma tipică", mediana.
- Acoperă toate formularele de bilanţ (inclusiv microîntreprinderile). Locul unei firme anume în sectorul ei:
/firme/{cui}/benchmark. - Valorile imposibile scrise în formular (o cifră de afaceri de 300.000 de miliarde de lei, 62.355 de salariaţi la o firmă cu 275.000 de lei cifră de afaceri) devin
null, nu intră în clasament ori în medii. Asigurătorii n-au rând de cifră de afaceri în formular, deci aucifra_afaceri: null.
La ce folosește
- „Unde se situează firma mea?" — cifra de afaceri a unei firme faţă de mediana sectorului ei, în judeţ.
- Dimensionarea unei pieţe: câte firme, ce cifră de afaceri cumulată, câţi angajaţi are un sector.
- Praguri realiste pentru un scoring de credit ori de risc, pe sector şi clasă de mărime.
Structura răspunsului
CâmpTipDescriere
data.total.firme
integer
Câte firme cu bilanţ intră în grup.
data.total.cifra_afaceri.p25
number
Cifra de afaceri sub care se află un sfert din firme, în lei.
data.total.cifra_afaceri.mediana
integer
Cifra de afaceri mediană.
data.total.cifra_afaceri.p75
number
Cifra de afaceri peste care se află un sfert din firme.
data.total.cifra_afaceri.medie
number
Media — trasă în sus de firmele mari; mediana descrie firma tipică.
data.total.cifra_afaceri.total
integer
Cifra de afaceri cumulată.
data.total.profit_net.p25
integer
Primul cuartil al profitului net (negativ = pierdere).
data.total.profit_net.mediana
integer
Profitul net median.
data.total.profit_net.p75
number
Al treilea cuartil al profitului net.
data.total.profit_net.firme_profitabile
integer
Câte firme au profit net pozitiv.
data.total.salariati.mediana
integer
Numărul median de salariaţi.
data.total.salariati.medie
number
Numărul mediu de salariaţi pe firmă.
data.total.salariati.total
integer
Salariaţii cumulaţi.
data.pe_clasa_marime[].clasa_marime
string
Clasa de mărime:
micro (0–9 salariaţi), mica (10–49), mijlocie (50–249), mare (250+).
data.pe_clasa_marime[].firme
integer
Câte firme cu bilanţ intră în grup.
data.pe_clasa_marime[].cifra_afaceri.p25
integer
Cifra de afaceri sub care se află un sfert din firme, în lei.
data.pe_clasa_marime[].cifra_afaceri.mediana
integer
Cifra de afaceri mediană.
data.pe_clasa_marime[].cifra_afaceri.p75
integer
Cifra de afaceri peste care se află un sfert din firme.
data.pe_clasa_marime[].cifra_afaceri.medie
number
Media — trasă în sus de firmele mari; mediana descrie firma tipică.
data.pe_clasa_marime[].cifra_afaceri.total
integer
Cifra de afaceri cumulată.
data.pe_clasa_marime[].profit_net.p25
integer
Primul cuartil al profitului net (negativ = pierdere).
data.pe_clasa_marime[].profit_net.mediana
integer
Profitul net median.
data.pe_clasa_marime[].profit_net.p75
integer
Al treilea cuartil al profitului net.
data.pe_clasa_marime[].profit_net.firme_profitabile
integer
Câte firme au profit net pozitiv.
data.pe_clasa_marime[].salariati.mediana
integer
Numărul median de salariaţi.
data.pe_clasa_marime[].salariati.medie
number
Numărul mediu de salariaţi pe firmă.
data.pe_clasa_marime[].salariati.total
integer
Salariaţii cumulaţi.
meta.an
integer
Anul bilanţurilor.
meta.caen
object
Cum s-a rezolvat codul din cale (nivel, denumire, câte clase s-au căutat).
meta.caen.cerut
string
Codul CAEN trimis, normalizat (litere mari, fără puncte).
meta.caen.versiune_cerut
string
Revizia în care s-a citit codul trimis: cea din
caen_versiune, altfel prima în care există.
meta.caen.nivel
string
Nivelul codului folosit — la rutele de firme, al codului cerut:
sectiune, subsectiune, diviziune, grupa, clasa sau agregat.
meta.caen.denumire
string
Denumirea codului, din nomenclatorul CAEN.
meta.caen.clase_cautate
integer
Câte clase CAEN, din toate reviziile purtate de firme, cad sub codul cerut.
meta.caen.clase_altele_decat_cerut
integer
Câte dintre ele NU sunt codul cerut. Căutarea e permisivă (traduce codul în toate ediţiile, ca să prindă firmele nerenumerotate), iar traducerea urcă uneori în clase mult mai largi — deci totalul poate fi despre mai mult decât meseria cerută.
meta.caen.nota_acoperire
string
Apare doar când s-a căutat şi pe alte clase decât codul cerut, şi spune ce să foloseşti dacă vrei o cifră strict despre meseria cerută.
meta.caen.clase
array
Clasele brute pe care s-a căutat, când sunt cel mult 20. Ca totalul să fie verificabil, nu o cifră de luat pe credit.
meta.judet
string
Judeţul cerut, dacă e cazul.
meta.clasa_marime
string
Clasa de mărime cerută, dacă e cazul.
Exemple de răspuns
GEThttps://oneapi.ro/api/business/v1/caen/4711/benchmark
{
"data": {
"total": {
"firme": 68133,
"cifra_afaceri": {
"p25": 55842.5,
"mediana": 227769,
"p75": 702919.5,
"medie": 3889683.49,
"total": 205029106446
},
"profit_net": {
"p25": -5062,
"mediana": 0,
"p75": 21026.5,
"firme_profitabile": 32509
},
"salariati": {
"mediana": 1,
"medie": 5.4,
"total": 199402
}
},
"pe_clasa_marime": [
{
"clasa_marime": "micro",
"firme": 66038,
"cifra_afaceri": {
"p25": 51274,
"mediana": 210028,
"p75": 582197,
"medie": 730610.25,
"total": 36981298948
},
"profit_net": {
"p25": -5413,
"mediana": 0,
"p75": 17816,
"firme_profitabile": 30696
},
"salariati": {
"mediana": 1,
"medie": 1.9,
"total": 65638
}
}
]
},
"meta": {
"an": 2025,
"caen": {
"cerut": "4711",
"versiune_cerut": "Rev.3",
"nivel": "clasa",
"denumire": "Comerț cu amănuntul nespecializat, cu vânzare predominantă de produse alimentare, băuturi și tutun",
"clase_cautate": 8,
"clase_altele_decat_cerut": 7,
"nota_acoperire": "Căutarea e permisivă: codul cerut s-a tradus în toate ediţiile CAEN, ca să prindă şi firmele nerenumerotate încă. Totalul cuprinde deci şi 7 clase diferite de [4711], iar unele pot fi mult mai largi decât codul cerut. Pentru o cifră strict despre meseria cerută, foloseşte `categorie=` de la `/caen/categorii`, care refuză clasele-sac.",
"clase": [
"4711",
"4781",
"4791",
"4799",
"5211",
"5261",
"5262",
"5263"
]
}
}
}
GEThttps://oneapi.ro/api/business/v1/caen/62/benchmark?judet=CJ
{
"data": {
"total": {
"firme": 5005,
"cifra_afaceri": {
"p25": 153191,
"mediana": 337639,
"p75": 515051.5,
"medie": 3022860.58,
"total": 12692991583
},
"profit_net": {
"p25": 0,
"mediana": 137437,
"p75": 310564,
"firme_profitabile": 3743
},
"salariati": {
"mediana": 1,
"medie": 8.3,
"total": 31040
}
},
"pe_clasa_marime": [
{
"clasa_marime": "micro",
"firme": 4813,
"cifra_afaceri": {
"p25": 145946.5,
"mediana": 319708,
"p75": 492987.5,
"medie": 646039.39,
"total": 2588679843
},
"profit_net": {
"p25": 0,
"mediana": 127230,
"p75": 295030,
"firme_profitabile": 3562
},
"salariati": {
"mediana": 1,
"medie": 1.3,
"total": 4469
}
}
]
},
"meta": {
"an": 2025,
"judet": "CJ",
"caen": {
"cerut": "62",
"versiune_cerut": "Rev.3",
"nivel": "diviziune",
"denumire": "Activităţi de programare și activități de consultanță în tehnologia informaţiei",
"clase_cautate": 13,
"clase_altele_decat_cerut": 13,
"nota_acoperire": "Căutarea e permisivă: codul cerut s-a tradus în toate ediţiile CAEN, ca să prindă şi firmele nerenumerotate încă. Totalul cuprinde deci şi 13 clase diferite de [62], iar unele pot fi mult mai largi decât codul cerut. Pentru o cifră strict despre meseria cerută, foloseşte `categorie=` de la `/caen/categorii`, care refuză clasele-sac.",
"clase": [
"6201",
"6202",
"6203",
"6209",
"6220",
"6210",
"6290",
"3002",
"7230",
"7240",
"7260",
"7221",
"7222"
]
}
}
}
GEThttps://oneapi.ro/api/business/v1/caen/G/benchmark?clasa_marime=mare
{
"data": {
"total": {
"firme": 229,
"cifra_afaceri": {
"p25": 220426890,
"mediana": 492670567,
"p75": 1344248454,
"medie": 1678381555.62,
"total": 384349376236
},
"profit_net": {
"p25": 1920548,
"mediana": 11443649,
"p75": 40053249,
"firme_profitabile": 183
},
"salariati": {
"mediana": 442,
"medie": 1107.6,
"total": 253644
}
},
"pe_clasa_marime": []
},
"meta": {
"an": 2025,
"clasa_marime": "mare",
"caen": {
"cerut": "G",
"versiune_cerut": "Rev.3",
"nivel": "sectiune",
"denumire": "COMERŢ CU RIDICATA ŞI CU AMĂNUNTUL",
"clase_cautate": 171,
"clase_altele_decat_cerut": 171,
"nota_acoperire": "Căutarea e permisivă: codul cerut s-a tradus în toate ediţiile CAEN, ca să prindă şi firmele nerenumerotate încă. Totalul cuprinde deci şi 171 clase diferite de [G], iar unele pot fi mult mai largi decât codul cerut. Pentru o cifră strict despre meseria cerută, foloseşte `categorie=` de la `/caen/categorii`, care refuză clasele-sac."
}
}
}
GEThttps://oneapi.ro/api/business/v1/caen/582/benchmark
{
"data": {
"total": {
"firme": 1664,
"cifra_afaceri": {
"p25": 60729.25,
"mediana": 267928.5,
"p75": 737406,
"medie": 7830923.09,
"total": 10289832938
},
"profit_net": {
"p25": -903,
"mediana": 25056,
"p75": 229564.25,
"firme_profitabile": 1034
},
"salariati": {
"mediana": 1,
"medie": 14.9,
"total": 15672
}
},
"pe_clasa_marime": [
{
"clasa_marime": "micro",
"firme": 1544,
"cifra_afaceri": {
"p25": 51185,
"mediana": 227809,
"p75": 493967.5,
"medie": 691582.18,
"total": 825749124
},
"profit_net": {
"p25": -1269.5,
"mediana": 14451,
"p75": 185542.75,
"firme_profitabile": 928
},
"salariati": {
"mediana": 1,
"medie": 1.5,
"total": 1430
}
}
]
},
"meta": {
"an": 2025,
"caen": {
"cerut": "582",
"versiune_cerut": "Rev.3",
"nivel": "grupa",
"denumire": "Activităţi de editare a produselor software",
"clase_cautate": 4,
"clase_altele_decat_cerut": 4,
"nota_acoperire": "Căutarea e permisivă: codul cerut s-a tradus în toate ediţiile CAEN, ca să prindă şi firmele nerenumerotate încă. Totalul cuprinde deci şi 4 clase diferite de [582], iar unele pot fi mult mai largi decât codul cerut. Pentru o cifră strict despre meseria cerută, foloseşte `categorie=` de la `/caen/categorii`, care refuză clasele-sac.",
"clase": [
"5821",
"5829",
"7240",
"7221"
]
}
}
}
Coduri de eroare
| Cod | Slug | Când apare |
|---|---|---|
| 401 | neautentificat | Token lipsă, invalid, expirat sau revocat. |
| 403 | feature_indisponibil | Planul curent nu include funcţia de care ţine ruta. |
| 404 | caen_inexistent | Codul [{cod}] nu există în nicio revizie CAEN (Rev.1, Rev.2, Rev.3). |
| 422 | caen_invalid | Codul [{cod}] nu are forma unui cod CAEN. |
| 422 | filtru_necunoscut | Judeţul din judet nu există; detalii.camp spune care. |
| 422 | validare | Un parametru nedeclarat ori o valoare care nu trece validarea (an, caen_versiune, clasa_marime, judet). Câmpul vinovat e în detalii. |
| 429 | cota_depasita | Cota lunară a planului a fost depăşită (vezi Retry-After). |
Toate erorile au aceeași formă. eroare.cod e stabil și e cel după care trebuie să ramifici în cod — nu după textul din mesaj, care se poate schimba.
{
"eroare": {
"cod": "caen_invalid",
"mesaj": "Codul [{cod}] nu are forma unui cod CAEN.",
"detalii": {
"cod": [
"Valoarea trimisă nu respectă regula parametrului."
]
}
}
}