Microsoft Business Central anbinden: Drei-Tage-Abonnements, ein maesn-Payload
Abonnements in Business Central sind kein Einrichtungsschritt. Jedes läuft nach 72 Stunden ab, die Erneuerung verlangt denselben Validierungs-Handshake wie das Anlegen, und eine fehlgeschlagene Erneuerung erzeugt auf Ihrer Seite keinen Fehler, nur Stille. Über maesn gehört diese Uhr uns: Business Central validiert unseren Endpunkt, und Ihr Endpunkt empfängt die Ereignisse.


Eine Anfrage nennt eine Umgebung und eine Firma
Business Central ist Microsofts ERP für kleine und mittlere Unternehmen, und für einen Integrator ist die Adresse die bestimmende Eigenschaft. Ein Datensatz liegt in einer Firma innerhalb einer Umgebung, und eine Anfrage, die keine von beiden nennt, hat keine Adresse, an der sie ankommen kann.
Das zeigt sich in der URL. Jeder Ressourcenpfad führt die Umgebung und die Firma mit, vor Ihrem ersten nützlichen Aufruf brauchen Sie also zwei Ermittlungsaufrufe, um herauszufinden, welche ein bestimmter Kunde hat. Das Entra-Verzeichnis steht hinter beiden, es ist aber kein Wert, den Sie senden.
| Was es ist | Woher es kommt |
|---|---|
| Entra-Verzeichnis | Der Microsoft-Entra-Mandant Ihres Kunden, in dem Ihre App zugelassen ist. Er entscheidet, ob eine Anfrage überhaupt erlaubt ist, und er steckt im Token und nicht in der URL |
| Umgebung | Wird je Verzeichnis ermittelt und als environmentName gesendet. Produktion und Sandbox sind beide Umgebungen, weshalb eine Testverbindung eine echte Verbindung zu einer anderen Umgebung ist und kein Sondermodus |
| Firma | Wird je Umgebung ermittelt, als companyId gesendet, und es können bis zu 300 in einer sein. Größere Kunden sind hier der Normalfall |
Die Obergrenze von 300 Firmen aus Microsofts Betriebsgrenzen, geprüft am 7. August 2026. Die Ermittlungsendpunkte und die zwei Query-Parameter aus der maesn-Dokumentation zu Business Central, die festhält, dass environmentName und companyId die Werte sind, die ein Business-Central-Aufruf tragen muss.
Über maesn geschieht die Ermittlung beim Verbinden. Ihr Code tut dafür nichts. Business Central gehört zu den Systemen auf dem interaktiven Fluss, Ihr Kunde wählt also Umgebung und Firma auf einer Auswahlseite, und beide werden mit der Verbindung gespeichert.
Wo der Fluss nicht verwendet wird, werden sie als Query-Parameter environmentName und companyId übertragen. Wie sich das über Systeme hinweg verallgemeinern lässt, ist Unified Authentication.
Business Central ist eines der Zielsysteme, die für den interaktiven Fluss in der maesn-Authentifizierung gelistet sind, geprüft am 7. August 2026.
Wenn Sie die Objektabdeckung, die Entra-App-Registrierung und den AppSource-Eintrag an einer Stelle brauchen, ist das die Microsoft Dynamics 365 Business Central Schnittstelle. Was folgt, ist das, was die Plattform tut, nachdem Sie verbunden sind.
Welche Business-Central-Objekte Ereignisse senden
Das ist der Teil, den Business Central wirklich gut kann. Es sendet native Ereignisse, und das ist ungewöhnlich: Bei den meisten Buchhaltungsplattformen lesen Sie nach Zeitplan und vergleichen das Ergebnis mit dem, was Sie schon hatten.
Ein Abonnement gilt der Ressource, der Ereignistyp gehört nicht dazu. Eine Registrierung liefert also alle vier Arten dafür. Diese Objekte sind heute über maesn für Ereignisse freigeschaltet, und weitere lassen sich für einen Anwendungsfall zuschalten, der sie braucht.
| Heute für Ereignisse freigeschaltete Objekte | Ereignistypen |
|---|---|
| Konten, Gutschriften, Kunden, Dimensionen, Ausgaben, Rechnungen, Artikel, Buchungszeilen, Angebote, Kundenaufträge und Lieferanten | CREATED, UPDATED, DELETED und COLLECTION |
Ressourcen und Ereignistypen aus der maesn-Dokumentation zu Business Central, geprüft am 7. August 2026.
Bei Ausgaben ist das Senden von Ereignissen freigeschaltet, der Lesezugriff steht auf Anfrage. Ein Ereignis kommt an, und der Folgeaufruf ist noch nicht freigeschaltet. Das klären Sie besser im Onboarding, denn die Alternative ist, es während eines Vorfalls zu tun. Exact Online hat dieselbe Form bei Bankkonten.
Jedes Abonnement läuft nach drei Tagen ab
Hier steht der Satz, der ändert, wie Sie bauen. Microsoft wörtlich: Abonnements laufen nach drei Tagen ab, wenn sie nicht vorher erneuert werden. Abonnements werden erneuert, indem eine PATCH-Anfrage an das Abonnement gesendet wird. Die Frist ist am Abonnement selbst ablesbar, als expirationDateTime.
Ein Abonnement ist damit ein wiederkehrender Auftrag mit einer 72-Stunden-Frist, und er muss für jede Ressource laufen, für jede Firma, für jeden Kunden, dauerhaft.
- 1POST /subscriptions
Sie registrieren die Ressource, für die Sie Ereignisse wollen.
- 2GET ?validationToken=…eingehend
Business Central ruft Ihren Endpunkt auf und erwartet das Token mit einem 200 zurück.
- 3POST Ihr Endpunkteingehend
Ereignisse kommen als Array an: angelegt, geändert, gelöscht oder gesammelt.
- 4PATCH /subscriptions/{id}
Vor Stunde 72, und sie löst denselben Handshake erneut aus.
Verpassen Sie Schritt 4, und das Abonnement ist schlicht weg. Es kommt kein Fehler, weil nichts fehlgeschlagen ist. Die Ereignisse hören auf.
Die Erneuerung ist außerdem kein stiller PATCH. Microsoft verlangt den Validierungs-Handshake beim Anlegen und bei der Erneuerung: Business Central ruft Ihre Benachrichtigungs-URL mit einem validationToken im Query-String auf, und Sie müssen dieses Token im Body mit einem 200 zurückgeben.
Ein Endpunkt, der während eines Deployment-Fensters nicht erreichbar ist, kostet Sie deshalb die Erneuerung. Und eine fehlgeschlagene Erneuerung erzeugt nirgends einen Fehler, weil nichts fehlgeschlagen ist. Die Ereignisse kommen einfach nicht mehr an.
Über maesn ist dieser Auftrag nicht Ihrer. Die bei Business Central registrierte URL ist unsere, Ihr Endpunkt ist bei uns registriert, und die Erneuerung samt dem Handshake, der dazugehört, läuft auf unserer Seite. Bei Ihrem Endpunkt kommt das Ereignis an.
PATCH /api/v2.0/subscriptions('{id}')→ 200 { "expirationDateTime": "2026-01-29T08:48:40Z" }# bevor diese Antwort ankommt, ruft Business Central Sie auf:POST https://ihr-endpunkt?validationToken=abc123← 200 abc123 # das Token, im Body. Kein Token, keine Erneuerung.
Die Form der Anfrage, der Token-Austausch und der Ablauf nach drei Tagen aus Microsofts Webhook-Dokumentation, geprüft am 7. August 2026. Pfade zur Lesbarkeit gekürzt.
Eine Umgebung darf 200 Webhook-Abonnements halten, gezählt über jede App, die sie abonniert, und Business Central erlaubt bis zu dreihundert Firmen in einer Umgebung. Abonnements werden je Ressource und je Firma gezählt, die zwei Grenzen treffen sich also früher, als jede für sich vermuten lässt.
Die praktische Folge ist, dass Sie bei einem großen Kunden nur die Ressourcen abonnieren, die Sie tatsächlich nutzen, und das entscheiden Sie im Onboarding.
Die Grenze von 200 Abonnements aus den Betriebsgrenzen für Business Central online, Abschnitt OData request limits per environment, geprüft am 7. August 2026.
Ein Sammelereignis trägt einen Zeitraum und keine Datensatz-ID
Business Central hat einen vierten Ereignistyp, den die anderen Systeme nicht haben, und auf ihn sollten Sie Ihren Entwurf auslegen. Ändern sich mehrere Datensätze einer Ressource kurz hintereinander, hält es sie zurück und sendet ein einzelnes COLLECTION-Ereignis, das einen Zeitraum trägt.
Das Ereignis sagt Ihnen also, wann sich etwas geändert hat, und nicht was. Das ist die eine Stelle im einheitlichen Payload, an der filterDate gefüllt ist, und die Dokumentation sagt es in einem Kommentar am Feld: nur für Sammelereignistypen unterstützt.
| System | filterDate | userId |
|---|---|---|
| Business Central | bei Sammelereignissen gefüllt | null |
| Xero | null | gefüllt |
| Exact Online | null | null |
| Lexware Office | null | null |
Jede Zeile aus der eigenen Seite des jeweiligen Systems in der maesn-Dokumentation, geprüft am 7. August 2026. Jeder der vier Beispiel-Bodies trägt resource und resourceId; die zwei Spalten oben sind die Felder, die ein System zusätzlich ergänzen kann, und jede Doku kennzeichnet ihr eigenes null mit dem Grund. Ein null ist hier eine Tatsache über das Quellsystem und keine Lücke im Modell, und genau dafür gibt es ein Common Data Model.
[{"eventType": "COLLECTION","filterDate": "2026-01-26T08:48:40Z", // nur bei Sammelereignissen"resource": "CUSTOMER","resourceId": null,"userId": null // hier nicht unterstützt}]// mit einem gefilterten Lesevorgang gegen die einheitliche Schnittstelle auflösenGET /customers?lastModifiedAt=2026-01-26T08:48:40Z
Feldnamen aus der maesn-Dokumentation zu Business Central, deren Beispiel-Body ein UPDATED-Ereignis ist. Die Form des Sammelereignisses hier ist aus dem eigenen Satz jener Seite abgeleitet, statt einzelne IDs zu senden, liefert ein Collection-Event einen Datumsbereich. Die Doku zeigt kein Beispiel für ein Sammelereignis. Ereignisse kommen als Array an, weil Microsoft Benachrichtigungen aus mehreren Abonnements in eine Zustellung packen kann.
Dieser Lesevorgang ist Ihrer. maesn registriert das Abonnement, normalisiert den Payload und übergibt Ihnen den Zeitraum. Die Dokumentation ist eindeutig, dass der Listen-Endpunkt mit dem gelieferten filterDate aufgerufen werden muss, und es ist ein gefilterter Aufruf gegen dieselbe Schnittstelle, die Sie ohnehin nutzen, und nicht gegen Business Centrals eigene Filtersyntax.
Zwei kleinere Dinge im selben Payload. Ereignisse kommen als Array an, auch wenn es nur eines ist, ein Handler für ein einzelnes Objekt bricht also in der ersten Minute unter Last. Und resourceId ist bei einem Sammelereignis per Definition leer, was sich im Code zu prüfen lohnt. Die Abonnement-Mechanik selbst ist auf jedem System derselbe Aufruf, und das sind Unified Webhooks.
Fünf Anfragen gleichzeitig, und vier Arten, ein Nein zu bekommen
Was Business Central veröffentlicht, ist ein Warteschlangenmodell, und der Unterschied zählt, weil dieselbe Ursache verschiedene Statuscodes erzeugt, je nachdem, wo Ihre Anfrage stand, als sie abgebrochen wurde.
- 5
- in Verarbeitung. Das Maximum, das gleichzeitig läuft.
- 95
- wartend. In der Warteschlange. Eine Anfrage, die 8 Minuten wartet, wird mit 503 verworfen.
- 101
- abgewiesen. Jenseits von 100 Verbindungen ist die Antwort sofort ein 429.
Ein vierter Code bedeutet etwas ganz anderes. 408 ist eine einzelne Anfrage, die über 8 Minuten lief, und sie sagt nichts über die Last.
| Grenze | Wert | Code |
|---|---|---|
| Gleichzeitig verarbeitete Anfragen | 5 je Umgebung | kein Code, sie reiht sich ein |
| Anfragen in der Warteschlange | 95, nach 8 Minuten verworfen | 503 |
| Gleichzeitige Verbindungen | 100 | 429 |
| Anfragen je Minute | 600 in der Produktion, 300 in einer Sandbox | 429 |
| Anfragen je Benutzer | 6.000 in einem gleitenden 5-Minuten-Fenster | 429 |
| Dauer einer Anfrage | 8 Minuten | 408 |
| Entitäten in einer Antwort | 20.000 | 413 |
Jede Zeile aus den Betriebsgrenzen für Business Central online, geprüft am 7. August 2026. Beachten Sie die Zeile zu den Anfragen je Minute: Die Sandbox ist die langsamere der beiden, eine Lastannahme aus einer Testumgebung fällt also zu optimistisch aus.
Zwei davon ändern, wie Sie blättern. Eine Antwort darf bis zu 20.000 Entitäten tragen, bevor Business Central sie mit 413 ablehnt, was großzügig ist, und eine einzelne Anfrage darf acht Minuten laufen, bevor sie mit 408 abgebrochen wird, was es nicht ist.
Ein breiter ungefilterter Lesevorgang scheitert also eher an der Zeit als an der Größe, und die Abhilfe ist ein engerer Filter. Eine kleinere Seite ändert daran nichts. Wie dieselbe Frage über Systeme hinweg aussieht, ist Unified Pagination and Filtering.
Der 429 erreicht Sie. Nur die asynchronen Endpunkte von maesn fangen Lastspitzen ab, das Backoff gegen Business Central bleibt also in Ihrem Code. Diese vier Codes richtig einzuordnen ist der größte Teil dieser Arbeit, und es ist auf jedem System dasselbe Problem, weshalb es im Unified Error Handling sitzt.
Business Central macht eine Rechnungszeile zu einem eigenen Datensatz
Business Central stellt Rechnungszeilen als eigenständige Datensätze bereit, lesbar, anlegbar und änderbar. Auf den meisten Buchhaltungssystemen ist eine Rechnung ein Dokument, das Sie in einem Stück zusammensetzen und buchen, und die Zeile hat keine eigene Adresse.
Das ist eine echte Fähigkeit und eine echte Portabilitätsfalle. Code, der einer bestehenden Rechnung eine Zeile hinzufügt, funktioniert hier und hat auf einem System, das nur ganze Dokumente annimmt, läuft er ins Leere, er gehört also hinter eine Fähigkeitsprüfung und aus Ihrem gemeinsamen Schreibpfad heraus.
In die andere Richtung müssen ein Kopf und seine Zeilen nicht zwei Aufrufe sein. Business Central unterstützt OData $expand, auch verschachtelt, die Zeilen kommen also mit dem Dokument zurück.
GET .../salesInvoices?$expand=salesInvoiceLines→ 200 je Treffer ein Dokument, jedes mit seinen Zeilen daran# verschachtelt geht auch, eine Ebene tieferGET .../journals?$expand=journalLines($expand=attachments)
$expand ist Standard-OData und in Microsofts API-Referenz dokumentiert. Es hat nichts mit den AL-Query-Objekten von Business Central zu tun, die ein anderes Konstrukt sind und häufig verwechselt werden.
Kein Objekt unterstützt Löschen auf diesem System, und bei Accounts ist Lesen die einzige Richtung: Den Kontenplan lesen Sie hier nur. Beides sollten Sie wissen, bevor Sie einem Kunden eine Zwei-Wege-Synchronisation seines Hauptbuchs versprechen.
Vorlagen im Mandanten entscheiden, ob ein Anlegen gelingt
Das ist der Fehler, der beim Kunden auftritt und nicht im eigenen Mandanten, und der Grund dafür ist, dass der Aufruf identisch ist, der Mandant nicht.
Wenn Sie einen Kunden, einen Lieferanten oder eine Rechnung anlegen, füllt Business Central Pflichtfelder aus Vorlagen, die innerhalb des Mandanten auf der Seite API Setup konfiguriert sind. Buchungsgruppen, Steuerkonfiguration und Dokumentvorgaben kommen von dort. Die maesn-Dokumentation sagt es unumwunden: Einige Pflichtfelder werden von diesen Vorlagen befüllt und lassen sich über die Schnittstelle überhaupt nicht setzen.
Ein Anlegen, das in Ihrer Testumgebung funktioniert, kann also bei einem Kunden fehlschlagen, weil dessen Vorlagen fehlen oder anders konfiguriert sind, und Microsofts Vorgaben sind über Lokalisierungen hinweg nicht identisch. Lokalisierte Fassungen ergänzen je Markt eigene Felder, Steuerregeln und Anforderungen an die elektronische Rechnung.
Für das Onboarding folgen daraus zwei Dinge. Prüfen Sie vor dem ersten Live-Aufruf die Vorlagen für jedes Objekt, das Sie anlegen wollen, und behandeln Sie einen Fehlschlag beim Anlegen als Konfigurationsfrage, bevor Sie ihn als Fehler in Ihrem Payload behandeln.
Das Verhalten von API Setup aus der maesn-Dokumentation zu Business Central, geprüft am 7. August 2026.
Was maesn übernimmt, und was auf Ihrer Seite bleibt
maesn normalisiert die Form der Integration. Die Regeln der Plattform bleiben, wie sie sind, und drei Dinge wandern in dem Moment auf unsere Seite, in dem Sie verbinden:
- Das Abonnement, je Kunde. Ein Aufruf legt es an, mit dem Endpunkt, auf dem Sie Ereignisse wollen, und der Ressource, die Sie beobachten wollen, und ein Aufruf entfernt es. Sie schreiben nicht gegen die Abonnement-Ressource von Business Central.
- Der Payload, in einer Form. Jedes Ereignis kommt im selben Umschlag an wie der Rest Ihrer Integrationen, und ein Feld, das dieses System nicht unterstützt, kommt als ausdrückliches
nullzurück und verschwindet nicht. - Die Umgebung und die Firma. Auf dem interaktiven Fluss wählt Ihr Kunde beide, und sie werden mit der Verbindung gespeichert, Ihr Code muss sie also nie ermitteln.
- Die Erneuerung nach drei Tagen. Unsere URL ist die, die bei Business Central registriert ist, der
PATCHvor jedem Ablauf und der Validierungs-Handshake, den er auslöst, laufen also hier. Ein Deployment-Fenster auf Ihrer Seite kostet Sie kein Abonnement.
Anlegen und Löschen des Abonnements, die Felder für Ressource und Callback und der Ereignis-Body aus der maesn-Dokumentation zu Business Central; die Auswahl von Umgebung und Firma aus der maesn-Authentifizierung. Beide geprüft am 7. August 2026.
Fünf Dinge bleiben bei Ihnen, und es ist günstiger, das jetzt zu wissen als nach dem ersten Kundengespräch.
- Der Lesevorgang nach einem Sammelereignis. Wir übergeben Ihnen den Zeitraum im normalen Umschlag. Ihn in Datensätze zu verwandeln ist ein gefilterter Aufruf, und der ist Ihrer.
- Die Ratenbegrenzung erreicht Sie weiterhin. Nur die asynchronen Endpunkte von maesn fangen Lastspitzen ab, der
429von Business Central kommt also in Ihrem Code an. Was der asynchrone Weg abdeckt und was nicht, ist Asynchronous Processing. - Die Entra-App-Registrierung braucht den Administrator Ihres Kunden. Anwendungsberechtigungen, delegierte Berechtigungen und eine Administratorzustimmung sind Schritte, die nur jemand mit den Rechten in diesem Verzeichnis abschließen kann. Wir gehen sie mit Ihnen durch, erteilen können wir sie aber nicht.
- API Setup liegt in Business Central. Wir können Ihnen sagen, welche Vorlagen ein Anlegen braucht. Konfiguriert werden sie im Mandanten des Kunden.
- Löschungen gibt es hier nicht. Kein Objekt auf diesem System unterstützt eine, Korrekturen werden also als neue Dokumente gebucht. Bauen Sie diesen Weg von Anfang an.
Ein Microsoft-365-Konto verschafft Ihnen eine kostenlose Business-Central-Umgebung mit einer Demo-Firma und vollem Schnittstellenzugang, und sie verhält sich wie die Produktion, weil sie eine echte Umgebung ist und kein Modus. Denken Sie daran, dass sie auf 300 Anfragen je Minute begrenzt ist gegenüber 600 in der Produktion. maesn betreibt außerdem Sandboxes für jedes unterstützte System, falls der Weg über Microsoft Ihnen nicht offensteht.
Häufige Fragen
Wie lange gilt ein Webhook-Abonnement in Business Central?
Wie viele Webhook-Abonnements kann eine Umgebung haben?
Was ist der Webhook-Handshake von Business Central?
Warum antwortet Business Central mit 503 und nicht mit 429?
Wie viele Schnittstellenaufrufe kann ich gegen Business Central machen?
Kann ich Rechnungszeilen in Business Central einzeln anlegen?
Warum gelingen meine POST-Anfragen an Business Central im Test und scheitern in der Produktion?

Tripletex anbinden: Ein Session-Token trägt jeden Aufruf
Tripletex verbindet zwei Tokens zu einem dritten, legt die Firma in den Benutzernamen und nummeriert neue Buchungszeilen über die Zeile. Was das beim Bauen heißt.
Lennart Svensson · 24. Sept. 2026
Procountor anbinden: Unbeaufsichtigt laufen lassen
Procountor hat zwei Wege hinein, und der unbeaufsichtigte endet an jedem Endpunkt mit zweitem Faktor. Was das für Token, Abgleich und Steuersätze heißt.
Lennart Svensson · 28. Aug. 2026
DATEV Rechnungswesen anbinden: Beide Richtungen, ein Token
Eine Verbindung trägt Lesen und Schreiben in DATEV Rechnungswesen, auf einem Zwei-Jahres-Token. Welche Objekte in welche Richtung reisen, ist die Entscheidung.
Lennart Svensson · 17. Aug. 2026Einmal bauen, auf der Unified API.
Erneuerungsaufträge, Handshakes, Warteschlangenmodelle und mandantenabhängige Vorgaben sind auf jedem Buchhaltungssystem dasselbe Problem. Lösen Sie sie einmal mit maesn, und das nächste System öffnet sie nicht wieder.