Belegschmied

Integrations-Guide

Microsoft 365 anbinden: Power Automate und Graph API

Einen SharePoint-Ordner per Power Automate an die E-Rechnungs-Konvertierung anbinden, mit und ohne Premium-Lizenz, und den Versand über die Graph API aus dem eigenen Postfach einrichten. Mit Flow-Schritten, HTTP-Body, Entra-Berechtigungen und den Fehlerbildern 401 und 403.

12 Min. Zuletzt aktualisiert: 2026-08-31

Kurze Antwort: Zwei Bausteine, unabhängig voneinander nutzbar. Einlieferung: ein Power-Automate-Flow beobachtet einen SharePoint- oder OneDrive-Ordner und übergibt jede neue PDF, per HTTP-Aufruf mit Premium-Lizenz oder per Mail ohne. Versand: Belegschmied verschickt die fertige E-Rechnung über die Graph API aus einem echten Postfach Ihrer Organisation, sodass sie in Ihren gesendeten Elementen liegt.

Für die Fachabteilung ändert sich dabei nichts. Sie legt ihre Rechnung ab, wo sie sie ohnehin ablegt. Das ist der Grund, warum dieser Weg in Häusern mit einer Restmenge neben dem führenden System meist der schnellste ist: er braucht keine Entwicklung, nur die vorhandene Microsoft-365-Umgebung.

Teil 1: Einlieferung per Power Automate

Der Flow mit Premium-Lizenz (HTTP-Aktion)

Drei Schritte.

Schritt 1 – Auslöser. „Wenn eine Datei erstellt wird (nur Eigenschaften)" auf der SharePoint-Bibliothek, in der die fertigen Rechnungen landen. Auf OneDrive heißt der Auslöser „Wenn eine Datei erstellt wird". Grenzen Sie ihn auf den Ordner ein, in dem wirklich nur fertige Rechnungen liegen, nicht auf die ganze Bibliothek.

Schritt 2 – Dateiinhalt holen. „Dateiinhalt abrufen" mit dem Bezeichner aus dem Auslöser.

Schritt 3 – HTTP-Aufruf. Methode POST, URL https://belegschmied.de/api/v1/invoices/outbound, Header Authorization: Bearer bs_live_ihr_key. Der Body ist multipart, in Power Automate über $multipart:

{
  "$content-type": "multipart/form-data",
  "$multipart": [
    {
      "headers": {
        "Content-Disposition": "form-data; name=\"pdf\"; filename=\"@{triggerOutputs()?['body/{Name}']}\""
      },
      "body": "@{body('Dateiinhalt_abrufen')}"
    }
  ]
}

Soll der Flow den Empfänger mitgeben statt ihn aus der PDF lesen zu lassen, kommt ein zweiter Teil dazu:

{
  "headers": { "Content-Disposition": "form-data; name=\"recipient_email\"" },
  "body": "kreditoren@kunde.de"
}

Die Antwort ist 202 Accepted mit einer conversion_id. Wer den Endstand im Flow braucht, hängt eine Verzögerung und einen GET auf /api/v1/conversions/{id} an; für den Normalbetrieb ist das nicht nötig, weil Fehler ohnehin als Mail an den Einlieferer gehen und in der App sichtbar sind.

Den Schlüssel nicht in den Flow schreiben. Legen Sie ihn in Azure Key Vault oder als sichere Umgebungsvariable ab und referenzieren Sie ihn. Ein API-Schlüssel im Klartext ist in jeder Flow-Definition mitlesbar, die exportiert oder kopiert wird.

Die vollständige Endpunktbeschreibung mit allen Feldern, Statuswerten und Fehlercodes steht in der REST-API-Dokumentation. Die API ist ab dem Business-Tarif enthalten.

Der Flow ohne Premium-Lizenz (Mail-Aktion)

Die HTTP-Aktion ist premium, der Office-365-Outlook-Connector nicht. Derselbe Flow führt deshalb auch so zum Ziel:

Schritt 1 und 2 wie oben, Auslöser und Dateiinhalt.

Schritt 3 – „E-Mail senden (V2)". Empfänger ist die Versandadresse Ihres Arbeitsbereichs, ihr-slug@in.belegschmied.de. Betreff frei, zum Beispiel der Dateiname. Unter „Erweiterte Optionen" die Anlage hinzufügen: Name aus dem Auslöser, Inhalt aus Schritt 2.

Am Ergebnis ändert das nichts. Extraktion, Prüfungen, Erzeugung, Validierung und Versand laufen identisch, der Unterschied ist nur der Transportweg der PDF zu uns.

Die Falle: der Flow-Absender muss freigegeben sein

Belegschmied nimmt Rechnungen per Mail nur von berechtigten Absendern an. Automatisch berechtigt sind die Mitglieder des Arbeitsbereichs. Ein Flow sendet aber typischerweise aus einem Dienst- oder Sammelpostfach, und diese Adresse ist zunächst keins.

Passiert das, wird die Mail abgewiesen und der Absender bekommt eine Benachrichtigung. Abhilfe: die Adresse, aus der der Flow sendet, unter Einstellungen in die Absenderliste aufnehmen. Prüfen Sie im Zweifel, welche Adresse Power Automate tatsächlich verwendet, das ist das Konto der Verbindung und nicht zwingend das, was im Flow steht.

Wenn der Ordner auch Nicht-Rechnungen enthält

Der Auslöser feuert bei jeder Datei. Bauen Sie deshalb eine Bedingung ein, die auf .pdf prüft, bevor die Einlieferung läuft. Zwei weitere Punkte, die in der Praxis auffallen:

  • Eine PDF je Rechnung. Sammel-PDFs werden abgelehnt (MULTIPLE_INVOICES), weil eine E-Rechnung genau eine Rechnung abbildet.
  • Doppelte Ablage ist ungefährlich. Landet dieselbe Rechnung zweimal im Ordner, greift die Eindeutigkeit der Rechnungsnummer: die zweite Einlieferung endet mit DUPLICATE_INVOICE_NUMBER, es entsteht keine zweite E-Rechnung.

Teil 2: Versand über die Graph API

Standardmäßig verschickt Belegschmied über die eigene Infrastruktur. Wer stattdessen aus dem eigenen Microsoft 365 versenden will, richtet eine App-Registrierung ein. Die Rechnung geht dann aus einem echten Postfach Ihrer Organisation raus und liegt danach in dessen gesendeten Elementen. Dieser Versandweg gehört zum Enterprise-Tarif; die anderen drei Wege stehen in der Anleitung zu den Versandwegen.

App-Registrierung in Entra

  1. Entra Admin Center → App-Registrierungen → Neue Registrierung. Name frei, etwa „Belegschmied Rechnungsversand". Kein Redirect-URI nötig, der Ablauf ist ein Client-Credentials-Flow ohne Benutzeranmeldung.
  2. Zertifikate und Geheimnisse → Neuer geheimer Clientschlüssel. Wert sofort kopieren, er wird danach nicht mehr angezeigt. Ablaufdatum notieren: läuft das Geheimnis ab, bricht der Versand mit einem Authentifizierungsfehler ab.
  3. API-Berechtigungen → Microsoft Graph → Anwendungsberechtigungen → Mail.Send. Anwendungsberechtigung, nicht delegiert.
  4. Administratorzustimmung erteilen. Ohne diesen Klick bleibt die Berechtigung wirkungslos und Graph antwortet mit 401 oder 403.
  5. Zugriff auf ein Postfach einschränken (empfohlen). Mail.Send als Anwendungsberechtigung gilt sonst für jedes Postfach im Tenant. In Exchange Online PowerShell begrenzt eine Anwendungszugriffsrichtlinie das auf eine E-Mail-aktivierte Sicherheitsgruppe, die nur das Versandpostfach enthält:
New-ApplicationAccessPolicy `
  -AppId <Anwendungs-ID> `
  -PolicyScopeGroupId rechnungsversand@ihrefirma.de `
  -AccessRight RestrictAccess `
  -Description "Belegschmied darf nur aus dem Rechnungspostfach senden"
  1. In Belegschmied eintragen. Unter Einstellungen → Versandweg: Verzeichnis-ID (Tenant), Anwendungs-ID (Client), Geheimnis und die UPN des Versandpostfachs. Danach ein Testversand.

Was technisch passiert

Belegschmied holt sich ein Token über den Client-Credentials-Flow gegen login.microsoftonline.com/{tenant}/oauth2/v2.0/token mit dem Scope https://graph.microsoft.com/.default und ruft anschließend POST /users/{versandpostfach}/sendMail auf, mit saveToSentItems: true. Tokens werden je Tenant und Client zwischengespeichert und gelten rund eine Stunde.

Bei Anhängen von zusammen mehr als etwa 2,5 MB geht Belegschmied einen anderen Weg: Entwurf anlegen, Anhänge einzeln hochladen, große davon in Blöcken über eine Upload-Session, dann senden. Dieser Weg braucht zusätzlich die Anwendungsberechtigung Mail.ReadWrite, weil Mail.Send nur /sendMail abdeckt und nicht das Anlegen eines Entwurfs. Fehlt sie, meldet Belegschmied das im Klartext statt es zu verschlucken.

Für typische ZUGFeRD-Anhänge ist das nicht relevant, die liegen deutlich darunter. Relevant wird es bei Rechnungen mit umfangreichen Anlagen.

Fehlerbilder

SymptomUrsacheAbhilfe
401 oder 403 direkt beim TestversandAdministratorzustimmung fehlt, oder Mail.Send wurde als delegierte statt als Anwendungsberechtigung vergebenBerechtigungstyp prüfen, Zustimmung erteilen
403 nur für ein bestimmtes PostfachAnwendungszugriffsrichtlinie schließt dieses Postfach ausRichtlinie prüfen, Postfach in die Gruppe aufnehmen
Funktioniert, bricht nach Monaten abClientgeheimnis abgelaufenNeues Geheimnis erzeugen und hinterlegen
403 nur bei großen AnhängenMail.ReadWrite fehlt für den EntwurfswegBerechtigung ergänzen und Zustimmung erteilen, oder Anhangsgröße reduzieren
Rechnung erzeugt, aber nicht versendetKein Empfänger ermittelbar, oder Freigabe aktivEmpfängeradresse auf die Rechnung setzen oder als recipient_email mitgeben; Freigabestatus in der App prüfen

Was dieser Weg nicht ist

Es gibt keine vorgefertigte Verbindung von uns im Power-Automate-Connector-Katalog und kein installierbares Add-in. Der Flow besteht aus Standardbausteinen, die oben vollständig beschrieben sind. Wenn Sie eine fertige Flow-Definition zum Import möchten, schreiben Sie an kontakt@belegschmied.de, wir stellen sie passend zu Ihrer Ablagestruktur bereit.

Anbindungen an SharePoint-Strukturen mit eigener Logik, an ein Dokumentenmanagement oder an ein Archivsystem sind Projektarbeit und werden als solche vereinbart.

Bevor Sie den Flow bauen

Prüfen Sie zuerst, ob Ihre Rechnungsvorlage trägt. Ein Flow, der eine unvollständige Vorlage zuverlässig einliefert, automatisiert nur die Ablehnung. Der Test dauert zehn Minuten und braucht kein Konto: eine typische Rechnung durch PDF zu ZUGFeRD schicken. Welche Felder dabei zählen, steht im Feldabgleich.

Häufige Fragen

Braucht der Flow eine Premium-Lizenz?

Für den direkten API-Weg ja, weil die HTTP-Aktion in Power Automate premium ist. Ohne Premium führt derselbe Flow zum selben Ergebnis über die Aktion „E-Mail senden (V2)“ des Office-365-Outlook-Connectors: die PDF geht als Anhang an die Versandadresse des Arbeitsbereichs. Verarbeitung, Prüfungen und Versand sind auf beiden Wegen identisch.

Warum wird meine per Flow eingelieferte Rechnung abgelehnt?

Vermutlich steht das sendende Postfach nicht auf der Absenderliste. Belegschmied nimmt Mails nur von berechtigten Absendern an: Mitglieder des Arbeitsbereichs sind es automatisch, jede andere Adresse – etwa ein Dienstpostfach, aus dem der Flow sendet – muss unter Einstellungen als Absender freigegeben werden.

Welche Graph-Berechtigung braucht der Versand?

Mail.Send als Application Permission mit Admin-Consent. Nur wenn Anhänge zusammen über etwa 2,5 MB liegen, kommt Mail.ReadWrite dazu, weil dieser Weg über einen Entwurf mit Upload-Session läuft. Fehlt die Berechtigung, antwortet Graph mit 401 oder 403.

Landet die versendete Rechnung in unseren gesendeten Elementen?

Ja. Der Versand läuft über ein echtes Postfach Ihrer Organisation, die Mail liegt danach in dessen Ordner „Gesendete Elemente“ und damit in Ihrer eigenen Compliance-Ablage.

Weitere Integrations-Guides

Anbindung besprechen

Sagen Sie uns, welches System die Rechnungen erzeugt und wie sie heute verschickt werden. Wir sagen Ihnen, welcher Weg passt und was er kostet.

Wir verwenden Ihre Angaben ausschließlich, um Sie zu dieser Anfrage zu kontaktieren. Keine Weitergabe an Dritte, kein Newsletter. Details in der Datenschutzerklärung.