ANAF: Romania VAT register
anafANAF runs the Romanian register of taxable persons registered for VAT, and it is one of the few national VAT registers in the EU published as a per-number web service rather than a bulk download. That makes it the simplest register in the fallback path: Avatcado asks it about one number and gets an answer back while the request is still open.
ANAF is run by the Romanian National Agency for Fiscal Administration, and its data is published at webservicesp.anaf.ro. It is one of the 10 national registers Avatcado consults on the Pro and Business plans when VIES cannot answer for Romania, and it never replaces a VIES answer that does arrive. The national registry fallback guide covers the full precedence order.
What ANAF publishes
- Whether a Romanian fiscal code (CUI) was registered for VAT on a given date, with the date supplied in the request rather than fixed by the register
- The registered company name and the registered address, which are the values a fallback answer carries as company.name and company.address
- An explicit not-found list, so a code the register has never issued comes back as its own outcome instead of as a lookup failure
- The related Romanian VAT registers keyed off the same code, which Avatcado does not read: only the VAT registration flag is used
How Avatcado uses it
A Romanian fallback posts the numeric part of the VAT number and the current date to the PlatitorTvaRest v9 endpoint and reads one field, the VAT registration flag on the returned record. Only a true there produces an answer, served with source anaf and the name and address from the same record. A record that comes back without the flag, and a code the register does not know, both fall through to the cache instead of becoming valid false.
ANAF answers per number, so Avatcado calls it while your request is open, with a 10 second timeout. There is no snapshot to go stale (queried live on the request), so a fallback answer reflects the register as it stood at that moment. If the register is slow or down as well, the request falls through to the cache.
The rule that matters most is that a register can only ever confirm a registration. A miss, whether ANAF says not registered or simply has no record, is never turned into valid: false: the request falls through to the stored result instead. An answer that does come from here carries source: "anaf" and source_status: "fallback", and no consultation_number field at all, because only VIES issues those.
What a ANAF answer contains
| Field | ANAF |
|---|---|
| Company name | Yes |
| Company address | Yes |
| Consultation number | No, VIES only |
Data quirks worth knowing
- Zero-padded or non-numeric CUI shapes are not looked up (^[1-9]\d{1,9}$)
- ANAF limits the service to one request per second, which comfortably covers outage traffic for a single country but rules out using it for bulk checks
- The lookup is date-scoped: Avatcado always asks about today, so the answer describes the registration as it stands now, not as it stood on the date of an old invoice
- The service is keyed by the fiscal code, which for a Romanian company is the same figure as the VAT number without the RO prefix
Try it
Validating a Romania VAT number takes the same call whichever source answers it. This one uses RO1590082, a real registered number:
curl "https://api.avatcado.com/v1/validate?vat_number=RO1590082" \
-H "Authorization: Bearer avat_live_your_api_key"import Avatcado from "@avatcado/node";
const avatcado = new Avatcado("avat_live_your_api_key");
const { data, error } = await avatcado.vat.validate({
vatNumber: "RO1590082",
});
if (data?.meta.source === "anaf") {
// VIES was unavailable; ANAF confirmed the registration.
console.log(data.meta.source_status); // "fallback"
}On an ordinary day that answer comes from VIES, with source_status: "live". Only when VIES cannot answer for Romania does ANAF step in, and then meta.source_status reads "fallback" and meta.source reads "anaf". The register fallback is included in the Pro and Business plans; the free tier covers 500 validations per month from VIES and the cache. Get an API key or read the API documentation.
Frequently asked questions
What is the ANAF PlatitorTvaRest web service?
It is the public web service ANAF, the Romanian tax authority, publishes so that anyone can check whether a Romanian fiscal code is registered for VAT. A request carries the code and a date, and the response says whether that code was registered for VAT on that date, along with the registered name and address held for it. There is no account or key involved, and ANAF asks callers to keep to one request per second. Avatcado does not use it as its normal route for Romanian numbers: VIES answers those. It is called only when VIES cannot answer for Romania, so an outage in one member state does not become a failed validation on your side.
Can an ANAF answer replace a VIES consultation number?
No. A consultation number is issued by VIES itself when you validate with your own VAT number attached, and it is the artifact tax authorities recognise as proof that a check happened. A national register cannot issue one, so a fallback answer comes back with no consultation_number field at all, and this is true of every register, not just ANAF. The practical pattern is to treat the fallback answer as good enough to keep an order or a signup moving, and to re-validate the same number through VIES once the member state is answering again. That second check is the one that produces the consultation number your records need for a zero-rated intra-Community supply. For the same reason a request that carries requester_vat_number never consults ANAF or any other register by default: it is always a fresh VIES check, fails with a refunded 503 if VIES is still down, and only reaches a register when you pass fallback=true.
Keep reading
Sources
- ANAF web services for the VAT payer register Romanian National Agency for Fiscal Administration (ANAF), accessed September 4, 2026
- ANAF (national tax administration) Romanian National Agency for Fiscal Administration (ANAF), accessed September 4, 2026