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)

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
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