The same engine as the reader page, reachable over REST. You send a Factur-X, ZUGFeRD, UBL or CII file; you get back its structured data and the list of EN 16931 anomalies, as JSON.
If invoices reach you as a continuous flow (a dedicated mailbox, a supplier drop point, an ERP), the problem is not reading one file. It is wiring the reading into something you already run:
| Method | Path | Role |
|---|---|---|
POST | /v1/invoices/parse |
Analyses one invoice: extracted data plus anomalies |
POST | /v1/invoices/parse-batch |
Analyses a batch of invoices in a single request |
POST | /v1/invoices/export.csv |
Returns a CSV ready for Excel (?lang=en for commas and
ISO dates, default is the French layout) |
GET | /v1/usage |
Consumption and limits for your key |
GET | /v1/health |
Service availability |
The interactive documentation, with the full response schema, lives at
/docs: you can try every call directly from
there.
Every request carries your key, in either of two headers:
X-API-Key: your_key
Authorization: Bearer your_key
A request without a valid key gets 401. Errors come back as JSON,
with a stable code your program can branch on rather than a message it would
have to interpret.
curl -X POST https://facturolia.fr/v1/invoices/parse \
-H "X-API-Key: your_key" \
-F "file=@invoice.pdf"
The response carries the detected format and profile, the parties, the dates,
the totals, the IBAN when one is present, and the list of anomalies with the
matching calculation. API labels are in English by default; add
?lang=fr if you want the messages in French.
| Tier | Per minute | Per day |
|---|---|---|
| Discovery | 10 | 100 |
| Starter | 60 | 5,000 |
| Growth | 300 | 50,000 |
Going over returns 429 with a Retry-After header.
Each file is capped at 10 MB, and a batch at
200 files.
An MCP server lets an assistant (Claude and other compatible clients) read and check an invoice directly: you point at a file, it answers with the contents in plain view and the EN 16931 check.
Nothing to install: Python 3.10+ is enough. Download facturolia_mcp.py (documentation) and declare it in your client:
{
"mcpServers": {
"facturolia": {
"command": "python",
"args": ["/path/to/facturolia_mcp.py"],
"env": { "FACTUROLIA_API_KEY": "your-key" }
}
}
}
Two tools are exposed: read_invoice (full contents) and
check_invoice (the compliance verdict alone). Answers come back in
English by default; add "FACTUROLIA_LANG": "fr" to the
env field for French. The file is sent to the API to be analysed:
processed in memory, nothing retained, but it is not local processing. Worth
checking if your internal policy forbids that.
Files sent to the API are processed in memory and then discarded. No invoice is stored, and their contents never appear in the technical logs. The servers are located in the European Union. Read the privacy policy (in French).