API documentation
Eunormia.Sdk — the offline .NET library Beta
The same engine as the online API, embedded in your application: create, read and validate e-invoices — completely offline. The engine and a trimmed runtime are bundled inside the NuGet package; your invoice data never leaves your premises.
Beta: the package is not yet published on nuget.org — access via the pilot programme.
Installation & requirements
| Installation | dotnet add package Eunormia.Sdk |
| Frameworks | net8.0 and netstandard2.0 (thus also .NET Framework 4.6.1+) |
| Platforms | win-x64 (more to follow) |
| Dependencies | none — no Java, no Docker, no network access |
| Package size | ~130 MB per platform (engine, fonts, ICC profiles, rulesets incl. KoSIT & FR-CTC) |
The three classes
EunormiaConverter | create: JSON (+ optional PDF) → validated ZUGFeRD/Factur-X. Same gates as online; optionally a signed conformance certificate (EmitCertificate). |
EunormiaReader | receive: PDF → full invoice JSON (same schema as for creation) + raw CII XML. |
EunormiaValidator | receive: PDF → gate results (veraPDF, EN 16931, optionally KositValidation/FrCtcValidation). |
Performance
UseDaemon = true keeps the engine as a warm process: first call
~3–4 s (cold start), then ~250 ms per conversion, reading ~30 ms. Recommended
for anything beyond a single call per process lifetime.
Licensing
Without a licence the SDK is fully functional — results
carry a sample watermark. A valid licence (account →
POST /v1/license/offline, then set as LicenseKey or
ENV EUNORMIA_LICENSE) removes the watermark. Two types:
| dev | short-lived (default 45 days), for development/CI; renewed while your subscription is active. |
| runtime | long-lived, embedded in the software you ship. Keeps working at your customers — even after cancellation. New eunormia versions require an active subscription (version binding). |
Verification is offline (Ed25519 signature) — no phone-home, no telemetry.
Error handling
Business and technical errors come as EunormiaException with
Status (422 for business errors), Stage and localized
Details — the same human-readable messages as the online API.
FAQ
| Does it need Java installed? | No — the runtime is bundled inside the package and invisible to you. |
| Does the SDK phone home? | No. No telemetry, no online licence checks. |
| What happens if I cancel? | Shipped software with a runtime licence keeps working unchanged; only new versions and dev builds require an active subscription. |
| Why is it so large? | The package contains the full validation substance: fonts, colour profiles, EN 16931/KoSIT/FR-CTC rulesets and the engine. That is exactly what saves you any infrastructure. |
Code
// Erzeugen / create
var converter = new EunormiaConverter(new EunormiaOptions {
LicenseKey = Environment.GetEnvironmentVariable("EUNORMIA_LICENSE"),
Profile = ZugferdProfile.EN16931,
UseDaemon = true
});
EunormiaResult r = await converter.ConvertAsync(invoiceJson, pdfBytes);
File.WriteAllBytes(r.FileName, r.Pdf);
// Empfangen: lesen / receive: read
ReadResult data = await new EunormiaReader().ReadAsync(incomingPdf);
Console.WriteLine(data.Header?.Number); // Kurzform / header
var fullJson = data.Invoice; // volles InvoiceRequest-JSON
// Empfangen: validieren / receive: validate
var v = await new EunormiaValidator(new EunormiaOptions {
KositValidation = true, FrCtcValidation = true
}).ValidateAsync(incomingPdf);
Console.WriteLine($"{v.Valid} {v.VeraPdf.Passed} {v.En16931.Passed} {v.Kosit?.Passed}");