maesn
Für Entwickler

Tripletex anbinden: Drei Tokens, und eine Zeilennummer, die Sie nie senden

Tripletex ist schnell aufgerufen und ungewöhnlich authentifiziert. Ein Token, das Sie halten, und ein Token, das Ihr Kunde hält, ergeben zusammen ein drittes, das jede Anfrage trägt, die Firma, die Sie ansprechen, reist im Feld für den Benutzernamen mit, und eine Buchungszeile, die Sie hinzufügen, muss ankündigen, welche Zeile sie einnehmen wird. Keines der drei ist schwer, sobald man es weiß, und zwei davon übersieht man leicht, bis etwas fehlschlägt.

Lennart Svensson, CTO und Mitgründer bei Maesn
Lennart Svensson
CTO und Mitgründer ·
Illustration zu Tripletex anbinden: Ein Session-Token trägt jeden Aufruf
Der Kontext

Was Sie vor dem ersten Aufruf brauchen

Tripletex arbeitet nicht mit einem einzigen Zugang. Bevor irgendetwas läuft, brauchen Sie zwei, und sie kommen von zwei verschiedenen Stellen: eines wird Ihnen als Entwickler ausgestellt, das andere erzeugt der Kunde, dessen Daten Sie lesen.

Ihres ist das Consumer-Token. Tripletex stellt es aus, sobald Ihre Registrierung für Version 2 der Schnittstelle abgeschlossen ist, und es weist Ihre Integration über jeden Kunden hinweg aus, den Sie je anbinden. Ein Token deckt sie alle ab. Behandeln Sie es wie jedes andere Anwendungsgeheimnis.

Das andere gehört dem Kunden: das Employee-Token, erzeugt in dessen eigenem Tripletex unter den Benutzereinstellungen und dem API-Zugang. Dafür braucht es auf seiner Seite einen Administrator, und das ist gut zu wissen, bevor Sie den Onboarding-Text schreiben, der ihn auffordert, eines anzulegen.

Berechtigungen werden am Token gesetzt, nicht vererbt

Tripletex hält fest, dass jedem Employee-Token bei der Erzeugung ein Satz Berechtigungen mitgegeben werden muss. Ein Token ohne die Rechte, die Ihre Integration braucht, ist ein gültiges Token, das Ihre Daten nicht erreicht. Sagen Sie Ihrem Kunden also vorher, welche Objekte Sie lesen werden, und nicht erst, wenn der erste Aufruf zu wenig zurückgibt.

Es gibt eine eigene Testumgebung mit eigenen Consumer- und Employee-Tokens, und sie verhält sich wie der Produktivbetrieb gegen Tripletex' Testbestand und nicht wie ein Mock. Unsere kam schnell zurück, und das ist gut zu wissen, wenn Sie die erste Woche des Baus planen.

Die drei Token-Typen, der Registrierungsweg für das Consumer-Token und die Regel zu den Berechtigungen stammen aus Tripletex' Dokumentation zu Authentifizierung und Tokens und aus der Beschreibung, die mit der Schnittstellenspezifikation veröffentlicht ist, geprüft am 22. September 2026. Dass die Testumgebung schnell kam und beide Tokens mitbrachte, ist der Bericht unserer eigenen Entwicklerin aus dem Bau.

Die Mechanik

Drei Tokens, und nur eines reist mit

Das Consumer-Token und das Employee-Token sind keine Zugangsdaten, die Sie senden. Sie sind Eingaben. Sie tauschen sie gegen ein Session-Token, und das Session-Token ist das, was jede spätere Anfrage tatsächlich trägt.

Der Tausch ist ein einzelner Aufruf mit drei Pflichtwerten: Ihr Consumer-Token, ein Employee-Token, das gegen dasselbe Consumer-Token erzeugt wurde, und ein Ablaufdatum. Alle drei sind verpflichtend, und das dritte verlangt eine Entscheidung von Ihnen: Das Ablaufdatum ist ein Wert, den Sie selbst setzen.

Von da an ist die Authentifizierung schlichte Basic Access Authentication mit dem Session-Token als Passwort. Wenn Sie den Header selbst zusammenbauen, ist es die Firmenkennung, ein Doppelpunkt und das Session-Token, Base64-kodiert. Es gibt außerdem einen Aufruf, der eine Session ausdrücklich löscht, und das ist der saubere Weg, einen Zugang zu beenden, statt auf das Datum zu warten.

Eine Obergrenze, die kam und ging und wiederkommt

Tripletex hatte eine Regel eingeführt, nach der eine Session nicht mit einem Ablauf von mehr als sechs Monaten erzeugt werden konnte, und antwortete beim Versuch mit Expiration date is not allowed to be older than 6 months. Die Änderung ist zurückgenommen worden, und Tripletex sagt, sie werde erneut umgesetzt, ohne ein Datum zu nennen. Heute gilt sie nicht. Sie ist einen Vermerk im eigenen Runbook wert, denn eine langlebige Session, die Sie heute erzeugen, lässt sich später vielleicht nicht mehr erzeugen.

Über maesn erreicht Sie davon nichts. Ihr Consumer-Token wird einmal auf Ihrem Mandanten eingerichtet, Ihr Kunde gibt sein Employee-Token ein, wenn er sich verbindet, und die Session wird hier abgeleitet und erneut abgeleitet, wenn sie abläuft. Unified Authentication ist der Grund, warum das genauso aussieht wie bei einem System mit einfachem Redirect: Was Sie danach halten, ist ein Account-Key, und Account-Keys verhalten sich über den ganzen Katalog hinweg gleich.

Die drei Pflichtparameter am Aufruf zur Session-Erzeugung, das Basic-Authentication-Verfahren und der Aufruf zum ausdrücklichen Löschen einer Session stammen aus der veröffentlichten Schnittstellenspezifikation, geprüft am 22. September 2026. Die Sechsmonatsgrenze und ihre Rücknahme stammen aus Tripletex' eigenem Hinweis zum Ablauf des Session-Tokens.

Die Mechanik

Mitarbeiter oder Kanzlei, und warum es bis in den Header reicht

Tripletex kennt zwei Arten der Anmeldung, und der Unterschied zwischen ihnen entscheidet, wie viele Firmen überhaupt erreichbar sind.

Melden Sie sich als Mitarbeiter an, sind Sie immer innerhalb einer bestimmten Firma. Das ist der Fall mit einer Gesellschaft, und es gibt nichts zu wählen. Melden Sie sich als Buchhalter an, erreichen Sie viele, das ist der Fall mit mehreren Gesellschaften, und jetzt muss etwas sagen, welche Sie meinen.

Tripletex legt das an eine Stelle, an der es die meisten Systeme nicht haben: in die Benutzernamen-Hälfte des Authentifizierungs-Headers. Null oder leer bedeutet die Firma des Mitarbeiters, dessen Token Sie verwenden. Jeder andere Wert bedeutet eine der Mandantenfirmen einer Kanzlei, und es gibt einen eigenen Aufruf, der die Firmen auflistet, die eine bestimmte Anmeldung erreichen darf.

Das gehört ins Onboarding geklärt, nicht in den Code

Wenn Ihr Produkt Kanzleien bedienen wird, ist die Wahl der Firma eine Frage, die Ihr Onboarding stellen muss, denn nichts weiter unten kann sie erschließen. Wenn es immer nur einzelne Firmen bedienen wird, senden Sie Null und denken nie wieder daran. Zu entscheiden, welches von beidem Sie bauen, ist vor der ersten Verbindung billiger als nach der hundertsten.

Über maesn fällt die Wahl, wenn die Verbindung entsteht, und die aufgelöste Firma reist mit dem Account-Key statt mit Ihren Anfragen. Das ist auf Ihrer Seite alles, und es ist dieselbe Form der Antwort, die Sie bei jedem System im Katalog bekommen, das einen Mandantenbegriff kennt.

Die Bedeutung des Benutzernamens, die Vorgabe Null oder leer und der Aufruf, der die erreichbaren Firmen einer Kanzlei auflistet, stammen aus der veröffentlichten Schnittstellenspezifikation, geprüft am 22. September 2026. Dass der Unterschied in der Praxis schlecht erklärt ist und dass er das ist, was man am ehesten vorher wissen will, ist der Bericht unserer eigenen Entwickler aus dem Bau dagegen.

Die Mechanik

Neue Buchungszeilen tragen eine Zeilennummer, keine ID

Eine Buchungszeile hinzuzufügen ist der Vorgang, der beim ersten Mal lautlos fehlschlägt, und nichts an der Form des Objekts warnt Sie davor.

Ein Buchungssatz in Tripletex trägt seine Zeilen als Array am Satz selbst. Eine Zeile zu aktualisieren, die es schon gibt, läuft so, wie Sie es erwarten: Sie geben ihre ID an und die Felder, die Sie ändern. Eine neue Zeile hinzuzufügen läuft anders, denn eine Zeile, die es noch nicht gibt, hat keine ID, die Sie angeben könnten. Was Tripletex stattdessen will, ist ihre Position. Hält der Satz bereits drei Zeilen, kündigt die, die Sie hinzufügen, an, dass sie Zeile vier ist.

Das heißt, Sie können die Aktualisierung nicht aus den Daten bauen, die Sie schreiben. Sie müssen wissen, was schon da ist, und damit wird ein Lesezugriff zur unvermeidlichen ersten Hälfte jedes Schreibzugriffs.

Über maesn gibt es kein Zeilenfeld in der Form, die Sie senden. Der Lesezugriff passiert, bevor Ihr Schreibzugriff hinausgeht, die belegten Zeilen werden gezählt und die neue Zeile wird hier nummeriert. Das ist ein kleines Stück Maschinerie, und es ist die Sorte, die man leicht fast richtig hinbekommt: Von der Anzahl aus zu nummerieren statt von der höchsten belegten Zeile ist so lange korrekt, bis jemand eine Zeile löscht.

Die Anforderung einer Zeilennummer an neuen Zeilen und der Lesezugriff, der dem Schreibzugriff vorausgehen muss, sind der Bericht unserer eigenen Entwicklerin aus dem Bau dieser Anbindung. Weder das Verhalten der Zeilennummer noch seine Folge ist in Tripletex' veröffentlichter Dokumentation beschrieben, und genau deshalb steht es hier.

Die Mechanik

Das Paginieren trägt, die Gesamtzahl nicht

Tripletex paginiert von Haus aus und macht es gut. Ein Listenaufruf nimmt einen Startindex und eine Anzahl, und die Antwort kommt als Umschlag mit den Werten darin zurück. Er nimmt außerdem ein Sortiermuster und einen Feldparameter, der auswählt, welche Attribute zurückkommen sollen, einschließlich der Attribute verschachtelter Ressourcen.

Das Filtern ist typisiert und gehört zum jeweiligen Endpunkt statt allgemein zu sein. Allein der Konten-Endpunkt nimmt Filter auf Kennung, Nummer, ob das Konto ein Bankkonto ist, ob es inaktiv ist, ob es für Eingangsrechnungen infrage kommt, seine Hauptbuchart, ob es ein Bestandskonto ist, und seinen SAF-T-Code.

Worauf Sie nicht bauen sollten, ist die Gesamtzahl. Der Umschlag trägt ein Feld für die Größe des vollständigen Ergebnisses, und Tripletex kündigt dieses Feld in seiner eigenen Dokumentation ab. Am Konten-Endpunkt haben unsere Entwickler überhaupt keine Gesamtzahl zurückbekommen, und deshalb ist die Paginierung über diesen Lesezugriff unsere und nicht ihre.

Diese Schleife einmal je System zu schreiben ist genau die Arbeit, die ein Weg, zu filtern und zu paginieren abnimmt. Die Schleife, die Sie auf Tripletex richten, ist die Schleife, die Sie auf das nächste System richten, und eine abgekündigte Zählung an einem Endpunkt eines Systems hört auf, etwas zu sein, das Ihr Code wissen muss.

Die Parameter zum Paginieren, die Muster zum Sortieren und zur Feldauswahl, die typisierten Filter am Konten-Endpunkt und die Abkündigung der vollständigen Ergebnisgröße stammen aus der veröffentlichten Schnittstellenspezifikation, geprüft am 22. September 2026. Die fehlende Gesamtzahl an diesem Endpunkt ist die Beobachtung unserer eigenen Entwicklerin.

Aktuell bleiben

Ein echtes Event-System, und was bis dahin zu tun ist

Tripletex veröffentlicht ein eigenes Abonnement-Modell. Ein Event benennt ein Objekt und ein Verb zusammen, Anlegen, Aktualisieren und Löschen desselben Objekts sind also drei getrennte Abonnements statt eines Stroms, den Sie filtern.

Die Zustellung trägt das Abonnement, zu dem sie gehört, den Namen des Events, die Kennung des betroffenen Objekts und das Objekt selbst. Mit einer Ausnahme: Beim Löschen ist das Objekt null. Sie erfahren, was weg ist, nicht, was darin stand, und alles, was Ihr Produkt über einen gelöschten Datensatz wissen muss, muss also vorher gespeichert worden sein.

Diese Events sind über maesn heute nicht freigeschaltet, die Änderungserkennung an dieser Verbindung ist also ein Lesezugriff auf einem Zeitplan, den Sie wählen. Sie sind auf Anfrage verfügbar, und der Zeitplan, den Sie jetzt schreiben, funktioniert so oder so weiter, denn das Event-Modell ist ein eigener Weg und kein Ersatz für das Abfragen.

Was das Rate Limit tatsächlich zählt

Tripletex zählt Anfragen je Mitarbeiter und je Consumer. Zwei Integrationen, die denselben Kunden erreichen, schöpfen deshalb aus getrennten Budgets. Tripletex nennt keine Zahl und liefert stattdessen etwas Nützlicheres: Jede Antwort trägt mit, wie viele Aufrufe die laufende Periode erlaubt, wie viele übrig sind und wie viele Sekunden sie noch läuft. Ein Lesezugriff auf Zeitplan kann sich also am echten Wert ausrichten statt an einem dokumentierten.

Das Abonnement-Modell, der Umschlag des Events, das leere Objekt beim Löschen und die Header zum Rate Limit stammen aus der veröffentlichten Schnittstellenspezifikation, geprüft am 22. September 2026. Dass wir diese Events heute nicht bereitstellen, stammt aus unserer Integrationsdokumentation und von unserer eigenen Entwicklerin. Wir sind nicht an das Rate Limit gestoßen, was jenseits der 429 passiert, können wir also nicht aus Erfahrung beschreiben.

Wo unser Teil endet

Was maesn abnimmt, und was bei Ihnen bleibt

Alles oben ist echte Arbeit, und das meiste davon ist dieselbe Arbeit für jeden Kunden, den Sie anbinden. Das ist der Teil, den man einmal macht.

Die Aufteilung, wie sie heute steht
Hier erledigtBleibt bei Ihnen
Der Tausch der zwei Tokens und die Session darausWelche Objekte Ihr Use Case braucht
Eine neue Session ableiten, wenn das Ablaufdatum vorbei istIhrem Kunden sagen, dass er ein Employee-Token erzeugen soll
Die Firma, aufgelöst beim VerbindenOb Ihr Produkt Kanzleien überhaupt bedient
Den Buchungssatz lesen und eine neue Zeile nummerierenWas Ihr Modell mit einer gelöschten Zeile macht
Die Konten paginieren, ohne GesamtzahlDas Intervall, auf dem Ihr Zeitplan läuft
Eine Fehlerform über jedes System hinweg, das Sie erreichenIhre eigenen Wiederholungen und Benachrichtigungen

Die heute erreichbaren Objekte sind eine kleinere Menge als Tripletex insgesamt. Konten, Buchungssätze und Steuersätze sind lesbar, und Buchungssätze lassen sich außerdem anlegen und aktualisieren, das ist ein tragfähiger Buchungsweg und keine reine Leseansicht. Der Rest des Katalogs ist auf Anfrage verfügbar, und welche Teile Sie brauchen, klärt man besser, bevor man darum herum entwirft. Der Umfang, und was es braucht, ihn zu erweitern, steht auf der Seite zur Tripletex-Schnittstelle.

Eines bleibt wirklich Ihres, welchen Weg Sie auch wählen. Tripletex drückt jeden Buchungssatz unter der von Ihnen gebuchten Währung zusätzlich in norwegischen Kronen aus und zeigt beide. In Euro oder Dollar zu buchen heißt deshalb, einen Wechselkurs mit dem Buchungssatz zu senden. Keine Integrationsschicht kann entscheiden, welchen Kurs Ihr Geschäft verwenden soll, das ist also eine Entscheidung über Ihre eigenen Daten und kein Abbildungsproblem.

Der heutige Umfang stammt aus unserer Integrationsdokumentation, geprüft am 22. September 2026, und von der Entwicklerin, die die Anbindung gebaut hat. Das Verhalten in Kronen und die Anforderung eines Wechselkurses sind ihr Bericht aus der Arbeit damit. Tripletex betreibt ein eigenes Entwicklerprogramm mit einem Änderungsprotokoll, das einen Blick wert ist, wenn Sie direkt bauen.

FAQ

Häufige Fragen

Wie lange gilt ein Tripletex-Session-Token?

So lange wie das Ablaufdatum, das Sie beim Erzeugen setzen. Der Aufruf nimmt ein Consumer-Token, ein Employee-Token und ein Ablaufdatum, und alle drei sind verpflichtend, die Gültigkeit ist also eine Entscheidung, die Sie treffen, und keine Dauer, die das System Ihnen gibt. Über maesn treffen Sie sie nicht: Die Session wird abgeleitet, wenn Ihr Kunde sich verbindet, und erneut abgeleitet, wenn sie abläuft, und Ihr Account-Key bleibt davon in beiden Fällen unberührt.

Was steht im Feld für den Benutzernamen im Basic-Auth-Header?

Die Firma, die Sie ansprechen. Tripletex dokumentiert Null oder leer als die Firma des Mitarbeiters, dessen Token Sie verwenden, und jeden anderen Wert als eine der Mandantenfirmen einer Kanzlei. Die Passwort-Hälfte ist immer das Session-Token. Von Hand kodiert ist es die Zeichenkette Firmenkennung, Doppelpunkt, Session-Token, Base64-kodiert.

Wie füge ich einem bestehenden Buchungssatz eine Zeile hinzu?

Indem Sie Tripletex sagen, welche Zeile sie einnehmen wird. Zeilen, die es schon gibt, werden über ihre ID adressiert, eine neue hat aber noch keine ID, die Aktualisierung muss also stattdessen ihre Zeilennummer tragen, und diese Nummer muss die nächste freie sein. Den Satz vorher zu lesen ist der einzige verlässliche Weg, zu wissen, was frei ist. Über maesn passiert dieser Lesezugriff, bevor Ihr Schreibzugriff hinausgeht, und in der Form, die Sie senden, gibt es kein Zeilenfeld.

Gibt Tripletex beim Paginieren eine Gesamtzahl zurück?

Nicht verlässlich. Der Umschlag der Antwort hat ein Feld für die Größe des vollständigen Ergebnisses, und Tripletex kündigt dieses Feld in seiner eigenen Dokumentation ab. Am Konten-Endpunkt haben unsere Entwickler überhaupt keine Gesamtzahl zurückbekommen. Das Paginieren selbst trägt: Sie senden einen Startindex und eine Anzahl, und die Werte kommen als Liste zurück.

Kann ich Tripletex-Ergebnisse serverseitig filtern und sortieren?

Ja, und weiter als bei den meisten. Ein einzelner Listen-Endpunkt nimmt einen Satz typisierter Filter, ein Sortiermuster und einen Feldparameter, der auswählt, welche Attribute zurückkommen, einschließlich der Attribute von Unterressourcen. Über maesn filtern und paginieren Sie so wie bei jedem anderen System, und das ist eine andere Oberfläche als die, die Tripletex veröffentlicht.

Gibt es ein offizielles Tripletex-SDK?

Tripletex betreibt ein eigenes Entwicklerprogramm mit einer OpenAPI-Beschreibung für den Produktivbetrieb und für die Testumgebung, einer Präsenz auf GitHub und einem Server für das Model Context Protocol in der Beta. Wenn Sie direkt bauen, fangen Sie dort an. Wenn Sie über maesn bauen, erzeugen Sie überhaupt keinen Client dagegen, denn die Oberfläche, gegen die Sie programmieren, ist die vereinheitlichte.

Was passiert, wenn Sie das Tripletex-Rate-Limit erreichen?

Jeder Aufruf kommt mit drei Headern zurück: wie viele Anfragen die laufende Periode erlaubt, wie viele übrig sind und wie viele Sekunden sie noch läuft. Überschreiten Sie die Grenze, antwortet jede Anfrage mit 429, bis die Periode neu beginnt. Das Budget wird je Mitarbeiter und je Consumer gezählt statt je Firma, zwei Integrationen gegen denselben Kunden teilen sich also kein Kontingent.

Einmal bauen, auf der Unified API.

Tripletex macht aus zwei Tokens eine Session, versteckt die Firma im Feld für den Benutzernamen und nummeriert Buchungszeilen über ihre Position. Das nächste System zieht jede dieser Linien woanders. Bauen Sie gegen eine Oberfläche, und jeder Unterschied wird zu einem Feld, das Sie lesen, statt zu einem Projekt, das Sie einplanen.