maesn
Produkt-Feature

Unified Pagination & Filtering, eine Form für jede Ergebnismenge

Systeme paginieren auf unvereinbare Weise, manche über die Seitenzahl, manche über einen Cursor, jedes mit eigenen Eigenheiten. Maesn setzt einen limit- und einen page-Parameter vor alle und ergänzt die Filter, mit denen Sie nur das Geänderte abrufen.

Vier Arten zu blätterneine Ergebnismenge
Seitenbasierterst Seiten zählen
Seitenbasiert, minus einsletzte Seite scheitert
CursorbasiertLesezeichen, keine Summe
Maximalzahl in der URLherausparsen
maesn blättert es
Eine Paginierung, jedes System
GET /invoices?limit=50&page=1
Diese Software-Teams vertrauen uns
HubSpotTipaltiPaywiseRallyQredNordhealthFindityFintoClockinHEROHolviLanes & PlanesAgicapHubSpotTipaltiPaywiseRallyQredNordhealthFindityFintoClockinHEROHolviLanes & PlanesAgicap
Das Konzept

Was ist Unified Pagination & Filtering

Die Form der Daten zu normalisieren ist das eine Problem. Die Form der Ergebnismenge zu steuern ist ein eigenes: welche Datensätze zurückkommen, in welcher Reihenfolge, welche herausgefiltert werden und wie viele auf einmal ankommen. Zwei Systeme können ein identisches Rechnungsobjekt liefern und sich trotzdem völlig uneins sein, wie Sie durch zehntausend davon gehen.

Unified Pagination & Filtering ist die Ebene, die das klärt. Ein Blätterschema, ein Satz Filterparameter und ein Weg, Ergebnisse zu sortieren, über jedes System hinweg, die Schleife, die Sie für die erste Anbindung schreiben, ist also die Schleife, die für alle funktioniert. Es steht neben das Common Data Model statt darin: Das Modell klärt, wie ein Datensatz aussieht, dies klärt, welche Datensätze Sie bekommen.

Das Problem

Zwei Paradigmen, und je System eine Variante

Blättern ist nicht ein Problem mit einer Lösung. Es sind zwei unvereinbare Modelle, jedes mit Eigenheiten je System obendrauf, und Sie treffen auf alle, sobald Sie zum ersten Mal eine vollständige Liste lesen wollen.

Seitenbasiert

Sie zählen und fordern nummerierte Seiten an.

  1. 1Fragen, wie viele Seiten es gibt
  2. 2Seite 1, 2, 3 in einer Schleife anfordern
  3. 3Eine Seite früher stoppen, die letzte scheitert
  4. 4Manche geben die Maximalzahl in der URL
Cursorbasiert

Sie folgen einem Lesezeichen, bis es endet.

  1. 1Den ersten Stapel anfordern
  2. 2Den Cursor aus der Antwort lesen
  3. 3Ihn zurücksenden für den nächsten Stapel
  4. 4Die Gesamtzahl erfahren Sie nie

Zwei unvereinbare Paradigmen, dazu je System eine Variante. Wer direkt dagegen baut, braucht für jede Anbindung eine eigene Blätterschleife.

Wie Maesn damit umgeht

Zwei Parameter, vorhersehbare Ergebnisse

Sie senden limit und page. Maesn übersetzt das in das, was das Zielsystem wirklich braucht, und gibt eine gleichbleibende Seite normalisierter Datensätze zurück.

limit
Wie viele je Seite

Nimmt 5, 10, 20, 50 oder 100, sodass eine Seitengröße immer ein gültiger, vorhersehbarer Wert ist.

page
Welche Seite zurückkommt

Beginnt bei 1 und zählt hoch, ohne Vorabfrage und ohne Off-by-one am Ende der Menge.

Überall eine Paginierung

Seitenbasierte Schemata, Cursor-Lesezeichen und ihre Varianten je System liegen alle hinter denselben zwei Query-Parametern.

Delta über lastModified

Übergeben Sie den Zeitstempel Ihres letzten Abrufs und erhalten Sie nur die Objekte, die seitdem neu oder geändert sind.

Filter, wo sie zählen

Neben lastModified gibt es status auf Rechnungen, dazu Filter für die Lücken eines bestimmten Systems, auf denselben vereinheitlichten Endpunkten.

Sortierung, die Sie steuern

Sortieren Sie Rechnungen, Eingangsrechnungen und Buchungsvorschläge nach Datum, Nummer oder Erstell- und Änderungszeitstempel, aufsteigend oder absteigend.

fetch-invoices.ts
const res = await axios.get(url, {
params: { limit: 50, page: 1 },
headers: {
'X-API-KEY': apiKey,
'X-ACCOUNT-KEY': accountKey
}
});

Sie erfahren auch die Größe

Jede Antwort trägt meta.pagination als eigenen Block. Genau das kann ein Cursor nicht: eine Zahl anzeigen, die Arbeit planen und wissen, wann Sie fertig sind, auf Systemen, die selbst nie eine Gesamtzahl herausgeben.

totalWie viele Datensätze überhaupt passen
totalPagesWie viele Seiten das bei Ihrer Seitengröße sind
currentPageWelche Seite diese Antwort abbildet
perPageDie Seitengröße, mit der die Antwort gebaut wurde
Der Delta-Filter

Holen Sie das Geänderte, nicht wieder alles

Der Filter, von dem die meisten Anbindungen am Ende leben, ist lastModified. Sie merken sich den Zeitstempel Ihres letzten erfolgreichen Abrufs, übergeben ihn bei der nächsten Anfrage und erhalten nur die Objekte, die seitdem neu oder geändert sind. Aus einem nächtlichen Abgleich über das ganze Hauptbuch eines Kunden wird eine Anfrage, die eine Handvoll Datensätze liefert.

Er ist auf fast jedem Schema und Endpunkt eingebaut, und das macht ihn als allgemeine Strategie brauchbar statt als Sonderfall. Die praktische Regel dazu: so selten abfragen, wie Ihre Daten noch frisch genug bleiben. Jede Minute nach etwas zu fragen, das sich einmal am Tag ändert, ist verschenkter Verkehr und verschenktes Geld, und das Budget, das Sie ausgeben, ist das des Zielsystems. Maesn setzt auf dem Hinweg kein eigenes Rate-Limit, bei einem gewöhnlichen synchronen Aufruf ist also das Limit des Systems das, was Sie aufbrauchen können, und eine Abweisung erreicht Sie als eigener standardisierter Fehler statt als allgemeiner Fehlschlag. Asynchronous Processing gibt Volumen in dem Tempo frei, das das System annimmt, auf den Endpunkten, die es unterstützen, und das ist eine engere Menge als jeder Aufruf, den Sie machen. Wo Sie im Moment der Änderung reagieren müssen statt nach Zeitplan, pushen Unified Webhooks Ihnen das Event stattdessen zu, und viele Anbindungen fahren beides: Webhooks für die Unmittelbarkeit, einen regelmäßigen Delta-Abruf als Netz.

Ihr letzter Abruf: 15. Jan, 09:30
9714f3a2-5b8e-4d1b-…14. Jan, 08:12
b28c1f04-77ae-4c31-…14. Jan, 16:40
3f5d9a61-0c42-4e8b-…15. Jan, 10:05
eaa28f49-6028-4b6e-…15. Jan, 11:37

Illustrativ. Graue Objekte lagen schon in Ihrer Datenbank.

maesn liefert das Delta
Nur das Geänderte
GET /invoices?lastModified=2026-01-15T09:30:00

Sie bekommen die zwei Objekte, die seit Ihrem Zeitstempel neu oder geändert sind, nicht wieder das ganze Hauptbuch.

Filtern und Sortieren

Filter gebaut für das, was jedem System fehlt

Manche Filter gibt es überall, andere gibt es, weil ein System eine Lücke hat, die zu schließen sich lohnt. Beide liegen auf denselben vereinheitlichten Endpunkten, sie zu nutzen kostet Sie also keinen Code je System.

sevdesk

·Kontakte
number

Kontakte über ihre Kontaktnummer suchen, Kunden und Lieferanten im selben Filter.

sevdesk anbinden

Lexware Office

·Kontakte
name, email

Kontakte nach Name oder E-Mail-Adresse filtern, um einen schon vorhandenen Datensatz zuzuordnen.

Lexware Office anbinden

Sage Active

·Rechnungen
paymentStatus

Sage Active kennt im regulären Rechnungsstatus kein bezahlt oder teilbezahlt, deshalb ist der Zahlungsstatus ein eigener Filter.

Sage Active anbinden

BuchhaltungsButler

·Eingangsrechnungen
billDateFrom

Nur Eingangsrechnungen zurückgeben, deren Belegdatum nach dem übergebenen Wert liegt, gefiltert in der Anfrage selbst.

BuchhaltungsButler anbinden
orderFieldplusorderDiralsASCoderDESC
RechnungeninvoiceDate · invoiceNumber · createdDate · updatedDate
EingangsrechnungenbillDate · billNumber · createdDate · updatedDate
BuchungsvorschlägebookingProposalDate · number · createdDate · updatedDate

Nicht jede Ressource unterstützt alle drei, Filtern, Sortieren und Paginieren, und Maesn behauptet nichts anderes. Die Fähigkeit muss irgendwo darunter vorhanden sein, die Unterstützung ist deshalb je Endpunkt in der API-Referenz dokumentiert. Sie sehen, was ein Endpunkt bietet, bevor Sie dagegen bauen, und genau das kann eine vereinheitlichende Ebene sein: einheitlich, wo Einheitlichkeit möglich ist, und offen an den Rändern.

Warum es zählt

Eine Schleife, jedes System

Selbst gebaut
  • Je System eine Blätterschleife schreiben
  • Cursor und Seitenzahlen behandeln
  • Die scheiternde letzte Seite umgehen
  • Alles neu holen, um Änderungen zu finden
Mit Maesn
  • Überall ein limit und ein page
  • Cursor und Zählung für Sie erledigt
  • Kein Off-by-one zu umgehen
  • Nur das seither Geänderte holen

Eine vollständige Liste zu lesen klingt nach dem Einfachsten, was eine Anbindung tut, und dort verschwindet erstaunlich viel Zeit: eine Blätterschleife je System, ein Umweg um die Seite, die scheitert, und jede Nacht ein vollständiges Neulesen, weil es keinen verlässlichen Weg gibt, nach dem Geänderten zu fragen. Weil Sie über Maesn blättern und filtern statt gegen jedes System, passiert diese Arbeit einmal. Dieselben zwei Parameter und derselbe Delta-Filter tragen über jede Anbindung, die Sie ergänzen, auch die, die Maesn nach Ihrem Livegang ergänzt, und der Kunde braucht sich dafür nur sich einmal zu verbinden. Die Blätterschleife, die niemand noch einmal schreibt, ist Zeit, die Produkt- und Entwicklungsteams bei jeder Anbindung nach der ersten zurückbekommen.

FAQ Unified Pagination & Filtering

Häufige Fragen

Wie funktioniert die Paginierung in der Maesn API?

Über zwei Query-Parameter: limit und page. Der Parameter limit setzt, wie viele Ressourcen je Seite zurückkommen, und nimmt 5, 10, 20, 50 oder 100. Der Parameter page wählt die Seite und beginnt bei 1. Das ist auf jedem System gleich, ob die darunterliegende API seiten- oder cursorbasiert ist.

Muss ich wissen, ob ein System Cursor oder Seitenzahlen nutzt?

Nein. Maesn fängt den Unterschied ab. Cursor-Lesezeichen, Vorabfragen nach der Seitenzahl, scheiternde letzte Seiten und in der URL zurückgegebene Seitenzahlen werden alle auf Maesns Seite erledigt, und Ihr Code sendet nur limit und page.

Erfahre ich, wie viele Datensätze es gibt?

Ja. Jede Antwort trägt einen meta.pagination-Block mit der Gesamtzahl passender Datensätze, der Seitenzahl bei Ihrer Seitengröße, der aktuellen Seite und der Seitengröße selbst. Das ist erwähnenswert, weil ein cursorbasiertes System eine Gesamtzahl in der Regel gar nicht nennen kann, hier gibt Ihnen der Weg über Maesn also mehr als die darunterliegende API, nicht weniger.

Wie hole ich nur die geänderten Datensätze?

Nehmen Sie den lastModified-Filter. Merken Sie sich den Zeitstempel Ihres letzten erfolgreichen Abrufs und übergeben Sie ihn bei der nächsten Anfrage, etwa lastModified=2026-01-15T09:30:00 auf Rechnungen, und Sie erhalten nur die Objekte, die zu diesem Zeitpunkt oder später geändert wurden. Auf diesen Filter stützen sich die meisten Anbindungen, weil er aus einem vollständigen Neulesen ein kleines Delta macht.

Welche Filter gibt es neben lastModified?

Einen status-Filter auf Rechnungen für eine Reihe von Systemen und auf Eingangsrechnungen und Buchungsvorschläge für einige. Dazu ergänzt Maesn Filter, die es gibt, weil ein bestimmtes System sie braucht, etwa paymentStatus für Sage Active, name und email für Lexware-Office-Kontakte, number für sevdesk-Kontakte und billDateFrom für BuchhaltungsButler-Eingangsrechnungen. Die API-Referenz führt auf, was jeder Endpunkt unterstützt.

Kann ich die Reihenfolge der Ergebnisse steuern?

Ja, bei Rechnungen, Eingangsrechnungen und Buchungsvorschlägen, über orderField und orderDir. Rechnungen sortieren nach invoiceDate, invoiceNumber, createdDate oder updatedDate, und orderDir nimmt ASC oder DESC. Eingangsrechnungen und Buchungsvorschläge haben ihre entsprechenden Datums- und Nummernfelder.

Unterstützt jede Ressource Filtern, Sortieren und Paginieren?

Nein, und Maesn tut nicht so, als wäre es anders. Manche Ressourcen unterstützen alle drei, andere einen Teil, weil die Fähigkeit irgendwo darunter vorhanden sein muss. Die API-Referenz dokumentiert je Endpunkt, was unterstützt wird, sodass Sie es sehen, bevor Sie dagegen bauen.

Wie oft sollte ich abfragen?

So selten, wie Ihre Nutzer noch ausreichend frische Daten bekommen. Jede Minute Daten abzufragen, die sich einmal am Tag ändern, ist verschenkter Verkehr und verschenktes Geld, während zu seltenes Abfragen veraltete Daten zeigt. Verbinden Sie ein sinnvolles Intervall mit dem lastModified-Filter und rechnen Sie gegen die Rate-Limits des Zielsystems: Maesn setzt auf dem Hinweg kein eigenes Limit, aufbrauchen können Sie also das des Systems.

Sollte ich abfragen oder Webhooks nutzen?

Beides wird unterstützt, und beides löst verschiedene Probleme. Webhooks pushen ein Event, wenn sich etwas ändert, was zum Reagieren auf einzelne Änderungen passt. Abfragen mit lastModified passt für den geplanten Abgleich und zum Aufholen nach einer Ausfallzeit. Viele Anbindungen nutzen Webhooks für die Unmittelbarkeit und einen regelmäßigen Delta-Abruf als Netz.

Einmal bauen, auf der Unified API.

Sehen Sie, wie Unified Pagination & Filtering für Ihre Integration funktioniert, oder steigen Sie in die technische Referenz ein.