PDF/UA-1 toegankelijkheid, standaard aan, via API
De Europese Toegankelijkheidsrichtlijn (Richtlijn 2019/882) is sinds 28 juni 2025 van kracht. Het is geen “we komen er nog op terug”-onderwerp meer. Banken, telco’s, e-commerce-bedrijven met meer dan €10M omzet, publieke-sector-portalen en audiovisuele aanbieders moeten elke klant-pdf leveren in een vorm die door een screenreader te navigeren is. Boetes verschillen per lidstaat, maar in NL en DE lopen ze op tot €100.000 per overtreding. De richtlijn verwijst naar EN 301 549, die op zijn beurt naar ISO 14289-1 verwijst, oftewel PDF/UA-1.
SealDoc produceert al twee jaar PDF/A-3 archieven. PDF/UA-1 toevoegen aan dezelfde output stond al langer op de planning; de EU-mandaat verschuift het van “nuttig” naar “dragend voor onze compliance-positionering”. Vanaf vandaag kan elk document dat SealDoc genereert er als een getagde, screenreader-vriendelijke PDF/A-3u hybride uitkomen, met één extra veld op de request.
Wat verandert er
POST /api/documents/generate en POST /api/invoices/generate accepteren nu een accessibilityLevel veld. Standaard is "None", wat de byte-output van de bestaande flow ongemoeid laat. Zet het op "PdfUa1" en de converter wisselt van pad: een tagged-pdf export met een structure tree, een PDF/UA-1 metadata-identifier, en een post-flight veraPDF-check tegen ISO 14289-1.
POST /api/invoices/generate HTTP/1.1
Host: api.sealdoc.eu
X-Api-Key: ...
Content-Type: application/json
{
"seller": { "name": "FeFem Holding B.V.", "vatNumber": "NL000000000B01", ... },
"buyer": { "name": "Acme Corp", ... },
"invoiceNumber": "INV-2026-001",
"invoiceDate": "2026-05-07",
"currency": "EUR",
"vatRate": 0.21,
"vatLabel": "21% BTW",
"lines": [ ... ],
"accessibilityLevel": "PdfUa1"
}
De response is dezelfde jobId-shape die je al gewend was. De PDF die je vervolgens kunt downloaden heeft een structure tree, alt-tekst waar van toepassing, tabel-headers correct getagd, en een taal-attribuut. Een screenreader die er overheen leest spreekt uit “Factuur 2026-001. Factuuradres: Acme Corp. Subtotaal: 1750 euro” in plaats van “Factuur 2026 001 Acme Corp 1750”.
Wat we gemeten hebben
Voordat we de flag aanzetten hebben we een corpus van 12 documenten door de nieuwe pipeline gehaald en elke output gevalideerd met verapdf -f ua1. Het corpus dekt minimale documenten, simpele en complexe facturen, meertalige alinea’s, Unicode-rijke content, diep geneste koppen, kale tabellen, tabellen met juiste headers, geneste lijsten, en een 50-secties lang document.
Resultaten: 8 van de 12 documenten passeerden alle 106 ISO 14289-1 regels. De resterende 4 passeerden 105 van 106 met dezelfde enkele faling (clause 7.4.2, heading-nesting), veroorzaakt doordat de LibreOffice HTML-importer de eerste <h1> overneemt als document Title in metadata. Onze factuur-template in InvoiceHtmlBuilder gebruikt opgemaakte alinea’s in plaats van een mix van <h1>/<h2> koppen, dus die situatie speelt daar niet. Een representatieve factuur scoort in de nieuwe pipeline 106/106 met 2778 individuele veraPDF-checks die allemaal slagen.
Waarom dit strategisch belangrijk is
De Europese Toegankelijkheidsrichtlijn is het soort regelgeving dat paniek-aankoop-vensters creëert. Compliance officers zijn nu actief op zoek, de volwassenheid van leveranciers verschilt sterk, en de meeste bestaande opties zijn desktop-tools (axesPDF Quickfix), enterprise-gelicenseerde Java-libraries (iText met de Pdf/UA module), of handmatige remediation-services die per document factureren. Geen daarvan is API-first, geen daarvan produceert een PDF/A-3 + PDF/UA-1 hybride in dezelfde aanroep, en geen daarvan is EU-soeverein van constructie.
Wij bouwden onze versie op LibreOffice’s native tagged-pdf export en de open-source Universal Accessibility validator van veraPDF. Er is geen commerciële library bij betrokken. De marginale infrastructuur-kost bovenop onze bestaande PDF/A-3 pipeline is verwaarloosbaar. We kunnen dit uitleveren tegen onze bestaande prijspunten zonder marge-impact.
Wat in scope is en wat niet
In scope: documenten en facturen die SealDoc zelf genereert vanuit jouw gestructureerde input (Markdown, HTML of invoice-JSON). De template-structuur zit onder onze controle, het conversie-pad zit onder onze controle, en we kunnen output-kwaliteit garanderen.
Niet in scope (nog niet): auto-remediation van willekeurige geüploade PDF’s. Een 30-paginas prospectus die vijf jaar geleden door een grafisch ontwerper in InDesign is gemaakt, en daar de semantische structuur uit afleiden via layout-heuristieken, is een multi-maands onderzoeks-probleem met onzekere output-kwaliteit. We beloven niets wat we niet kunnen leveren. Heb je dat wel nodig: neem contact op, er bestaan partner-integraties die hier zin hebben.
Plan-niveau
PDF/UA-1 is een Growth-en-hoger feature (pdf_ua slug in de feature-set van je plan). Developer en Starter blijven standaard niet-getagde PDF/A-3 ontvangen. De flag wordt afgewezen met een 402 Payment Required als je plan het niet bevat, met de upgrade-target genoemd in de response zodat je client-SDK kan doorlinken naar de juiste pagina.
Zit je op Starter en vraagt een enterprise-klant je om toegankelijke facturen: dat is een Growth-gesprek, en we hebben dat gesprek graag.
Zelf valideren
Elke PDF/UA-1 output van SealDoc passeert dezelfde verapdf -f ua1 validator die de lidstaten in hun compliance-audits citeren. Download een gegenereerde PDF, run veraPDF lokaal, en je ziet dezelfde passedRules="106" failedRules="0" regel die we in onze interne benchmarks publiceren. We vragen je niet om de marketing-claim op vertrouwen aan te nemen; de validator is open source, de norm is ISO-gepubliceerd, en de output is binair reproduceerbaar per request.
Sprint 53 levert PDF/UA-1 vandaag uit. Sprint 53 was begroot op zes en een halve dag engineering-werk. We kwamen onder dat budget omdat de bestaande converter-pipeline het meeste werk al deed; de marketing-claim “de enige EU-soevereine API die Factur-X 1.0 plus PDF/UA-1 in één call levert” is nu daadwerkelijk waar en gevalideerd.