Create XRechnung, ZUGFeRD or Factur-X e-invoice from JSON
Create an EU e-invoice from plain JSON: seller, buyer, lines with quantity, price and VAT rate, bank account. Returns XRechnung 3.0 XML (CII or UBL), a ZUGFeRD / Factur-X PDF with the XML inside, its XML alone, or EN 16931 UBL. Totals and VAT breakdown are computed and checked against the business rules first; data that breaks a rule is refused uncharged with the rule numbers. Use to issue German B2B e-invoices from a shop, ERP or workflow.
Inputs
| Name | Type | Description |
|---|---|---|
invoice (required) | string | The invoice as JSON: number, issueDate, dueDate, buyerReference (Leitweg-ID or order reference), seller and buyer {name, vatId, street, postCode, city, country, contactName, phone, email}, lines [{name, quantity, unit, unitPrice, vatRate}], payment {iban, bic, terms}. In a POST body send it as a JSON object. The flat fields /document/extract returns (invoice_number, seller_name, line_items…) are read too |
format | string | xrechnung (default: XRechnung 3.0, CII syntax), xrechnung-ubl, zugferd-pdf (a readable A4 invoice as PDF/A-3 with the factur-x.xml embedded, returned as pdfBase64), zugferd (that factur-x.xml alone, EN 16931 profile) or ubl (EN 16931 UBL). One of: xrechnung, xrechnung-ubl, zugferd, ubl, zugferd-pdf. |
language | string | Language of the labels on a zugferd-pdf page: de or en (default: de when the seller is in Germany or Austria, otherwise en). One of: de, en. |
Request
Over HTTP, with a card key from /credits:
curl -H "Authorization: Bearer adt_…" "https://agent-data-tools.revmesh2074.workers.dev/einvoice/create?invoice=%7B%22number%22%3A%22RE-2026-0042%22%2C%22issueDate%22%3A%222026-11-14%22%2C%22dueDate%22%3A%222026-12-14%22%2C%22buyerReference%22%3A%2204011000-12345-06%22%2C%22seller%22%3A%7B%22name%22%3A%22Muster%20Software%20GmbH%22%2C%22vatId%22%3A%22DE123456789%22%2C%22street%22%3A%22Hauptstrasse%201%22%2C%22postCode%22%3A%2210115%22%2C%22city%22%3A%22Berlin%22%2C%22country%22%3A%22DE%22%2C%22contactName%22%3A%22Erika%20Muster%22%2C%22phone%22%3A%22%2B49%2030%201234567%22%2C%22email%22%3A%22rechnung%40muster-software.example%22%7D%2C%22buyer%22%3A%7B%22name%22%3A%22Kunde%20AG%22%2C%22street%22%3A%22Marktplatz%205%22%2C%22postCode%22%3A%2220095%22%2C%22city%22%3A%22Hamburg%22%2C%22country%22%3A%22DE%22%2C%22email%22%3A%22einkauf%40kunde.example%22%7D%2C%22lines%22%3A%5B%7B%22name%22%3A%22Beratung%22%2C%22quantity%22%3A8%2C%22unit%22%3A%22HUR%22%2C%22unitPrice%22%3A120%2C%22vatRate%22%3A19%7D%2C%7B%22name%22%3A%22Softwarelizenz%22%2C%22quantity%22%3A1%2C%22unitPrice%22%3A49.9%2C%22vatRate%22%3A19%7D%5D%2C%22payment%22%3A%7B%22iban%22%3A%22DE02120300000000202051%22%2C%22terms%22%3A%22Zahlbar%20innerhalb%20von%2030%20Tagen%22%7D%7D"
Or one of your 3 free calls, no key:
curl "https://agent-data-tools.revmesh2074.workers.dev/einvoice/create?invoice=%7B%22number%22%3A%22RE-2026-0042%22%2C%22issueDate%22%3A%222026-11-14%22%2C%22dueDate%22%3A%222026-12-14%22%2C%22buyerReference%22%3A%2204011000-12345-06%22%2C%22seller%22%3A%7B%22name%22%3A%22Muster%20Software%20GmbH%22%2C%22vatId%22%3A%22DE123456789%22%2C%22street%22%3A%22Hauptstrasse%201%22%2C%22postCode%22%3A%2210115%22%2C%22city%22%3A%22Berlin%22%2C%22country%22%3A%22DE%22%2C%22contactName%22%3A%22Erika%20Muster%22%2C%22phone%22%3A%22%2B49%2030%201234567%22%2C%22email%22%3A%22rechnung%40muster-software.example%22%7D%2C%22buyer%22%3A%7B%22name%22%3A%22Kunde%20AG%22%2C%22street%22%3A%22Marktplatz%205%22%2C%22postCode%22%3A%2220095%22%2C%22city%22%3A%22Hamburg%22%2C%22country%22%3A%22DE%22%2C%22email%22%3A%22einkauf%40kunde.example%22%7D%2C%22lines%22%3A%5B%7B%22name%22%3A%22Beratung%22%2C%22quantity%22%3A8%2C%22unit%22%3A%22HUR%22%2C%22unitPrice%22%3A120%2C%22vatRate%22%3A19%7D%2C%7B%22name%22%3A%22Softwarelizenz%22%2C%22quantity%22%3A1%2C%22unitPrice%22%3A49.9%2C%22vatRate%22%3A19%7D%5D%2C%22payment%22%3A%7B%22iban%22%3A%22DE02120300000000202051%22%2C%22terms%22%3A%22Zahlbar%20innerhalb%20von%2030%20Tagen%22%7D%7D&trial=1"
Without a key, the same URL answers 402 Payment Required with x402 and MPP terms, so an agent with a wallet pays per call in USDC (Base, Polygon, Arbitrum or Solana over x402; Base or Tempo over MPP) and retries.
Example result
{
"format": "xrechnung",
"syntax": "CII",
"specification": "urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0",
"filename": "RE-2026-0042.xml",
"totals": {
"lineNet": 1009.9,
"taxBasis": 1009.9,
"tax": 191.88,
"grand": 1201.78,
"payable": 1201.78
},
"valid": true,
"warnings": [],
"xml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rsm:CrossIndustryInvoice xmlns:rsm=\"urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100\" …>…</rsm:CrossIndustryInvoice>",
"note": "Checked against a subset of the EN 16931 and XRechnung 3.0 business rules; this is not the official KoSIT validator and not tax advice."
}
From an AI agent (MCP)
Add the MCP server to Claude, Cursor or any MCP client. This tool is einvoice_create, and the first 25 successful calls are free:
https://agent-data-tools.revmesh2074.workers.dev/mcp