Open knowledge
Romania
Public data / API

Company fiscal registry — ANAF API

Public web service to query taxpayer fiscal status by unique identification code (CUI): VAT registration, fiscal inactivity, addresses and headquarters.

Before you use this resource

Documented v9 accepts POST requests with at most 100 CUI numbers and one request per second. Responses contain found and notFound arrays with nested objects. This does not establish financial statements or ownership.

Published by
National Agency for Fiscal Administration
Source
Public institution
Collection
Public data
Resource type
API
Coverage
Romania
Documented formats
JSON
Licence / terms
Rights need checking
API access
Documented API
Record review date
2026-10-22
Last resource update
Unknown
Technical data audit
Not performed
Documentation
Source reviewed

Documentation

Official v9 documentation and one JSON POST response for one CUI were inspected on 22 October 2026. This does not establish v8 compatibility or constitute a complete service audit. The dictionary example uses fictional values.

The cited page documents this record. Check the original source for terms and versions before reuse.

static.anaf.ro ↗

Getting started

  1. Send a POST request to https://webservicesp.anaf.ro/api/PlatitorTvaRest/v9/tva with the cui/data object list; observe the 100-item and one-request-per-second limits.
  2. Within found[], read identity from date_generale, VAT from inregistrare_scop_Tva and inactivity from stare_inactiv; check notFound separately.
  3. For joins, extract found[].date_generale.cui into a separate column; the nested response is not already a flat table.

Access and checks

Request examples and access requirements

ANAF v9: POST, at most 100 CUI numbers per request and one request per second. One JSON response was inspected on 22 October 2026. The four code variants have not all been executed in their target environments.

Documentation used ↗

curl --fail-with-body --silent --show-error --max-time 30 'https://webservicesp.anaf.ro/api/PlatitorTvaRest/v9/tva' \
  -H 'Content-Type: application/json' \
  --data '[{"cui":1590120,"data":"2026-10-21"}]' > anaf.json
jq '{found, notFound}' anaf.json
import json
import urllib.request

payload = [{"cui": 1590120, "data": "2026-10-21"}]
request = urllib.request.Request(
    "https://webservicesp.anaf.ro/api/PlatitorTvaRest/v9/tva",
    data=json.dumps(payload).encode("utf-8"),
    headers={"Content-Type": "application/json"}, method="POST"
)
with urllib.request.urlopen(request, timeout=30) as response:
    data = json.load(response)
print(json.dumps({"found": data["found"], "notFound": data["notFound"]}, indent=2))
library(httr2)

response <- request("https://webservicesp.anaf.ro/api/PlatitorTvaRest/v9/tva") |>
  req_body_json(list(list(cui = 1590120, data = "2026-10-21"))) |>
  req_timeout(30) |>
  req_perform()
data <- resp_body_json(response)
str(data$found)
-- First run the cURL example to save anaf.json.
-- found[] contains nested objects; this is an explicit projection.
SELECT item.date_generale.cui AS cui,
       item.date_generale.denumire AS denumire,
       item.inregistrare_scop_Tva.scpTVA AS scpTVA,
       item.stare_inactiv.statusInactivi AS statusInactivi
FROM read_json_auto('anaf.json'), UNNEST(found) AS expanded(item);

Data dictionary and field schema

ANAF v9 — selected JSON paths in found[]; notFound contains unmatched tax codes

Field / ColumnTypeDescription
found[].date_generale.cuiintegerTax code
found[].date_generale.datadate (YYYY-MM-DD)Reference date
found[].date_generale.denumiretextRegistered name
found[].date_generale.adresatextFiscal address
found[].inregistrare_scop_Tva.scpTVAbooleanVAT registration
found[].stare_inactiv.statusInactivibooleanFiscal inactivity
found[].inregistrare_SplitTVA.statusSplitTVAbooleanSplit VAT registration
Fictional example — selected JSON structure
{
  "found": [
    {
      "date_generale": {
        "cui": 1234,
        "data": "2026-10-21",
        "denumire": "COMPANIE FICTIVĂ — EXEMPLU",
        "adresa": "ADRESĂ FICTIVĂ"
      },
      "inregistrare_scop_Tva": {
        "scpTVA": true
      },
      "stare_inactiv": {
        "statusInactivi": false
      },
      "inregistrare_SplitTVA": {
        "statusSplitTVA": false
      }
    }
  ],
  "notFound": []
}

Continue your research

Editorial suggestions for discovery. These links do not establish technical integration or licence compatibility.