Dezvoltatori
API Firma BunăToată firma, într-o cerere.
REST și JSON peste aceleași date ca site-ul: registrul ONRC, starea ANAF, bilanțurile 2008–prezent, reprezentanți, dosare, contracte publice, fonduri UE, sancțiuni, scor de risc, legături între firme, statistici și clasamente, firmele noi și webhook-uri când se schimbă ceva.
Început rapid
- Fă-ți un cont (gratuit) și creează o cheie în Cont → API.
- Trimite cheia în antetul Authorization la fiecare cerere.
- Planul gratuit are 500 de cereri pe lună: profilul firmei și căutarea, ca să încerci.
curl https://firmabuna.ro/v1/firme/14399840 \
-H "Authorization: Bearer fb_live_…"Autentificare
Cheile încep cu fb_live_ și se trimit ca Authorization: Bearer … (sau în antetul X-API-Key). Le creezi și le revoci din cont; cheia întreagă se arată o singură dată. Ține-o pe server, nu în aplicații din browser. Limitele sunt pe cont, nu pe cheie.
Planuri și limite
Fiecare răspuns are antetele X-RateLimit-Limit, X-RateLimit-Remaining, X-Quota-Limit și X-Quota-Used. La interogarea în lot fiecare CUI e o cerere. Cererile greșite (400) sau în afara planului (403) nu se numără. La cotă, cererile se opresc până la 1 ale lunii; treci oricând pe un plan mai mare din cont.
Erori
{ "eroare": { "cod": "firma_inexistenta", "mesaj": "CUI-ul nu e în registrul ONRC." } }- 400
cerere_invalidaParametru lipsă sau greșit (CUI invalid, URL de webhook nepublic…). Nu se numără în cotă. - 401
fara_cheie / cheie_invalidaLipsește antetul Authorization sau cheia a fost revocată. - 403
plan_insuficientEndpoint-ul nu e în planul tău. Nu se numără în cotă. - 404
firma_inexistenta …CUI-ul nu e în registrul ONRC (sau webhook-ul nu există). - 429
prea_multe_cereri / cota_epuizataLimita pe minut sau cota lunară. Antetul Retry-After spune câte secunde să aștepți.
Firme
Profil, căutare, bilanțuri, reprezentanți, evenimente, dosare, risc, legături, sancțiuni, fonduri UE, contracte publice
/v1/firme/{cui}Toate planurileProfilul unei firme
Registrul ONRC, starea ANAF (TVA, TVA la încasare, split TVA, inactiv, RO e-Factura), ultimul bilanț și treapta de risc. Include și asociațiile, fundațiile, asociațiile de proprietari, sindicatele și patronatele găsite la ANAF (câmpul `tip`). Dacă starea ANAF e mai veche de 3 zile, se reverifică la ANAF înainte de răspuns (câteva secunde); `anaf.verificat_la` spune momentul.
Parametri
cuicale, obligatoriuCUI, cu sau fără prefixul RO
Cerere
curl "https://firmabuna.ro/v1/firme/14399840" \
-H "Authorization: Bearer fb_live_…"Răspuns 200
{
"cui": 2816464,
"denumire": "DEDEMAN SRL",
"tip": "firma",
"tip_denumire": "Firmă",
"nr_reg_com": "J1992002621040",
"euid": "ROONRC.J1992002621040",
"forma_juridica": "SRL",
"stare": "activa",
"stari_onrc": [
"funcțiune"
],
"data_inmatricularii": "1992-11-05",
"adresa": {
"sediu": "Str. ALEXEI TOLSTOI, nr. 8",
"localitate": "Municipiul Bacău",
"judet": "Bacău",
"cod_postal": "600093"
},
"caen": {
"cod": "4752",
"denumire": "Comerț cu amănuntul al articolelor de fierărie…"
},
"web": "www.dedeman.ro",
"anaf": {
"gasita": true,
"platitor_tva": true,
"tva_de_la": "1993-07-01",
"tva_la_incasare": false,
"split_tva": false,
"inactiv": false,
"inactiv_de_la": null,
"e_factura": true,
"verificat_la": "2026-10-05T16:20:00.000Z"
},
"bilant": {
"an": 2025,
"sursa": "mf",
"caen": "4752",
"cifra_afaceri": 13157835535,
"venituri": 13502101112,
"cheltuieli": 11563219341,
"profit_brut": 1938881771,
"pierdere_bruta": null,
"profit_net": 1635337205,
"pierdere_neta": null,
"salariati": 12702,
"active_imobilizate": 4501234567,
"active_circulante": 4201234567,
"stocuri": 2101234567,
"creante": 401234567,
"casa_banci": 1201234567,
"datorii": 2014755147,
"capitaluri_proprii": 5110382928,
"capital_subscris": 4380160
},
"risc": {
"treapta": "scazut",
"scor": 0
},
"insolventa": null,
"sanctiuni": {
"verificat_la": "2026-10-06T04:20:00.000Z",
"pe_lista": false,
"liste": []
},
"actualizat_la": "2026-10-05T06:00:00.000Z",
"url": "https://firmabuna.ro/firma/2816464-dedeman-srl"
}/v1/cautareToate planurileCaută firme după nume sau CUI
Ignoră diacriticele, punctuația și forma juridică; cuvintele pot fi în orice ordine. Rezultatele exacte vin primele, apoi cele active după cifra de afaceri.
Parametri
qquery, obligatoriujudetqueryJudețul: slug (bacau), nume cu sau fără diacritice (Bacău) ori indicativ (BC)include_radiatequery Valori: true, false. Implicit: false.limitquery Implicit: 10. Maxim 50.offsetquery Implicit: 0. Maxim 2000.
Cerere
curl "https://firmabuna.ro/v1/cautare?q=dedeman" \
-H "Authorization: Bearer fb_live_…"Răspuns 200
{
"total": 0,
"rezultate": [
{
"cui": 0,
"denumire": "…",
"tip": "firma",
"tip_denumire": "…",
"stare": "…",
"forma_juridica": "…",
"judet": "…",
"localitate": "…",
"caen": {
"cod": "…",
"denumire": "…"
},
"data_inmatricularii": "…",
"cifra_afaceri": 0,
"an_bilant": 0,
"potrivire": "cui"
}
]
}/v1/firme/lotDeveloper+Mai multe firme deodată (până la 100 de CUI)
Profilul fiecărei firme, ca la GET /v1/firme/{cui}. Fiecare CUI se numără ca o cerere.
Cerere
curl -X POST "https://firmabuna.ro/v1/firme/lot" \
-H "Authorization: Bearer fb_live_…" \
-H "Content-Type: application/json" \
-d '{"cui":[14399840,"RO2816464"]}'Răspuns 200
{
"firme": [
{
"cui": 2816464,
"denumire": "DEDEMAN SRL",
"tip": "firma",
"tip_denumire": "Firmă",
"nr_reg_com": "J1992002621040",
"euid": "ROONRC.J1992002621040",
"forma_juridica": "SRL",
"stare": "activa",
"stari_onrc": [
"funcțiune"
],
"data_inmatricularii": "1992-11-05",
"adresa": {
"sediu": "Str. ALEXEI TOLSTOI, nr. 8",
"localitate": "Municipiul Bacău",
"judet": "Bacău",
"cod_postal": "600093"
},
"caen": {
"cod": "4752",
"denumire": "Comerț cu amănuntul al articolelor de fierărie…"
},
"web": "www.dedeman.ro",
"anaf": {
"gasita": true,
"platitor_tva": true,
"tva_de_la": "1993-07-01",
"tva_la_incasare": false,
"split_tva": false,
"inactiv": false,
"inactiv_de_la": null,
"e_factura": true,
"verificat_la": "2026-10-05T16:20:00.000Z"
},
"bilant": {
"an": 2025,
"sursa": "mf",
"caen": "4752",
"cifra_afaceri": 13157835535,
"venituri": 13502101112,
"cheltuieli": 11563219341,
"profit_brut": 1938881771,
"pierdere_bruta": null,
"profit_net": 1635337205,
"pierdere_neta": null,
"salariati": 12702,
"active_imobilizate": 4501234567,
"active_circulante": 4201234567,
"stocuri": 2101234567,
"creante": 401234567,
"casa_banci": 1201234567,
"datorii": 2014755147,
"capitaluri_proprii": 5110382928,
"capital_subscris": 4380160
},
"risc": {
"treapta": "scazut",
"scor": 0
},
"insolventa": null,
"sanctiuni": {
"verificat_la": "2026-10-06T04:20:00.000Z",
"pe_lista": false,
"liste": []
},
"actualizat_la": "2026-10-05T06:00:00.000Z",
"url": "https://firmabuna.ro/firma/2816464-dedeman-srl"
}
],
"negasite": [
"…"
]
}/v1/firme/{cui}/bilanturiDeveloper+Toate bilanțurile, 2008–prezent
Din fișierele Ministerului Finanțelor și, pentru anii lipsă, de la ANAF.
Parametri
cuicale, obligatoriuCUI, cu sau fără prefixul RO
Cerere
curl "https://firmabuna.ro/v1/firme/14399840/bilanturi" \
-H "Authorization: Bearer fb_live_…"Răspuns 200
{
"bilanturi": [
null
]
}/v1/firme/{cui}/reprezentantiDeveloper+Reprezentanții legali
Administratorii și ceilalți reprezentanți din registrul ONRC. Persoanele care au făcut opoziție apar fără legături (id null) sau fără nume.
Parametri
cuicale, obligatoriuCUI, cu sau fără prefixul RO
Cerere
curl "https://firmabuna.ro/v1/firme/14399840/reprezentanti" \
-H "Authorization: Bearer fb_live_…"Răspuns 200
{
"reprezentanti": [
{
"id": 0,
"nume": "…",
"calitate": "…",
"persoana_juridica": true,
"potrivire": "…",
"alte_firme": 0
}
]
}/v1/firme/{cui}/evenimenteDeveloper+Istoricul schimbărilor
Fiecare schimbare detectată: stare ONRC, TVA, inactiv, sediu, denumire, reprezentanți, bilanț nou, dosare. Cu `dupa_id` primești doar evenimentele mai noi, în ordine crescătoare (pentru sincronizare).
Parametri
cuicale, obligatoriuCUI, cu sau fără prefixul ROdupa_idquerylimitquery Implicit: 50. Maxim 200.
Cerere
curl "https://firmabuna.ro/v1/firme/14399840/evenimente" \
-H "Authorization: Bearer fb_live_…"Răspuns 200
{
"evenimente": [
{
"id": 3690355,
"cui": 52656513,
"tip": "dosar_insolventa",
"eticheta": "Dosar de insolvență",
"descriere": "6062/118/2026 · Tribunalul CONSTANTA · deschiderea procedurii la cererea debitorului",
"valoare_veche": null,
"valoare_noua": {
"numar": "6062/118/2026",
"institutie": "TribunalulCONSTANTA",
"obiect": "deschiderea procedurii la cererea debitorului"
},
"sursa": "just",
"detectat_la": "2026-10-05T23:31:19.438Z"
}
]
}/v1/firme-noiDeveloper+Firmele nou înregistrate
Firmele (și organizațiile) înregistrate într-un interval, după data înmatriculării, cele mai noi întâi, cu filtre pe județ, CAEN și tipul entității. Implicit ultimele 7 zile; intervalul are cel mult 366 de zile. ONRC publică registrul o dată pe lună, deci firmele din ultimele săptămâni apar pe măsură ce sosesc edițiile (sau mai devreme, la ANAF). Pe pagini: `total`, `trunchiat`, `limit`, `offset`.
Parametri
dequeryPrima zi, inclusiv; implicit acum 7 zilepanaqueryUltima zi, inclusiv; implicit azijudetqueryJudețul: slug (cluj), nume cu sau fără diacritice (Cluj) ori indicativ (CJ)caenqueryCodul CAEN principal sau un prefix al lui (41, 412, 4120)tipqueryDoar un tip de entitate (implicit toate) Valori: firma, asociatie, fundatie, federatie, uniune, asociatie_proprietari, sindicat, patronat.limitquery Implicit: 100. Maxim 500.offsetquery Implicit: 0.
Cerere
curl "https://firmabuna.ro/v1/firme-noi" \
-H "Authorization: Bearer fb_live_…"Răspuns 200
{
"de": "…",
"pana": "…",
"total": 0,
"trunchiat": true,
"firme": [
{
"cui": 0,
"denumire": "…",
"tip": "firma",
"tip_denumire": "…",
"nr_reg_com": "…",
"forma_juridica": "…",
"stare": "…",
"data_inmatricularii": "…",
"judet": "…",
"localitate": "…",
"caen": {
"cod": "…",
"denumire": "…"
},
"url": "…"
}
]
}/v1/evenimenteDeveloper+Fluxul de evenimente al tuturor firmelor
Schimbările detectate la toate firmele: firme noi, radieri, stare ONRC, TVA, inactivări, dosare de insolvență, sancțiuni, reprezentanți etc. — aceleași tipuri ca la webhook-uri. Fără `dupa_id`: cele mai noi întâi; pagina următoare cu `inainte_de_id` = cel mai mic id primit. Cu `dupa_id`: doar evenimentele mai noi, crescător (pentru sincronizare: păstrezi cel mai mare id primit). Filtre pe tip (unul sau mai multe, separate prin virgulă), interval (după data detectării), județ și CAEN. `trunchiat` = mai urmează.
Parametri
tipqueryTipuri separate prin virgulă: firma_noua, stare_schimbata, denumire_schimbata, sediu_schimbat, radiere, tva_inregistrare, tva_anulare, inactiv, reactivare, efactura_inregistrare, tva_incasare_schimbat, bilant_nou, dosar_insolventa, procedura_insolventa, sanctiune, sanctiune_ridicata, dosar_nou, administrator_nou, administrator_iesitdequeryDetectate din ziua aceasta, inclusivpanaqueryDetectate până în ziua aceasta, inclusivjudetqueryJudețul: slug (cluj), nume cu sau fără diacritice (Cluj) ori indicativ (CJ)caenqueryCodul CAEN principal sau un prefix al lui (41, 412, 4120)dupa_idqueryinainte_de_idquerylimitquery Implicit: 100. Maxim 500.
Cerere
curl "https://firmabuna.ro/v1/evenimente" \
-H "Authorization: Bearer fb_live_…"Răspuns 200
{
"trunchiat": true,
"evenimente": [
{
"id": 3690355,
"cui": 52656513,
"tip": "dosar_insolventa",
"eticheta": "Dosar de insolvență",
"descriere": "6062/118/2026 · Tribunalul CONSTANTA · deschiderea procedurii la cererea debitorului",
"valoare_veche": null,
"valoare_noua": {
"numar": "6062/118/2026",
"institutie": "TribunalulCONSTANTA",
"obiect": "deschiderea procedurii la cererea debitorului"
},
"sursa": "just",
"detectat_la": "2026-10-05T23:31:19.438Z"
}
]
}/v1/firme/{cui}/dosareDeveloper+Dosarele în instanță
Dosarele de pe portal.just.ro în care firma e parte, potrivite după denumire, întâi cele cu termen viitor, apoi după ultima modificare. Fără nume de persoane fizice. `incomplet` = numele e foarte comun și portalul a întors numărul maxim de rezultate. `total` = toate dosarele găsite; cu `limit` și `offset` se citesc pe pagini, iar `trunchiat` spune dacă mai urmează.
Parametri
cuicale, obligatoriuCUI, cu sau fără prefixul ROlimitqueryCâte dosare pe pagină, cel mult 500 Implicit: 500. Maxim 500.offsetquery Implicit: 0.
Cerere
curl "https://firmabuna.ro/v1/firme/14399840/dosare" \
-H "Authorization: Bearer fb_live_…"Răspuns 200
{
"verificat_la": "…",
"incomplet": true,
"total": 0,
"trunchiat": true,
"dosare": [
{
"numar": "…",
"instanta": "…",
"sectie": "…",
"categorie": "…",
"stadiu": "…",
"obiect": "…",
"data_inregistrare": "…",
"data_modificare": "…",
"termen_urmator": "…",
"ultima_solutie": "…",
"rolul_firmei": "…"
}
]
}/v1/firme/{cui}/riscDeveloper+Scorul de risc explicat
Scor 0–100 (mai mare = mai riscant), din Altman Z″, capitaluri, pierderi, starea ANAF și dosare, cu punctele fiecărui factor. Informativ, nu o recomandare de credit.
Parametri
cuicale, obligatoriuCUI, cu sau fără prefixul RO
Cerere
curl "https://firmabuna.ro/v1/firme/14399840/risc" \
-H "Authorization: Bearer fb_live_…"Răspuns 200
{
"treapta": "scazut",
"scor": 0,
"altman_z": 0,
"an_bilant": 0,
"calculat_la": "…",
"factori": [
{
"cod": "…",
"descriere": "…",
"puncte": 0
}
]
}/v1/firme/{cui}/sanctiuniToate planurileListele de sancțiuni UE și OFAC
Verificarea firmei în lista consolidată a sancțiunilor financiare UE și în listele OFAC (SDN și Consolidated non-SDN), actualizate zilnic. Se întorc doar potrivirile sigure: după CUI sau numărul de registru confirmate de denumire, după denumire unică în registru (cu Romania în intrare), sau reprezentanți activi după nume și data nașterii. `potriviri` gol = firma nu apare în liste la data `verificat_la`. Informativ; sursa oficială e la `url`.
Parametri
cuicale, obligatoriuCUI, cu sau fără prefixul RO
Cerere
curl "https://firmabuna.ro/v1/firme/14399840/sanctiuni" \
-H "Authorization: Bearer fb_live_…"Răspuns 200
{
"verificat_la": "…",
"liste": [
{
"cod": "…",
"denumire": "…",
"publicata_la": "…",
"verificata_la": "…",
"url": "…"
}
],
"potriviri": [
{
"lista": "…",
"id_intrare": "…",
"referinta": "…",
"denumire": "…",
"tip": "…",
"programe": [
"…"
],
"listat_la": "…",
"url": "…",
"metoda": "identificator",
"potrivit_la": "…",
"reprezentant": {
"nume": "…",
"calitate": "…"
}
}
]
}/v1/firme/{cui}/fonduriToate planurileProiectele cu fonduri europene
Proiectele în care firma e beneficiar, lider sau partener, din listele publice de pe data.gov.ro: MIPE — proiectele contractate 2014–2020 (POIM, POR, POC, POCU, POCA, POAT, POAD) și AFIR — PNDR 2007–2013 și 2014–2020. Se întorc doar potrivirile sigure: după CUI (POCU, PNDR 2007–2013) confirmat de denumire, sau după denumirea exactă, unică în registru (sau unică în județul proiectului), cu forma juridică compatibilă. `nerambursabil` = fonduri UE + buget național (AFIR: valoarea contractată, în euro). Programele 2021–2027 și PNRR nu sunt incluse încă. În plus, `contracte_furnizor`: contractele SEAP câștigate de firmă ca furnizor de bunuri, servicii sau lucrări în proiecte finanțate din fonduri europene (marcajul autorității în SEAP), cu sumarul în `ca_furnizor` (`ca_furnizor.contracte` = câte sunt în total). Contractele se citesc pe pagini cu `limit` și `offset`; `contracte_furnizor_trunchiat` spune dacă mai urmează.
Parametri
cuicale, obligatoriuCUI, cu sau fără prefixul ROlimitqueryCâte contracte ca furnizor pe pagină, cel mult 2000 Implicit: 2000. Maxim 2000.offsetquery Implicit: 0.
Cerere
curl "https://firmabuna.ro/v1/firme/14399840/fonduri" \
-H "Authorization: Bearer fb_live_…"Răspuns 200
{
"proiecte_total": 0,
"ca_partener": 0,
"totaluri": [
{
"moneda": "RON",
"proiecte": 0,
"valoare_totala": 0,
"nerambursabil": 0,
"platit": 0
}
],
"proiecte": [
{
"program": "…",
"perioada": "…",
"autoritate": "MIPE",
"cod_proiect": "…",
"titlu": "…",
"masura": "…",
"rol": "beneficiar",
"moneda": "RON",
"valoare_totala": 0,
"nerambursabil": 0,
"fonduri_ue": 0,
"platit": 0,
"stadiu": "…",
"data_inceput": "…",
"data_sfarsit": "…",
"an": 0,
"judet": "…",
"localitate": "…",
"potrivire": "cui",
"sursa": "…"
}
],
"ca_furnizor": {
"contracte": 0,
"valoare_ron": 0,
"programe": [
"…"
]
},
"contracte_furnizor": [
{
"data": "…",
"autoritate": "…",
"autoritate_cui": 0,
"obiect": "…",
"cpv": "…",
"valoare_ron": 0,
"acord_cadru_ofertanti": 0,
"procedura": "…",
"tip_contract": "…",
"numar_anunt": "…",
"program": "…",
"tip_finantare": "…"
}
],
"contracte_furnizor_trunchiat": true,
"surse": [
{
"cod": "…",
"program": "…",
"autoritate": "…",
"date_la": "…",
"verificat_la": "…",
"url": "…",
"fisier": "…"
}
]
}/v1/firme/{cui}/contracteDeveloper+Contractele publice câștigate
Contractele de achiziție publică în care firma e furnizor câștigător, din orice sursă de finanțare: SEAP, prin AADR pe data.gov.ro, contractele publicate din 2018 încoace. Cele mai noi întâi, pe pagini (`limit`, `offset`), cu filtre pe an și pe autoritatea contractantă. Sumarul (`total`, `valoare_ron`, `autoritati`) e calculat pe toate contractele care trec de filtre, nu doar pe pagină; `trunchiat` spune dacă mai urmează. Fără filtre, `total` și `valoare_ron` sunt cele din `contracte_publice` din profil.
Parametri
cuicale, obligatoriuCUI, cu sau fără prefixul ROlimitqueryCâte contracte pe pagină, cel mult 500 Implicit: 100. Maxim 500.offsetquery Implicit: 0.anqueryDoar contractele din anul acesta (după data contractului) Maxim 2100.autoritate_cuiqueryDoar contractele cu autoritatea contractantă cu acest CUI
Cerere
curl "https://firmabuna.ro/v1/firme/14399840/contracte" \
-H "Authorization: Bearer fb_live_…"Răspuns 200
{
"total": 0,
"valoare_ron": 0,
"acorduri_cadru": 0,
"primul": "…",
"ultimul": "…",
"trunchiat": true,
"autoritati": [
{
"denumire": "…",
"cui": 0,
"contracte": 0,
"valoare_ron": 0
}
],
"contracte": [
{
"data": "…",
"numar": "…",
"autoritate": "…",
"autoritate_cui": 0,
"obiect": "…",
"cpv": "…",
"valoare_ron": 0,
"acord_cadru_ofertanti": 0,
"procedura": "…",
"tip_contract": "…",
"numar_anunt": "…",
"fonduri_ue": true,
"program": "…"
}
]
}/v1/firme/{cui}/legaturiDeveloper+Firmele legate prin reprezentanți comuni
Nivelul 1: firmele în care reprezentanții acestei firme sunt și ei reprezentanți; nivelul 2: un pas mai departe. Fără persoane juridice (lichidatori) și fără persoanele cu opoziție.
Parametri
cuicale, obligatoriuCUI, cu sau fără prefixul RO
Cerere
curl "https://firmabuna.ro/v1/firme/14399840/legaturi" \
-H "Authorization: Bearer fb_live_…"Răspuns 200
{
"legaturi": [
{
"cui": 0,
"denumire": "…",
"stare": "…",
"nivel": 0,
"prin": [
{
"persoana": "…",
"calitate": "…"
}
]
}
]
}Statistici
Cifrele naționale, pe județe și pe activități CAEN; clasamente
/v1/statisticiToate planurileCifrele naționale
Câte firme sunt în România pe stări, câte s-au înființat anul acesta, câte bilanțuri și persoane sunt în registru, clasamentul după cifra de afaceri, cifrele pe fiecare județ și pe fiecare diviziune CAEN, plus ediția ONRC folosită. Cifrele sunt pentru firmele din registrul comerțului (fără asociații, fundații și celelalte organizații) și sunt recalculate periodic din registru; `calculat_la` spune când. `entitati_neradiate` numără, pe tipuri, toate entitățile (inclusiv organizațiile).
Cerere
curl "https://firmabuna.ro/v1/statistici" \
-H "Authorization: Bearer fb_live_…"Răspuns 200
{
"firme": {
"total": 0,
"active": 0,
"radiate": 0,
"suspendate": 0,
"insolventa": 0,
"dizolvare": 0,
"noi_anul_acesta": 0
},
"entitati_neradiate": {},
"persoane": 0,
"bilanturi": {
"randuri": 0,
"ani": 0,
"de_la": 0,
"pana_la": 0
},
"clasament": {
"an": 0,
"firme_clasate": 0,
"cifra_afaceri_totala": 0
},
"editie_onrc": {
"data": "…",
"nume": "…"
},
"judete": [
{
"denumire": "…",
"slug": "…",
"cod": "…",
"total": 0,
"active": 0,
"cifra_afaceri": 0
}
],
"diviziuni_caen": [
{
"cod": "…",
"denumire": "…",
"sectiune": "…",
"firme_active": 0
}
],
"calculat_la": "…"
}/v1/statistici/judete/{judet}Toate planurileCifrele unui județ
Firmele din județ pe stări (`in_dificultate` = în insolvență sau în dizolvare), înființate anul acesta, cifra de afaceri a firmelor clasate, activitățile (diviziunile CAEN) și localitățile cu cele mai multe firme active. Cifrele sunt pentru firmele din registrul comerțului (fără asociații, fundații și celelalte organizații) și sunt recalculate periodic din registru; `calculat_la` spune când.
Parametri
judetcale, obligatoriuSlug (cluj), nume cu sau fără diacritice (Cluj) ori indicativ (CJ)
Cerere
curl "https://firmabuna.ro/v1/statistici/judete/{judet}" \
-H "Authorization: Bearer fb_live_…"Răspuns 200
{
"judet": {
"denumire": "…",
"slug": "…",
"cod": "…"
},
"firme": {
"total": 0,
"active": 0,
"radiate": 0,
"in_dificultate": 0,
"noi_anul_acesta": 0
},
"cifra_afaceri": 0,
"an_cifra_afaceri": 0,
"activitati": [
{
"cod": "…",
"denumire": "…",
"firme_active": 0
}
],
"localitati": [
{
"localitate": "…",
"firme_active": 0
}
],
"calculat_la": "…"
}/v1/statistici/caen/{cod}Toate planurileCifrele unei activități CAEN
O diviziune (2 cifre, ex. 41) sau o clasă (4 cifre, ex. 4120): firmele pe stări, înființate anul acesta, firmele active pe județe și, la diviziuni, clasele cu cele mai multe firme active. Din 2025 registrul folosește CAEN Rev.3, iar firmele trec treptat la codurile noi (ex. 4120 → 4100), așa că o activitate poate fi împărțită între codul vechi și cel nou; `caen.revizia` spune revizia denumirii. Cifrele sunt pentru firmele din registrul comerțului (fără asociații, fundații și celelalte organizații) și sunt recalculate periodic din registru; `calculat_la` spune când.
Parametri
codcale, obligatoriu
Cerere
curl "https://firmabuna.ro/v1/statistici/caen/{cod}" \
-H "Authorization: Bearer fb_live_…"Răspuns 200
{
"caen": {
"cod": "…",
"denumire": "…",
"sectiune": "…",
"diviziune": "…",
"revizia": 0
},
"firme": {
"total": 0,
"active": 0,
"noi_anul_acesta": 0
},
"judete": [
{
"denumire": "…",
"slug": "…",
"cod": "…",
"firme_active": 0
}
],
"clase": [
{
"cod": "…",
"denumire": "…",
"firme_active": 0
}
],
"calculat_la": "…"
}/v1/clasamenteToate planurileClasamentul după cifra de afaceri
Firmele ordonate după cifra de afaceri din ultimul an cu bilanțuri (`an`), național sau pe un județ și / sau o activitate CAEN (diviziune, grupă sau clasă). `loc` = locul în clasamentul cerut, `loc_national` = locul în țară. Pe pagini: `total`, `trunchiat`, `limit`, `offset`. Filtrul CAEN se aplică pe codul din registru: din 2025, CAEN Rev.3 (ex. 4120 → 4100), deci pentru o activitate merită cerute ambele coduri.
Parametri
judetqueryJudețul: slug (cluj), nume cu sau fără diacritice (Cluj) ori indicativ (CJ)caenqueryCodul CAEN principal sau un prefix al lui (41, 412, 4120)limitquery Implicit: 20. Maxim 100.offsetquery Implicit: 0.
Cerere
curl "https://firmabuna.ro/v1/clasamente" \
-H "Authorization: Bearer fb_live_…"Răspuns 200
{
"an": 0,
"total": 0,
"trunchiat": true,
"firme": [
{
"loc": 0,
"loc_national": 0,
"cui": 0,
"denumire": "…",
"stare": "…",
"judet": "…",
"caen": {
"cod": "…",
"denumire": "…"
},
"cifra_afaceri": 0,
"profit": 0,
"salariati": 0,
"url": "…"
}
]
}Curs BNR
Cursul de referință, istoric din 2005, conversii
/v1/curs-bnrToate planurileCursul de referință BNR la o dată
Toate monedele sau doar cele cerute, cu variația față de publicarea anterioară. În zilele fără publicare (weekend, sărbători) se folosește ultimul curs anterior; `data_cursului` spune ziua folosită. Arhivă din 2005.
Parametri
dataqueryYYYY-MM-DD; implicit azimonedequeryCoduri separate prin virgulă
Cerere
curl "https://firmabuna.ro/v1/curs-bnr" \
-H "Authorization: Bearer fb_live_…"Răspuns 200
{
"data_ceruta": "…",
"data_cursului": "…",
"nota": "…",
"baza": "RON",
"cursuri": [
{
"moneda": "EUR",
"denumire": "Euro",
"curs": 5.0782,
"multiplicator": 0,
"anterior": 0,
"variatie": 0,
"variatie_procent": 0
}
],
"necotate": [
"…"
],
"sursa": "…"
}/v1/curs-bnr/istoricToate planurileSeria zilnică a unei monede
Cursul pe fiecare zi de publicare dintr-un interval (implicit ultimele 30 de zile, cel mult 10 ani), cu minim, maxim, medie și variația pe interval.
Parametri
monedaquery, obligatoriudequerypanaquery
Cerere
curl "https://firmabuna.ro/v1/curs-bnr/istoric?moneda=EUR" \
-H "Authorization: Bearer fb_live_…"Răspuns 200
{
"moneda": "…",
"denumire": "…",
"baza": "RON",
"de": "…",
"pana": "…",
"zile": 0,
"minim": 0,
"maxim": 0,
"medie": 0,
"variatie_procent": 0,
"serie": [
{
"data": "…",
"curs": 0
}
],
"sursa": "…"
}/v1/curs-bnr/conversieToate planurileConversie valutară la cursul BNR
Între oricare două monede cotate de BNR, inclusiv RON, la cursul unei zile (implicit azi).
Parametri
sumaquerydinquery, obligatoriuinquery, obligatoriudataquery
Cerere
curl "https://firmabuna.ro/v1/curs-bnr/conversie?din=EUR&in=RON" \
-H "Authorization: Bearer fb_live_…"Răspuns 200
{
"suma": 0,
"din": "…",
"in": "…",
"rezultat": 0,
"curs_folosit": "…",
"data_cursului": "…",
"nota": "…",
"sursa": "…"
}Webhook-uri
Notificări la schimbări, semnate HMAC-SHA256
/v1/webhooksBusiness+Abonare la evenimentele unor firme
La fiecare eveniment nou (vezi GET /v1/firme/{cui}/evenimente) al firmelor alese, trimitem un POST JSON la `url`, semnat cu secretul întors aici (o singură dată). Reîncercăm de 6 ori, în ~15 ore; după 10 livrări eșuate la rând webhook-ul se dezactivează.
Cerere
curl -X POST "https://firmabuna.ro/v1/webhooks" \
-H "Authorization: Bearer fb_live_…" \
-H "Content-Type: application/json" \
-d '{"url":"https://exemplu.ro/webhooks/firmabuna","cui":[14399840,2816464],"evenimente":["inactiv","dosar_insolventa"]}'Răspuns 201
null/v1/webhooksWebhook-urile contului
Cerere
curl "https://firmabuna.ro/v1/webhooks" \
-H "Authorization: Bearer fb_live_…"Răspuns 200
{
"webhooks": [
{
"id": "…",
"url": "…",
"cui": [
0
],
"evenimente": [
"…"
],
"activ": true,
"motiv_dezactivare": "…",
"ultima_livrare_reusita": "…",
"creat_la": "…"
}
]
}/v1/webhooks/{id}Un webhook, cu ultimele 50 de livrări
Parametri
idcale, obligatoriu
Cerere
curl "https://firmabuna.ro/v1/webhooks/wh_…" \
-H "Authorization: Bearer fb_live_…"Răspuns 200
null/v1/webhooks/{id}Schimbă adresa, firmele sau evenimentele; reactivează
Un webhook dezactivat după erori repetate se reactivează cu `activ: true`.
Parametri
idcale, obligatoriu
Cerere
curl -X PUT "https://firmabuna.ro/v1/webhooks/wh_…" \
-H "Authorization: Bearer fb_live_…" \
-H "Content-Type: application/json" \
-d '{"url":"https://exemplu.ro/webhooks/firmabuna","cui":[14399840,2816464],"evenimente":["inactiv","dosar_insolventa"]}'Răspuns 200
{
"id": "…",
"url": "…",
"cui": [
0
],
"evenimente": [
"…"
],
"activ": true,
"motiv_dezactivare": "…",
"ultima_livrare_reusita": "…",
"creat_la": "…"
}/v1/webhooks/{id}Șterge un webhook
Parametri
idcale, obligatoriu
Cerere
curl -X DELETE "https://firmabuna.ro/v1/webhooks/wh_…" \
-H "Authorization: Bearer fb_live_…"/v1/webhooks/{id}/testTrimite acum un eveniment de test
Un POST semnat cu `tip: "test"`, ca să verifici semnătura și adresa. Răspunsul spune ce a întors serverul tău.
Parametri
idcale, obligatoriu
Cerere
curl -X POST "https://firmabuna.ro/v1/webhooks/wh_…/test" \
-H "Authorization: Bearer fb_live_…"Răspuns 200
{
"livrat": true,
"cod_http": 0,
"eroare": "…",
"durata_ms": 0
}Cont
Planul și consumul
/v1/contPlanul și consumul lunii
Nu se numără în cotă.
Cerere
curl "https://firmabuna.ro/v1/cont" \
-H "Authorization: Bearer fb_live_…"Răspuns 200
{
"plan": "…",
"cereri_pe_minut": 0,
"cereri_incluse": 0,
"cereri_folosite": 0,
"peste_cota": 0,
"webhook_uri": 0
}Semnătura webhook-urilor
La fiecare eveniment trimitem un POST JSON la adresa ta (doar https, IP public), cu antetele FirmaBuna-Signature, FirmaBuna-Webhook-Id și FirmaBuna-Event-Id. Răspunde cu orice cod 2xx în 10 secunde. Altfel reîncercăm după 1 min, 5 min, 30 min, 2 h și 12 h. După 10 livrări eșuate la rând webhook-ul se dezactivează și primești un e-mail. Același eveniment poate ajunge de două ori: folosește eveniment.id ca cheie de deduplicare.
Corpul
{
"webhook_id": "wh_9-e1zYvuLdP8",
"eveniment": {
"id": 3690355,
"cui": 52656513,
"tip": "dosar_insolventa",
"eticheta": "Dosar de insolvență",
"descriere": "6062/118/2026 · Tribunalul CONSTANTA · deschiderea procedurii la cererea debitorului",
"valoare_veche": null,
"valoare_noua": { "numar": "6062/118/2026", "institutie": "TribunalulCONSTANTA", "obiect": "…" },
"sursa": "just",
"detectat_la": "2026-10-05T23:31:19.438Z"
},
"firma": { "cui": 52656513, "denumire": "PLATINUM TEHNIC S.R.L.", "url": "https://firmabuna.ro/firma/52656513-platinum-tehnic-srl" }
}Verificarea (Node.js)
import { createHmac, timingSafeEqual } from 'node:crypto';
// body = corpul brut al cererii (string), exact cum a sosit
function verifica(secret, body, antet) {
const p = Object.fromEntries(antet.split(',').map((x) => x.split('=')));
if (Math.abs(Date.now() / 1000 - Number(p.t)) > 300) return false; // mai vechi de 5 minute
const asteptat = createHmac('sha256', secret).update(`${p.t}.${body}`).digest();
const primit = Buffer.from(p.v1, 'hex');
return primit.length === asteptat.length && timingSafeEqual(primit, asteptat);
}
// verifica(process.env.FIRMABUNA_WEBHOOK_SECRET, body, req.headers['firmabuna-signature'])