Dokumentation der Loomio Server-API
/api/server0 ist für Vorgänge auf Serverebene vorgesehen. Nutze /api/user0 für Aktionen, die du mit einem Loomio-Benutzerkonto ausführst.
Nutze einen Serverschlüssel, um Konten zu erstellen und zu verwalten, Gruppen in der gesamten Installation zu finden und deren Mitgliedschaften und Rollen zu verwalten. Dafür sind weder ein Bot-Konto noch ein Benutzer-API-Schlüssel oder eine Mitgliedschaft in den Gruppen erforderlich. Für Benutzer-API-Schlüssel gelten weiterhin die Gruppenberechtigungen der jeweiligen Person.
Authentifizierung
Der Schlüssel wird über die Einstellung SERVER_API_KEY in der Serverumgebung festgelegt. create_env.sh erzeugt einen Schlüssel für neue Installationen.
Sende den Schlüssel als Bearer-Token:
curl -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users
Sende Zugangsdaten ausschließlich im Authorization-Header. API-Schlüssel in Abfragezeichenfolgen oder im Anfragetext werden abgelehnt.
Konten und Mitgliedschaften bereitstellen
| Methode | Endpunkt | Zweck |
|---|---|---|
POST |
/api/server0/users |
Ein Konto erstellen |
GET |
/api/server0/groups |
Gruppen in der gesamten Installation finden |
GET |
/api/server0/memberships |
Mitgliedschaften in einer Gruppe auflisten |
POST |
/api/server0/memberships |
Mitglieder einladen oder eine vollständige Mitgliederliste synchronisieren |
PATCH |
/api/server0/memberships/:id |
Admin- und Delegiertenrollen in einer Gruppe ändern |
DELETE |
/api/server0/memberships/:id |
Eine Mitgliedschaft widerrufen |
Die bestehenden Endpunkte zum Aktualisieren, Deaktivieren, Reaktivieren, Anonymisieren und Löschen von Konten werden weiter unten beschrieben.
Ein Konto erstellen
POST /api/server0/users
Sende ein user-Objekt mit dem Pflichtfeld email. Leerzeichen am Anfang und Ende von E-Mail-Adressen werden entfernt, und die Adressen werden in Kleinbuchstaben umgewandelt. Optionale Felder sind name, username und is_admin. Hier bezeichnet is_admin einen Admin der Instanz; Admin-Rollen für Gruppen werden über Mitgliedschaften verwaltet. Lasse username weg, um automatisch einen Benutzernamen zu erzeugen. Unbekannte Felder werden abgelehnt.
curl https://loomio.example.org/api/server0/users \
-H 'Authorization: Bearer YOUR_SERVER_API_KEY' \
--json '{
"user": {
"email": "ada@example.org",
"name": "Ada Lovelace",
"username": "ada",
"is_admin": false
}
}'
Die Antwort ist HTTP 201 mit einem user-Objekt. Ungültige Felder oder eine bereits verwendete E-Mail-Adresse oder ein bereits verwendeter Benutzername führen zu HTTP 422. Beim Erstellen eines Kontos wird keine Einladung gesendet, die Person wird nicht angemeldet und ihre E-Mail-Adresse wird nicht als bestätigt markiert. Lade sie über den Mitgliedschaftsendpunkt in eine Gruppe ein, um eine Einladung über den üblichen Benachrichtigungsablauf zu senden.
Gruppen finden
GET /api/server0/groups
Liste alle Gruppen auf, die nicht gelöscht wurden, einschließlich privater Gruppen und Gruppen mit abgelaufenem Abonnement. Die Ergebnisse sind nach aufsteigender ID sortiert. Nutze limit (Standard- und Höchstwert 50) und offset (Standardwert 0), um die Ergebnisse seitenweise abzurufen.
curl 'https://loomio.example.org/api/server0/groups?limit=50&offset=0' \
-H 'Authorization: Bearer YOUR_SERVER_API_KEY'
{
"groups": [
{
"id": 123,
"key": "examplegroup",
"name": "Planning group",
"handle": "planning",
"parent_id": null,
"group_privacy": "secret"
}
],
"meta": {
"total": 1
}
}
Mitgliedschaften auflisten
GET /api/server0/memberships?group_id=123
group_id ist erforderlich. Die Ergebnisse enthalten angenommene Mitgliedschaften und ausstehende Einladungen, sortiert nach aufsteigender Mitgliedschafts-ID. Widerrufene Mitgliedschaften sind ausgeschlossen. Nutze limit (Standard- und Höchstwert 50) und offset (Standardwert 0), um die Ergebnisse seitenweise abzurufen.
curl 'https://loomio.example.org/api/server0/memberships?group_id=123&limit=50&offset=0' \
-H 'Authorization: Bearer YOUR_SERVER_API_KEY'
{
"memberships": [
{
"id": 456,
"group_id": 123,
"user_id": 789,
"user_email": "ada@example.org",
"user_name": "Ada Lovelace",
"admin": false,
"delegate": false,
"accepted_at": null,
"pending": true
}
],
"meta": {
"total": 1
}
}
admin und delegate sind Gruppenrollen. accepted_at ist der Zeitstempel der Annahme oder null, solange eine Einladung aussteht. Dieser Endpunkt gibt keine Einladungstoken, Anmeldedaten oder Stimmen preis.
Mitglieder einladen oder synchronisieren
POST /api/server0/memberships
Sende die erforderliche group_id und ein erforderliches emails-Array. Standardmäßig werden dadurch die aufgeführten Personen hinzugefügt, die noch keine aktive Mitgliedschaft haben. Alle anderen Mitgliedschaften bleiben bestehen. Leerzeichen am Anfang und Ende von E-Mail-Adressen werden entfernt, die Adressen werden in Kleinbuchstaben umgewandelt und Duplikate werden entfernt. Für neue Adressen werden Konten und ausstehende Einladungen erstellt. Bereits vorhandene, bestätigte Mitglieder einer anderen aktiven Gruppe derselben Organisation werden automatisch aufgenommen, entsprechend dem Einladungsablauf der Benutzer-API.
curl https://loomio.example.org/api/server0/memberships \
-H 'Authorization: Bearer YOUR_SERVER_API_KEY' \
--json '{
"group_id": 123,
"emails": [
"ada@example.org",
"alex@example.org"
]
}'
Um eine vollständige Mitgliederliste zu synchronisieren, setze remove_absent ausdrücklich auf true. Alle Personen, die in der Liste fehlen, werden aus dieser Gruppe und ihren Untergruppen entfernt. Ein leeres Array mit remove_absent: true entfernt alle Mitglieder, einschließlich der Gruppenadmins. Lasse remove_absent weg oder setze es auf false, wenn du nur Personen hinzufügen möchtest. Die älteren Werte 1 und 0 werden ebenfalls akzeptiert.
curl https://loomio.example.org/api/server0/memberships \
-H 'Authorization: Bearer YOUR_SERVER_API_KEY' \
--json '{
"group_id": 123,
"emails": [
"ada@example.org"
],
"remove_absent": true
}'
{
"added_emails": [],
"removed_emails": [
"alex@example.org"
]
}
Eine Wiederholung derselben Anfrage erstellt keine doppelten Mitgliedschaften und versendet keine erneuten Einladungen. Wenn du ein Mitglied mit widerrufener Mitgliedschaft erneut einlädst, erhält es wieder Zugriff auf die Gruppe, jedoch keine frühere Admin-Rolle. Neue Einladungen und Rollenänderungen nutzen den üblichen Benachrichtigungsablauf, wobei keine Person als ausführend erfasst wird.
Fehlende oder fehlerhaft formatierte E-Mail-Listen und ungültige boolesche Werte führen zu HTTP 400. Ein aufgeführtes deaktiviertes Konto führt zu HTTP 422; reaktiviere es ausdrücklich, bevor du es hinzufügst. Bei ungültigen Kontodaten, überschrittenen Abonnementgrenzen oder anderen Fehlern wird die gesamte Synchronisierung rückgängig gemacht, einschließlich neuer Konten und entfernter Mitgliedschaften. Das Hinzufügen erfordert eine aktive Gruppe und unterliegt weiterhin den Mitgliedergrenzen des Abonnements.
Mitgliedschaftsrollen aktualisieren
PATCH /api/server0/memberships/:id
Sende ein membership-Objekt mit einem oder beiden booleschen Feldern admin und delegate. Nicht angegebene Rollen bleiben unverändert. Unbekannte Felder werden abgelehnt; über den Endpunkt kannst du keine Mitgliedschaft übertragen, keine Einladung annehmen und keine Stimmgewichte ändern.
curl https://loomio.example.org/api/server0/memberships/456 \
-X PATCH \
-H 'Authorization: Bearer YOUR_SERVER_API_KEY' \
--json '{
"membership": {
"admin": true,
"delegate": false
}
}'
Gibt ein membership-Objekt mit denselben Feldern wie eine aufgelistete Mitgliedschaft zurück. Das Zuweisen einer Rolle erzeugt die übliche Rollenbenachrichtigung; eine erneute Anfrage mit unveränderter Rolle löst keine weitere Benachrichtigung aus. Rollenänderungen erfordern eine aktive Gruppe. Widerrufene Mitgliedschaften führen zu HTTP 404.
Eine Mitgliedschaft entfernen
DELETE /api/server0/memberships/:id
curl https://loomio.example.org/api/server0/memberships/456 \
-X DELETE \
-H 'Authorization: Bearer YOUR_SERVER_API_KEY'
Gibt {"success": true} zurück. Das Entfernen widerruft den Zugriff auf die Gruppe und ihre Untergruppen, einschließlich des Zugriffs auf Themen und der Stimmrechte in aktiven Abstimmungen. Das Konto wird dabei nicht gelöscht, andere Gruppen werden nicht verändert und der direkte Zugriff auf Threads bleibt bestehen. Eine wiederholte Entfernung ist erfolgreich. Du kannst Mitgliedschaften aus Gruppen mit abgelaufenem Abonnement entfernen; gelöschte Gruppen führen zu HTTP 404.
Benutzerobjekt
Antworten mit Benutzerdaten haben diese Struktur:
{
"id": 123,
"name": "Ada Lovelace",
"username": "ada",
"email": "ada@example.org",
"is_admin": false,
"active": true,
"deactivated_at": null,
"identities": [
{
"id": 456,
"identity_type": "oauth",
"uid": "external-123",
"email": "ada@example.org",
"name": "Ada Lovelace"
}
]
}
Benutzerkonten auflisten
Liste alle Benutzerkonten auf der Loomio-Installation auf.
GET /api/server0/users
Beispiel
curl -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users
Gibt zurück:
{
"users": []
}
Benutzerkonto anzeigen
Finde ein Benutzerkonto anhand seiner Loomio-Benutzer-ID oder externen Identität.
GET /api/server0/users/:id
GET /api/server0/users/identity/:identity_type/:uid
Beispiele
Anhand der Loomio-Benutzer-ID:
curl -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users/123
Anhand der externen Identität:
curl -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users/identity/oauth/external-123
Gibt zurück:
{
"user": {}
}
Benutzerkonto aktualisieren
Aktualisiere die Profilfelder eines Benutzerkontos, das du anhand seiner Loomio-Benutzer-ID oder externen Identität gefunden hast.
PATCH /api/server0/users/:id
PATCH /api/server0/users/identity/:identity_type/:uid
Parameter
| Feld | Beschreibung |
|---|---|
name |
Anzeigename |
username |
Loomio-Benutzername |
email |
E-Mail-Adresse |
Beispiele
Anhand der Loomio-Benutzer-ID:
curl -X PATCH \
-H 'Authorization: Bearer YOUR_SERVER_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"user":{"name":"Ada Lovelace","username":"ada","email":"ada@example.org"}}' \
https://www.loomio.com/api/server0/users/123
Anhand der externen Identität:
curl -X PATCH \
-H 'Authorization: Bearer YOUR_SERVER_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"user":{"name":"Ada Lovelace","username":"ada","email":"ada@example.org"}}' \
https://www.loomio.com/api/server0/users/identity/oauth/external-123
Gibt das aktualisierte Benutzerkonto zurück:
{
"user": {}
}
Benutzerkonto deaktivieren
Deaktiviere ein Benutzerkonto, das du anhand seiner Loomio-Benutzer-ID oder externen Identität gefunden hast.
POST /api/server0/users/:id/deactivate
POST /api/server0/users/identity/:identity_type/:uid/deactivate
Beispiele
Anhand der Loomio-Benutzer-ID:
curl -X POST -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users/123/deactivate
Anhand der externen Identität:
curl -X POST -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users/identity/oauth/external-123/deactivate
Gibt zurück:
{
"success": true,
"user": {}
}
Benutzerkonto reaktivieren
Reaktiviere ein deaktiviertes Benutzerkonto anhand seiner Loomio-Benutzer-ID oder externen Identität.
POST /api/server0/users/:id/reactivate
POST /api/server0/users/identity/:identity_type/:uid/reactivate
Beispiele
Anhand der Loomio-Benutzer-ID:
curl -X POST -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users/123/reactivate
Anhand der externen Identität:
curl -X POST -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users/identity/oauth/external-123/reactivate
Rückgabe:
{
"success": true,
"user": {}
}
Personenbezogene Kontodaten entfernen
Dabei bleiben die Kommentare und andere von der Person erstellte Inhalte in ihren Gruppen erhalten. Bekannte personenbezogene Daten wie Name, Kurzbiografie, Profilfoto, E-Mail-Adresse, Anmeldedaten, Identitäten und aktive Sitzungen werden jedoch entfernt.
Dies ist die empfohlene Methode, um eine Person aus Loomio zu entfernen.
POST /api/server0/users/:id/redact
POST /api/server0/users/identity/:identity_type/:uid/redact
Beispiele
Anhand der Loomio-Benutzer-ID:
curl -X POST -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users/123/redact
Anhand der externen Identität:
curl -X POST -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users/identity/oauth/external-123/redact
Rückgabe:
{
"success": true
}
Benutzerkonto löschen
Das Löschen entfernt das Benutzerkonto und die von der Person erstellten Datensätze. Kommentare werden aus Threads und Stimmen aus Abstimmungen entfernt. Gruppen, Diskussionen, Abstimmungen und andere von der Person erstellte Datensätze können durch Datenbankverknüpfungen ebenfalls gelöscht werden.
Dabei werden umfangreiche Daten gelöscht. Es wird dringend empfohlen, stattdessen die personenbezogenen Kontodaten zu entfernen.
DELETE /api/server0/users/:id
DELETE /api/server0/users/identity/:identity_type/:uid
Beispiele
Anhand der Loomio-Benutzer-ID:
curl -X DELETE -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users/123
Anhand der externen Identität:
curl -X DELETE -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users/identity/oauth/external-123
Rückgabe:
{
"success": true
}
Einstellungen zur SSO-Profilsynchronisierung
Verwende diese Einstellungen, wenn ein anderes System die Loomio-Profilfelder verwaltet.
LOOMIO_DISABLE_EDIT_USER_PROFILE=1
# LOOMIO_SSO_UPDATE_USER_PROFILE_ON_LOGIN=1
LOOMIO_DISABLE_EDIT_USER_PROFILE=1 verhindert, dass Personen diese Felder selbst bearbeiten:
| Feld | Hinweise |
|---|---|
name |
Durch externe Synchronisierung verwaltet |
username |
Durch externe Synchronisierung verwaltet |
email |
Durch externe Synchronisierung verwaltet |
avatar_kind / uploaded_avatar |
Durch externe Synchronisierung verwaltet |
Personen können weiterhin lokale Loomio-Felder wie short_bio und location bearbeiten.
LOOMIO_SSO_UPDATE_USER_PROFILE_ON_LOGIN=1 aktualisiert name und email anhand der SSO-Anmeldedaten. Lass die Zeile auskommentiert oder die Variable ungesetzt, wenn ausschließlich ein externes Synchronisierungsskript diese Aktualisierungen vornehmen soll.
LOOMIO_SSO_FORCE_USER_ATTRS funktioniert weiterhin für bestehende Installationen. Die Einstellung verhindert sowohl die Bearbeitung durch die Personen selbst als auch die Aktualisierung von name und email bei der SSO-Anmeldung.