maesn
Für Entwickler

Abacus anbinden: Drei Werte, die Sie nicht hartkodieren können

Abacus läuft auf dem Server des Kunden, entweder auf seinem eigenen oder dem eines Hosting-Anbieters. Daraus folgen drei Dinge: Es gibt keinen gemeinsamen Host, an den eine Anfrage geht, die Jahresversion entscheidet, welche Endpunkte existieren, und das Nächste zu einem Event ist ein Postfach, das sich selbst löscht, wenn Sie aufhören, es zu leeren.

Lennart Svensson, CTO und Mitgründer bei Maesn
Lennart Svensson
CTO und Mitgründer · · Aktualisiert
Illustration zu Abacus anbinden: Drei Werte, die Sie nicht hartkodieren
Der Kontext

Ein Schweizer ERP, und keine zwei Installationen gleichen sich

Abacus ist ein Schweizer ERP für kleine und mittlere Unternehmen, es deckt Finanzen, Lohn und Projektmanagement ab und erreicht die Teile des Marktes, die nie auf ein reines Browserprodukt gewechselt sind: Treuhänder, Baufirmen, Hersteller. Wer Software an Schweizer Unternehmen verkauft, findet es früh im Integrations-Backlog.

Es ist außerdem ein System, bei dem die Frage wo läuft es keine einzige Antwort hat. Abacus wird installiert, entweder auf dem eigenen Server des Kunden oder auf dem eines Hosting-Anbieters, und das ist kein Detail der Bereitstellung. Es ist der Grund, aus dem die nächsten vier Abschnitte existieren.

Alles, was eine Plattform sonst für Sie klärt, wird hier je Kunde geklärt. Welche Endpunkte existieren, wie viele Anfragen Sie senden dürfen, was sich abonnieren lässt, und sogar, wo die Protokolle landen.

Wenn Ihnen lieber wäre, diese Unterschiede würden aufgefangen statt behandelt, finden Sie auf der Seite zur Abacus-Schnittstelle die Objekt-für-Objekt-Sicht darauf, was eine Verbindung über uns trägt. Der Rest dieses Leitfadens sind die Folgen selbst, in der Reihenfolge, in der Sie ihnen begegnen.

Zwei Wege hinein, und Sie wählen einen

Abacus ist über seine REST-Endpunkte erreichbar oder über den SOAP-Dienst AbaConnect, und maesn führt beide als getrennte Zielsysteme, abacus und abaconnect. Die meisten Kernressourcen wie Kontakte und Projekte gibt es auf beiden, während einige Modulobjekte nur auf AbaConnect existieren, darunter AbaBau für das Bauwesen.

Wir empfehlen, einen zu wählen und dabei zu bleiben, denn die beiden authentifizieren verschieden, und ein Kunde, der sich zweimal autorisiert, ist ein Kunde, der nachfragt.

Zielsysteme, die Empfehlung und die Aufteilung der Module stammen aus unserer Abacus-Dokumentation und ihrem AbaConnect-Gegenstück, geprüft am 13. August 2026.

Das Problem

Die Basis-URL kommt vom Kunden, eine je Kunde

Fangen wir mit dem Kleinsten an, das sonst keiner Erwähnung bedarf. Um einen Endpunkt aufzurufen, brauchen Sie einen Host, und bei Abacus gibt es keinen Host zum Hartkodieren. Jede Installation antwortet auf ihrer eigenen Adresse, und wo ein Anbieter mehrere Kunden hostet, kann sie sich zusätzlich je Mandant unterscheiden.

Die Basis-URL wird damit zu einem Feld im Onboarding. Sie reist als Query-Parameter am Authentifizierungsaufruf mit und wird zu diesem Kunden gespeichert, womit sie aus Ihrer Konfiguration verschwindet, sobald Sie mehr als einen haben.

Der Mandant ist der zweite Wert derselben Art. Abacus nennt ihn auf beiden Wegen den Mandanten; environmentName ist unser eigener Name für diese Ebene, und er ist das, wonach der REST-Weg fragt und was der Umgebungs-Endpunkt zurückgibt. Auf AbaConnect bleibt das Wort des Herstellers und der Wert steht beim Login fest.

Vor der ersten AnfrageDrei Werte, alle vom Kunden
  1. 1Die Basis-URLbaseUrl

    Wird als Query-Parameter am Authentifizierungsaufruf gesendet und je Mandant gespeichert.

    Hängt davon ab, ob Abacus lokal installiert ist oder bei einem Anbieter gehostet wird.

  2. 2Die Abacus-Version{abacus-version}

    Teil der Login-Weiterleitungs-URL, mit der Ihr Servicebenutzer konfiguriert ist.

    Jedes Jahr eine neue Hauptausgabe, jede mit eigenem Endpunktkatalog.

  3. 3Der MandantenvironmentName

    Wird am Umgebungs-Endpunkt gelesen und dann an jedem fachlichen Aufruf gesendet.

    Eine Installation kann mehrere halten. Abacus nennt ihn den Mandanten; environmentName ist unser Name dafür.

Keiner der drei hat einen Standardwert. Sie sind Eigenschaften der Installation eines Kunden, und deshalb werden sie einmal bei der Authentifizierung erhoben statt einmal in Ihrem Code konfiguriert.

Woher jeder der drei Werte kommt. Felder und Parameternamen aus der Abacus- und AbaConnect-Dokumentation von maesn.
Einen Kunden authentifizieren, dessen Host Sie zur Laufzeit erfahrenHTTP
GET /auth/abacus?baseUrl=https://acme.abacus.ch HTTP/1.1
Host: api.maesn.dev
x-api-key: <Ihr maesn API-Key>
 
GET /accounting/contacts?environmentName=7777 HTTP/1.1
Host: api.maesn.dev
x-api-key: <Ihr maesn API-Key>
x-account-key: <der Account-Key dieses Kunden>

Die Basis-URL wird einmal mitgegeben, bei der Authentifizierung, und je Mandant gespeichert. Danach reist der Mandant als environmentName am fachlichen Aufruf mit.

Der Query-Parameter baseUrl, der verpflichtende environmentName und der Umgebungs-Endpunkt stammen aus unserer Abacus-Dokumentation, geprüft am 13. August 2026. Ihre Voraussetzungen lohnen sich im selben Durchgang: ein Administrator auf der Instanz, und für den Produktivbetrieb ein Benutzer, der die Endpunkte zur Mandanten-Bereitstellung erreichen darf.

Eine Folge landet außerhalb Ihres Codes. Weil Abacus auf der Maschine des Kunden läuft, tun das auch seine Protokolle. Das Protokollieren von Anfragen einzuschalten heißt, eine Properties-Datei in der Installation zu bearbeiten und eine Stufe wie ch.abacus.eapi.level = FINER zu setzen, danach erscheinen die Einträge im Protokollordner dieses Servers. Gespräche mit dem Support fangen hier damit an, dass jemand anderes eine Datei öffnet.

Protokollstufen und die Properties-Datei stammen aus Abacus' Seite zur Fehlersuche, geprüft am 13. August 2026. Es gibt vier Stufen, jede enthält die vorige, und die Rümpfe von Anfrage und Antwort erscheinen ab FINER.

Das Problem

Jedes Jahr eine neue Hauptversion, und der Katalog zieht mit

Abacus liefert jährlich eine Hauptversion aus, und die Schnittstelle kommt mit ihr. Das Entwicklerportal veröffentlicht keine einzelne Endpunktübersicht, sondern eine je Version, mit einem eigenen Änderungsprotokoll daneben. Ein Kunde auf 2024 und ein Kunde auf 2026 betreiben dasselbe Produkt und bieten Ihnen zwei verschiedene Kataloge.

Der Abstand ist sogar in einer Liste sichtbar, in der ihn niemand erwarten würde. Abacus 2026 veröffentlicht eine Entitätsmenge Absences; der Katalog von 2024 beginnt einen Eintrag später im Alphabet, weil es diese Entität dort nicht gibt. Multiplizieren Sie das mit ein paar hundert Zeilen, und Sie haben den Grund, warum eine Funktion für einen Kunden fertig und für einen anderen unmöglich sein kann.

Die Installation entscheidet, was existiert

Abacus ist dabei ungewöhnlich deutlich, und der Satz ist wörtlich zu nehmen: „Diese Dokumentation wird automatisch aus Vorabversionen von Abacus erzeugt. Um sicher zu sein, dass eine Schnittstelle auf einer bestimmten Abacus-Version verfügbar ist, prüfen Sie die Abacus APIs bitte auf der Installation selbst.“

Maßgeblich ist der Server des Kunden und nicht das Portal, und das ist dieselbe Aussage, die die Basis-URL in anderer Tonart macht.

Die Kataloge je Version und der zitierte Vorbehalt stammen aus Abacus' Entwicklerportal, geprüft am 13. August 2026. AbaConnect geht einen Schritt weiter: Wo eine Schnittstellenbeschreibung in seiner Dokumentation fehlt, verweist der Hersteller darauf, sie aus Programm 625 innerhalb der Installation zu exportieren.

Die Version erreicht sogar die Teile der Einrichtung, die Sie Formsache nennen würden. Die Login-Weiterleitung, die Sie für einen Servicebenutzer registrieren, trägt sie im Pfad, der Callback ist also versionsspezifisch und nicht mandantenspezifisch, und die Unterstützung für eine neue Ausgabe zu ergänzen ist ein Konfigurationsschritt und keine Codeänderung.

Das ist der Punkt, an dem ein normalisiertes Modell aufhört, bequem zu sein. Wenn zwei Kunden auf dieselbe Frage verschieden antworten, muss etwas entscheiden, was Ihr Produkt sieht, und das einmal zu tun ist der Zweck des Common Data Model.

So funktioniert es

Zwei Zielsysteme, und sie authentifizieren verschieden

Der REST-Weg nutzt OAuth, mit dem Authorization-Code- und dem Client-Credentials-Grant, beide geben ein JWT zurück. Was er nicht nutzt, ist ein gewöhnlicher Benutzer. Abacus will einen Servicebenutzer, angelegt im Integrationsassistenten, und die Definition ist streng: „Der angegebene Service-User kann auf Abacus nur über die verfügbaren Schnittstellen zugreifen (ein Zugriff auf die Abacus-Oberfläche ist nicht möglich).“

Zwei Einzelheiten darum herum lohnt es sich vor der ersten produktiven Verbindung zu kennen. Die erste ist eine Frist: „Bitte beachten Sie, dass die Integration innerhalb von 10 Tagen genehmigt werden muss, andernfalls wird sie deaktiviert.“ Eine Integration, die Ihr Kunde anlegt und dann zwei Wochen liegen lässt, ist weg.

Die zweite ist ein Fehlercode, der nicht bedeutet, was er sagt. Eine Token-Anfrage ohne den Content-Type für Formulare kommt als 404 zurück und nennt den Token-Pfad, statt der 400 oder 415, nach der Sie zuerst greifen würden. Abacus dokumentiert den genauen Rumpf, der irreführende Teil ist also mitdokumentiert.

Der Header, dessen Fehlen eine 404 erzeugtHTTP
POST /oauth/oauth2/v1/token HTTP/1.1
Host: acme.abacus.ch
Content-Type: application/x-www-form-urlencoded
Authorization: Basic <Base64 von client-id:client-secret>
 
grant_type=client_credentials

Lassen Sie den Content-Type weg, lautet die dokumentierte Antwort {"status":404,"title":"Not Found",...}. Das zurückkommende Token gilt 600 Sekunden, und Abacus bittet darum, es dieses ganze Fenster über wiederzuverwenden, statt je Anfrage eines zu holen.

Die Grants, der Servicebenutzer, das Zehn-Tage-Fenster zur Genehmigung, die 404 und expires_in stammen aus Abacus' Leitfaden zur Authentifizierung, geprüft am 13. August 2026. Der Token-Endpunkt selbst wird über das openid-configuration-Dokument ermittelt, das dieselbe Seite zu lesen statt zwischenzuspeichern bittet.

Die zwei Zielsysteme nebeneinander
EigenschaftabacusAbaConnect
AuthentifizierungOAuth, ServicebenutzerBenutzername und Passwort
ProtokollRESTSOAP
AbschlussAntwortet direktEine Task-ID zum Abfragen, wenn es nicht sofort geht
ParallelitätRate Limit je BenutzerEine aktive Anfrage zur Zeit
MandantenvironmentName je AufrufBeim Login festgelegt
Headless Account-KeyNicht verfügbarVerfügbar

Die Authentifizierung und die Einschränkungen von AbaConnect stammen aus unserer AbaConnect-Dokumentation, die Headless-Liste aus unserem Leitfaden zur Authentifizierung, beides geprüft am 13. August 2026. Wo ein Kunde den Mandanten selbst wählt, wird der Wert in Ihrem eigenen Ablauf erhoben oder durchgereicht, denn die interaktive Auswahlseite deckt Abacus heute nicht ab.

So funktioniert es

200 Aufrufe je Minute, und 400 ab 2026

Abacus veröffentlicht seine Grenzen. Es benennt drei Fenster und wendet sie gleichzeitig an, eine Minute, eine Stunde und einen Tag. Überschreiten Sie eines davon, bekommen Sie eine 429 mit einem kleinen JSON-Rumpf, der das Servlet und die abgewiesene URL nennt.

Die Zahl ist allerdings eine Eigenschaft der Version und nicht des Produkts. Das ist das dritte Mal, dass derselbe Satz in diesem Leitfaden auftaucht, und hier landet er in Ihrem Zeitplan: Ein Abgleich, der für einen Kunden auf 2026 bemessen ist, verbringt bei einem Kunden auf 2025 den Nachmittag mit Backoff.

Dokumentierte Anfragegrenzen, nach Abacus-Version
FensterBis 2025Ab 2026
Je Minute200400
Je Stunde12.00018.000
Je Tag30.00040.000

Beide Zahlensätze, die drei Fenster und der Rumpf der 429 stammen aus Abacus' Seite zum Rate Limit, geprüft am 13. August 2026. Die Grenzen werden je Benutzer gezählt, und deshalb ist der Servicebenutzer zugleich die Einheit, in der Ihr Budget gemessen wird.

Es gibt drei dokumentierte Wege, weniger auszugeben, und der dritte ändert die Rechnung. Ein $expand holt verwandte Entitäten in derselben Anfrage, ein Deep Insert schreibt sie in einer, und eine Batch-Anfrage zählt als eine einzige Anfrage gegen die Grenze, wie viele Operationen sie auch trägt.

Gegen dieses Budget gelesen zählt eine weitere Zahl: Eine Antwort gibt höchstens 100 Datensätze zurück, und weiter geht es mit dem @nextlink, den die Antwort mitträgt. Ein erster Abgleich von zwanzigtausend Kontakten sind also zweihundert Aufrufe, bevor Sie irgendetwas anderes tun, das Sie in dieser Minute vorhatten. Das Blättern verhält sich auf fast jedem System anders, und deshalb gibt es ein Weg, zu filtern und zu paginieren als eigene Schicht.

So funktioniert es

Die Änderungsliste ist ein Postfach, das Sie leeren müssen

Abacus sendet Ihnen nichts. Es gibt keine Webhooks und keine Callbacks, und unsere eigenen Abdeckungsdaten verzeichnen für kein Objekt ein natives Event. Was es stattdessen bietet, liest sich leicht als Zustellung, weil es Abonnement heißt: Sie registrieren ein Topic, und Abacus hält fest, was sich geändert hat, bis Sie kommen und es abholen.

Die Schleife sind drei Aufrufe. SubscribeChanges registriert ein Topic unter einem Namen, den Sie wählen, ConsumeChanges gibt alles zurück, was noch nicht bestätigt ist, und AcknowledgeChanges leert den Stapel mit dem Schlüssel, der zurückkam. Der Mandant steht im Pfad aller drei, ein Kunde mit drei Mandanten lässt die Schleife also dreimal laufen.

Einmal abonnieren, dann nach Zeitplan abholen und bestätigenHTTP
BASE = /api/entity/v1/mandants/7777
 
POST {BASE}/SubscribeChanges
{ "Subscription": "acme-sync", "Topic": "Subject" }
 
GET {BASE}/Subscriptions('acme-sync')/ch.abacus.df.ConsumeChanges()
 
POST {BASE}/Subscriptions('acme-sync')/ch.abacus.df.AcknowledgeChanges
{ "AcknowledgeKey": "fa63c83f-e50d-11ee-877d-0050568d67ed" }

Das Präfix ist so abgekürzt, wie Abacus es in seiner eigenen Endpunkttabelle abkürzt. Den Namen des Abonnements wählen Sie, er muss sich in eine URL schreiben lassen und ist auf 23 Zeichen begrenzt. Ein Benutzer darf zehn Abonnements halten.

Drei Regeln machen aus der Bequemlichkeit eine Aufgabe mit Frist. Mindestens einmal täglich abholen. Mindestens einmal täglich bestätigen, wenn es etwas zu bestätigen gibt. Und „Abonnements, über die mehr als 3 Tage lang keine Nachrichten abgeholt werden, werden automatisch entfernt“, was heißt, dass eine Störung über das Wochenende mit einem verschwundenen Abonnement enden kann statt mit einem wartenden Rückstand.

Was ankommt, ist eine Liste von Kennungen und keine Datensätze, auf jede Nachricht folgt also ein Lesezugriff. Und ein Satz in der Referenz ändert, wie Sie den Zeitstempel benutzen: „Pro geändertem Datensatz wird nur 1 Nachricht registriert. Wurden an einem Datensatz auf dem Abacus-Server mehrere Änderungen vorgenommen, verweist der Zeitstempel ‚CreatedOn‘ auf den Zeitpunkt der ersten Änderung.“

Eine Fortschrittsmarke, die auf diesem Zeitstempel aufbaut, sitzt früher als die letzte Änderung des Datensatzes.

Auch das Bestätigen ist ganz oder gar nicht: Ein Schlüssel leert den ganzen Stapel. Scheitern Sie mitten in der Verarbeitung, haben Sie die Wahl, Arbeit zu bestätigen, die Sie nicht beendet haben, oder alles noch einmal abzuholen.

Verfügbare Abonnement-TopicsJe Version gezählt
Abacus 2023
13
Abacus 2024
15
Abacus 2025
17
Abacus 2026
29

Zwölf der Topics gibt es nur in 2026, und alle zwölf sind Dokument-Topics aus dem Immobilienteil des Produkts.

Kein Topic deckt eine Rechnung, einen Beleg, einen Buchungssatz oder eine Zahlung ab. Die Liste verfolgt Stammdaten und Shop-Bestellungen, eine Buchhaltungsintegration fragt den Rest also ab, auf welcher Version ihr Kunde auch ist.

Verfügbare Abonnement-Topics je Abacus-Version, gezählt aus der Topic-Tabelle auf Abacus' Entwicklerportal.

Die drei Endpunkte, die täglichen Anforderungen, die Entfernung nach drei Tagen, die Namensgrenze und der Zeitstempel der ersten Änderung stammen aus Abacus' Dokumentation zu Abonnements, geprüft am 13. August 2026. Die Anzahlen sind zweimal aus der Topic-Tabelle dieser Seite ausgelesen worden, über ihre Zeilen und über ihren Text, mit demselben Ergebnis: 29 Topics, keines davon für eine Rechnung, einen Beleg, einen Buchungssatz oder eine Zahlung.

Was davon für eine Buchhaltungsintegration bleibt

Stammdaten lassen sich verfolgen, Belege nicht. Für alles, was die Topics nicht abdecken, lesen Sie nach einem Zeitplan, den Sie wählen, und weil die Obergrenze großzügig und die Nutzlast klein ist, ist das Intervall eine Produktentscheidung und keine Einschränkung. Wie ein Event-Modell über Systeme gelegt wird, die zustellen, die in eine Warteschlange schreiben, und solche wie dieses, steht auf der Seite zu Unified Webhooks.

So funktioniert es

Eine Sitzung, ein Mandant, eine Anfrage zur Zeit

AbaConnect ist der Weg, den Sie brauchen, wenn ein Kunde ein Modul betreibt, dessen Objekte die REST-Endpunkte nicht tragen. Es meldet sich mit Benutzername, Passwort und Mandant an und gibt ein Login-Token zurück. Von da an verhält es sich auf eine Weise, die zu lesen sich lohnt, bevor Sie darum herum entwerfen.

Jede Datenanfrage kommt mit einem IsFinished-Flag zurück, und der Wert entscheidet, ob Sie warten: Viele geben es beim ersten Aufruf als true zurück, während andere eine oder mehrere Abfrageschleifen mit der RequestID brauchen, die Sie bekommen haben, im Abstand von 100 bis 250 Millisekunden. Schreibzugriffe sind die, die gewöhnlich warten, Lesezugriffe tun es manchmal, und welches von beiden es wird, lässt sich vor dem Senden nicht erkennen. Solange das Flag false ist, ist diese Anfrage offen, und „eine offene Anfrage blockiert andere Anfragen in derselben Benutzersitzung, bis die RequestID geleert ist“.

Die RequestID zu verlieren blockiert den Kunden, nicht die Anfrage

Bricht die Verbindung mitten im Abfragen ab, bleibt die Kennung auf dem Server offen, und weitere Aufrufe werden mit Fehler 8040 abgewiesen, der die blockierende Kennung ausgibt. Das dokumentierte Mittel dagegen ist eng: „Der einzig richtige Weg, die aktuelle RequestID auf dem ABACUS-Server zu leeren, ist sicherzustellen, dass die ‚IsFinished‘-Anfragen laufen, bis ‚IsFinished‘ = ‚true‘ ist.“

Sie lässt sich mit derselben Kennung wieder aufnehmen, sobald die Verbindung zurück ist, und das ist das Argument dafür, diese Kennung zu speichern statt sie im Arbeitsspeicher zu halten.

Zwei weitere Eigenschaften verschärfen das. Ein Benutzer bekommt eine Sitzung, und „mehrere Benutzersitzungen für denselben Benutzer sind nicht möglich“. Und eine Sitzung hält einen Mandanten: Wechseln heißt abmelden und wieder anmelden. Anfragen nacheinander, ein Client, ein Mandant zur Zeit.

Das ist auch der eigentliche Grund hinter dem Rat, einen eigenen Integrationsbenutzer anzulegen. Wer sich mit demselben Konto im Abacus-Menü anmeldet, kann die Webservice-Sitzung beenden, danach scheitern Ihre Aufrufe mit einer ungültigen Sitzung, und seit Abacus V2018 müssen die Benutzernamen, die sich auf diesem Weg anmelden dürfen, ohnehin in einer Server-Konfigurationsdatei stehen.

Die Sitzungen selbst laufen nicht nach fester Uhr. Standardmäßig lebt eine Sitzung bis zur Abmeldung, wobei der Server eine schließt, die eine Weile untätig war, in den Worten der Dokumentation „z. B. 15 – 20 Minuten“. Zwei nützliche kleine Operationen stehen daneben: Ping prüft die Erreichbarkeit ohne Anmeldung, und IsAlive prüft, ob eine Sitzung noch da ist. Über maesn ist beides nicht Ihre Aufgabe: Wo eine Sitzung geschlossen wurde, meldet sich der nächste Aufruf vorher wieder an.

Eine Zeile aus derselben Familie gehört in eine Sicherheitsprüfung und nicht in einen Bauplan. Die Verbindung läuft über http oder https, je nach der URL, die man Ihnen gegeben hat, die Transportverschlüsselung ist hier also eine Eigenschaft davon, wie dieser Server eingerichtet wurde.

Das IsFinished-Verfahren, das Abfrageintervall, Fehler 8040, die Regeln zu Sitzung und Mandant, die Konfigurationsdatei und das Untätigkeitsfenster stammen aus Abacus' Dokumentation zu den AbaConnect-Webservices, geprüft am 13. August 2026, die zugleich die Quelle ist, die unsere eigene Rate-Limit-Referenz für die eine aktive Anfrage angibt. Der Hinweis zum Protokoll stammt von der weiter oben verlinkten AbaConnect-Downloadseite.

Über maesn bleibt die Form, aber die Buchführung wandert. Asynchrone Arbeit gibt eine taskId zurück, und GET /asyncTask/{taskId} meldet den Fortschritt und übergibt das Ergebnis, sobald es fertig ist.

Unsere eigene Liste der asynchronen Endpunkte enthält GET genauso wie POST auf Kontakten, Projekten und Buchungssätzen, und so sieht ein Warten auf der Leseseite von außen aus, und dieselbe Warteschlange ordnet die Anfragen je Mandant. Was das über Ordentlichkeit hinaus bringt, steht auf der Seite zu Asynchronous Processing.

Wo unser Teil endet

Was maesn abdeckt, und was bei Ihnen bleibt

Zwei Schnittstellen, eine davon SOAP, ein Katalog je Jahr und eine Änderungsliste mit Frist. Was wir davon abnehmen:

  • Aus den drei Werten wird ein Schritt im Onboarding. Die Basis-URL kommt als Parameter bei der Authentifizierung an und wird je Mandant gespeichert, der Mandant reist am Aufruf mit, und keiner von beiden landet in Ihrer Konfiguration.
  • Beide Wege kommen in einer Form an. Ob ein Kunde über die REST-Endpunkte oder über AbaConnect bedient wird, ein Kontakt erreicht Sie als Kontakt. Der SOAP-Umschlag bleibt auf unserer Seite und die IsFinished-Buchführung ebenso, einschließlich des Teils, in dem eine Anfrage gar keine braucht: Was Sie erreicht, ist eine Task-ID, wenn es etwas zu warten gibt.
  • Asynchrone Arbeit hat eine Schnittstelle. Eine Task-ID und ein Status-Endpunkt, dieselben für die Systeme, die in eine Warteschlange schreiben, und die, die sofort antworten.
  • Sandboxes gibt es auch dort, wo der Hersteller keine freie Testversion anbietet. Abacus und AbaBau sind zwei der Systeme, bei denen sich ein Test nicht einfach registrieren lässt, und wir stellen die Umgebung bereit.

Was bei Ihnen bleibt, und zwei davon sind Entscheidungen statt Aufgaben:

  • Das Abfrageintervall. Abacus sendet keine nativen Events, die Abonnement-Topics decken also Stammdaten ab, und alles andere ist ein Lesezugriff in einem Rhythmus, den Sie wählen. Wie aktuell Ihr Produkt sein muss, ist eine Produktfrage.
  • Auf welcher Version Ihre Kunden sind. Sie entscheidet, was existiert, und es lohnt sich, danach im Vertrieb zu fragen statt es in der Umsetzung herauszufinden.
  • Die Einrichtung innerhalb der Installation. Die Anwendung mit eingeschalteter AbaConnect-Option installiert, ein Servicebenutzer mit genehmigter Integration, und ein Mandant, der für die Schnittstelle freigeschaltet ist. Abacus vermerkt Auswirkungen auf den Preis für die Zahl der freigeschalteten Mandanten, und die ausführlichen Bedingungen stehen in einem Artikel der Wissensdatenbank, der nur seinen Vertriebspartnern offensteht.

Der Zugriff auf die Anwendung, der Lizenzbedarf des Servicebenutzers, die Freischaltung von Mandanten und der partnerexklusive Artikel der Wissensdatenbank stammen aus Abacus' Seite zur Lizenzierung, geprüft am 13. August 2026. Dieselbe Seite führt zwei Lizenzmodelle und markiert das für den Marktplatz als in Arbeit, und deshalb beschreibt dieser Leitfaden keine Anforderungen für einen Eintrag.

FAQ

Häufige Fragen

Unterstützt Abacus Webhooks?

Nichts ruft Sie an. Abacus bietet stattdessen Abonnement-Topics, die Sie abfragen: Sie registrieren ein Topic, holen Änderungen mit ConsumeChanges ab und bestätigen sie mit AcknowledgeChanges. Beides gehört in einen täglichen Lauf, denn ein Abonnement, aus dem drei Tage lang nichts abgeholt wird, wird automatisch entfernt.

Wie lauten die Rate Limits von Abacus?

Drei Fenster gleichzeitig, je Benutzer, und sie ziehen mit der Version mit. Bis Abacus 2025 sind es 200 Anfragen je Minute, 12.000 je Stunde und 30.000 je Tag. Ab Abacus 2026 sind es 400, 18.000 und 40.000. Eine Batch-Anfrage zählt als eine.

Warum gibt meine Abacus-Token-Anfrage eine 404 zurück?

Weil der Content-Type fehlt. Abacus dokumentiert, dass eine Token-Anfrage ohne den Header Content-Type: application/x-www-form-urlencoded gewöhnlich mit einer 404 scheitert, die den Token-Pfad nennt, statt mit einer 400 oder einer 415. Das Token selbst gilt dann 600 Sekunden.

Was ist der Unterschied zwischen den Abacus-REST-Endpunkten und AbaConnect?

Zwei Schnittstellen mit zwei Authentifizierungen. Die REST-Endpunkte nutzen OAuth und antworten direkt. AbaConnect ist ein SOAP-Dienst, der Benutzername und Passwort nutzt, eine Anfrage zur Zeit abarbeitet und den Abschluss getrennt meldet. Einige Modulobjekte, AbaBau darunter, gibt es nur dort.

Warum meldet AbaConnect, dass eine Anfrage bereits offen ist?

Eine frühere Anfrage ist nie bis zum Ende abgefragt worden. Auf AbaConnect kann eine Anfrage offen statt fertig zurückkommen, Schreibzugriffe gewöhnlich und Lesezugriffe manchmal, und welches von beiden Sie bekommen, lässt sich vor dem Senden nicht erkennen. Solange IsFinished false ist, blockiert die RequestID die Sitzung. Fehler 8040 nennt die blockierende Kennung, und der einzige dokumentierte Weg, sie zu leeren, ist, dieselbe Kennung abzufragen, bis IsFinished true ist.

Kostet die Anbindung an Abacus meinen Kunden etwas?

Sie kann es, und der Betrag ist nicht öffentlich. Die Anwendung muss mit eingeschalteter AbaConnect-Option installiert sein, der Servicebenutzer zählt gegen die Benutzerlizenzen dieser Anwendung, und Mandanten müssen von der Abacus Research AG freigeschaltet werden, die Auswirkungen auf den Preis für die Zahl der freigeschalteten Mandanten angibt.

Einmal bauen, auf der Unified API.

Abacus gibt Ihnen je Kunde einen anderen Host, eine andere Version und eine andere Obergrenze, DATEV verlangt zwei Freigabegespräche und Xero misst, was Sie lesen. Bauen Sie gegen eine Schnittstelle, und jedes davon wird zu einer Zeile in einer Tabelle statt zu einem Projekt.