ANAF compliance · e-VAT · Pre-filled return

You catch the differences before ANAF notifies you.

ANAF sends you a pre-filled VAT return (D300 format), built from e-Invoice, e-Transport and SAF-T. When your return differs from the pre-filled one, you get a compliance notice and have 20 days to respond. We reconcile the two returns and show you exactly where they differ — before the notice.

We do not generate the pre-filled return and we do not file it — ANAF produces it, you respond through SPV. We do the useful part: you put the two returns side by side and get the differences line by line, exactly what the compliance notice would flag. Processing happens in memory; the content never touches a disk of ours.

Two returns in, the differences outPOST · in memory · zero retention
POST /etva/v1/reconciliere
// JSON: { precompletat, propriu }

// → { are_diferente: true, nr_diferente: 2,
//     total_precompletat: 48210.00, total_propriu: 47960.00,
//     diferente: [ { camp, precompletat, propriu, diferenta } ] }

POST /etva/v1/parse          // the pre-filled return, as JSON

{
  "are_diferente": true, "nr_diferente": 2,
  "total_precompletat": 48210.00, "total_propriu": 47960.00,
  "diferente": [
    { "camp": "tva_colectata", "precompletat": 61200.00, "propriu": 60950.00, "diferenta": 250.00 }
  ]
}
What you get One POST endpoint, two returns, a list of differences. No SPV account held by us, no file written to disk — only the reconciliation. The response to the compliance notice you file yourself, through SPV, with your own credentials.
System
RO e-VAT
Legal basis
OPANAF 6234/2024
Return format
D300
Operations
reconcile · parse
Notice deadline
20 days
Retention
none
01 The problem

The compliance notice comes with a 20-day clock.

ANAF compares your VAT return against the one pre-filled from the data it already holds. When they do not match, you get a compliance notice — and a short deadline to explain each difference.

A

The pre-filled return

ANAF builds you a pre-filled VAT return (D300) from what you already report: e-Invoice, e-Transport and SAF-T. You do not generate it — you receive it, already drawn up, from the tax authority’s data.

B

Your return

In parallel, you file your own VAT return, drawn up by your accounting team or your ERP. The two should say the same thing — but they rarely match to the decimal.

C

The compliance notice

When your return differs significantly from the pre-filled one, ANAF issues a compliance notice (OPANAF 6234/2024) listing exactly the lines that do not match.

D

The 20-day deadline

From the notice you have 20 days to respond: either you correct the return or you explain the differences. The clock runs whether or not you have found where the problem is.

E

The difference hidden in the lines

A return has dozens of lines — supplies, acquisitions, output VAT, input VAT, adjustments. The difference may be on a single line, and finding it by hand, under deadline pressure, is slow and error-prone.

F

Compliance risk

A notice ignored or handled badly raises the risk of an inspection and your tax risk indicator. The best answer is to have no surprise differences — to see them before ANAF notifies you.

None of this sets you apartYour customer does not pay you because you can compare two VAT returns line by line against a 20-day deadline. They pay you for your product. The reconciliation is pure cost — written once and maintained indefinitely — and it is exactly what we move onto our side.
02 What it does

Reconcile and read. No generation, no filing.

Each is an independent POST call. We do not build the pre-filled return and we do not file it — we read it and compare it with yours. You use the one you need.

POST /reconciliere

Reconcile

You send the pre-filled return from ANAF and your own, and get the differences line by line: which field, the pre-filled value, your value and the difference. Exactly what the compliance notice would flag — but before it arrives.

POST /parse

Read

The pre-filled return (XML) becomes clean JSON: the D300 lines with their values, ready to read from code. You understand it without touching the XML and without writing a parser of your own.

03 Zero retention

Your VAT data goes nowhere. Not to us, not to ANAF.

This is the answer to “why would I send my VAT returns to a third party”. Because, in practice, you are not sending them anywhere — we reconcile and forget.

01

Processed in memory

The two returns are never written to disk. They arrive in the request, are compared in memory and are gone when the response leaves. There is no return of yours at our end.

02

Local comparison

The reconciliation runs on our side, on the server holding your response. We do not send the returns to ANAF to find the differences — the comparison is here, the result is local.

03

Logs without content

What we keep is a result code and a duration — that is all. The VAT number, the VAT amounts, the return lines go into no log, neither ours nor an observability service’s.

04

The differences only

The response returns only the differences and the totals you need in order to correct. Nothing is kept once the response leaves — neither the pre-filled return nor yours.

Why it matters to youA VAT return shows turnover, margins and the structure of supplies and acquisitions. A service that stores it becomes a target and a liability. We chose the version where there is nothing to steal: a stateless tool that reconciles and reads and does not remember.
04 The reconciliation

We do not just say “they do not match”. We say exactly on which line.

We put the pre-filled return and yours side by side and give you the differences line by line — the same ones the compliance notice would list, but before you receive it.

A difference on every field

For every line that does not match you get the field involved, the value ANAF pre-filled, your value and the difference between them. The difference between knowing there is a problem and knowing exactly where it is.

Verdict and totals

The response tells you whether there are differences, how many, plus the pre-filled total and your total. One glance and you know whether your return is aligned.

Before the notice

You run the reconciliation when it suits you — at month end, before filing — and correct the differences in time. The compliance notice becomes a non-event, not a 20-day scramble.

No filing in SPV

The reconciliation is entirely local: by default, nothing leaves us for ANAF. The response to the compliance notice you file yourself through SPV, with your own credentials — we give you the differences before that step.

05 What we cover

The D300 lines, compared one by one.

Not just the VAT payable total. Every relevant line of the return, put side by side and counted.

Taxable supplies Exempt supplies Intra-community supplies Purchases of goods Purchases of services Intra-community acquisitions Reverse charge Output VAT Input VAT VAT adjustments Pro rata VAT payable VAT refundable Previous balance

We reconcile the lines of the pre-filled D300 against yours, with the difference calculated on each. If you hit a line we do not handle correctly, write to us — real cases take priority in what we build.

06 Integration

Two returns in. The differences out.

You send the pre-filled return and yours in one JSON and get the list of differences line by line. No mandatory SDK — the HTTP client you already have.

POST/api/anaf/v1/etva/reconciliereapplication/json
# reconcile: the pre-filled return from ANAF + yours → the differences line by line
curl "https://oneapi.ro/api/anaf/v1/etva/reconciliere" \
  -H "Authorization: Bearer $ONEAPI_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "precompletat": "<Decont…/>", "propriu": "<Decont…/>" }'

# → 200 OK
{
  "are_diferente":       true,
  "nr_diferente":        2,
  "total_precompletat":  48210.00,
  "total_propriu":       47960.00,
  "diferente": [
    { "camp": "tva_colectata",  "precompletat": 61200.00, "propriu": 60950.00, "diferenta": 250.00 },
    { "camp": "tva_deductibila", "precompletat": 12990.00, "propriu": 12990.00, "diferenta": 0.00 }
  ]
}
When differences appear

The field, the values and the difference

A reconciliation does not just say “they do not match”. It tells you whether there are differences, how many, the totals, plus each field with the pre-filled value, your value and the difference. Enough to fix it first time instead of hunting through the return by hand.

# returns aligned → no difference
{ "are_diferente": false,
  "nr_diferente":       0,
  "total_precompletat": 47960.00,
  "total_propriu":      47960.00,
  "diferente": [] }
07 Questions

Before the first notice arrives.

The rest, in the frequently asked questions and in the documentation.

No. The pre-filled return is produced by ANAF, from your e-Invoice, e-Transport and SAF-T data. We neither build it nor file it. What we do is the reconciliation: you put the pre-filled return from ANAF and your own side by side and get the differences line by line, plus the parse of the pre-filled one.

See the differences before ANAF sends them to you. One token, two returns, the differences back. Zero retention, from the first call.
Generate a token All modules