Self-service · start in minutes

The e-invoicing API for your product

Validate, parse, generate and convert XRechnung, ZUGFeRD and Factur-X — maintained against format updates so your team doesn't have to.

Start free  Read the docs

Validate

EN 16931 (BR, BR-CO, VAT categories), XRechnung (BR-DE, Leitweg-ID), Peppol BIS 3.0 and French rules (SIREN/SIRET, VAT) — every finding with a rule id and explainer page.

Parse

UBL, CII or hybrid PDF in — normalized EN 16931 JSON out. One schema for all formats, amounts as decimal strings.

Generate & convert

Build EN 16931 XML (CII/UBL/Peppol BIS 3.0/XRechnung 3.0) from a JSON model — or convert an existing invoice between formats. Factur-X/PDF-A3 is embedded server-side.

Self-hosted

The identical container image runs in your infrastructure — invoice data never leaves your network. One binary, no database.

Versioned & reproducible

Every report exposes an engine and a ruleset version (calendar-based, e.g. 2026.07); so do /v1/health and the WASM bh_version(). The ruleset bumps when rules are added or tightened — log it and any result stays reproducible.

Validate an invoice

curl -s -X POST "https://api.billhorse.com/v1/validate?lang=en" \
  -H "Authorization: Bearer $BILLHORSE_API_KEY" \
  --data-binary @invoice.pdf

{
  "valid": false,
  "profile": { "label": "Factur-X EN 16931", "en16931": true },
  "findings": [
    { "id": "BR-CO-16", "severity": "error",
      "expected": "178.50", "actual": "170.00", ... }
  ]
}

Tested against the official KOSIT test suite (86/86) and the FNFE Factur-X corpus (7/7). Processing happens in memory only — invoices are never stored.

Generate & convert Preview

Build EN 16931 XML (CII, UBL, Peppol BIS 3.0 or XRechnung 3.0) from a JSON model, or convert an existing invoice between formats. Factur-X/PDF-A3 (embedded CII inside a PDF/A-3) is produced server-side.

Generate & convert via the API

# Generate XML from a JSON invoice model (format=cii | ubl | peppol | xrechnung)
curl -s -X POST "https://api.billhorse.com/v1/generate?format=cii" \
  -H "Authorization: Bearer $BILLHORSE_API_KEY" \
  -H "Content-Type: application/json" \
  --data @invoice-model.json > invoice.xml

# Generate an XRechnung 3.0 UBL document (German KOSIT CIUS)
curl -s -X POST "https://api.billhorse.com/v1/generate?format=xrechnung" \
  -H "Authorization: Bearer $BILLHORSE_API_KEY" \
  -H "Content-Type: application/json" \
  --data @invoice-model.json > invoice-xrechnung.xml

# Convert an existing invoice (UBL / CII / hybrid PDF) to another syntax
curl -s -X POST "https://api.billhorse.com/v1/convert?format=ubl" \
  -H "Authorization: Bearer $BILLHORSE_API_KEY" \
  --data-binary @invoice.xml > invoice-ubl.xml

Try it in your browser

Runs entirely in your browser via WebAssembly — your invoice data never leaves the page.

Get started

Sign up free — no credit card, no sales call. 100 units/month free, then pay only for what you need.

Start free