Archivziele: eine Kopie jeder Rechnung in Ihrem eigenen Speicher

Invocourier-Hilfe - E-Rechnung für Shopify. | Zurück zu invocourier.com

Andere Sprachen: English | Français | Nederlands

Was das tut

Jede Rechnung und Rechnungskorrektur, die Invocourier ausstellt, bleibt im Archiv der App, und Sie können jederzeit alles herunterladen. Ein Archivziel geht einen Schritt weiter: In dem Moment, in dem ein Dokument ausgestellt wird, wird eine Kopie (das XML, plus PDF sofern vorhanden) in einen Speicher übertragen, den Sie kontrollieren. Sie sind nie von der App abhängig, um Ihre gesetzlichen Aufzeichnungen zu halten, und die Kopien kommen weiter an, ohne dass jemand etwas tun muss.

Heute verfügbar: ein signierter Webhook (Zapier, Make, n8n, eigener Endpunkt), ein S3-kompatibler Bucket (Amazon S3, Hetzner, Cloudflare R2, Scaleway, OVHcloud, Backblaze, Wasabi, DigitalOcean, MinIO) ein SFTP-Server die Cloud-Speicher Google Drive, Dropbox und OneDrive sowie WebDAV (Nextcloud, ownCloud, Synology, Storage Box). Automatische Archivkopien per E-Mail gibt es ebenfalls, unabhängig hiervon.

Übertragungen sind bewusst „best effort“: Sie verzögern oder blockieren die Rechnungsstellung nie, und das Archiv in der App bleibt der maßgebliche Datensatz. Ein Ziel, das ausfällt, wird mehrere Tage lang erneut versucht und dann auf der Startseite angezeigt.

Einrichtung

Öffnen Sie die App und gehen Sie zu Archivziele (auch aus den Einstellungen verlinkt, neben der Archiv-E-Mail-Adresse).

  1. Wählen Sie unter Ziel hinzufügen den Typ und klicken Sie auf Hinzufügen.
  2. Tragen Sie die Details des Ziels ein (bei einem Webhook: die Endpunkt-URL) und klicken Sie auf Speichern und testen.
  3. Die App führt sofort einen Verbindungstest aus. Ist er erfolgreich, zeigt das Ziel Aktiv und erhält ab dann jedes ausgestellte Dokument. Schlägt er fehl, wird die Antwort des Ziels angezeigt, und es wird nichts gesendet, bis ein Test erfolgreich ist.

Jede Änderung an den Verbindungsdetails setzt das Ziel zurück auf Test ausstehend, sodass ein Tippfehler nie still Dokumente ins Leere schicken kann. Pausieren behält die Einstellungen, stoppt aber das Senden; Entfernen löscht sie.

Zugangsdaten und Geheimnisse werden verschlüsselt gespeichert und in der App nie angezeigt, außer Sie fordern sie an (der Signaturschlüssel des Webhooks).

Webhook

Ein HTTPS-POST pro Dokument an die von Ihnen eingetragene URL. Es werden nur https://-URLs auf öffentlichen Hosts akzeptiert. Die Anfrage ist mit einem Schlüssel signiert, der beim Anlegen des Webhooks erzeugt wurde; er bleibt gleich, wenn Sie die URL ändern, Ihr Empfänger braucht ihn also nur einmal. Signaturschlüssel anzeigen im Bearbeitungsformular des Webhooks zeigt ihn an.

Header

HeaderWert
Content-Typeapplication/json
X-Invocourier-Eventdocument.issued, oder ping beim Verbindungstest
X-Invocourier-DeliveryEine Kennung dieses Versuchs (ein erneuter Versuch bekommt eine neue)
X-Invocourier-TimestampUnix-Zeit in Sekunden zum Zeitpunkt der Signatur
X-Invocourier-Signaturev1= gefolgt vom HMAC in Hexadezimal (siehe unten)
User-AgentInvocourier-Webhook/1

Body

{
  "event": "document.issued",
  "shop": "ihr-shop.myshopify.com",
  "sentAt": "2026-09-09T10:15:02.000Z",
  "document": {
    "id": 12,
    "number": "INV-12",
    "type": "invoice",              // oder "credit_note"
    "correctsNumber": null,         // Rechnungskorrektur: Nummer der korrigierten Rechnung
    "orderName": "#1012",
    "orderId": "gid://shopify/Order/1234567890",
    "issueDate": "2026-09-09",
    "profile": "peppolBis3",        // peppolBis3 | xrechnung | en16931
    "currency": "EUR",
    "totalExclVat": "100.00",
    "totalVat": "21.00",
    "totalInclVat": "121.00",
    "buyerName": "Buyer BV",
    "buyerVatId": "BE0123456749"
  },
  "files": [
    { "name": "INV-12.xml", "contentType": "application/xml", "size": 4821, "content": "PD94bWwg..." },
    { "name": "INV-12.pdf", "contentType": "application/pdf", "size": 61230, "content": "JVBERi0x..." }
  ]
}

content ist die Datei, Base64-kodiert. Das XML ist immer dabei; das PDF nur bei Profilen, die eines erzeugen (das deutsche XRechnung/Factur-X-Hybrid und PDF-Rechnungen an Verbraucher). Der ping-Test enthält nur event, shop und sentAt.

Ihr Endpunkt muss innerhalb von 15 Sekunden mit einem 2xx-Status antworten. Alles andere, auch eine Weiterleitung, zählt als Fehlschlag und wird wiederholt. Antworten Sie zuerst und verarbeiten Sie danach, wenn Ihre Verarbeitung langsam ist.

Signatur prüfen

Empfohlen, sobald Ihr Endpunkt für jedermann erreichbar ist (eine bloße URL ist kein Geheimnis). Berechnen Sie HMAC-SHA256(secret, timestamp + "." + rawBody), wobei timestamp der Header-Wert und rawBody der Body genau wie empfangen ist, und vergleichen Sie in konstanter Zeit mit dem Hexadezimalwert nach v1=. Weisen Sie Anfragen zurück, deren Zeitstempel mehr als fünf Minuten von Ihrer Uhr abweicht; das verhindert Replays. In Node.js:

import { createHmac, timingSafeEqual } from "node:crypto";

function verify(secret, headers, rawBody) {
  const ts = Number(headers["x-invocourier-timestamp"]);
  if (!Number.isInteger(ts) || Math.abs(Date.now() / 1000 - ts) > 300) return false;
  const expected = "v1=" + createHmac("sha256", secret).update(`${ts}.${rawBody}`).digest("hex");
  const given = headers["x-invocourier-signature"] ?? "";
  return expected.length === given.length && timingSafeEqual(Buffer.from(expected), Buffer.from(given));
}

Die „Catch hook“-URLs von Zapier, Make und n8n enthalten ein langes zufälliges Token, das nur Sie kennen; dort ist die Prüfung optional.

Rezepte

S3-kompatibler Bucket

Jedes Dokument wird als Objekt namens Präfix/JJJJ/MM/INV-12.xml (und .pdf, sofern vorhanden) hochgeladen: Ein Jahr ist ein Ordner, ein Monat ein Unterordner. Wählen Sie Ihren Anbieter, dann sind Endpunkt, Region und Adressierung vorausgefüllt; Sie ergänzen den Bucket-Namen, ein optionales Ordner-Präfix und ein Zugangsschlüsselpaar.

AnbieterWissenswertes
Amazon S3Endpunkt https://s3.<Region>.amazonaws.com; das Regionsfeld muss zur Region des Buckets passen. Legen Sie einen IAM-Benutzer mit s3:PutObject (und s3:DeleteObject für das Aufräumen des Tests) auf dem Bucket an.
Hetzner Object StorageEndpunkt je Standort (fsn1, nbg1, hel1), Region = Standortname, S3-Zugangsdaten aus der Cloud Console.
Cloudflare R2Endpunkt https://<Konto-ID>.r2.cloudflarestorage.com, Region auto, ein R2-API-Token mit Objekt-Lese- und Schreibrecht auf dem Bucket.
Scaleway, OVHcloud, Backblaze B2, Wasabi, DigitalOcean SpacesVoreinstellungen für ihre europäischen Regionen; ändern Sie Endpunkt und Region gemeinsam, wenn Ihr Bucket woanders liegt. Backblaze: einen auf den Bucket beschränkten Application Key verwenden, seine Key-ID als Access Key ID.
MinIO, Garage, Ceph, andereTragen Sie Endpunkt und Region ein, die Ihr Server erwartet (oft us-east-1); Path-Style-Adressierung eingeschaltet lassen.

Nur https://-Endpunkte werden akzeptiert. Anfragen werden mit AWS Signature Version 4 signiert; die App listet oder liest Ihren Bucket nie. Der Verbindungstest schreibt invocourier-connection-test.txt unter dem Präfix und löscht sie wieder (ein Schlüssel, der schreiben, aber nicht löschen darf, besteht trotzdem; die Datei bleibt).

SFTP-Server

Dateien werden per SSH nach Ordner/JJJJ/MM/ geschrieben, mit Passwort oder privatem Schlüssel (PEM- oder OpenSSH-Format, optionale Passphrase); fehlende Verzeichnisse werden angelegt. Jeder SFTP-Server funktioniert: Ihr Webhoster, ein NAS, eine Hetzner Storage Box, ein eigener Server. Unverschlüsseltes FTP wird bewusst nicht angeboten.

Host-Key: Der erste erfolgreiche Verbindungstest merkt sich den Fingerabdruck des Server-Schlüssels, und jeder spätere Upload prüft ihn. Wird der Server neu aufgesetzt und ändert sich sein Schlüssel, stoppen die Uploads mit einer klaren Fehlermeldung, bis Sie den Verbindungstest erneut ausführen; der akzeptiert den neuen Schlüssel und zeigt seinen Fingerabdruck.

Der Verbindungstest meldet sich an, legt den Ordner bei Bedarf an, schreibt dort invocourier-connection-test.txt und entfernt sie wieder.

Google Drive, Dropbox, OneDrive

Die Cloud-Speicher verbinden sich per Klick statt mit Zugangsdaten: Google Drive verbinden (bzw. Dropbox, OneDrive) öffnet die Zustimmungsseite des Anbieters oben im Browser, Sie stimmen zu und landen wieder in der App, mit dem Ziel bereits getestet und aktiv. Der Zugriff ist so eng, wie es der jeweilige Anbieter erlaubt:

Der Anbieter gibt Invocourier ein langlebiges Token, das verschlüsselt gespeichert und automatisch erneuert wird. Entziehen Sie der App den Zugriff in den Einstellungen Ihres Google-, Dropbox- oder Microsoft-Kontos, stoppen die Uploads mit einer klaren Meldung, und Neu verbinden in der App stellt sie wieder her. Google lässt eine sechs Monate ungenutzte Verbindung zudem ablaufen; ein Shop mit regelmäßigen Rechnungen erreicht das nie.

Den Ordner später umzubenennen oder zu verschieben ist bei Google Drive unproblematisch (die App merkt sich den Ordner selbst) und bei den App-Ordnern ohne Belang. Wird der Ordner gelöscht, legt die App ihn beim nächsten Dokument neu an.

WebDAV (Nextcloud, ownCloud, Synology, Storage Box)

Tragen Sie die WebDAV-Adresse des Ordners ein, in den die Dokumente sollen, plus Benutzername und Passwort; Dateien werden darunter nach JJJJ/MM/ geschrieben, Ordner bei Bedarf angelegt. Es werden nur https://-Adressen akzeptiert.

ServerEinzutragende Ordner-URL
Nextcloud, ownCloudhttps://cloud.example.com/remote.php/dav/files/BENUTZER/Rechnungen/ (Dateien-App → Einstellungen unten links zeigt Ihre WebDAV-Basis). Bei aktivierter Zwei-Faktor-Authentifizierung unter Einstellungen → Sicherheit ein App-Passwort anlegen und dieses verwenden.
Synology NASPaket WebDAV Server aktivieren (HTTPS-Port 5006): https://nas.example.com:5006/Rechnungen/, mit einem Benutzer, der Schreibrechte auf diesen gemeinsamen Ordner hat.
Hetzner Storage BoxWebDAV im Robot aktivieren: https://uXXXXXX.your-storagebox.de/Rechnungen/, Benutzername uXXXXXX.
IONOS HiDrive, andereDie von Ihrem Anbieter dokumentierte WebDAV-URL, endend auf den gewünschten Ordner.

Der Verbindungstest prüft den Ordner (und legt ihn samt fehlender übergeordneter Ordner an, falls er noch nicht existiert), schreibt invocourier-connection-test.txt und entfernt sie wieder. Ein falsches Passwort erscheint als „authentication refused“, eine Nicht-WebDAV-Adresse als „method not allowed“.

Wiederholungen, Fehler und was Sie sehen

Jedes Dokument wird im Moment der Ausstellung übertragen. Schlägt das fehl, wird es nach 5 Minuten, 30 Minuten, 2 Stunden, 12 Stunden und dann täglich erneut versucht, insgesamt etwa dreieinhalb Tage. Eine Übertragung, die danach immer noch fehlschlägt, wird als fehlgeschlagen markiert; die Startseite zeigt, wie viele Dokumente betroffen sind, und die Seite Archivziele hat einen Button Fehlgeschlagene Kopien wiederholen, der ihnen einen neuen Durchlauf gibt, sobald Sie den Empfänger repariert haben.

Nach drei Fehlschlägen in Folge zeigt das Ziel selbst Gestört mit dem letzten Fehler; beim nächsten erfolgreichen Versuch wird es von selbst wieder Aktiv. Jedes Ziel zeigt, wie viele Dokumente kopiert wurden, eingereiht sind und fehlgeschlagen sind.

Ein gestörtes Ziel beeinflusst nie die Rechnungsstellung oder die Zustellung an Ihre Käufer, und das Archiv in der App enthält immer jedes Dokument.

Vorhandene Dokumente kopieren

Ein Ziel erhält nur Dokumente, die nach seiner Aktivierung ausgestellt wurden. Vorhandene Dokumente kopieren reiht alles ein, was bereits im Archiv liegt und das Ziel noch nicht erhalten hat; die Kopien laufen im Hintergrund, etwa 50 alle fünf Minuten, und jedes Dokument wird an ein bestimmtes Ziel höchstens einmal übertragen.

Datenschutz

Die Übertragung an ein Ziel erfolgt auf Ihre dokumentierte Weisung in einen Speicher, der Ihnen gehört oder den Sie selbst vertraglich nutzen. Der Empfänger ist damit Ihr eigener Auftragsverarbeiter (oder Sie selbst), kein Unterauftragsverarbeiter von Invocourier; stellen Sie sicher, dass Ihr Vertrag mit diesem Anbieter Rechnungsdaten abdeckt. Es wird nur verschlüsselter Transport (HTTPS) verwendet; unverschlüsseltes FTP wird bewusst nicht angeboten.

Das Entfernen eines Ziels löscht seine Einstellungen und Geheimnisse sofort; bereits übertragene Dokumente bleiben, wo Sie sie abgelegt haben. Bei der Deinstallation der App wird ebenfalls alles gelöscht.