API v1REST · JSON · nur lesend

Vereinsdaten sicher in eigene Anwendungen integrieren

Die Laubenmeister API gibt kontrollierten Lesezugriff auf genau einen Verein. Verfügbar sind Vereinskontext, aktive Mitglieder, Parzellen, Zähler und Ablesungen, Veranstaltungen sowie Arbeitsstunden und Arbeitsprojekte.

Erster API-Aufruf
curl 'https://www.laubenmeister.de/api/v1/context' \
  --header "Authorization: Bearer $LAUBENMEISTER_API_KEY"

In drei Schritten starten

Erstellen Sie einen Schlüssel, speichern Sie ihn ausschließlich in Ihrer Serverumgebung und senden Sie ihn im Authorization-Header.

  1. 01

    Schlüssel erstellen

    Als voll berechtigter Vereinsadministrator unter „API-Zugang“ einen Schlüssel anlegen.

  2. 02

    Rechte begrenzen

    Nur die Leserechte auswählen, die Ihre Integration tatsächlich benötigt.

  3. 03

    Serverseitig aufrufen

    Den Schlüssel als Bearer-Token senden und niemals in Browser-Code oder URLs ablegen.

Session-Cookies und App-Passwörter funktionieren nicht. Die API ist für serverseitige Integrationen vorgesehen; ein browserübergreifender CORS-Zugriff wird nicht angeboten.

Authentifizierung und Rechte

Jeder Schlüssel ist fest an den Verein gebunden, für den er erstellt wurde. Ein späterer Vereinswechsel verändert diese Zuordnung nicht.

Schlüssel

Pro Verein sind zehn aktive Schlüssel möglich. Die Laufzeit beträgt 30, 90 oder 365 Tage. Widerruf und Ablauf werden bei jedem Aufruf geprüft.

Berechtigungen

Der Aussteller muss voll berechtigter Administrator bleiben und gegebenenfalls die erforderliche Verschwiegenheitsbestätigung besitzen. Demo-Vereine sind ausgeschlossen.

ScopeZugriff
context:readVereinskontext und Leserechte
events:readVeranstaltungen lesen
members:readAktive Mitglieder: Nummer, Vorname und Nachname
meters:readZähler lesen
plots:readParzellen lesen
work:readArbeitsprojekte und Arbeitsstunden lesen

Mitgliederdaten sind auf ID, Mitgliedsnummer, Vorname und Nachname begrenzt. Gelöschte oder zur Löschung vorgemerkte Mitglieder bleiben ausgeschlossen. Beschreibungen von Veranstaltungen, Projekten und Arbeitsstunden können personenbezogene Angaben enthalten. Der empfangende Dienst muss die Daten entsprechend schützen.

API-Referenz

Endpunkte, Parameter und Antworttypen werden aus dem veröffentlichten OpenAPI-Vertrag abgeleitet.

GET/api/v1/contextcontext:read

Verein und freigegebene Leserechte

Benötigt context:read. Der Verein stammt ausschließlich aus dem API-Schlüssel.

Request
curl 'https://www.laubenmeister.de/api/v1/context' \
  --header "Authorization: Bearer $LAUBENMEISTER_API_KEY"

Beispielantwort

200 OK
application/json · Beispieldaten
{
  "data": {
    "apiVersion": "v1",
    "association": {
      "id": 1,
      "name": "Kleingartenverein Beispiel e.V."
    },
    "scopes": [
      "context:read"
    ]
  }
}
AntwortschemaContextResponse
{
  "additionalProperties": false,
  "properties": {
    "data": {
      "additionalProperties": false,
      "properties": {
        "apiVersion": {
          "enum": [
            "v1"
          ],
          "type": "string"
        },
        "association": {
          "additionalProperties": false,
          "properties": {
            "id": {
              "minimum": 1,
              "type": "integer"
            },
            "name": {
              "type": "string"
            }
          },
          "required": [
            "id",
            "name"
          ],
          "type": "object"
        },
        "scopes": {
          "items": {
            "$ref": "#/components/schemas/Scope"
          },
          "type": "array"
        }
      },
      "required": [
        "association",
        "scopes",
        "apiVersion"
      ],
      "type": "object"
    }
  },
  "required": [
    "data"
  ],
  "type": "object"
}
GET/api/v1/eventsevents:read

Veranstaltungen lesen

Benötigt events:read. Die Liste ist nach Datum und ID sortiert. nextCursor muss unverändert an den nächsten Aufruf übergeben werden. Gelöschte Einträge und Daten anderer Vereine werden nicht ausgegeben.

Parameter

limitinteger · queryAnzahl pro Seite Standard: 50.
cursorstring · querynextCursor der vorherigen Antwort; beim ersten Aufruf weglassen.
fromstring · queryErster Veranstaltungstag im Zeitraum
tostring · queryLetzter Veranstaltungstag im Zeitraum
statusstring · query Werte: scheduled, cancelled, completed, draft.
Request
curl 'https://www.laubenmeister.de/api/v1/events?limit=50' \
  --header "Authorization: Bearer $LAUBENMEISTER_API_KEY"

Beispielantwort

200 OK
application/json · Beispieldaten
{
  "data": [
    {
      "allDay": false,
      "attendanceRequired": false,
      "category": null,
      "createdAt": null,
      "currentParticipants": 1,
      "date": "2026-09-19",
      "description": "Gemeinschaftsfläche pflegen",
      "endsAt": null,
      "eventType": "standard",
      "id": 1,
      "isMeeting": false,
      "location": null,
      "maxParticipants": null,
      "meetingType": null,
      "startsAt": null,
      "status": "scheduled",
      "title": "Gemeinsamer Arbeitseinsatz",
      "updatedAt": null,
      "visibility": "members"
    }
  ],
  "pagination": {
    "nextCursor": null
  }
}
AntwortschemaEventsResponse
{
  "additionalProperties": false,
  "properties": {
    "data": {
      "items": {
        "$ref": "#/components/schemas/Event"
      },
      "type": "array"
    },
    "pagination": {
      "additionalProperties": false,
      "properties": {
        "nextCursor": {
          "nullable": true,
          "type": "string"
        }
      },
      "required": [
        "nextCursor"
      ],
      "type": "object"
    }
  },
  "required": [
    "data",
    "pagination"
  ],
  "type": "object"
}
GET/api/v1/events/{id}events:read

Veranstaltung lesen

Benötigt events:read. Fremde, gelöschte und nicht vorhandene Veranstaltungen ergeben dieselbe 404-Antwort.

Parameter

idinteger · path · erforderlich
Request
curl 'https://www.laubenmeister.de/api/v1/events/1' \
  --header "Authorization: Bearer $LAUBENMEISTER_API_KEY"

Beispielantwort

200 OK
application/json · Beispieldaten
{
  "data": {
    "allDay": false,
    "attendanceRequired": false,
    "category": null,
    "createdAt": null,
    "currentParticipants": 1,
    "date": "2026-09-19",
    "description": "Gemeinschaftsfläche pflegen",
    "endsAt": null,
    "eventType": "standard",
    "id": 1,
    "isMeeting": false,
    "location": null,
    "maxParticipants": null,
    "meetingType": null,
    "startsAt": null,
    "status": "scheduled",
    "title": "Gemeinsamer Arbeitseinsatz",
    "updatedAt": null,
    "visibility": "members"
  }
}
AntwortschemaEventResponse
{
  "additionalProperties": false,
  "properties": {
    "data": {
      "$ref": "#/components/schemas/Event"
    }
  },
  "required": [
    "data"
  ],
  "type": "object"
}
GET/api/v1/membersmembers:read

Aktive Mitglieder lesen

Benötigt members:read. Aufsteigend nach ID; nextCursor unverändert an den nächsten Aufruf übergeben. Kein Daten-Snapshot: Änderungen während der Abfrage können das Ergebnis beeinflussen. Unbekannte oder doppelte Parameter ergeben 400.

Parameter

limitinteger · queryAnzahl pro Seite Standard: 50.
cursorstring · querynextCursor der vorherigen Antwort; beim ersten Aufruf weglassen.
Request
curl 'https://www.laubenmeister.de/api/v1/members?limit=50' \
  --header "Authorization: Bearer $LAUBENMEISTER_API_KEY"

Beispielantwort

200 OK
application/json · Beispieldaten
{
  "data": [
    {
      "firstName": "Erika",
      "id": 1,
      "lastName": "Mustermann",
      "memberNumber": "M-001"
    }
  ],
  "pagination": {
    "nextCursor": null
  }
}
AntwortschemaMembersResponse
{
  "additionalProperties": false,
  "properties": {
    "data": {
      "items": {
        "$ref": "#/components/schemas/Member"
      },
      "type": "array"
    },
    "pagination": {
      "additionalProperties": false,
      "properties": {
        "nextCursor": {
          "nullable": true,
          "type": "string"
        }
      },
      "required": [
        "nextCursor"
      ],
      "type": "object"
    }
  },
  "required": [
    "data",
    "pagination"
  ],
  "type": "object"
}
GET/api/v1/metersmeters:read

Aktive Zähler lesen

Benötigt meters:read. Die Liste enthält nur aktive Zähler des Vereins. Zähler mit Parzellenbezug werden nur ausgegeben, wenn auch die Parzelle zum Verein gehört. Die Sortierung erfolgt aufsteigend nach ID; nextCursor kann unverändert an den nächsten Aufruf übergeben werden.

Parameter

limitinteger · queryAnzahl pro Seite Standard: 50.
cursorstring · querynextCursor der vorherigen Antwort; beim ersten Aufruf weglassen.
typestring · queryZählerart Werte: STROM, WASSER, GAS.
plotIdinteger · queryNur Zähler einer bestimmten Parzelle
isMainMeterboolean · queryNach Hauptzählern oder untergeordneten Zählern filtern
Request
curl 'https://www.laubenmeister.de/api/v1/meters?limit=50' \
  --header "Authorization: Bearer $LAUBENMEISTER_API_KEY"

Beispielantwort

200 OK
application/json · Beispieldaten
{
  "data": [
    {
      "calibrationDate": null,
      "calibrationValidUntil": null,
      "conversionFactor": null,
      "id": 1,
      "initialReading": "0.000",
      "installationDate": null,
      "isMainMeter": false,
      "mainMeterId": null,
      "number": "Z-001",
      "plot": null,
      "readingMode": "DIRECT",
      "type": "STROM",
      "unit": "kWh"
    }
  ],
  "pagination": {
    "nextCursor": null
  }
}
AntwortschemaMetersResponse
{
  "additionalProperties": false,
  "properties": {
    "data": {
      "items": {
        "$ref": "#/components/schemas/Meter"
      },
      "type": "array"
    },
    "pagination": {
      "$ref": "#/components/schemas/MeterPagination"
    }
  },
  "required": [
    "data",
    "pagination"
  ],
  "type": "object"
}
GET/api/v1/meters/{id}meters:read

Einen aktiven Zähler lesen

Benötigt meters:read. Fremde, inaktive oder nicht sicher dem Verein zuordenbare Zähler werden wie nicht vorhandene Zähler behandelt.

Parameter

idinteger · path · erforderlichZähler-ID
Request
curl 'https://www.laubenmeister.de/api/v1/meters/1' \
  --header "Authorization: Bearer $LAUBENMEISTER_API_KEY"

Beispielantwort

200 OK
application/json · Beispieldaten
{
  "data": {
    "calibrationDate": null,
    "calibrationValidUntil": null,
    "conversionFactor": null,
    "id": 1,
    "initialReading": "0.000",
    "installationDate": null,
    "isMainMeter": false,
    "mainMeterId": null,
    "number": "Z-001",
    "plot": null,
    "readingMode": "DIRECT",
    "type": "STROM",
    "unit": "kWh"
  }
}
AntwortschemaMeterResponse
{
  "additionalProperties": false,
  "properties": {
    "data": {
      "$ref": "#/components/schemas/Meter"
    }
  },
  "required": [
    "data"
  ],
  "type": "object"
}
GET/api/v1/meters/{id}/readingsmeters:read

Ablesungen eines aktiven Zählers lesen

Benötigt meters:read. Stornierte Ablesungen sowie Ablesungen fremder oder inaktiver Zähler werden nicht ausgegeben. Foto-, Prüf- und Notizdaten gehören nicht zur öffentlichen Antwort.

Parameter

idinteger · path · erforderlichZähler-ID
limitinteger · queryAnzahl pro Seite Standard: 50.
cursorstring · querynextCursor der vorherigen Antwort; beim ersten Aufruf weglassen.
fromstring · queryFrühestes Ablesedatum einschließlich dieses Tages
tostring · querySpätestes Ablesedatum einschließlich dieses Tages
statusstring · queryVerarbeitungsstatus der Ablesung Werte: available, pending, distributed.
isBillingRelevantboolean · queryNur abrechnungsrelevante oder nicht abrechnungsrelevante Ablesungen
Request
curl 'https://www.laubenmeister.de/api/v1/meters/1/readings?limit=50' \
  --header "Authorization: Bearer $LAUBENMEISTER_API_KEY"

Beispielantwort

200 OK
application/json · Beispieldaten
{
  "data": [
    {
      "billingPeriodEnd": null,
      "billingPeriodStart": null,
      "consumption": null,
      "id": 1,
      "isBillingRelevant": false,
      "meterId": 1,
      "reading": "125.500",
      "readingDate": "2026-09-19",
      "readingType": null,
      "status": "available"
    }
  ],
  "pagination": {
    "nextCursor": null
  }
}
AntwortschemaMeterReadingsResponse
{
  "additionalProperties": false,
  "properties": {
    "data": {
      "items": {
        "$ref": "#/components/schemas/MeterReading"
      },
      "type": "array"
    },
    "pagination": {
      "$ref": "#/components/schemas/MeterPagination"
    }
  },
  "required": [
    "data",
    "pagination"
  ],
  "type": "object"
}
GET/api/v1/plotsplots:read

Parzellen lesen

Benötigt plots:read. Liefert ausschließlich nicht sensible Stammdaten des eigenen Vereins, aufsteigend nach ID. nextCursor wird unverändert an den nächsten Aufruf übergeben. Filter werden exakt angewendet und können kombiniert werden.

Parameter

limitinteger · queryAnzahl pro Seite Standard: 50.
cursorstring · querynextCursor der vorherigen Antwort; beim ersten Aufruf weglassen.
statusstring · queryExakter Parzellenstatus
gardenSiteIdinteger · queryID der Gartenanlage
plotNumberstring · queryExakte primäre oder sekundäre Parzellennummer
Request
curl 'https://www.laubenmeister.de/api/v1/plots?limit=50' \
  --header "Authorization: Bearer $LAUBENMEISTER_API_KEY"

Beispielantwort

200 OK
application/json · Beispieldaten
{
  "data": [
    {
      "department": null,
      "gardenSiteId": null,
      "id": 1,
      "plotArea": "320.00",
      "plotNumber": "A-1",
      "plotTypeId": null,
      "secondaryPlotNumber": null,
      "section": null,
      "status": "Belegt",
      "usage": null,
      "usageType": null
    }
  ],
  "pagination": {
    "nextCursor": null
  }
}
AntwortschemaPlotsResponse
{
  "additionalProperties": false,
  "properties": {
    "data": {
      "items": {
        "$ref": "#/components/schemas/Plot"
      },
      "type": "array"
    },
    "pagination": {
      "additionalProperties": false,
      "properties": {
        "nextCursor": {
          "nullable": true,
          "type": "string"
        }
      },
      "required": [
        "nextCursor"
      ],
      "type": "object"
    }
  },
  "required": [
    "data",
    "pagination"
  ],
  "type": "object"
}
GET/api/v1/plots/{id}plots:read

Parzelle lesen

Benötigt plots:read. Eine nicht vorhandene, fremde oder bereits zum Löschen markierte Parzelle ergibt 404.

Parameter

idinteger · path · erforderlichParzellen-ID
Request
curl 'https://www.laubenmeister.de/api/v1/plots/1' \
  --header "Authorization: Bearer $LAUBENMEISTER_API_KEY"

Beispielantwort

200 OK
application/json · Beispieldaten
{
  "data": {
    "department": null,
    "gardenSiteId": null,
    "id": 1,
    "plotArea": "320.00",
    "plotNumber": "A-1",
    "plotTypeId": null,
    "secondaryPlotNumber": null,
    "section": null,
    "status": "Belegt",
    "usage": null,
    "usageType": null
  }
}
AntwortschemaPlotResponse
{
  "additionalProperties": false,
  "properties": {
    "data": {
      "$ref": "#/components/schemas/Plot"
    }
  },
  "required": [
    "data"
  ],
  "type": "object"
}
GET/api/v1/work-hourswork:read

Arbeitsstunden lesen

Benötigt work:read. Liefert Stundenbuchungen aktiver, nicht anonymisierter und nicht im physischen Löschlauf befindlicher Mitglieder des Schlüsselvereins. Namen, Kontaktdaten, Notizen, Fotos und Signaturen werden nicht ausgegeben. Aufsteigend nach ID; nextCursor unverändert an den nächsten Aufruf übergeben.

Parameter

limitinteger · queryAnzahl pro Seite Standard: 50.
cursorstring · querynextCursor der vorherigen Antwort; beim ersten Aufruf weglassen.
memberIdinteger · queryVereinsinterne Mitglieds-ID
workProjectIdinteger · queryArbeitsprojekt-ID desselben Vereins
yearinteger · queryBuchungsjahr
fromstring · queryFrühestes Arbeitsdatum einschließlich
tostring · querySpätestes Arbeitsdatum einschließlich
Request
curl 'https://www.laubenmeister.de/api/v1/work-hours?limit=50' \
  --header "Authorization: Bearer $LAUBENMEISTER_API_KEY"

Beispielantwort

200 OK
application/json · Beispieldaten
{
  "data": [
    {
      "category": null,
      "categoryId": null,
      "createdAt": null,
      "description": "Gemeinschaftsfläche pflegen",
      "hours": "2.50",
      "id": 1,
      "memberId": 1,
      "updatedAt": null,
      "workDate": "2026-09-19",
      "workProjectId": null,
      "year": 2026
    }
  ],
  "pagination": {
    "nextCursor": null
  }
}
AntwortschemaWorkHoursResponse
{
  "additionalProperties": false,
  "properties": {
    "data": {
      "items": {
        "$ref": "#/components/schemas/WorkHour"
      },
      "type": "array"
    },
    "pagination": {
      "$ref": "#/components/schemas/WorkPagination"
    }
  },
  "required": [
    "data",
    "pagination"
  ],
  "type": "object"
}
GET/api/v1/work-hours/{id}work:read

Arbeitsstunde lesen

Benötigt work:read. Vereinsfremde, unbekannte sowie einem gelöschten oder inaktiven Mitglied zugeordnete IDs ergeben 404.

Parameter

idinteger · path · erforderlich
Request
curl 'https://www.laubenmeister.de/api/v1/work-hours/1' \
  --header "Authorization: Bearer $LAUBENMEISTER_API_KEY"

Beispielantwort

200 OK
application/json · Beispieldaten
{
  "data": {
    "category": null,
    "categoryId": null,
    "createdAt": null,
    "description": "Gemeinschaftsfläche pflegen",
    "hours": "2.50",
    "id": 1,
    "memberId": 1,
    "updatedAt": null,
    "workDate": "2026-09-19",
    "workProjectId": null,
    "year": 2026
  }
}
AntwortschemaWorkHourResponse
{
  "additionalProperties": false,
  "properties": {
    "data": {
      "$ref": "#/components/schemas/WorkHour"
    }
  },
  "required": [
    "data"
  ],
  "type": "object"
}
GET/api/v1/work-projectswork:read

Arbeitsprojekte lesen

Benötigt work:read. Liefert ausschließlich Arbeitsprojekte des Vereins, an den der API-Schlüssel gebunden ist. Aufsteigend nach ID; nextCursor unverändert an den nächsten Aufruf übergeben. Unbekannte oder doppelte Parameter ergeben 400.

Parameter

limitinteger · queryAnzahl pro Seite Standard: 50.
cursorstring · querynextCursor der vorherigen Antwort; beim ersten Aufruf weglassen.
statusstring · queryExakter Arbeitsprojektstatus Werte: ENTWURF, GEPLANT, IN_BEARBEITUNG, ABGESCHLOSSEN, STORNIERT.
fromstring · queryFrühestes Einsatzdatum einschließlich
tostring · querySpätestes Einsatzdatum einschließlich
Request
curl 'https://www.laubenmeister.de/api/v1/work-projects?limit=50' \
  --header "Authorization: Bearer $LAUBENMEISTER_API_KEY"

Beispielantwort

200 OK
application/json · Beispieldaten
{
  "data": [
    {
      "createdAt": null,
      "description": "Gemeinschaftsfläche pflegen",
      "endDate": null,
      "endTime": null,
      "eventDate": null,
      "fixedHours": null,
      "hourType": "EINZELREGISTRIERUNG",
      "id": 1,
      "location": null,
      "maxHoursPerMember": null,
      "priority": "NIEDRIG",
      "requiredParticipants": null,
      "startTime": null,
      "status": "ENTWURF",
      "title": "Gemeinsamer Arbeitseinsatz",
      "updatedAt": null,
      "workHoursCategoryId": null
    }
  ],
  "pagination": {
    "nextCursor": null
  }
}
AntwortschemaWorkProjectsResponse
{
  "additionalProperties": false,
  "properties": {
    "data": {
      "items": {
        "$ref": "#/components/schemas/WorkProject"
      },
      "type": "array"
    },
    "pagination": {
      "$ref": "#/components/schemas/WorkPagination"
    }
  },
  "required": [
    "data",
    "pagination"
  ],
  "type": "object"
}
GET/api/v1/work-projects/{id}work:read

Arbeitsprojekt lesen

Benötigt work:read. Vereinsfremde und unbekannte IDs ergeben 404.

Parameter

idinteger · path · erforderlich
Request
curl 'https://www.laubenmeister.de/api/v1/work-projects/1' \
  --header "Authorization: Bearer $LAUBENMEISTER_API_KEY"

Beispielantwort

200 OK
application/json · Beispieldaten
{
  "data": {
    "createdAt": null,
    "description": "Gemeinschaftsfläche pflegen",
    "endDate": null,
    "endTime": null,
    "eventDate": null,
    "fixedHours": null,
    "hourType": "EINZELREGISTRIERUNG",
    "id": 1,
    "location": null,
    "maxHoursPerMember": null,
    "priority": "NIEDRIG",
    "requiredParticipants": null,
    "startTime": null,
    "status": "ENTWURF",
    "title": "Gemeinsamer Arbeitseinsatz",
    "updatedAt": null,
    "workHoursCategoryId": null
  }
}
AntwortschemaWorkProjectResponse
{
  "additionalProperties": false,
  "properties": {
    "data": {
      "$ref": "#/components/schemas/WorkProject"
    }
  },
  "required": [
    "data"
  ],
  "type": "object"
}

Paginierung

Mit ?limit=50 beginnen. Solange pagination.nextCursor nicht null ist, die nächste Seite mit ?limit=50&cursor=… anfordern. Die Reihenfolge ist aufsteigend nach ID, bei Veranstaltungen nach Veranstaltungsdatum und ID. Den Cursor unverändert und URL-kodiert übernehmen; die Filter beim Weiterblättern beibehalten. Die Abfrage ist kein unveränderlicher Snapshot.

Fehler und Limits

Fehlerantworten enthalten einen stabilen Code, eine verständliche Meldung und eine Request-ID für Rückfragen.

Forbidden

insufficient_scope oder issuer_access_denied: Leserecht fehlt oder Rechte/Verschwiegenheitsbestätigung des Ausstellers reichen nicht mehr aus.

RateLimited

rate_limit_exceeded: maximal 60 authentifizierte Aufrufe pro Schlüssel in einem 60-Sekunden-Fenster. Auch fehlgeschlagene Berechtigungs- und Parameterprüfungen zählen. X-RateLimit-Limit, X-RateLimit-Remaining und X-RateLimit-Reset (Unix-Sekunden) begleiten authentifizierte Antworten.

Unauthorized

invalid_api_key: Schlüssel fehlt, ist widerrufen, abgelaufen oder der Aussteller ist kein Vereinsadministrator mehr.

Unavailable

temporarily_unavailable: vorübergehend nicht verfügbar; mit begrenzten Wiederholungen und wachsender Wartezeit erneut versuchen.

WorkInvalidQuery

Ungültige, unbekannte oder doppelte Parameter

WorkNotFound

Ressource im Schlüsselverein nicht gefunden

Ungültige oder doppelte Listenfilter liefern HTTP 400. Datenantworten werden nicht zwischengespeichert. Bei Supportanfragen genügt die Request-ID; schicken Sie niemals Ihren Schlüssel oder Mitgliederdaten mit.

Versionierung

Lesender Zugriff auf genau einen Verein. Nur aktive, nicht zur Löschung vorgemerkte Mitglieder; keine Kontakt-, Bank- oder Notizfelder. Schlüssel werden von voll berechtigten Vereinsadministratoren vergeben. Änderungen innerhalb von v1 sind additiv; Clients müssen unbekannte Antwortfelder tolerieren. Inkompatible Änderungen erhalten eine neue Hauptversion.

1.0.0

Erste Version

Vereinskontext, Mitglieder, Parzellen, Zähler, Veranstaltungen und Arbeitsdienste. Die Bereitstellung erfolgt zusammen mit der API-Freischaltung.