Finekot API
EN 16931 · XRechnung 3.0 · ZUGFeRD / Factur-X

XRechnung API: validate and create over REST

€0.02 per check · No subscription, no contract.

One POST with the file returns the verdict and every rule violation as JSON. One POST with invoice JSON returns XRechnung 3.0, already validated.

Request
curl -H "Authorization: Bearer $FINEKOT_KEY" -F file=@invoice.xml https://api.finekot.com/v1/e-invoice
Response (shortened)
{
  "valid": false,
  "verdict": "technically_invalid",
  "profile": {"name": "XRechnung 3.0"},
  "errors": 3, "warnings": 1,
  "issues": [
    {"rule": "BR-DE-15", "severity": "error",
     "message": "Das Element \"Buyer reference\" (BT-10) muss übermittelt werden.",
     "location": "/ubl:Invoice[1]"},
    …
  ],
  "cost": 0.02, "balance": 0.98
}
Price per call€0.02per check

No subscription, no contract.

create from JSON €0.04 · PDF → XRechnung €0.10

A subscription bills the same monthly plan for 10 invoices or 1,000. Here you prepay any amount and pay per call; unused credit stays.

10 free checks a day · €1 free with a key · then €0.02 per check

Create XRechnung from JSON and check the result

op=create recomputes line totals and VAT by rate, writes UBL or CII and validates the file before returning it. Two units: €0.04.

shell
# invoice.json: {"op": "create", "profile": "xrechnung", "syntax": "ubl", "invoice": {…}}
curl -s https://api.finekot.com/v1/e-invoice \
  -H "Authorization: Bearer $FINEKOT_KEY" \
  -H "Content-Type: application/json" -d @invoice.json \
  | jq '{format, valid: .validation.valid, errors: .validation.errors, result}'

# {"format": "XRechnung 3.0 UBL", "valid": true, "errors": 0,
#  "result": "https://api.finekot.com/f/…/RE-2026-0042-xrechnung-ubl.xml?e=…&s=…"}
curl -s -o RE-2026-0042.xml "$RESULT_URL"   # the link is signed and lives 24 hours

Validate an e-invoice

Official EN 16931 and XRechnung rules. Errors with rule id, message and location.

10 free checks a day · €1 free with a key · then €0.02 per check

Processed on servers in Germany (Hetzner, Falkenstein). The uploaded file is checked in memory and not stored.

Result

The verdict, profile, totals and every rule violation appear here.

What the API does

Validation runs the official rule sets: EN 16931 1.3.17 from CEN / ConnectingEurope and KoSIT XRechnung schematron 2.6.0 (XRechnung 3.0.2), compiled with SaxonC-HE. Nothing to install on your side: no Java, no schematron toolchain.

Creation takes invoice JSON: seller, buyer, lines with quantity, price and VAT rate, payment. The result is XRechnung 3.0 in UBL or CII, or a Factur-X / ZUGFeRD PDF with output=pdf.

Both operations are one endpoint, POST /v1/e-invoice, with a bearer key. The response carries X-Cost and X-Balance headers; a failed call is not charged.

Price in plain numbers

A prepaid balance, no subscription. Charged only for a successful answer; errors are free.

One validationper document€0.02
One e-invoice built from JSONXML or Factur-X PDF€0.04
PDF invoice → XRechnung / ZUGFeRDread €0.06 + build €0.04€0.10

A new key comes with €1 of free credit: 50 validations.

Pack€5 250 validations or 50 PDF conversions
Pack€20 1 000 validations or 200 PDF conversions

Credits never expire. No subscription.

Apple Pay, Google Pay or card on the monobank page. The key is created for you if you have none.

Your key and balance—

No key in this browser yet.

For developers

Same checks over REST and MCP. One header, JSON out.

validate
curl https://api.finekot.com/v1/e-invoice \
  -H "Authorization: Bearer fk_live_…" \
  -F file=@invoice.xml

# → {"valid":false,"errors":2,"issues":[{"rule":"BR-DE-15",…}]}
# X-Cost: 0.02
create
curl https://api.finekot.com/v1/e-invoice \
  -H "Authorization: Bearer fk_live_…" \
  -H "Content-Type: application/json" \
  -d '{"op":"create","output":"pdf","invoice":{…}}'

# → Factur-X PDF url + validation report · X-Cost: 0.04
MCP
claude mcp add --transport http finekot https://api.finekot.com/mcp --header "Authorization: Bearer fk_live_…"

API guides