NormAPI – German e-invoices (XRechnung, ZUGFeRD)
By NormAPI
Overview
NormAPI checks and creates German e-invoices from inside Claude. • validate_invoice runs the official KoSIT validator on an XRechnung (UBL or CII XML) or a ZUGFeRD / Factur-X PDF. It returns the verdict, the rule-set version and every finding. Each business-rule finding says what the rule requires, why invoices typically break it and how to fix it. • explain_rule explains any rule code that a rejection quotes, such as BR-DE-15, BR-CO-10 or PEPPOL-EN16931-R010. • parse_invoice reads a received e-invoice into structured data: parties, lines, totals and the VAT breakdown as the document states them, plus a list of every value it could not map. • generate_invoice builds an XRechnung (UBL or CII), a plain EN 16931 invoice for a business customer, or a ZUGFeRD PDF from invoice data. Totals are computed in decimal arithmetic, and the document is validated against the official rules before it is returned. Data the rules do not permit is refused, with the broken rules and how to fix each. Validation, parsing and rule lookups need no account. Generating uses the user's NormAPI account, with sign-in by email link. Invoices are processed in memory and never stored. Explanations come in English or German. This is technical validation against EN 16931 and the German XRechnung rules, not tax or legal advice.
Tools
generate_invoice
Claudeubl or cii XML or a ZUGFeRD hybrid PDF (zugferd) from invoice data: an XRechnung for a public-sector buyer (profile xrechnung, the default), a plain EN 16931 invoice for a business (profile en16931). Totals are computed server-side in decimal arithmetic, and the document is validated against the official rules before it is returned. Data the rules do not permit is refused with the broken rules and how to fix each. Needs the user's NormAPI account; each generated document counts against that account's monthly allowance.parse_invoice
Claudeinvoice is in exactly the shape generate_invoice takes (fields the document lacks are left out); stated has the totals, the VAT breakdown and each line net as the document states them, as exact decimal strings; notMapped lists by path every value of the document the data does not carry. Send the XML as text in xml, the PDF base64-encoded in pdfBase64, or an uploaded file in file — exactly one. validate: true adds the KoSIT verdict. No account needed; 5 MB at most.validate_invoice
Claudexml, the PDF base64-encoded in pdfBase64, or an uploaded file in file — exactly one. No account needed; 5 MB at most.





