Privacy

This page describes exactly what happens to a file you send to the FactureCheck validation API, in plain language. It is not a substitute for legal advice, but it is an accurate description of the code that runs this service.

What we never store

The uploaded bytes are held in memory only for the duration of the request, sent to the validation engine, and discarded once the response is returned. Nothing about the file's content survives the request.

What we do log

For every /api/v1/validate request, a single log line records:

That is the complete list. No invoice content is ever written to a log.

Why this matters

Many free online invoice validators are anonymous services with no stated retention policy — you have no way to know whether your invoice (often containing customer names, prices, and VAT numbers) is kept, resold, or used to train something. FactureCheck is built so that it structurally cannot do that: the code path from upload to response never writes invoice content to disk or to logs.

Hosting and retention

The service is operated and hosted within the European Union. The only persistent data store is a small SQLite database holding API keys, waitlist signups, and rate-limit counters — never uploaded files. Rate-limit counters are pruned automatically once their one-hour window has passed.

Issued reports

Every PDF conformance report we issue is registered by the SHA-256 hash of its own bytes, so anyone can later confirm it is genuine at facturecheck.eu/verify — never by the invoice's content, a filename, or your IP address.

Three data contracts — read this carefully

Almost everything above describes one-off validation (/api/v1/validate, /api/v1/repair, /api/v1/validate/batch, and the MCP tools): nothing is ever stored, full stop. Regression monitoring (/api/v1/watch) is a separate contract with two modes of its own, and both work differently from one-off validation on purpose:

Either way, deleting a watch entry (DELETE /api/v1/watch/{id}) hard-deletes its stored document (skeleton or full) immediately — nothing about it survives in any table. GET /api/v1/watch/{id}/export returns everything the service holds about one watch, for answering a data-subject access request. Nothing about any of this weakens the one-off promise above — the three are entirely separate code paths, and the vast majority of usage (a single validate or repair call) never touches storage at all.

Trois contrats de données différents — à lire attentivement

Tout ce qui précède décrit la validation ponctuelle (/api/v1/validate, /api/v1/repair, /api/v1/validate/batch, et les outils MCP) : rien n'est jamais stocké, un point c'est tout. Le suivi de régression (/api/v1/watch) est un contrat distinct, avec deux modes, et tous deux fonctionnent volontairement autrement :

Dans tous les cas, supprimer une entrée de suivi (DELETE /api/v1/watch/{id}) supprime immédiatement son document stocké — rien n'en subsiste dans aucune table. GET /api/v1/watch/{id}/export renvoie tout ce que le service conserve sur un suivi donné, pour répondre à une demande d'accès aux données personnelles. Rien de tout cela n'affaiblit la promesse de la validation ponctuelle ci-dessus — ce sont trois chemins de code entièrement séparés, et l'immense majorité de l'usage (un simple appel de validation ou de réparation) ne touche jamais au stockage.

Repair requests

The same rules apply to /api/v1/repair: the uploaded invoice is processed in memory and discarded. Repairs are limited to a fixed whitelist of safe, mechanical fixes; monetary amounts, VAT rates, dates, and party identities are never altered, and arithmetic rule failures are always reported for you to fix, never silently changed.

Contact

Questions about this policy can be directed to the service operator.