oneapi
Autentificare
Business v1 / Firme

Entitate după CUI

Tot ce ştim despre un cod fiscal, fie el al unei societăţi comerciale sau nu: identitatea oficială din datele Ministerului Finanţelor, profilul ONRC când e firmă, starea fiscală ANAF, situaţiile financiare, localizarea rezolvată, registrele în care apare şi achiziţiile publice în ambele roluri.

GET
https://oneapi.ro/api/business/v1/entitati/{cui}

Parametri de cale

NumeTipDescriereExemplu
cuiobligatoriu string Codul de identificare fiscală, fără prefixul RO.

Parametri de interogare

Ruta nu acceptă parametri de interogare.

Cum se comportă

  • ⚠️ Nu e acelaşi lucru cu /firme/{cui}. Aceea întreabă Registrul Comerţului, care conţine doar societăţi comerciale. Sunt 611.818 entităţi cu cod fiscal care nu sunt acolo — asociaţii, spitale, parohii, fundaţii, şcoli, primării — pentru care /firme/{cui} răspunde 404, deşi le avem denumirea, adresa şi registrele. Ruta asta răspunde la altă întrebare: ce ştim despre codul fiscal ăsta, din toate sursele deodată.
  • Pentru o societate comercială, cele două se suprapun aproape complet: profilul ONRC apare în blocul firma, iar e_firma e true. Firmele sunt un caz particular, nu o excepţie.
  • Fiecare bloc lipseşte (null) când sursa lui n-are nimic despre entitate, iar surse spune exact care au răspuns. Nu punem un câmp „tip entitate": o asociaţie şi o fundaţie arată identic în date, iar „instituţie publică" nu e scris nicăieri — în loc de verdict, spunem ce ştim şi de unde.
  • 404 doar când nu ştim absolut nimic. Se verifică opt surse: plătitori, ONRC, registre, stare fiscală, situaţii financiare, achiziţii (şi ca furnizor, şi ca autoritate), fonduri europene, LEI. O entitate cunoscută doar din bilanţuri sau doar dintr-un contract public primeşte răspuns, nu 404.
  • ⚠️ Conţine şi persoane fizice autorizate (identitate.tip_contrib = "PF"), cu numele şi adresa lor, aşa cum le publică Ministerul Finanţelor.
  • Contactul şi vectorul fiscal vin de aici, nu de la /firme. Pentru o entitate care nu e în Registrul Comerţului, identitate.contact şi identitate.vector_fiscal sunt singurul loc unde se văd: /firme/{cui}/contact citeşte evidenţa ANAF, care are zero rânduri pentru ele, iar /firme/{cui}/vector-fiscal cere întâi existenţa în registru. Măsurat pe cele 611.818: 249.288 de telefoane şi 13.529 de faxuri citibile ca număr, 155.979 de vectori fiscali negoli.

La ce folosește

  • Verificarea unui partener care nu e societate comercială: asociaţie, fundaţie, unitate de cult, şcoală, spital.
  • Rezolvarea unui cod fiscal găsit într-un contract sau într-o factură, fără să ştii dinainte ce fel de entitate e.
  • Obţinerea localizării (judeţ, UAT, localitate) pentru entităţi care nu au sediu în Registrul Comerţului.

Structura răspunsului

Toate câmpurile de mai jos sunt în data.

CâmpTipDescriere
cui integer Codul fiscal cerut.
identitate object Identitatea oficială din datele Ministerului Finanţelor; null dacă entitatea nu e în evidenţa plătitorilor.
identitate.denumire string Denumirea, aşa cum o publică sursa.
identitate.tip_contrib string Tipul contribuabilului: PJ (persoană juridică) sau PF (persoană fizică autorizată).
identitate.tip_unitate string Sediu central, filială, punct de lucru, reprezentanţă…
identitate.adresa object Adresa, câmp cu câmp; cheile goale lipsesc.
identitate.adresa.judet string Judeţul la care se referă valoarea.
identitate.adresa.localitate string
identitate.adresa.strada string
identitate.adresa.numar string Numărul de elemente numărate.
identitate.adresa.cod_postal string
identitate.stare string Starea înregistrării fiscale, cum o scrie ministerul (ex. INREGISTRAT).
identitate.data_stare string Data de la care starea e cea de mai sus.
identitate.reg_com null Numărul de registru al comerţului, dacă entitatea are unul; cele mai multe entităţi non-comerciale n-au.
identitate.act_autorizare string Actul care a autorizat entitatea — hotărâre judecătorească, autorizaţie, decret. Pentru asociaţii şi fundaţii e adesea singurul „act de naştere" pe care-l avem.
identitate.data_inregistrare string Data înregistrării fiscale.
identitate.data_radiere null Data radierii fiscale; null cât timp entitatea e în fiinţă.
identitate.cui_parinte null Codul fiscal al entităţii-mamă, pentru o unitate subordonată.
identitate.tva boolean Înregistrată în scopuri de TVA, conform instantaneului MF.
identitate.contact object Telefonul şi faxul declarate, în formă canonică; null când niciuna din valori nu se poate citi ca număr. ⚠️ Pentru entităţile din afara Registrului Comerţului ăsta e SINGURUL contact pe care-l avem: /firme/{cui}/contact îl ia din evidenţa ANAF, care n-are nimic despre ele.
identitate.contact.telefon string
identitate.contact.fax null
identitate.vector_fiscal array Obligaţiile declarative active (ex. IMP100, CONT412). Lista goală înseamnă „n-are niciuna" — null înseamnă că n-avem vectorul, iar cele două nu se confundă.
identitate.an integer Anul ediţiei instantaneului MF din care vine identitatea.
e_firma boolean true dacă CUI-ul e în Registrul Comerţului.
firma null Profilul ONRC, dacă e firmă; altfel null.
fiscal null Starea fiscală ANAF (TVA, inactivitate, radiere, e-Factura); null dacă lipseşte.
financiar_sumar array Ultimii 3 ani de situaţii financiare; listă goală dacă n-are.
loc object | null Localizarea legată la Locations (judeţ, UAT, localitate).
registre null Registrele în care apare entitatea, din cele 46 ale umbrelei (cult, ONG, sancţiuni, ANSVSA…).
achizitii null Achiziţiile publice în care a fost FURNIZOR (a câştigat contracte).
achizitii_autoritate null Achiziţiile în care a fost AUTORITATE (a atribuit contracte), cu top furnizori.
fonduri_nr integer Câte proiecte cu fonduri europene are.
lei null Identificatorul LEI (GLEIF), dacă are.
surse array Sursele care au răspuns efectiv: mf, onrc, anaf, registre, mf_financiar, achizitii, achizitii_autoritate, fonduri, lei.
loc.din string De unde vine localizarea: registre (adresa rezolvată dintr-un registru) sau sediu_firma.

Exemple de răspuns

GEThttps://oneapi.ro/api/business/v1/entitati/1196879
{
    "data": {
        "cui": 1196879,
        "identitate": {
            "denumire": "PAROHIA UNITARIANA DIMBAU",
            "tip_contrib": "PJ",
            "tip_unitate": "Sediu central",
            "adresa": {
                "judet": "MUREŞ",
                "localitate": "Dâmbău",
                "strada": "Mică",
                "numar": "7",
                "cod_postal": "547019"
            },
            "stare": "INREGISTRAT",
            "data_stare": "1992-11-29",
            "reg_com": null,
            "act_autorizare": "DECRET 177/1948",
            "data_inregistrare": "2022-07-08",
            "data_radiere": null,
            "cui_parinte": null,
            "tva": false,
            "contact": {
                "telefon": "0740413278",
                "fax": null
            },
            "vector_fiscal": [],
            "an": 2026
        },
        "e_firma": false,
        "firma": null,
        "fiscal": null,
        "financiar_sumar": [],
        "loc": null,
        "registre": null,
        "achizitii": null,
        "achizitii_autoritate": null,
        "fonduri_nr": 0,
        "lei": null,
        "surse": [
            "mf"
        ]
    }
}

Coduri de eroare

CodSlugCând apare
401neautentificatToken lipsă, invalid, expirat sau revocat.
403feature_indisponibilPlanul curent nu include funcţia de care ţine ruta.
404negasitNu avem NICIO informaţie despre CUI-ul cerut. „Există, dar n-are profil în Registrul Comerţului" NU e 404 — e 200, cu blocurile care lipsesc pe null.
429cota_depasitaCota 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": "negasit",
        "mesaj": "Nu avem NICIO informaţie despre CUI-ul cerut. „Există, dar n-are profil în Registrul Comerţului\" NU e 404 — e 200, cu blocurile care lipsesc pe null."
    }
}