Alerte ANAF

Invoicing over an API, filed straight into e-Factura

The shop posts the order in a single HTTP call. The invoice is issued from the company's own series, reaches the buyer as a PDF by email and is filed into Romania's RO e-Factura — with the CIUS-RO rules checked before sending, not after a rejection.

alerteanaf.ro
Alerte ANAF — alerteanaf.ro
Built for

Online shops and companies that issue invoices from their own systems

Technology
  • Laravel
  • Inertia.js
  • React
  • Tailwind CSS
  • Vite
  • RO e-Factura
  • Cloudflare

About the product

An invoice for RO e-Factura — Romania's national e-invoicing system — is not a PDF: it is an electronic document in UBL 2.1 / RO-CIUS form that has to pass the tax authority's rules before it is accepted. Alerte ANAF moves all of that behind one HTTP call: "your site sends the order", and the application allocates the number, builds the electronic document, generates the PDF, emails it to the buyer and files the invoice with e-Factura. Nothing is installed on the shop's server, and nothing about the ANAF format is left to remember.

Setup is four steps and happens once. You connect the Virtual Private Space account with your digital certificate, and ANAF returns the tax IDs the certificate holds rights for — the companies appear on their own, filled in from the public register. You then generate one token per site or shop, each with its own invoice series and its own settings, and from there every order is a single POST. The API is asynchronous: the call answers 202 with an identifier, and numbering, the XML, the PDF and the filing happen in the background, with the state visible in the account or delivered by webhook.

Where the product earns its keep is validation. The rules that most often get an invoice rejected are checked before it is sent — the Bucharest sector normalised, the county in ISO 3166-2:RO form, the VAT category-and-rate pair — plus a check of its own on the tax ID's check digit. Validation runs against a trial number and the real one is allocated only once the invoice passes, so the series stays free of gaps. The roles are drawn just as explicitly: the issuer remains the client's own company, filing happens under the authorisation granted from the tax portal and revocable at any time, and the footer says plainly that the service "has no institutional connection with ANAF".

StatusPlans run from a free tier — one company, one site and a monthly invoice allowance — up to a corporate one with unlimited companies, sites and invoices. Sandbox is included on all of them, and test invoices do not count against the allowance. Current prices are on alerteanaf.ro.

What it does

The whole invoice in a single call

One POST carrying the buyer and the order lines returns 202 Accepted and an identifier. Numbering, the XML, the PDF, the email and the filing with ANAF then happen in the background, through queues.

RO-CIUS rules checked before sending

An invoice rejected by ANAF comes back to the issuer, not to the customer, and the reason surfaces only then. The rules are checked locally instead, and the request stops carrying the field and the rule that blocked it.

An invoice series without gaps

Validation runs against a trial number, and the real number is allocated only once the invoice passes. Allocation happens under a lock, so two simultaneous orders cannot be given the same number.

Sandbox on every plan, the free one included

A single field issues from a test series, marked visibly everywhere, with no fiscal value and without consuming the monthly allowance. Going live is a setting on the source, not a change to the code.

One token per site

Each shop has its own key, its own series and its own delivery settings, and revoking a token stops exactly that site. The token is shown once — the application keeps only an HMAC of it.

Idempotency on the order identifier

The same key with the same body returns the original response, so an HTTP client that timed out can retry without issuing a second invoice. The same key with a different body gets a 409 rather than a duplicate document.

Credit notes as documents in their own right

An issued invoice is neither deleted nor edited. A credit note is a new document on the same series, carrying a mandatory reference to the invoice it corrects — including for partial refunds, which accumulate up to the invoice total.

Signed webhooks and an exportable archive

ANAF's acceptance or rejection arrives by webhook, on the plans that include it, instead of by polling in a loop. The export is a ZIP organised by tax ID and then by location, with the PDFs and the XMLs together.

Want a product built like these?

The same team that keeps these applications in production can build what you need. Tell us where you are and you get a concrete assessment back.

Get Quote