maesn
Für Entwickler

Procountor anbinden: Zwei Autorisierungswelten, und eine davon hat eine Decke

Procountor ist schnell aufgerufen und langsamer eingeplant. Zwei Autorisierungsabläufe führen in dasselbe System und erreichen nicht dieselben Endpunkte: der, der ohne Person läuft, kommt an nichts heran, was Procountor mit einem zweiten Faktor schützt. Diese Grenze steht in Prosa und wird über 192 Operationen genau einmal benannt, also findet man sie meist zur Laufzeit.

Lennart Svensson, CTO und Mitgründer bei Maesn
Lennart Svensson
CTO und Mitgründer ·
Illustration zu Procountor anbinden: Unbeaufsichtigt laufen lassen
Der Kontext

Zwei Anträge, und beide dauern drei bis vier Tage

Das Erste, was man über Procountor wissen muss, ist nicht technisch. Sie können an dem Nachmittag, an dem Sie sich dafür entscheiden, nicht loslegen. Procountor gibt Zugangsdaten über ein Formular aus, und die Antwort kommt nach drei bis vier Tagen per E-Mail und per SMS zurück.

Das Formular fragt, was Ihre Integration tut, welche Objekte sie bewegt, in welche Richtung und für welche Länder, dazu die Weiterleitungsadresse, die der Ablauf benutzt. Nichts davon ist schwer. Alles davon liegt zwischen Ihnen und Ihrem ersten Aufruf.

Die Produktion ist ein zweiter Antrag derselben Art, mit eigener Wartezeit, und der Testzugang geht nicht in sie über. Unser eigener Entwickler hat gegen die Schnittstelle gebaut, während er auf die erste Antwort wartete, und konnte bis dahin keine einzige Anfrage ausführen.

Das Erste, was unser Team Ihnen sagen würde

Auf die Frage, welchen Rat er jemandem geben würde, der morgen anfängt, nannte der Entwickler, der diese Integration gebaut hat, genau eine Sache: „Fordere die Testumgebung im Voraus an, denn es dauert drei bis vier Tage.“ Die Wartezeit läuft, ob Ihr Code fertig ist oder nicht, also ist es die eine Aufgabe, die sich vor allen anderen zu beginnen lohnt.

Das Antragsformular, die Bearbeitungszeit von drei bis vier Tagen und die geteilte Zustellung per E-Mail und SMS aus Procountors Antrag auf eine Testumgebung und dem Einstiegsleitfaden, geprüft am 28. August 2026. Die viertägige Wartezeit und dass vorher nicht getestet werden kann, ist die Schilderung unseres eigenen Entwicklers.

Die Mechanik

Zwei Autorisierungswelten, und nur eine läuft unbeaufsichtigt

Procountor bietet einen Authorization-Code-Ablauf für Anwendungen mit einem Nutzer davor und einen Client-Credentials-Ablauf für alles, was von allein läuft. Der zweite benutzt einen API-Key als Zugangsmittel, und dieser Key ist zugleich an einen Nutzer, eine Firma und eine Clientanwendung gebunden.

Bis hierhin ist das gewöhnlich. Der Satz, der Ihre Architektur entscheidet, ist der nächste, und Procountor schreibt ihn unverblümt hin: ein Access Token aus dem Client-Credentials-Ablauf erreicht keinen Endpunkt, der Zwei-Faktor-Authentifizierung verlangt, weil diese Endpunkte einen aktiv anwesenden Nutzer brauchen.

Zwei Wege hinein, und sie erreichen nicht dieselben EndpunkteProcountors eigener Wortlaut
Authorization Code
Eine Person ist anwesend

Ihr Kunde schließt die Anmeldung im Browser ab und wählt die Firma.

Jeder Endpunkt, auch die, die einen zweiten Faktor verlangen
Client Credentials
Niemand ist anwesend

Ein API-Key, gebunden an einen Nutzer, eine Firma und eine Clientanwendung.

Jeder Endpunkt außer denen, die einen zweiten Faktor verlangen
Das Beispiel, das Procountor gibt

Eine Integration darf eine Eingangsrechnung allein ändern. Die Zahlung dazu freizugeben, braucht eine Person mit Procountor Key, und den kann der unbeaufsichtigte Ablauf nicht liefern.

In der Spezifikation ausgezählt: über 192 Operationen wird Zwei-Faktor-Authentifizierung einmal genannt. Welche Endpunkte sie verlangen, steht in Prosa, die Grenze findet man also zur Laufzeit.

Beide Abläufe führen in dasselbe System und enden an verschiedenen Stellen. Procountors eigener Wortlaut, geprüft am 28. August 2026.

Procountor nennt das Beispiel selbst, und es ist das kommerziell entscheidende. Eine Integration darf eine Eingangsrechnung allein ändern. Die Zahlung zu dieser Rechnung muss eine Person freigeben, die Procountor Key besitzt, und der wird auf eine natürliche Person ausgestellt und lässt sich keinem Dienst übergeben.

Teuer wird es dadurch, dass die Grenze nicht maschinenlesbar ist. Über 192 Operationen der veröffentlichten Spezifikation wird Zwei-Faktor-Authentifizierung genau einmal genannt. Welche Endpunkte dahinterliegen, steht in Prosa, und ein Team, das mit voller Automatisierung plant, entdeckt die Linie deshalb meist zur Laufzeit.

Einen API-Key gegen ein Access Token tauschen, in Procountors dokumentierter FormHTTP
POST /api/oauth/token HTTP/1.1
Host: api.procountor.com
Content-Type: application/x-www-form-urlencoded
 
grant_type=client_credentials&client_id=<client_id>&client_secret=<client_secret>&redirect_uri=<redirect_uri>&api_key=<api_key>
 
# Die Antwort traegt das Token und seine Laufzeit:
# { "access_token": "...", "expires_in": 3600 }

Das Access Token gilt eine Stunde, danach läuft derselbe Tausch erneut. Beachten Sie die redirect_uri in einem Aufruf, der niemanden weiterleitet: Procountor benutzt dieselbe Adresse für beide Abläufe, also muss eine Anwendung, die beide anbietet, sie am Parameter state auseinanderhalten.

Der Ablauf, die Bindung des Keys an Nutzer, Firma und Client, das Ein-Stunden-Token und die geteilte Weiterleitungsadresse aus Procountors Maschine-zu-Maschine-Authentifizierung, die Zwei-Faktor-Grenze und das Beispiel mit der Eingangsrechnung aus seinen Zertifizierungspunkten, beides geprüft am 28. August 2026. Die Zahl von 192 Operationen ist unsere eigene, ausgezählt in der veröffentlichten Spezifikation.

Die Mechanik

Jede Verbindung gehört zu genau einer Firma

Ein Procountor-Nutzer kann zu mehreren Firmen gehören, was auf den meisten Systemen eine Kennung bedeutet, die man nach dem Authentifizieren auflöst und danach in jeder Anfrage mitführt. Procountor klärt das früher. Während der Anmeldung zeigt es eine eigene Auswahlseite, und die Verbindung, die zurückkommt, ist an die Firma gebunden, die der Nutzer gewählt hat.

Das klärt das eine und begrenzt das andere. Es gibt nach dem Authentifizieren nichts aufzulösen und keine Firmen-ID, die Sie durch Ihre Aufrufe fädeln müssen. Dafür ist eine Verbindung genau eine Firma, und ein Kunde mit dreien sind drei Verbindungen, jede von einer Person im Browser angelegt.

Es erklärt auch etwas, das Ihnen beim Lesen unserer Dokumentation auffallen wird: Procountor steht dort auf keiner der beiden Ablauflisten, weil es weder eine Firmensuche noch einen Auswahlschritt von uns braucht. Der Hersteller erledigt das bereits.

Die Mechanik

Sechs Monate auf einem Refresh Token, und fünf Wege, es zu verlieren

Der Authorization-Code-Ablauf liefert ein Access Token mit einer Stunde Laufzeit und ein Refresh Token mit sechs Monaten. Das Refresh Token rotiert nicht, der Wert, den Sie am ersten Tag speichern, ist also derselbe, den Sie im fünften Monat noch halten.

Worauf es ankommt, ist die Liste der Dinge, die es vorzeitig beenden, denn nur das erste ist die Uhr. Die anderen vier sind Handlungen, ausgeführt von Ihrem Kunden, von dessen Administrator oder von Ihrem eigenen Authentifizierungsablauf.

Die fünf dokumentierten Fälle, in denen ein Procountor-Refresh-Token aufhört zu funktionieren
Was passiertWer es auslöst
Die sechs Monate laufen abNiemand, es ist die Uhr
Der Nutzer ändert sein PasswortIhr Kunde
Der Nutzer meldet sich über den Logout-Endpunkt abIhr Kunde oder Ihr Code
Der Nutzer wird aus der Firma entferntDer Administrator Ihres Kunden
Derselbe Nutzer überschreitet 100 AnmeldungenWiederholte Durchläufe des Autorisierungsablaufs

Die letzte Zeile ist die, die ein Entwurf auslösen kann, ohne es zu merken. Bei jeder Authentifizierung entsteht ein Refresh Token, und das lässt sich nicht vermeiden, also steigt der Zähler, sooft derselbe Endkunde erneut durch den Ablauf geschickt wird. Jeden Kunden einmal zu authentifizieren und das Ergebnis zu behalten, ist das, was die Zahl dort hält, wo sie hingehört.

In allen fünf Fällen ist die Folge dieselbe, und sie gehört in Ihren Entwurf. Das gespeicherte Refresh Token ist ungültig, und weil Procountor im Autorisierungsschritt eine Person vorsieht, kann es nichts still erneuern. Ihr Kunde authentifiziert sich erneut. Was Sie das kostet, ist ein Weg in Ihrem Produkt für eine Verbindung, die neu autorisiert werden muss, und eine Meldung, die das sagt.

Die sechsmonatige Gültigkeit und alle fünf Fälle des Ungültigwerdens aus Procountors Zertifizierungspunkten, Abschnitt 3.2, geprüft am 28. August 2026. Dass das Token nicht rotiert, hat unser eigener Entwickler an der laufenden Integration bestätigt.

Das Datenmodell

Ein Objekt trägt sieben Belegarten

Procountor modelliert Ausgangsrechnung, Eingangsrechnung und Auftrag nicht als getrennte Dinge. Es modelliert ein Rechnungsobjekt mit einem Typ darauf, und dieser Typ nimmt sieben Werte an. Eine Ausgangsrechnung, eine Eingangsrechnung, beide Auftragsarten, eine Reisekostenabrechnung, eine Gebührenaufstellung und eine periodische Steuererklärung sind dieselbe Form mit einem anderen Etikett.

Der Buchungsbeleg macht dasselbe in größerem Maßstab, mit sechzehn Werten, darunter Lohn, Arbeitgeberbeiträge und ein Kontoauszug, der als Beleg dient. Den Typ falsch zu setzen, erzeugt einen gültigen Beleg der falschen Art.

Zwei Objekte, zwei Typlisten, ausgezählt in der veröffentlichten Spezifikation am 28. August 2026
ObjektWerte auf seinem TypBeispiele
Rechnung7Ausgangsrechnung, Bestellung, periodische Steuererklärung
Buchungsbeleg16Journal, Lohn, Arbeitgeberbeitrag, Umsatzsteuerformular

Zwei kleinere Dinge gehören in denselben Abschnitt, weil sie dasselbe Schema betreffen. Erstens ist eine ID innerhalb einer Firma eindeutig und sonst nirgends, zwei Firmen können also Rechnungen mit identischen IDs führen. Procountor benennt die Firma und die Ressourcen-ID zusammen als das Paar, das im ganzen System eindeutig ist.

Zweitens verlangt das Ändern einer Rechnung eine invoiceVersion, ein Zeitstempel, der als Zeichenkette geführt wird. Sie senden den empfangenen Wert unverändert zurück, sonst wird der Schreibvorgang abgelehnt. Es ist optimistische Nebenläufigkeitskontrolle im Gewand eines Datums.

Über das Common Data Model erreicht nichts davon Ihr Produkt: die sieben Belegarten kommen als die Objekte an, die sie tatsächlich sind, und die Frage nach der Kennung ist beantwortet, bevor Sie den Datensatz sehen.

Beide Typlisten ausgezählt in der veröffentlichten Spezifikation, Version 26.08. Die ID-Regel und die Paarung aus Firma und Ressource aus Procountors Konventionen für Anfrage und Antwort, geprüft am 28. August 2026. Dass eine invoiceVersion nötig ist, steht in der Spezifikation am Feld selbst.

Das Datenmodell

Der Satz und sein Code kommen in getrennten Listen

Die Aufteilung steht in keiner Dokumentation, und sie ist der Grund, aus dem es diesen Abschnitt gibt. Procountor nach Steuersätzen zu fragen, liefert eine Antwort mit zwei Arrays. Das eine hält die Prozentsätze. Das andere hält die Steuercodes. Nichts in der Antwort sagt, welcher Code zu welchem Prozentsatz gehört.

Die meisten Buchhaltungssysteme geben Ihnen einen Steuersatz und seinen Code als ein Objekt, und die meisten Datenmodelle sind so gebaut, unseres eingeschlossen. Gegen Procountor lässt sich dieses Modell aus einer einzelnen Antwort nicht füllen, und nachgelagert füllt es auch nichts. Die Zuordnung ist schlicht nichts, was die Antwort mitträgt.

Eine Antwort, zwei Listen, kein Schlüssel dazwischenVom Team, das es gebaut hat
Erstes Array
  • Ein Prozentsatz
  • Ein Prozentsatz
  • Ein Prozentsatz
Zweites Array
  • Ein Code
  • Ein Code
  • Ein Code
Was die Antwort nicht mitträgt

Nichts sagt, welcher Code zu welchem Prozentsatz gehört. Ein Modell, das beide paart, lässt sich aus dieser Antwort nicht füllen, und nachgelagert kann es auch nichts füllen.

Über maesn kommt es als eine Liste in der gemeinsamen Form an, und jeder Eintrag trägt den Satz oder den Code, mit dem er kam. Die Beziehung bleibt unveröffentlicht, also erfindet niemand eine.

Die Form der Steuerantwort, wie unsere eigenen Entwickler sie vorgefunden haben. Die Beschriftungen stehen für die Form, weil die Werte je Firma verschieden sind.

Die Kosten der Aufteilung tauchen in keiner Schätzung auf, weil nichts sie ankündigt. Sie rufen einen Endpunkt auf, Sie bekommen eine gültige Antwort, und erst beim Mapping zeigt sich die Lücke.

Die Anbindung über die Procountor-Schnittstelle mit maesn ändert die Form, nicht die Tatsache. Steuerdaten kommen als eine Liste statt als zwei an, in derselben Form, die jedes andere angebundene System benutzt, und jeder Eintrag trägt den Satz oder den Code, mit dem er kam. Die Beziehung wird von Procountor nicht veröffentlicht, also erfindet sie nachgelagert niemand, und ein Anwendungsfall, der die Paarung braucht, stellt sie bewusst her.

Dieser Abschnitt stützt sich auf unsere eigene Umsetzung, nicht auf veröffentlichte Dokumentation. Procountor dokumentiert weder die Aufteilung noch einen Schlüssel zwischen den beiden Listen, und wir haben in der Spezifikation auch keinen gefunden. Hier festgehalten, weil es billiger zu lesen als neu zu entdecken ist.

Änderungserkennung

Drei Ereignisse, und keines davon auf einem Beleg

Procountor veröffentlicht Webhooks, und die Liste ist kurz. Es gibt drei Ereignistypen: eine Zahlung wurde aktualisiert, eine Zahlung wurde gelöscht, ein Nutzer wurde aktualisiert. Abonnements werden mit HMAC über SHA512 authentifiziert, und je Ereignistyp ist ein Webhook erlaubt.

Für eine Buchhaltungsintegration, die Konten, Kontakte und Steuersätze liest, hilft keines dieser drei. Änderungserkennung ist ein Lesevorgang, den Sie einplanen, und das Intervall wählen Sie.

Die Paginierung ist dünner, als die Dokumentation auf den ersten Blick nahelegt. Über die Spezifikation ausgezählt tragen 22 von 101 Leseoperationen überhaupt Paginierungsparameter, in vier verschiedenen Kombinationen, und der Rest hat keine. Wo es Paginierung gibt, existieren zwei Mechanismen, ein Cursor und eine Seitennummer mit einer Größe, die oft auf fünfzig voreingestellt ist.

Unser Entwickler hat die praktische Hälfte davon ergänzt: manche Listen-Endpunkte liefern keine Gesamtzahl zurück, was ihm bei den Konten aufgefallen ist. Sie können durch sie paginieren, und Sie können vorher nicht sagen, wie weit Sie gehen müssen.

Filterung und Sortierung müssen stillstehen

Procountor hält fest, dass Paginierung nur funktioniert, wenn Filterung und Sortierung zwischen aufeinanderfolgenden Anfragen konstant bleiben. Ein Job, der mitten im Lauf einen Filter erweitert, liefert keinen Fehler zurück. Er liefert eine Seite aus einer anderen Ergebnismenge.

Das Anfragelimit in der Produktion liegt bei 60 pro Sekunde je Client, und Procountor schreibt, dass ein Überschreiten zur Aussetzung des Dienstes für diesen Client führen kann. Das ist eine härtere Folge als der übliche abgelehnte Aufruf, also muss der Zeitplan das Limit einhalten, bevor die Fehlerbehandlung es überhaupt zu sehen bekommt.

Geplant über einen Katalog von Systemen zu lesen, die alle anders paginieren, ist genau die Arbeit, die ein Weg, zu filtern und zu paginieren, abnimmt. Die Schleife, die Sie einmal schreiben, ist die Schleife, die Sie auf das nächste System richten.

Die drei Ereignistypen ausgezählt in der veröffentlichten Spezifikation, die Regel zu HMAC und SHA512, die Paginierungsmechanismen, die Anforderung konstanter Sortierung und die 60 Anfragen pro Sekunde aus Procountors Konventionen für Anfrage und Antwort, geprüft am 28. August 2026. Die fehlende Gesamtzahl bei den Konten ist die Beobachtung unseres eigenen Entwicklers. Was beim Überschreiten des Limits geschieht, ist nicht veröffentlicht, und wir sind nicht daran gestoßen.

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 Autorisierungsablauf und die FirmenauswahlWelche Objekte Ihr Anwendungsfall braucht
Das Ein-Stunden-Token und der Sechs-Monats-Refresh-ZyklusEinem Kunden zu sagen, dass seine Verbindung neu autorisiert werden muss
Steuerdaten als eine Liste in der gemeinsamen FormEinen Satz mit seinem Code zu paaren, wo Ihr Anwendungsfall es braucht
Kontakte aus zwei Endpunkten in einer Form zusammengeführtDas Intervall, in dem Ihr Zeitplan läuft
Der Kunden- oder Lieferantentyp, durchgereicht auf FirmenWas Ihr Modell mit einem Kontakt ohne Rolle macht
Die Belegarten, aufgelöst in echte ObjekteIhre eigene Fehlerbehandlung und Ihre Wiederholungen

Die Rollenfrage in dieser Spalte ist nur zur Hälfte Ihre. Der Endpunkt für Geschäftspartner führt auf Firmen einen Kunden- oder Lieferantentyp, und der kommt durch. Der Endpunkt für Personen hält Einzelpersonen und führt keinen solchen Typ, eine Kontaktperson kommt also ohne Rolle an. Zu entscheiden, was Ihr Modell mit einem Kontakt ohne Seite macht, ist der Teil, der Ihnen bleibt.

Die Anbindung ist in Schritten gewachsen. Konten, Kontakte und Steuersätze sind seit Juli lesbar, und das Buchen von Buchungsvorschlägen und Auslagen kam im August dazu. Procountor reicht weiter als das, mit einer Lohnabrechnungsfläche, die größer ist als der größte Teil seiner Buchhaltungsfläche, also lohnt es sich, die Objekte Ihres Anwendungsfalls gegen den aktuellen Umfang zu prüfen.

Der aktuelle Umfang und seine Daten kommen von unserem eigenen Entwickler und aus unserer Integrationsdokumentation, geprüft am 28. August 2026. Procountor veröffentlicht monatlich und nennt in seinen Release Notes Abkündigungsdaten für ältere Versionen, die Version, gegen die Sie bauen, verdient später also einen zweiten Blick.

FAQ

Häufige Fragen

Kann eine Procountor-Integration ohne anwesende Person laufen?

Teilweise. Ein Access Token aus dem Client-Credentials-Ablauf erreicht die meisten Endpunkte, und Procountor hält fest, dass es keinen der Endpunkte erreicht, die Zwei-Faktor-Authentifizierung verlangen, weil diese einen aktiv anwesenden Nutzer brauchen. Procountors eigenes Beispiel ist, dass eine Integration eine Eingangsrechnung ändern darf, während die Zahlung dazu eine Person zur Freigabe braucht.

Wie lange gilt ein Procountor-Refresh-Token?

Sechs Monate, und es rotiert nicht, der Wert bleibt also über den ganzen Zeitraum derselbe. Es endet vorzeitig in vier Fällen: der Nutzer ändert sein Passwort, meldet sich über den Logout-Endpunkt ab, wird aus der Firma entfernt oder überschreitet 100 Anmeldungen. Dann ist das gespeicherte Token ungültig und der Nutzer muss sich erneut authentifizieren, weil Procountor in diesem Schritt eine Person vorsieht.

Warum zeigen zwei Procountor-Firmen dieselbe Datensatz-ID?

Weil eine ID innerhalb einer Firma eindeutig ist und nicht im ganzen System. Procountor dokumentiert die Firma und die Ressourcen-ID zusammen als das Paar, das überall eindeutig ist, ein Speicher mit der Ressourcen-ID allein als Schlüssel kollidiert also, sobald eine zweite Firma dazukommt. Führen Sie die Firma daneben mit.

Wie paginiere ich durch einen Procountor-Listen-Endpunkt?

Wo es Paginierung gibt, existieren zwei Mechanismen, ein previousId-Cursor und eine Seite mit einer Größe, und die Größe ist oft auf 50 voreingestellt. In der Spezifikation ausgezählt tragen 22 von 101 Leseoperationen überhaupt Paginierungsparameter, in vier verschiedenen Kombinationen, der Endpunkt entscheidet es also. Filterung und Sortierung müssen zwischen den Aufrufen konstant bleiben.

Was passiert, wenn ich Procountors Anfragelimit überschreite?

Die Produktion erlaubt 60 Anfragen pro Sekunde je Client, und Procountors Dokumentation sagt, dass ein Überschreiten zur Aussetzung des Dienstes für diesen Client führen kann. Die genaue Antwort ist nicht veröffentlicht und unsere eigene Integration ist nicht an die Decke gestoßen, behandeln Sie das Limit also als ein Budget, innerhalb dessen Sie bleiben.

Gegen welche Procountor-Version sollte ich bauen?

Gegen die neueste. Procountor veröffentlicht monatlich und hält mehrere Versionen gleichzeitig verfügbar, mit Abkündigungsdaten in den Release Notes. Eine Änderung ist hier wichtig: der Personentyp am Endpunkt für Geschäftspartner ist zur Abkündigung vorgemerkt, Kontakte gehören also stattdessen an den Endpunkt für Personen.

Brauche ich einen Partnerstatus, bevor ich auf Procountor bauen kann?

Nein. Sie fordern eine Testumgebung mit einem Formular an, das Ihre Integration beschreibt, und der Produktionszugang ist ein zweiter Antrag derselben Art. Zertifizierung und Partnerprogramm sitzen darüber und sind ein kommerzieller Schritt, sie folgen also einer funktionierenden Integration, statt eine zu verhindern.

Einmal bauen, auf der Unified API.

Procountor teilt seine Steuerantwort in zwei, bindet eine Verbindung an eine Firma und stoppt den unbeaufsichtigten Ablauf an einem zweiten Faktor. Das nächste System zieht jede dieser Linien woanders. Bauen Sie gegen eine Schnittstelle, und jeder Unterschied wird zu einem Feld, das Sie lesen, statt zu einem Projekt, das Sie einplanen.