Know an invoice will be rejected before it leaves
Validate an EN 16931 invoice before it leaves, see the exact blocking rules with the fix for each, and convert it to Factur-X (CII) or UBL 2.1. Deterministic rules, no LLM, no invented defaults: a field that is missing fails loudly with its rule id.Read Architectural Guide: FacturGate & the 2026 European E-Invoicing Mandate
1 · Target and document
Paste the canonical invoice model (JSON). The gate runs locally in this page — the same deterministic engine the agent tools call.
Watch the launch video
23s · nothing estimated · no signupIntroducing FacturGate: the deterministic EN 16931 + CIUS-FR pre-send gate for EU e-invoices Watch on YouTube
Agent Surface & WebMCP Integration
How autonomous agents, LLMs, and accounting ERP bots invoke FacturGate's deterministic pre-send gate.
// 1. In any browser with WebMCP support (auto-registered on page load):
// The FacturGate tools are mounted on navigator.modelContext:
// • validate_einvoice ($0.10/call)
// • convert_invoice_to_facturx ($0.25/call)
// • check_eu_vat_id ($0.05/call)
const report = await navigator.modelContext.executeTool("validate_einvoice", {
invoice: JSON.stringify({
invoice: { number: "INV-2026-001", issueDate: "2026-10-01", currency: "EUR" },
seller: {
name: "Acme SAS",
vatId: "FR83404833048",
country: "FR",
postalCode: "75001",
city: "Paris",
street: "10 Rue de la Paix"
},
buyer: {
name: "Client GmbH",
vatId: "DE123456789",
country: "DE",
postalCode: "10115",
city: "Berlin",
street: "Musterstr. 1"
},
lines: [
{ description: "Consulting", quantity: 1, unitPrice: 1000, vatRate: 20, vatCategory: "S" }
]
}),
target_country: "FR",
target_format: "facturx"
});
console.log("Readiness Score:", report.score); // 100 (score)
console.log("Verdict:", report.verdict); // "ready"
console.log("Reconciliation Delta:", report.reconciliation?.delta); // 0.00
console.log("Emitted XML Length:", report.emitted?.xml.length);JSON Schema Parameters Contract
invoiceRequired*Canonical invoice payload as a JSON string containing seller, buyer, invoice header, and lines. *Supply this or xml.
xmlOptional*Existing raw CII (CrossIndustryInvoice) or UBL 2.1 XML document to validate as-is.
target_countryOptionalNational rule overlay & rounding regime: FR (CIUS-FR), DE (XRechnung), BE (Peppol), PL (KSeF). Defaults to FR.
target_formatOptionalDestination format: facturx (CII EN 16931), cii (standalone CII), or ubl (UBL 2.1). Defaults to facturx.
vat_id, countryVAT CheckFor check_eu_vat_id: VAT number and ISO country code verified against national algorithms (FR, DE, BE, PL, NL, IT).
Returns readiness score (0-100), blocking & advisory findings with exact rule IDs and fixes, cent-reconciled totals (delta == 0.00), and emitted XML artifact.
Pricing
Use it free in the browser. Pay only for exports, the suite, or agent calls.
Free
Export
$29.00/month
| Agent tool | Metered rate |
|---|---|
validate_einvoice | $0.10 per successful call |
convert_invoice_to_facturx | $0.25 per successful call |
check_eu_vat_id | $0.05 per successful call |
Agent calls are metered per successful call and billed monthly to your Stripe customer. Billing shows your usage, history and spend cap.
Manage Billing & API Keys (/billing) →Rule and country deep dives
FacturGate: The Deterministic Pre-Send Gate & Converter for European E-Invoicing
Deep architectural breakdown of EN 16931, CIUS-FR mandate mechanics, arithmetic variance traps, and why deterministic validation eliminates AP rejection cascades.
- BR-01 — Specification identifier missing or staleBR-01 explained: the invoice must carry a current specification identifier (BT-24). Check and fix a stale or empty CustomizationID, then emit Factur-X EN 16931.
- BR-05 — The currency is a display string, not ISO 4217BR-05 explained: BT-5 must be an ISO 4217 three-letter code. Detect and fix display strings such as “Euro” or “€” before submission.
- BR-06 / BR-07 — Seller and buyer namesBR-06 and BR-07 explained: the seller (BT-27) and buyer (BT-44) names are mandatory. ERPs commonly export the trade name instead of the registered entity name.
- BR-CO-13 — Totals that drift from the linesBR-CO-13 explained: BT-109 = BT-106 − BT-107 + BT-108. See the exact cent drift between declared totals and the invoice lines, then emit corrected totals.
- BR-CO-15 — Grand total off by a centBR-CO-15 explained: BT-112 = BT-109 + BT-110. Catch a one-cent grand-total drift and emit a document whose summation is internally consistent.
- CIUS-FR — SIRET missing or failing the Luhn checkThe French mandate identifies both parties by SIRET. Validate the 14 digits and the Luhn check digit (La Poste SIREN 356000000 excepted) before you submit.
- CIUS-FR — French VAT identifier and VAT keyValidate a French VAT identifier offline: FR + 2-character key + 9-digit SIREN, with the key recomputed from the SIREN via the VAT-key formula.
- Factur-X MINIMUM / BASIC — illegal for the French mandatePDF libraries default to the Factur-X MINIMUM or BASIC profiles, which the French mandate does not accept. Detect the profile and emit at EN 16931 instead.
- Factur-X / CII for FranceConvert a canonical invoice into Factur-X/CII at the EN 16931 profile with the CIUS-FR checks applied: SIRET, French VAT key, mandatory totals and payment terms.
- Poland (KSeF) — VAT rounded at the totalKSeF's grace period ends and penalties resume in 2027. Check a Polish-targeted invoice with rounded-at-total VAT, from a valid NIP to the reconciled grand total.
- Belgium — Peppol BIS 3.0 / EN 16931Validate a Belgian Peppol BIS 3.0 invoice: EN 16931 rules, VAT-identifier formats and checksums, and a reconciled amount due.
- Germany — XRechnung / EN 16931Germany's send obligation lands in 2027. Pre-check an XRechnung-style EN 16931 document: mandatory fields, VAT coherence and totals reconciliation.
Agent surface: validate_einvoice, convert_invoice_to_facturx and check_eu_vat_id are registered as WebMCP tools and advertised in /.well-known/mcp.json.