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.
Getting started
- 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.
- Within found[], read identity from date_generale, VAT from inregistrare_scop_Tva and inactivity from stare_inactiv; check notFound separately.
- For joins, extract found[].date_generale.cui into a separate column; the nested response is not already a flat table.
Access and checks
- ANAF v9 — documentation and POST request ↗ · JSON
Sample inspected on 2026-10-22
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.
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.jsonimport 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 / Column | Type | Description |
|---|---|---|
found[].date_generale.cui | integer | Tax code |
found[].date_generale.data | date (YYYY-MM-DD) | Reference date |
found[].date_generale.denumire | text | Registered name |
found[].date_generale.adresa | text | Fiscal address |
found[].inregistrare_scop_Tva.scpTVA | boolean | VAT registration |
found[].stare_inactiv.statusInactivi | boolean | Fiscal inactivity |
found[].inregistrare_SplitTVA.statusSplitTVA | boolean | Split 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.