EDGE ENGINE SUB-2MS DETERMINISTIC V8 EXECUTION • ZERO DATA RETENTION • EXPLORE API SPECS →
ZUGFeRD 2.x / Factur-X 1.0.x (EN 16931) <5ms Edge Compute

ZUGFeRD 2.3 CII E-Invoice Validator & Parser

Validate and parse German ZUGFeRD 2.x / Factur-X CII invoices with profile-scoped EN 16931 business rules. This specification documents the exact field layout, checksum rules, and validation behavior so your integration matches ZUGFeRD 2.x / Factur-X 1.0.x (EN 16931) without reading the source standard.

Latency: <5ms Availability: 99.99% Standard: ZUGFeRD 2.x / Factur-X 1.0.x (EN 16931) In-Memory Execution
Interactive Edge Workbench

⚡ Live ZUGFeRD 2.3 CII E-Invoice Validator & Parser Interactive Workbench

Test real-time validation and schema parsing for ZUGFeRD 2.3 CII E-Invoice Validator & Parser directly in your browser. Runs in sub-5ms with zero setup.

32KB Demo Cap 60 req/min Burst <2ms V8 Compute Zero Data Retention
input.xml 0 B
output.json demo-ready
Status: Ready
{
  "status": "Click RUN VALIDATION to execute on the Cloudflare edge..."
}
Sandbox Quota: Free Tier (50 reqs/mo) • Production keys from $29/mo Get Free Sandbox Key →
Need 512KB+ Payloads, High-Throughput & 99.9% Production SLA?
Direct API keys include pooled monthly quotas, zero cold-starts, and HIPAA BAA eligibility on the Mega tier.
Get Production API Key →
LLM / MCP
Prompt-Ready Specification for AI Agents llms.txt
Structured format rules and schemas optimized for LLM coding agents and Model Context Protocol tooling.
Raw .md
Official Standard & Validation Protocol Authority: International Standards Organization ↗

Quick Summary: Validate and parse German ZUGFeRD 2.x / Factur-X CII invoices with profile-scoped EN 16931 business rules. Validates strictly against ZUGFeRD 2.x / Factur-X 1.0.x (EN 16931) with sub-5ms in-memory response times.

Latency
<5ms
Standard
ZUGFeRD 2.x / Factur-X 1.0.x (EN 16931)
Version
Max Payload
512 KB
Privacy
In-Memory (0 bytes stored)

Specification & Structural Breakdown

Technical Summary: Validates strictly against ZUGFeRD 2.x / Factur-X 1.0.x (EN 16931). Payloads are parsed in memory and return clean, typed JSON in milliseconds with zero data logged.

ZUGFeRD 2.x is the German name for the Factur-X hybrid invoice model; the API accepts both naming conventions and detects the profile from the specification identifier (BT-24).

MINIMUM, BASIC WL, BASIC, EN 16931 (COMFORT), EXTENDED and XRechnung profiles are detected and checked against their profile-mandatory fields.

EN 16931, EXTENDED and XRechnung documents run the full EN 16931 business-rule set (BR-01 through BR-65) with exact rule IDs, paths, and severities.

ProfileGuideline identifier (BT-24)Rule scope
MINIMUMurn:factur-x.eu:1p0:minimumProfile-mandatory header fields
BASIC WLurn:factur-x.eu:1p0:basicwlHeader fields and monetary totals
BASICurn:factur-x.eu:1p0:basicHeader, totals, and invoice lines
EN 16931 (COMFORT)urn:factur-x.eu:1p0:en16931Full EN 16931 BR-* rule set
EXTENDEDurn:factur-x.eu:1p0:extendedFull EN 16931 BR-* rule set
XRechnung (CII)urn:cen.eu:en16931:2017#compliant#urn:xoev-de:kosit:standard:xrechnung_3.0Full EN 16931 BR-* rule set

Parsed JSON Response Model

The edge microservice transforms input payloads into strongly-typed hierarchical JSON envelopes with sub-5ms latency:

HTTP 200 JSON Response Envelope
{
  "valid": false,
  "syntax": "CII",
  "profile": "BASIC_WL",
  "summary": {
    "status": "NON_COMPLIANT",
    "fatalCount": 1,
    "warningCount": 0
  },
  "violations": [
    {
      "id": "FX-PROFILE-BASIC_WL-09",
      "path": "BT-112",
      "severity": "FATAL",
      "message": "Missing or empty BT-112 (Invoice grand total amount)."
    }
  ]
}

Copy-Paste Integration Code (6 Languages)

Integrate ZUGFeRD 2.3 CII E-Invoice Validator & Parser directly into your production application with native, zero-dependency code snippets in cURL, Node.js, Python, Go, C#, and a ready-to-paste Claude prompt. Get a free API key → (no credit card required):

curl --request POST \
  --url "https://api.stanzaapi.com/factur-x-validator/api/v1/validate" \
  --header "Content-Type: application/json" \
  --header "x-api-key: YOUR_API_KEY" \
  --data '{
  "xml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><rsm:CrossIndustryInvoice xmlns:rsm=\"urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100\">...</rsm:CrossIndustryInvoice>"
}'
const response = await fetch("https://api.stanzaapi.com/factur-x-validator/api/v1/validate", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "x-api-key": process.env.API_KEY || "YOUR_API_KEY"
  },
  body: JSON.stringify({
  "xml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><rsm:CrossIndustryInvoice xmlns:rsm=\"urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100\">...</rsm:CrossIndustryInvoice>"
})
});

const data = await response.json();
console.log(data);
import requests
import json

url = "https://api.stanzaapi.com/factur-x-validator/api/v1/validate"
headers = {
    "Content-Type": "application/json",
    "x-api-key": "YOUR_API_KEY"
}
payload = {
    "xml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><rsm:CrossIndustryInvoice xmlns:rsm=\"urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100\">...</rsm:CrossIndustryInvoice>"
}

response = requests.post(url, json=payload, headers=headers)
print(response.json())
package main

import (
	"bytes"
	"fmt"
	"io"
	"net/http"
	"os"
)

func main() {
	url := "https://api.stanzaapi.com/factur-x-validator/api/v1/validate"
	payload := []byte(`{"xml":"<?xml version=\"1.0\" encoding=\"UTF-8\"?><rsm:CrossIndustryInvoice xmlns:rsm=\"urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100\">...</rsm:CrossIndustryInvoice>"}`)

	req, _ := http.NewRequest("POST", url, bytes.NewBuffer(payload))
	req.Header.Add("Content-Type", "application/json")
	req.Header.Add("x-api-key", os.Getenv("API_KEY"))

	res, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)
	fmt.Println(string(body))
}
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using var client = new HttpClient();
        client.DefaultRequestHeaders.Add("x-api-key", Environment.GetEnvironmentVariable("API_KEY") ?? "YOUR_API_KEY");

        var json = @"{""xml"":""<?xml version=\""1.0\"" encoding=\""UTF-8\""?><rsm:CrossIndustryInvoice xmlns:rsm=\""urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100\"">...</rsm:CrossIndustryInvoice>""}";
        var payload = new StringContent(json, Encoding.UTF8, "application/json");

        var response = await client.PostAsync("https://api.stanzaapi.com/factur-x-validator/api/v1/validate", payload);
        var content = await response.Content.ReadAsStringAsync();
        Console.WriteLine(content);
    }
}
Integrate the Stanza factur-x-validator micro-API.

Endpoint: POST https://api.stanzaapi.com/factur-x-validator/api/v1/validate
Auth header: x-api-key: YOUR_API_KEY
Content-Type: application/json
Request body:
{
  "xml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><rsm:CrossIndustryInvoice xmlns:rsm=\"urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100\">...</rsm:CrossIndustryInvoice>"
}

Rules:
- Send the request with a 2-second timeout.
- Parse the standard envelope { success, data, meta: { latency_ms, version } }.
- On failure, read { success: false, error, code } and branch on the code.
- Do not retry 4xx responses; surface the error code to the caller.
- Treat invalid-but-well-formed payloads as HTTP 200 with data.valid === false.

Frequently Asked Questions & Technical Notes

Which profiles are supported?

MINIMUM, BASIC WL, BASIC, EN 16931 (COMFORT), EXTENDED and XRechnung are detected from the specification identifier (BT-24). EN 16931, EXTENDED and XRechnung documents run the full EN 16931 business-rule set; reduced profiles are checked against their profile-mandatory fields.

Does this support the German B2B e-invoicing mandate?

Yes. German businesses must be able to receive structured e-invoices since January 2025, with mandatory issuance phased through 2027-2028. The engine validates the Factur-X and ZUGFeRD profiles those documents use.

Related Factur-X & ZUGFeRD 2.3 E-Invoice Validation Engine Formats

Explore sibling specifications and standards in the same developer cluster:

Complementary Enterprise APIs

Seamlessly orchestrate data pipelines across adjacent financial, regulatory, and supply-chain protocols:

All Factur-X & ZUGFeRD 2.3 E-Invoice Validation Engine Formats & Specifications (4) Directory Index ↓
Factur-X PDF/A-3 Attachment Extraction & Validation API ZUGFeRD 2.3 CII E-Invoice Validator & Parser XRechnung CII Validator API (EN 16931) Factur-X Profile Detection (BT-24) & EN 16931 Rule Scoping