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

Factur-X PDF/A-3 Attachment Extraction & Validation API

Extract the embedded UN/CEFACT CII XML from Factur-X and ZUGFeRD PDF/A-3 hybrid invoices and return the validated invoice model as JSON. This specification documents the exact field layout, checksum rules, and validation behavior so your integration matches Factur-X 1.0.x / ZUGFeRD 2.x (EN 16931) without reading the source standard.

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

⚡ Live Factur-X PDF/A-3 Attachment Extraction & Validation API Interactive Workbench

Test real-time validation and schema parsing for Factur-X PDF/A-3 Attachment Extraction & Validation API 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: Extract the embedded UN/CEFACT CII XML from Factur-X and ZUGFeRD PDF/A-3 hybrid invoices and return the validated invoice model as JSON. Validates strictly against Factur-X 1.0.x / ZUGFeRD 2.x (EN 16931) with sub-5ms in-memory response times.

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

Specification & Structural Breakdown

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

Factur-X and ZUGFeRD invoices are PDF/A-3 files with an embedded UN/CEFACT CrossIndustryInvoice XML attachment named factur-x.xml or zugferd-invoice.xml.

Send the PDF as application/pdf or pdf_base64 and the engine extracts the attachment before validation; the response echoes the attachment name and MIME type.

If no recognized attachment exists the API returns HTTP 200 with valid:false and an exact FX-PDF-01, FX-PDF-02, or FX-PDF-03 diagnostic instead of a generic failure.

DiagnosticConditionResponse
factur-x.xml / zugferd-invoice.xmlRecognized CII attachment foundValidated against the detected Factur-X profile
FX-PDF-01No embedded file attachment was found in the PDFHTTP 200, valid:false
FX-PDF-02Attachment is not a recognized Factur-X or ZUGFeRD XML fileHTTP 200, valid:false
FX-PDF-03PDF corrupt, encrypted, or over the processing budgetHTTP 200, valid:false

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": true,
  "container": "PDF",
  "attachment": {
    "name": "factur-x.xml",
    "mimeType": "text/xml"
  },
  "syntax": "CII",
  "profile": "EN16931",
  "summary": {
    "status": "COMPLIANT",
    "fatalCount": 0,
    "warningCount": 0
  }
}

Copy-Paste Integration Code (6 Languages)

Integrate Factur-X PDF/A-3 Attachment Extraction & Validation API 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

Do I have to send the PDF or can I send the XML?

Both work. Send the PDF/A-3 file (application/pdf or pdf_base64) and the API extracts the embedded XML, or send the CII XML directly as raw XML or a JSON xml field.

What happens when no Factur-X attachment is found?

The API returns HTTP 200 with valid:false and the FX-PDF-01 diagnostic, so AP pipelines can route the document to manual review without treating a valid PDF as a server error.

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