maesn
Für Entwickler

Moneybird anbinden: Versionen entscheiden, was sich geändert hat

Moneybird beantwortet die Frage nach der Aktualität über Versionsnummern. Ein Aufruf liefert jeden Datensatz einer Verwaltung als ID und Version, Sie vergleichen das mit dem, was Sie halten, und holen nur die, die sich bewegt haben. Das ist ein genaueres Delta, als ein Zeitstempel es gibt, und darauf steht die Synchronisation auf diesem System.

Lennart Svensson, CTO und Mitgründer bei Maesn
Lennart Svensson
CTO und Mitgründer · · Aktualisiert
Illustration zu Moneybird anbinden: Ein Delta-Sync, der verlässlich trägt
Der Kontext

Eine App, eine Verwaltung und die Zustimmung des Eigentümers

Die Verbindung zu Moneybird ist die gewöhnliche Hälfte. Sie registrieren eine Anwendung, Ihr Kunde autorisiert sie, und Sie halten ein Bearer-Token. Moneybird bietet ein persönliches Token als Abkürzung an und beschreibt dessen Reichweite unumwunden: Es „ähnelt einem Passwort und gewährt Zugang zu Ihrem gesamten Firmenkonto“. Für alles, in dem Kunden stecken, ist der OAuth-Weg der richtige.

Zwei Details dieses Flusses prägen, was Sie danach bauen. Das erste ist, wer zustimmen darf: Moneybird hält fest, dass der Benutzer Eigentümer der Verwaltung sein sollte, die Zustimmung kann also kein beliebiger Kollege geben. Das zweite ist, wem zugerechnet wird, was danach passiert.

Bei der Autorisierung „erzeugt Moneybird einen speziellen API-Benutzer“, und „alle Aktionen Ihrer Anwendung werden nach der Anwendung benannt, die Sie registriert haben“. Ihre Schreibvorgänge erscheinen in der Historie des Kunden unter dem Namen Ihres Produkts und nicht unter der Person, die es verbunden hat, was meistens das Gewünschte ist und immer gut zu wissen, bevor ein Supportgespräch darüber geführt wird.

Ein Token, das nicht abläuft, und eine Warnung dazu

Moneybird ist hier ungewöhnlich direkt: „Derzeit läuft dieses Token nicht ab, wir könnten das in Zukunft aber ändern. Behalten Sie das im Hinterkopf und bereiten Sie Ihre Anwendung entsprechend vor.“

Ein Refresh-Token kommt mit der Gewährung ohnehin zurück. Beide zu speichern und zu nutzen kostet heute nichts und ist der Unterschied zwischen einer Konfigurationsänderung und einem Vorfall an dem Tag, an dem dieser Satz nicht mehr stimmt. Wie die Erneuerung dann abläuft, nimmt Ihnen das Authentifizierungsmodell ab.

Zwischen dem Token und dem ersten nützlichen Aufruf steht noch eines: eine Verwaltungs-ID. Sie ist Teil jedes Pfades, und ein Kunde kann mehrere haben. Über uns gehört diese Auswahl zum Verbindungsfluss, Sie sammeln sie also nicht als Feld ein, denn Moneybird gehört zu den Systemen, bei denen der interaktive Fluss die Wahl speichert und bei späteren Anfragen wieder einsetzt.

Sie müssen diesen Weg nicht nehmen. Den Auswahlschritt gibt es, damit Ihr Kunde die Verwaltung einmal festlegt, Sie können ihn aber überspringen und die Firma bei jedem Aufruf benennen, und das ist der Weg, wenn Ihr eigenes Produkt schon weiß, welche Verwaltung es meint. Beide Wege enden am selben Konto-Schlüssel, und die Wahl liegt bei Ihnen.

Welche Objekte eine Verbindung erreicht, Feld für Feld, steht auf der Seite zur Moneybird Schnittstelle und wird hier nicht wiederholt. Worum es im Rest dieses Textes geht, ist der Teil, der keine Liste ist: wie Sie herausfinden, dass sich etwas geändert hat.

Der Rahmen einer Anfrage: Version, Verwaltung, Ressource und FormatHTTP
GET /api/v2/{administration_id}/contacts.json HTTP/1.1
Host: moneybird.com
Authorization: Bearer {access-token}
Content-Type: application/json
 
# v2 ist die einzige Version, die Moneybird heute veröffentlicht.
# Das Format steht im Pfad, .json und .xml sind also zwei URLs
# und keine zwei Accept-Header.

Pfadform und beide Formate aus Moneybirds Einführung, geprüft am 13. August 2026. Dieselbe Seite bittet darum, IDs als Zeichenketten zu verarbeiten, weil es große Ganzzahlen sind, die manche JSON-Parser runden.

Das Problem

Kontakte haben keinen eigenen Scope

Moneybird veröffentlicht sechs Scopes. Fünf davon benennen einen Arbeitsbereich und einer einen Datentyp, und das Objekt, um das die meisten Integrationen gebaut sind, steht überhaupt nicht in der Liste.

Die Dokumentation benennt die Folge eindeutig: „Für den Zugriff auf Kontakte ist einer der Scopes sales_invoices, documents, estimates, bank oder settings erforderlich … Nur Zugriff auf time_entries erlaubt Ihnen nicht, auf Kontakte zuzugreifen.“ Kontakte kommen also als Nebenwirkung davon, dass Sie etwas anderes anfragen.

Die sechs veröffentlichten Scopes, und welche davon Kontakte erreichen
ScopeErreicht Kontakte
sales_invoicesJa, und es ist die Vorgabe, wenn Sie keinen anfragen
documentsJa
estimatesJa
bankJa
settingsJa
time_entriesNein, so ausdrücklich formuliert

Scope-Liste und beide Sätze aus Moneybirds Authentifizierungsseite, geprüft am 13. August 2026, und je Operation in der Referenz wiederholt, wo die Kontakt-Aufrufe dieselben fünf nennen. Wenn Sie gar keinen Scope anfragen, gilt sales_invoices.

Das zählt auf dem Zustimmungsbildschirm, und Ihr Code merkt davon nichts. Ein Kunde, der nach dem Scope bank gefragt wird, damit Ihr Produkt einen Kontaktdatensatz lesen kann, liest diese Anfrage als eine Anfrage zu seiner Bank. Eine engere Anfrage gibt es nicht, der ehrliche Weg ist also, die zu erklären, die Sie stellen.

Der fehlende Kontakt-Scope nimmt auch eine Entwurfsmöglichkeit weg. Manche Systeme lassen Sie eine nur lesende Integration auf Scope-Ebene von einer schreibenden trennen. Hier tragen dieselben fünf Scopes beides, die Grenze zwischen Lesen und Schreiben ziehen Sie also auf Ihrer Seite.

Das Problem

Kontakte tragen die Partnerdaten, weil Kunden und Lieferanten es nicht tun

In unseren Coverage-Daten hat Moneybird kein lesbares Customers-Objekt und kein lesbares Suppliers-Objekt. Beide stehen in allen fünf Spalten auf nicht unterstützt. So ist das System gebaut: Moneybird führt einen Parteien-Datensatz und unterscheidet die Rollen auf den Dokumenten, die ihn referenzieren.

Einen eigenen Abschnitt wert ist die zweite Hälfte: Contacts ist hier auch das einzige Objekt, das wir zugleich für Lesen, Anlegen und Ändern unterstützen.

Jedes Objekt, das Moneybird heute über uns unterstützt, und wofür
ObjektUnterstützt für
ContactsLesen, Anlegen und Ändern
AccountsLesen
Tax ratesLesen
Booking proposalsAnlegen

Gezählt in unseren eigenen Coverage-Daten über alle 37 Objekte, die Moneybird listet. Alles, was nicht in dieser Tabelle steht, ist entweder als auf Abruf markiert oder nicht unterstützt, und kein Objekt hat Löschen freigeschaltet. Auf Abruf hält fest, was technisch erreichbar ist. Was heute verfügbar ist, steht in der Spalte daneben.

Liest man die zwei Hälften zusammen, schreibt sich die Integration in Umrissen von selbst. Ihre Partnerdaten machen den Rundlauf: Sie lesen Kontakte, Sie legen sie an, Sie ändern sie. Alles andere ist bestenfalls ein Lesevorgang, ein Produkt, das Dokumente in dieses System schieben will, plant also gegen die Auf-Abruf-Spalte und nicht gegen das, was freigeschaltet ist.

Die Mapping-Frage, die daraus folgt, ist die Stelle, an der ein einheitliches Modell seinen Wert zeigt. Wenn Ihr Produkt Kunden und Lieferanten als getrennte Typen führt, muss etwas sie auf dem Weg hinein auf einen Datensatz falten und auf dem Weg hinaus wieder auseinander. Das gemeinsame Datenmodell ist der Ort dafür, und es ist derselbe Code, ob das System darunter einen Parteien-Datensatz führt oder drei.

So funktioniert es

Was der Ereigniskatalog abdeckt

Moneybird hat ein Webhook-System, und zwar ein gründliches. Die Prämisse steht so da, wie man es sich wünscht: „Statt die Schnittstelle in einem bestimmten Intervall abzufragen, benachrichtigt Moneybird Sie über Änderungen an Informationen in der Buchhaltung.“

Der Katalog hinter diesem Satz ist groß. Die Ereignisseite listet 343 Ereignistypen für das Feld enabled_events, verteilt über 49 Gruppen oberster Ebene, und Sie können eine ganze Gruppe über ihr Präfix abonnieren, ohne ihre Mitglieder aufzuzählen.

Die Zustellmechanik ist ebenso vollständig. Ihr Endpunkt wird bei der Registrierung auf ein 200 geprüft. Ein Fehlschlag wird zehnmal in wachsenden Abständen wiederholt. Jede Zustellung trägt einen Idempotency-Key, der je Zustellung eindeutig ist, und genau das macht es sicher, dieselbe Zustellung zweimal anzunehmen.

Eine Zustellung prüfen, in der Reihenfolge, die die Dokumentation vorgibtTEXT
Moneybird-Signature: t=1748534400,v1=5257a869e7eceb...
 
1. signed_payload = "{t}." + roher Request-Body
2. digest = HMAC-SHA256(signing_secret, signed_payload)
3. Annehmen, wenn IRGENDEIN v1-Wert passt, in konstanter Zeit
4. Ablehnen, wenn t mehr als 5 Minuten von jetzt entfernt ist
 
# Der Body muss aus den exakt empfangenen Bytes bestehen. Ein
# erneutes Serialisieren des JSON ändert sie, und die Prüfung scheitert.

Schritte und beide Bedingungen aus der Signaturprüfung, geprüft am 13. August 2026. Während einer Schlüsselrotation trägt der Header ein v1 je aktivem Geheimnis, weshalb Schritt drei jede Übereinstimmung annimmt und sich nicht auf die erste beschränkt. Unbekannte Präfixe sollen ignoriert werden, ein künftiges Verfahren kann Sie also nicht herabstufen.

Eine Eigenschaft hebt dieses System von den meisten ab, mit denen man es vergleichen würde. Der Payload trägt den ganzen Datensatz: entity_type, entity_id, action und dann die vollständige entity, und in Moneybirds eigenem Beispiel kommt eine Rechnung mit ihrem Kontaktobjekt darin an, Adressen und Mandatsfelder eingeschlossen.

Das ist bequem, und es ist eine Entscheidung, die Sie erben. Eine vollständige Entität in einem Webhook-Body heißt, dass Kundendaten in Ihren Logs landen, sofern Sie sie nicht heraushalten, und das ist eine Frage der Aufbewahrung und keine der Integration.

In welchem Zustand jede Zustellung endete, steht am Webhook selbst, denn Moneybird hält den letzten Statuscode und Body zur Fehlersuche vor. Das ist dieselbe Information, die das Logging-Modell für Aufrufe über uns bereitstellt.

Die Ereigniszahl an der Ereignistabelle gemessen und durch drei getrennte Zählungen derselben Tabelle bestätigt, geprüft am 13. August 2026. Wiederholverhalten und die Registrierungsprüfung aus dem Webhook-Leitfaden, die Form des Payloads aus der Payload-Referenz.

So funktioniert es

Vier Ressourcen für Ereignisse, und ein Versionsindex ohne Abonnement

Alles darüber beschreibt, was der Hersteller veröffentlicht. Was eine Verbindung über uns heute nutzt, ist der Versionsindex im nächsten Abschnitt, und Ereignisse werden auf diesem System auf Anfrage freigeschaltet.

Unsere eigene Dokumentation steht zwischen diesen zwei Tatsachen und sollte vollständig gelesen werden, bevor Sie um eine von beiden herum planen. Sie beschreibt das Abonnement für dieses System konkret, benennt vier Ressourcen und drei Ereignistypen, und sie nennt den Aufruf, der je Kunde eines anlegt.

Die vier Ressourcen, die unsere Dokumentation nennt, gegen das, was heute freigeschaltet ist
RessourceEntsprichtHeute freigeschaltet
CONTACTContactsNein, als auf Abruf markiert
INVOICEInvoicesNein, als auf Abruf markiert
PAYMENTPaymentsNein, als auf Abruf markiert
TAX_RATETax ratesNein, als auf Abruf markiert

Ressourcen und die drei Ereignistypen CREATED, UPDATED und DELETED aus unserer Moneybird-Dokumentation, die Spalte zur Freischaltung aus unseren Coverage-Daten, beide geprüft am 13. August 2026. Zwei Felder des einheitlichen Ereignis-Bodys sind für dieses System als leer dokumentiert, filterDate und userId.

Dieselben Ereignisse, auf drei EbenenAlle drei gezählt
  • 343
    Ereignistypen
    Moneybird veröffentlicht

    Signiert, zehnmal wiederholt, mit der vollständigen Entität im Payload.

  • 4 × 3
    Ressourcen und Ereignistypen
    Unsere Dokumentation beschreibt

    CONTACT, INVOICE, PAYMENT und TAX_RATE, jeweils mit CREATED, UPDATED und DELETED.

  • 0
    Objekte
    Heute in unserer Coverage freigeschaltet

    Die vier Ressourcen darüber tragen alle die Markierung auf Abruf.

Alle drei Zeilen stimmen gleichzeitig. Ein dokumentiertes Ereignis ist noch kein freigeschaltetes, und was heute keines trägt, kann morgen eines tragen. Entwerfen Sie gegen die unterste Zeile.

Drei Ebenen, drei verschiedene Aussagen, alle gemessen. Die unterste Zeile ist die, gegen die Sie entwerfen.

Beide Tatsachen gehören in denselben Absatz, weil ein Plan, der nur auf einer steht, schiefgeht. Ein dokumentierter Katalog heißt noch nicht, dass heute Ereignisse ankommen, und was heute keines trägt, kann morgen eines tragen. Das Ereignismodell ist der Ort für diese Unterscheidung, und auf diesem System ist die Pull-Hälfte derzeit das Ganze.

Die nützliche Frage ist also, worauf der Pull steht. Auf den meisten Systemen lautet die Antwort: ein Zeitstempel seit der letzten Änderung. Hier ist es etwas Besseres, und Moneybird dokumentiert es für genau diesen Zweck, Sie müssen es sich nicht zusammensetzen.

Auf Abruf ist kein Liefertermin
Dreiundzwanzig Objekte tragen hier in der Webhook-Spalte die Markierung auf Abruf. Sie heißt technisch machbar und noch nicht gebaut, sie ist keine Zusage, und genau in dieser Spalte ist sie am wenigsten belastbar. Entwerfen Sie gegen das, was heute freigeschaltet ist.
So funktioniert es

Versionsnummern, und die Grenze bei hundert Datensätzen

Die Synchronisationsendpunkte machen das konkret. Ein GET liefert jeden Datensatz der Verwaltung als ID und Versionsnummer. Sie vergleichen diese mit dem, was Sie halten. Dann liefert ein POST an denselben Pfad die Datensätze, die Sie benennen.

Schritt eins: der ganze Index, als IDs und VersionenHTTP
GET /api/v2/{administration_id}/contacts/synchronization.json
Authorization: Bearer {access-token}
 
# Die Antwort ist die ganze Verwaltung, keine Seite daraus:
# [{ "id": "495331562957571916", "version": 1786605011 },
# { "id": "495331562982737747", "version": 1786605011 }]

Moneybirds eigene Anweisung an der Kontakt-Ressource, geprüft am 13. August 2026: „Prüfen Sie, ob die Version des Kontakts neuer ist als die lokal gespeicherte, und nutzen Sie die POST-Variante, um Kontakte mit den angegebenen IDs abzurufen.“

Schritt drei: nur die Datensätze, deren Version sich bewegt hatHTTP
POST /api/v2/{administration_id}/contacts/synchronization.json
Authorization: Bearer {access-token}
Content-Type: application/json
 
{ "ids": ["495331562957571916", "495331562982737747"] }
 
# Es kommen höchstens 100 Datensätze zurück, egal wie viele IDs
# Sie senden. Bilden Sie Stapel, bevor Sie die Grenze entdecken.

Die Obergrenze ist der Wortlaut des Herstellers: „Liefert höchstens 100 Kontakte zurück, auch wenn mehr IDs übergeben werden.“ Derselbe Satz steht an den anderen Ressourcen, die dieses Paar tragen, mit ausgetauschtem Objektnamen.

Ein Delta, drei Aufrufe11 Ressourcen tragen es
  1. 1Den Index abfragen
    GET …/contacts/synchronization.json

    Liefert jeden Datensatz der Verwaltung als ID und Version.

  2. 2Auf Ihrer Seite vergleichen
    Kein Aufruf, Ihre Datenbank

    Behalten Sie die IDs, deren Version neuer ist als die gespeicherte.

  3. 3Nur diese holen
    POST …/contacts/synchronization.json

    Senden Sie die gewünschten IDs. Liefert höchstens 100 Datensätze je Aufruf.

Schritt zwei ist der Grund, warum das aufholt. Der Vergleich lebt in Ihrer Datenbank und nicht in einem Cursor beim Hersteller, ein Worker, der einen Tag ausgefallen war, stellt beim nächsten Lauf dieselbe Frage und bekommt eine vollständige Antwort.

Das Delta in den drei Aufrufen, die der Hersteller dokumentiert. Der Vergleich in der Mitte ist der Teil, der keinen Endpunkt hat.

In Moneybirds veröffentlichter OpenAPI-Beschreibung gezählt, tragen 11 seiner 211 dokumentierten Pfade dieses Muster, Kontakte und Ausgangsrechnungen darunter, dazu Angebote, Finanzbewegungen und die Dokumenttypen. Es deckt also die Objekte ab, die eine Buchhaltungsintegration bewegt, und es deckt nicht alles ab.

Zwei Eigenschaften machen es tragfähig. Ein Versionsvergleich kümmert sich nicht um Uhrabweichungen oder Zeitzonen, und auf einem System, das Zeitstempel über einen Header, dann eine Verwaltungseinstellung und dann UTC auflöst, ist das eine Fehlerklasse, die Sie sich schlicht nie einhandeln.

Und es holt auf. Ein Worker, der einen Tag ausgefallen war, stellt beim nächsten Lauf dieselbe Frage und bekommt eine vollständige Antwort, ohne dass ein Cursor erhalten geblieben sein muss.

Kernzahlen

Das Rate Limit zählt je Adresse, nicht je Kunde

Moneybirds Drosselung ist großzügig in ihrer Rahmung und genau in ihrer Einheit. Die Nutzung ist innerhalb des Abonnements und der Berechtigungen des verbundenen Kontos unbegrenzt, und dann setzt ein Satz die Einheit: „Um Betrug und Missbrauch zu verhindern, werden Anfragen an die Schnittstelle je IP-Adresse gedrosselt.“

Die Zahl ist 150 Anfragen je fünf Minuten, und 50 je fünf Minuten für alles unterhalb der Reporting-Endpunkte. Lesen Sie die Einheit noch einmal, denn sie ist der Teil, der eine Architektur entscheidet. Das Budget gehört der Adresse. Token, Kunde und Verwaltung spielen dabei keine Rolle.

Für ein Skript mit einem Mandanten ist das reichlich. Für eine direkte Integration, die viele Kunden von einer Ausgangsadresse aus bedient, ist es ein einziger Topf, und weitere Kunden bringen keine zusätzliche Kapazität: 150 je fünf Minuten sind 30 je Minute, ob eine Verwaltung dahintersteht oder vierhundert.

Über maesn ist diese Rechnung nicht mehr Ihre. Die Aufrufe an Moneybird kommen aus unserer Infrastruktur, die Adresse, die das Limit zählt, ist also unsere, und die Planung dagegen läuft auf unserer Seite der Schnittstelle. Bei Ihnen kommt der standardisierte Fehler unten an. Ein Budget für Ihren eigenen Ausgang müssen Sie nicht bemessen.

Der Statuscode, den man leicht falsch liest
Ein 429 ist die gewöhnliche Antwort auf eine Ratenbegrenzung und trägt Retry-After neben den drei RateLimit--Headern. Ein 403 heißt hier nicht, dass Ihr Scope falsch ist. Moneybird dokumentiert ihn als „IP ist für die Schnittstellennutzung gesperrt“, was auf dasselbe Adressbudget zeigt und nicht auf Berechtigungen. Ihn als gescheiterte Zustimmung zu behandeln schickt Kunden durch einen Fluss zurück, der nie das Problem war, und das ist eine der Zuordnungen, für die es das Fehlermodell gibt.

Es gibt einen dokumentierten Ausweg, und er ist ein Gespräch und kein Parameter: „Partner mit beliebten OAuth-Anwendungen können ein Limit je Verwaltung statt der Limits je IP-Adresse beantragen.“ Gut, das früh zu wissen, denn der Antrag ist leichter gestellt, bevor das Limit der Grund dafür ist.

Ein weiterer Satz derselben Seite ändert, wie Sie Arbeit überprüfen. Moneybird speichert Lesevorgänge zwischen: „Wir raten dringend davon ab, GET-Methoden zur Überprüfung zu verwenden, da das zu einem unvollständigen Ergebnis führen kann. Zur Überprüfung von Anfragen können Entwickler die Statuscodes der Antwort prüfen.“

Der Statuscode ist also das, was einen Schreibvorgang bestätigt. Wo ein Schreibvorgang eingereiht wird, statt sofort zu laufen, meldet der asynchrone Weg das Ergebnis, ohne dass Sie danach fragen müssen.

Die Drosselungszahlen, die Einheit je Adresse, die Ausnahme je Verwaltung, die Beschreibung des 403 und der Hinweis zur Zwischenspeicherung stammen alle aus Moneybirds Einführung, geprüft am 13. August 2026.

Kernzahlen

Ein Filter, den Sie übergeben, ersetzt die Vorgaben

Das Filtern läuft über einen eigenen Pfad und nicht über Query-Parameter am Listen-Aufruf. Sie fragen /contacts/filter.json an und übergeben eine filter-Zeichenkette aus kommagetrennten key:value-Begriffen. So weit hatte die vorige Fassung dieses Artikels recht, und der Satz daneben in der Referenz ist der, der Zeit kostet.

Moneybird sagt es unumwunden: „Jeder Filter, den Sie übergeben, ersetzt die Vorgaben unten vollständig, nehmen Sie also jeden Schlüssel auf, den Sie brauchen.“ Ein Filter ersetzt die Vorgaben, er engt sie nicht ein. Ein einziger übergebener Schlüssel lässt jede Bedingung fallen, die Sie für selbstverständlich hielten, und die Antwort sieht plausibel aus, während sie falsch ist.

Ein Delta-Filter, mit beiden Schlüsseln bewusst ausgeschriebenHTTP
GET /api/v2/{administration_id}/contacts/filter.json
?filter=updated_after:2026-08-01T00:00:00.000Z,contact_type:all
 
# updated_after ist EXKLUSIV und wird in UTC verglichen.
# Den Zeitstempel des letzten Laufs wiederzuverwenden ist also
# richtig und nicht um einen Datensatz daneben.

Filtersyntax, die Ersetzungsregel und beide Eigenschaften von updated_after aus der Kontakt-Filteroperation, geprüft am 13. August 2026. Zu den dokumentierten Schlüsseln gehören created_after, contact_type, delivery_method und trusted_type.

Die Seitenaufteilung ist konventionell, und eine Erwartung daran ist es nicht. Sie bekommen page und per_page, die voreingestellte Seitengröße ist 50 und das Maximum 100. Was Sie nicht bekommen, ist eine Gesamtzahl. Moneybird liefert einen Link-Header mit rel="next" und rel="prev", die Größe einer Ergebnismenge erfahren Sie also, indem Sie an ihr Ende kommen.

Das ist eher ein Fortschrittsbalken-Problem als eines der Richtigkeit, und es hat eine naheliegende Wechselwirkung mit dem Abschnitt darüber: jede Seite abzulaufen, um zu erfahren, wie viele es waren, kostet dasselbe Adressbudget wie die Synchronisation selbst. Beide Zahlen beschreiben eine direkte Integration. Über maesn senden Sie ein limit und ein page gegen einen Paginierungsvertrag, und Moneybirds Seitengröße, seine Obergrenze und seine fehlende Gesamtzahl müssen Sie sich nicht mehr merken.

Wo unser Teil endet

Was maesn abdeckt, und was bei Ihnen bleibt

Was wir von der Liste nehmen:

  • Die Auswahl der Verwaltung. Welche Verwaltung ein Token betrifft, gehört zum Verbindungsfluss und wird für spätere Aufrufe gespeichert, es ist also kein Feld, das Sie einsammeln, prüfen und durch jede Anfrage fädeln.
  • Die Zuordnung der Parteien. Ein Kontaktdatensatz kommt in derselben Form an, die Ihre anderen Systeme liefern, ein Produkt, das Kunden und Lieferanten getrennt führt, bekommt also keinen Moneybird-förmigen Zweig.
  • Die Form der Antwort. Das Format im Pfad, IDs, die als Zeichenketten überleben müssen, und ein eigener Filtervertrag enden an unserer Grenze und erreichen Ihre Modelle nicht.

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

  • Die Taktung und die Rechnung dahinter. Heute macht nichts aus dieser Verbindung eine Ereignisquelle. Wie frisch Ihr Produkt sein muss, gegen ein Budget, das einer Adresse gehört und keinem Kunden, entscheiden Sie.
  • Was Sie einem Kunden sagen, was die Zustimmung abdeckt. Es gibt keinen Kontakt-Scope, nach dem man fragen könnte, die Erklärung auf Ihrer Seite leistet also Arbeit, die der Berechtigungsbildschirm nicht leisten kann.
  • Die Aufbewahrung dessen, was ein Ereignis tragen würde. Wenn Abonnements später Teil Ihres Entwurfs werden, ist der Payload eine vollständige Entität. Wo die landet und wie lange sie bleibt, entscheidet keine Schnittstelle für Sie.

Ein Satz dazu, was dieser Text beiseitelässt. Rechnungen, Eingangsrechnungen, Ausgaben und Buchungszeilen sind alle auf Anfrage erreichbar, und diese Markierung hält fest, was technisch erreichbar ist, und nicht, was heute freigeschaltet ist. Der Artikel argumentiert deshalb an den Objekten, die heute tragen.

FAQ

Häufige Fragen

Welche Apps lassen sich mit Moneybird verbinden?

Jede Anwendung, deren Entwickler eine registriert. Moneybird gibt OAuth-Clients aus und führt keine Liste freigegebener Partner: Sie registrieren eine App, Ihr Kunde autorisiert sie, und Moneybird legt dann einen eigenen API-Benutzer für diese Verbindung an. Jede Aktion Ihrer Integration trägt den Namen der Anwendung, die Sie registriert haben.

Unterstützt Moneybird Webhooks?

Moneybird dokumentiert sie ausführlich, mit 343 Ereignistypen, signierten Payloads und zehn Zustellversuchen. Über maesn trägt heute kein Moneybird-Objekt ein freigeschaltetes Ereignis, es ruft Sie also nichts. Beide Hälften stimmen gleichzeitig, und ein Plan, der nur auf einer steht, geht schief.

Wie halte ich Daten mit Moneybird synchron?

Über die Synchronisationsendpunkte. Ein GET liefert jede Datensatz-ID der Verwaltung mit einer Versionsnummer, Sie vergleichen diese Versionen mit dem, was Sie halten, und ein POST an denselben Pfad liefert die Datensätze, die Sie benennen. Elf Ressourcen tragen dieses Paar, Kontakte und Ausgangsrechnungen darunter.

Wie hoch sind die Rate Limits von Moneybird?

150 Anfragen je fünf Minuten, und 50 je fünf Minuten auf den Reporting-Endpunkten. Das Limit zählt je IP-Adresse, eine Adresse, die viele Verwaltungen bedient, teilt sich also ein Budget. Moneybird bietet auf Anfrage ein Limit je Verwaltung an.

Welchen Scope brauche ich, um Kontakte in Moneybird zu lesen?

Es gibt keinen Kontakt-Scope. Moneybird veröffentlicht sechs Scopes, und Kontakte liegen hinter fünf davon, es genügt also einer von sales_invoices, documents, estimates, bank oder settings. Nur time_entries genügt nicht: Die Dokumentation hält fest, dass er allein keinen Zugriff auf Kontakte gewährt.

Gibt es eine Moneybird-Sandbox?

Ja, und sie ist eine vollwertige Verwaltung. Moneybird hält fest, dass Sandbox-Verwaltungen Zugang zu allen Funktionen ohne Abonnement gewähren, mit produktionsseitigen Einschränkungen wie Wasserzeichen auf Rechnungen. Sie legen eine aus Ihrem eigenen Konto an, die Entwicklung wartet also nicht auf eine Freigabe.

Läuft das Moneybird-Zugangstoken ab?

Heute nicht. Moneybird schreibt, dass das Token derzeit nicht abläuft, fügt hinzu, dass sich das ändern könnte, und rät, sich darauf vorzubereiten. Ein Refresh-Token kommt mit der Gewährung zurück, die vernünftige Lesart ist also, beide zu speichern und zu nutzen, und nicht von Dauerhaftigkeit auszugehen.

Warum liefert meine gefilterte Liste die falschen Datensätze?

Weil ein Filter die Vorgaben ersetzt und sie nicht einengt. Moneybird dokumentiert, dass jeder übergebene Filter die Vorgabemenge vollständig ersetzt, eine Anfrage mit einem Schlüssel lässt also stillschweigend jede andere Bedingung fallen. Nehmen Sie jeden Schlüssel auf, den Sie brauchen, auch die, die Sie für selbstverständlich hielten.

Einmal bauen, auf der Unified API.

Moneybird zählt sein Rate Limit je Adresse und beantwortet die Frage nach der Aktualität über einen Versionsindex. Das nächste System zieht beide Linien woanders. Bauen Sie gegen eine Schnittstelle, und jeder dieser Unterschiede wird zu einem Feld, das Sie lesen, statt zu einem Projekt, das Sie einplanen.