API Verificare SAF-T

Integrați verificarea automată SAF-T direct în softul dvs. de contabilitate. Trimiteți un fișier XML și primiți în secunde rezultatul analizei + link către raportul PDF de audit.

Cerință: Cont activ pe AnalizaFiscala.ro cu abonament Complet (lunar sau anual). Puteți crea un cont și activa trial-ul gratuit de 15 zile aici.

Autentificare

API-ul se autentifică prin adresa de email a contului dvs., transmisă în headerul X-Email. Nu este necesară cheie API — serverul verifică automat dacă email-ul are un abonament activ.

HeaderValoareObligatoriu
X-EmailAdresa de email a contuluiDa
Content-Typeapplication/xml sau text/xmlDa

Verificare SAF-T

POST https://analizafiscala.ro/api/public/verify-saft

Headers

X-Email: adresa@email.ro
Content-Type: application/xml

Body

Conținutul complet al fișierului SAF-T XML (raw body, nu multipart/form-data).

Date firmă (ANAF + ONRC)

Returnează datele publice combinate ale unei firme românești — status fiscal de la ANAF și date de la Registrul Comerțului (ONRC) — printr-o singură interogare după CUI. Ideal pentru verificarea partenerilor direct din softul dvs.

Disponibil pe orice plan, inclusiv gratuit. Necesită doar o cheie API validă (o generați din Contul meu → Integrare API). Din considerente de protecție a datelor personale, nu se returnează data și locul nașterii administratorilor.
GET https://analizafiscala.ro/api/v1/firma/{cui}

Headers

X-Api-Key: cheia_dvs_api

Parametru

ParametruDescriere
cui (în cale)CUI-ul firmei, cu sau fără prefixul RO (ex. 9378841 sau RO9378841)

200 — Date firmă

Răspunsul conține trei blocuri: anaf (status fiscal), onrc (Registrul Comerțului) și financiar (indicatori din bilanțurile publice, când există).

{
  "cui": "9378841",
  "interogat_la": "2026-07-14",
  "anaf": {
    "denumire": "MEDIALOGIC SRL",
    "adresa": "MUNICIPIUL BUCUREŞTI, SECTOR 4, ...",
    "nr_reg_com": "J1997002988401",
    "cod_caen": "5829",
    "forma_juridica": "SOCIETATE CU RĂSPUNDERE LIMITATĂ",
    "platitor_tva": true,
    "tva": "DA — din 2019-09-01",
    "tva_la_incasare": "NU — Niciodată",
    "split_tva": false,
    "inactiv": false,
    "stare_inactivitate": "NU",
    "ro_e_factura": false
  },
  "onrc": {
    "stare_oficiala": "funcţiune",
    "activa": true,
    "stare_negativa": false,
    "nr_inmatriculare": "J1997002988401",
    "data_inmatriculare": "18/04/1997",
    "adresa": "Str. ..., Sector 1, Bucureşti",
    "reprezentanti": [
      { "nume": "ROŞCA LUCIAN", "calitate": "administrator", "domiciliu": "..." }
    ],
    "caen_autorizat": [ { "cod": "5829", "denumire": "Activităţi de editare ..." } ],
    "sucursale": [],
    "mutari_sediu_intre_judete": 0
  },
  "financiar": {
    "pe_ani": [ { "an": 2024, "cifraAfaceri": ..., "profitNet": ... } ],
    "risc": { "scor": ... },
    "altman_z": { "scor": ... }
  }
}

Blocurile anaf, onrc sau financiar pot fi null dacă sursa respectivă nu are date pentru firma cerută (ex. firmă nou-înființată fără bilanț depus).

404 — Firmă negăsită

{ "error": "Firma cu CUI 12345678 nu a fost găsită la ANAF sau ONRC." }

429 — Prea multe interogări

Limita este de o interogare la 2 secunde per cheie.

{ "error": "Prea multe interogări. Maxim o interogare la 2 secunde." }

Exemplu cURL

curl -H "X-Api-Key: cheia_dvs_api" \
  https://analizafiscala.ro/api/v1/firma/9378841

Răspunsuri posibile

200 — Verificare completă

Fișierul a fost procesat cu succes. Primiți sumarul + link-uri.

{
  "status": "ok",
  "importId": 48,
  "links": {
    "rezultat": "https://analizafiscala.ro/import/48/verificari",
    "raportAudit": "https://analizafiscala.ro/api/public/verify-saft/48/pdf?token=..."
  },
  "sumar": {
    "companie": "EXEMPLU SRL",
    "cui": "RO12345678",
    "perioada": "1/2025 - 3/2025",
    "total": 120,
    "erori": 5,
    "avertismente": 12,
    "ok": 103
  }
}
CâmpTipDescriere
statusstringÎntotdeauna "ok"
importIdnumberID-ul importului creat — folosiți-l pentru referință
links.rezultatstringURL direct către pagina de verificări din aplicație (necesită autentificare)
links.raportAuditstringURL semnat pentru descărcarea PDF-ului de audit (valid 24h, fără autentificare)
sumar.totalnumberNumărul total de verificări efectuate
sumar.erorinumberVerificări cu status „eroare"
sumar.avertismentenumberVerificări cu status „avertisment"
sumar.oknumberVerificări trecute cu succes

202 — Import în lucru

Există deja un import în curs de procesare. Așteptați finalizarea.

{
  "status": "in_lucru",
  "importId": 47
}

403 — Abonament expirat

Contul nu are un abonament Complet activ.

{
  "status": "abonament_expirat"
}

404 — Cont inexistent

Adresa de email nu corespunde niciunui cont activ.

{
  "status": "cont_inexistent"
}

400 — Eroare validare

Body XML lipsă sau header X-Email absent.

{
  "status": "eroare",
  "message": "Headerul X-Email este obligatoriu."
}
GET https://analizafiscala.ro/api/public/verify-saft/{id}/pdf?token=...

Link-ul din links.raportAudit este semnat criptografic și nu necesită autentificare. Este valid 24 de ore de la generare. Returnează un PDF descărcabil.

Atenție: Link-ul PDF este temporar (24h). Dacă aveți nevoie de acces permanent, salvați PDF-ul local sau accesați rezultatele prin interfața web cu contul dvs.

Exemple complete

cURL

# Trimitere fișier SAF-T pentru verificare
curl -X POST https://analizafiscala.ro/api/public/verify-saft \
  -H "X-Email: contabil@firma.ro" \
  -H "Content-Type: application/xml" \
  --data-binary @fisier-saft.xml

cURL — descărcare PDF

# Descărcați raportul PDF (link din răspunsul anterior)
curl -o raport-audit.pdf \
  "https://analizafiscala.ro/api/public/verify-saft/48/pdf?token=..."

PowerShell

# Citire fișier și trimitere
$xml = Get-Content -Path "SAF-T_2025.xml" -Raw -Encoding UTF8
$headers = @{
    "X-Email"      = "contabil@firma.ro"
    "Content-Type" = "application/xml"
}
$body = [System.Text.Encoding]::UTF8.GetBytes($xml)
$result = Invoke-RestMethod -Uri "https://analizafiscala.ro/api/public/verify-saft" `
    -Method POST -Headers $headers -Body $body
$result | ConvertTo-Json -Depth 5

# Descărcați PDF-ul
Invoke-WebRequest -Uri $result.links.raportAudit -OutFile "raport-audit.pdf"

Python

# pip install requests
import requests

with open("SAF-T_2025.xml", "rb") as f:
    xml_data = f.read()

response = requests.post(
    "https://analizafiscala.ro/api/public/verify-saft",
    headers={
        "X-Email": "contabil@firma.ro",
        "Content-Type": "application/xml",
    },
    data=xml_data,
)

result = response.json()
print(result)

# Descărcați PDF-ul
if result["status"] == "ok":
    pdf = requests.get(result["links"]["raportAudit"])
    with open("raport-audit.pdf", "wb") as f:
        f.write(pdf.content)
    print("PDF salvat!")

Node.js

// Node.js 18+ (fetch nativ)
const fs = require("fs");

const xml = fs.readFileSync("SAF-T_2025.xml");

const res = await fetch("https://analizafiscala.ro/api/public/verify-saft", {
  method: "POST",
  headers: {
    "X-Email": "contabil@firma.ro",
    "Content-Type": "application/xml",
  },
  body: xml,
});

const result = await res.json();
console.log(result);

// Descărcați PDF-ul
if (result.status === "ok") {
  const pdf = await fetch(result.links.raportAudit);
  const buf = Buffer.from(await pdf.arrayBuffer());
  fs.writeFileSync("raport-audit.pdf", buf);
  console.log("PDF salvat!");
}

C# (.NET)

using var client = new HttpClient();
var xml = File.ReadAllBytes("SAF-T_2025.xml");
var request = new HttpRequestMessage(HttpMethod.Post,
    "https://analizafiscala.ro/api/public/verify-saft");
request.Headers.Add("X-Email", "contabil@firma.ro");
request.Content = new ByteArrayContent(xml);
request.Content.Headers.ContentType =
    new System.Net.Http.Headers.MediaTypeHeaderValue("application/xml");

var response = await client.SendAsync(request);
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);

API cu cheie (avansat)

Pentru integrări avansate, puteți folosi și API-ul cu cheie API (disponibil în contul dvs., secțiunea Integrare API). Acesta oferă acces la toate endpointurile:

EndpointDescriere
GET /api/v1/importsLista importurilor SAF-T
GET /api/v1/imports/:idDetalii import
GET /api/v1/imports/:id/verificariRezultatele verificărilor
GET /api/v1/imports/:id/balantaBalanța de verificare
POST /api/v1/upload/saftUpload SAF-T (multipart)
POST /api/v1/upload/d394Upload D394/D390
GET /api/v1/firmeLista firmelor gestionate
GET /api/v1/firma/:cuiDate publice firmă (ANAF + ONRC) — orice plan, inclusiv free

Autentificare cu X-Api-Key: cheia_dvs. Cheia o găsiți în Contul meu → API.

Limite și restricții

ParametruValoare
Rate limit (verify-saft)10 request-uri / minut per IP
Rate limit (API v1 cu cheie)60 request-uri / minut per cheie
Rate limit (GET /firma/:cui)1 request / 2 secunde per cheie
Dimensiune maximă fișier100 MB
Validitate link PDF24 ore
Format acceptatXML (SAF-T conform D.406)
Abonament necesarComplet (lunar sau anual)
Întrebări? Contactați-ne la contact@analizafiscala.ro sau deschideți un ticket din aplicație.