Skip to content

n8n Integration ​

Erstelle EU-konforme E-Rechnungen automatisch mit n8n und thelawin.dev. Ein HTTP Request Node reicht — JSON rein, PDF/A-3 raus.

Voraussetzungen ​

  • n8n (Self-Hosted oder n8n Cloud)
  • thelawin.dev API Key (zum Testen: env_sandbox_demo_public)

Workflow: Rechnung auf Knopfdruck ​

1. Manual Trigger ​

Erstelle einen neuen Workflow und fuege einen Manual Trigger Node hinzu (oder einen Webhook Trigger, Schedule Trigger, etc.).

2. HTTP Request Node ​

Fuege einen HTTP Request Node hinzu:

FeldWert
MethodPOST
URLhttps://api.thelawin.dev/v1/generate
AuthenticationHeader Auth
Header NameX-API-Key
Header Valueenv_sandbox_demo_public
Body Content TypeJSON
Send BodyOn

JSON Body:

json
{
  "format": "zugferd",
  "template": "minimal",
  "locale": "de",
  "invoice": {
    "number": "RE-{{ $now.format('yyyy') }}-{{ String($runIndex + 1).padStart(3, '0') }}",
    "date": "{{ $now.format('yyyy-MM-dd') }}",
    "due_date": "{{ $now.plus(30, 'days').format('yyyy-MM-dd') }}",
    "currency": "EUR",
    "seller": {
      "name": "Deine Firma GmbH",
      "street": "Musterstrasse 1",
      "city": "Berlin",
      "postal_code": "10115",
      "country": "DE",
      "vat_id": "DE123456789"
    },
    "buyer": {
      "name": "Kunde AG",
      "city": "Muenchen",
      "country": "DE"
    },
    "items": [
      {
        "description": "Beratungsleistung",
        "quantity": 8,
        "unit": "HUR",
        "unit_price": 150.00,
        "vat_rate": 19
      }
    ],
    "payment": {
      "iban": "DE89370400440532013000",
      "terms": "Zahlbar innerhalb 30 Tagen"
    }
  }
}

3. PDF speichern ​

Die Response enthalt pdf_base64 (das PDF als Base64-String) und filename.

Option A: Als Datei speichern (Write Binary File Node)

Fuege einen Code Node hinzu, um Base64 in eine Datei zu konvertieren:

javascript
const pdfBase64 = $input.first().json.pdf_base64;
const filename = $input.first().json.filename;

const binaryData = Buffer.from(pdfBase64, 'base64');

return [{
  json: { filename },
  binary: {
    data: {
      data: pdfBase64,
      mimeType: 'application/pdf',
      fileName: filename,
    }
  }
}];

Danach: Write Binary File oder Send Email (mit Anhang) oder Google Drive Upload.

Option B: Per Email versenden

Fuege nach dem Code Node einen Send Email Node hinzu und haenge die Binary-Datei als Attachment an.

Workflow: Google Sheets → Rechnungen ​

Lese Rechnungsdaten aus einer Google Sheets Tabelle und generiere Rechnungen automatisch:

  1. Schedule Trigger — Taeglich um 9:00
  2. Google Sheets — Lese neue Zeilen (Spalten: Kunde, Beschreibung, Menge, Preis)
  3. HTTP Request — POST an thelawin.dev mit dynamischen Werten aus der Tabelle
  4. Google Drive — PDF hochladen
  5. Gmail — PDF an Kunden senden

Dynamische Werte aus Google Sheets ​

json
{
  "invoice": {
    "number": "RE-{{ $json.Rechnungsnummer }}",
    "date": "{{ $now.format('yyyy-MM-dd') }}",
    "seller": {
      "name": "Deine Firma GmbH",
      "vat_id": "DE123456789"
    },
    "buyer": {
      "name": "{{ $json.Kundenname }}",
      "city": "{{ $json.Stadt }}",
      "country": "DE"
    },
    "items": [
      {
        "description": "{{ $json.Beschreibung }}",
        "quantity": {{ $json.Menge }},
        "unit_price": {{ $json.Preis }},
        "vat_rate": 19
      }
    ]
  }
}

Workflow: Webhook → XRechnung (B2G) ​

Fuer Behoerden-Rechnungen mit Leitweg-ID:

json
{
  "format": "xrechnung",
  "invoice": {
    "number": "XR-2026-001",
    "date": "2026-01-15",
    "leitweg_id": "04011000-12345-67",
    "buyer_reference": "PO-2026-123",
    "seller": {
      "name": "Software GmbH",
      "vat_id": "DE987654321"
    },
    "buyer": {
      "name": "Bundesbehoerde"
    },
    "items": [
      {
        "description": "Software-Lizenz",
        "quantity": 1,
        "unit_price": 1000
      }
    ]
  }
}

Workflow-JSON zum Import ​

Kopiere diesen JSON-Workflow und importiere ihn in n8n ueber Workflow > Import from URL/File:

json
{
  "nodes": [
    {
      "parameters": {},
      "name": "Manual Trigger",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [250, 300]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.thelawin.dev/v1/generate",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendBody": true,
        "bodyParameters": {
          "parameters": []
        },
        "specifyBody": "json",
        "jsonBody": "{\n  \"format\": \"zugferd\",\n  \"template\": \"minimal\",\n  \"invoice\": {\n    \"number\": \"RE-2026-001\",\n    \"date\": \"2026-01-15\",\n    \"seller\": {\"name\": \"Test GmbH\", \"country\": \"DE\"},\n    \"buyer\": {\"name\": \"Kunde AG\"},\n    \"items\": [{\"description\": \"Service\", \"quantity\": 1, \"unit_price\": 100}]\n  }\n}",
        "options": {}
      },
      "name": "Generate Invoice",
      "type": "n8n-nodes-base.httpRequest",
      "position": [450, 300]
    }
  ],
  "connections": {
    "Manual Trigger": {
      "main": [[{"node": "Generate Invoice", "type": "main", "index": 0}]]
    }
  }
}

Haeufige Fehler ​

FehlerUrsacheLoesung
401 UnauthorizedKein oder falscher API KeyX-API-Key Header pruefen
422 Validation ErrorPflichtfelder fehlenerrors[].path in Response pruefen
402 Quota ExceededMonats-Kontingent aufgebrauchtPlan upgraden oder naechsten Monat warten
Binary-Datei ist leerBase64 nicht korrekt dekodiertCode Node mit Buffer.from(base64, 'base64') verwenden

Naechste Schritte ​

ZUGFeRD 2.4 & Factur-X 1.0.8 compliant