<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: facturata</title>
    <description>The latest articles on DEV Community by facturata (@facturata).</description>
    <link>https://dev.to/facturata</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4013869%2Fa75c8204-8a20-4ca1-931f-9b5ae208f8ee.png</url>
      <title>DEV Community: facturata</title>
      <link>https://dev.to/facturata</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/facturata"/>
    <language>en</language>
    <item>
      <title>I built an API that turns JSON into legally-compliant EU e-invoices (Factur-X), because 2026 is coming</title>
      <dc:creator>facturata</dc:creator>
      <pubDate>Sat, 04 Jul 2026 19:46:15 +0000</pubDate>
      <link>https://dev.to/facturata/i-built-an-api-that-turns-json-into-legally-compliant-eu-e-invoices-factur-x-because-2026-is-329l</link>
      <guid>https://dev.to/facturata/i-built-an-api-that-turns-json-into-legally-compliant-eu-e-invoices-factur-x-because-2026-is-329l</guid>
      <description>&lt;p&gt;If you build software that touches invoices in Europe, the next 24 months are going to be busy. France requires all businesses to receive e-invoices from September 2026. Germany already requires reception since 2025, with issuing phased in 2027-2028. Belgium goes B2B via Peppol in 2026.&lt;/p&gt;

&lt;p&gt;The dominant format in France/Germany is Factur-X (identical to ZUGFeRD 2.x): a normal PDF invoice with machine-readable XML (EN 16931 standard) embedded inside. Nice idea. Implementing it correctly is not nice: the XSD is the easy part, then come ~200 schematron business rules (BR-&lt;em&gt;, BR-CO-&lt;/em&gt;, BR-S-*...), VAT category logic, and country-specific rulesets on top.&lt;/p&gt;

&lt;p&gt;So I built Facturata: one POST with plain invoice JSON, and you get back a compliant Factur-X PDF (or raw CII XML), validated against the official XSD + full schematron before it leaves the server. There is also /validate (check any Factur-X/ZUGFeRD file, including the French 2026 CTC ruleset) and /extract (pull the XML out of a PDF).&lt;/p&gt;

&lt;p&gt;Design choices worth mentioning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deterministic engine, no LLM at runtime. Compliance tooling should not hallucinate.&lt;/li&gt;
&lt;li&gt;
&lt;ul&gt;
&lt;li&gt;Stateless: documents processed in memory, nothing stored. Makes GDPR conversations short.&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
&lt;li&gt;- Totals and VAT breakdowns computed server-side, so garbage-in cannot produce arithmetically broken invoices (the rules catch that anyway, but better to never emit it).&lt;/li&gt;
&lt;li&gt;- Built on the excellent open-source Akretion factur-x library + official validation artifacts.

&lt;ul&gt;
&lt;li&gt;There is a free web validator (no signup) at &lt;a href="https://facturata.com" rel="noopener noreferrer"&gt;https://facturata.com&lt;/a&gt; if you just want to check files, and a free API tier (15 docs/month) on RapidAPI if you want to integrate. Feedback very welcome, especially from anyone wrestling with XRechnung or Peppol quirks.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>api</category>
      <category>python</category>
      <category>fintech</category>
      <category>europe</category>
    </item>
  </channel>
</rss>
