Zum Inhalt springen
Mitgliederbuch Entwickler

Konzepte

Was für jeden Endpunkt gilt. Lesen Sie das, bevor Sie eine Anbindung in Betrieb nehmen.

Fehler

Ein Fehler hat immer dieselbe Form, application/problem+json nach RFC 9457:

403 Forbidden
{
  "type": "https://developers.mitgliederbuch.de/errors/insufficient_scope",
  "title": "Unzureichende Rechte",
  "status": 403,
  "detail": "Diesem Schlüssel fehlt das Recht leden:schrijven. Ein Administrator kann einen Schlüssel mit diesem Recht erstellen.",
  "instance": "/v2/members"
}
# -i shows the status line and headers; errors come as application/problem+json
curl -i https://api.mitgliederbuch.de/v2/members \
  -H "Authorization: Bearer $LEDENBOEK_API_KEY"

Alle Fehlercodes

Code HTTP Titel
api_key_in_url 400 Schlüssel in der URL
invalid_request 400 Ungültige Anfrage
invalid_api_key 401 Ungültiger Schlüssel
missing_api_key 401 Schlüssel fehlt
subscription_required 402 Abonnement erforderlich
insufficient_scope 403 Unzureichende Rechte
module_disabled 404 Modul deaktiviert
not_found 404 Nicht gefunden
already_in_group 409 Bereits in der Gruppe
already_registered 409 Bereits angemeldet
event_full 409 Nicht genug Plätze
event_requires_payment 409 Zahlung erforderlich
group_follows_subscription 409 Gruppe folgt den Abonnements
idempotency_in_progress 409 Anfrage wird noch verarbeitet
invoice_not_sendable 409 Rechnung kann nicht versendet werden
membership_already_ended 409 Mitgliedschaft bereits beendet
recipient_without_email 409 Keine E-Mail-Adresse
registration_closed 409 Anmeldung geschlossen
idempotency_key_reused 422 Idempotency-Key bereits verwendet
validation_failed 422 Daten ungültig
rate_limited 429 Zu viele Aufrufe
internal_error 500 Interner Fehler

Paginierung

Eine Liste liefert ein Objekt mit data, has_more und next_cursor. Sie blättern mit zwei Parametern:

Datensätze kommen in der Reihenfolge der id. Kommen während des Blätterns Datensätze hinzu, überspringen Sie nichts und sehen nichts doppelt; mit Seitenzahlen geht das nicht. Auf der letzten Seite ist has_more falsch und next_cursor null.

Ein Beispiel steht im Schnellstart.

Synchronisieren mit updated_since

Führen Sie eine eigene Kopie, holen Sie nicht jedes Mal alles ab. Mit updated_since bekommen Sie nur Datensätze, die zu oder nach diesem Zeitpunkt geändert wurden. Der Zeitpunkt ist ISO 8601, zum Beispiel 2026-10-01T00:00:00Z; ein anderes Format liefert invalid_request. Sie können es mit der Paginierung kombinieren.

Halten Sie fest, wann Ihre Synchronisierung beginnt, und verwenden Sie diesen Zeitpunkt beim nächsten Mal als updated_since. So verpassen Sie nichts, was sich während des Abholens geändert hat.

curl "https://api.mitgliederbuch.de/v2/members?updated_since=2026-10-01T00:00:00Z&limit=100" \
  -H "Authorization: Bearer $LEDENBOEK_API_KEY"

Ein vollständig gelöschter Datensatz kommt mit updated_since nicht mehr zurück. Gleichen Sie deshalb ab und zu die vollständige Liste mit Ihrer Kopie ab.

Idempotenz

Ein POST akzeptiert den Header Idempotency-Key: einen eindeutigen Wert von höchstens 255 Zeichen, etwa eine UUID. Senden Sie dieselbe Anfrage mit demselben Schlüssel erneut, wird nichts doppelt angelegt.

Schlüssel werden 24 Stunden aufbewahrt. Speichern Sie den Schlüssel bei Ihrem eigenen Datensatz, bevor Sie die Anfrage senden; dann verwendet ein neuer Versuch automatisch denselben.

Limits

Pro Schlüssel sind 600 Aufrufe pro Minute erlaubt, mit einem Testschlüssel 120. Das Fenster ist eine feste Minute. Jede Antwort sagt, wie viel Spielraum noch bleibt:

HeaderBedeutung
RateLimit-LimitAufrufe pro Minute für diesen Schlüssel.
RateLimit-RemainingWas in dieser Minute noch übrig ist.
RateLimit-ResetSekunden bis zur nächsten Minute.
Retry-AfterNur bei 429: wie viele Sekunden Sie warten müssen.

Über dem Limit bekommen Sie rate_limited mit Status 429. Warten Sie dann die Sekunden aus Retry-After ab.

# The headers show how much room is left in this minute
curl -s -D - -o /dev/null https://api.mitgliederbuch.de/v2/organization \
  -H "Authorization: Bearer $LEDENBOEK_API_KEY" | grep -i ratelimit

Versionen

Die Version steht im Pfad: /v2. Dafür gilt: