Dokumentation der Loomio-Benutzer-API

/api/b2 ist die API für Integrationen, die im Namen eines Loomio-Benutzerkontos handeln. Sie verwendet dessen API-Schlüssel. Jede Aktion wird als dieser Benutzer ausgeführt.

Für Aktionen in Gruppen gelten die Mitgliedschaften und Gruppenberechtigungen des Benutzers, dessen API-Schlüssel verwendet wird. Administratorrechte für die Instanz erweitern den Zugriff des API-Schlüssels auf Gruppen oder Inhalte nicht. Verwende für die Verwaltung der Instanz die Server-API.

Verwende den API-Schlüssel des Loomio-Benutzerkontos, das die Aktionen ausführen soll. Ein eigenes Bot-Konto ist sinnvoll, wenn die Integration keine Einladungen zu Abstimmungen oder Benachrichtigungen erhalten soll.

Angemeldete Benutzer finden ihren API-Schlüssel und ihre Gruppen-IDs auf der Seite für den API-Zugriff.

Sende den API-Schlüssel im Header Authorization: Bearer. API-Schlüssel in URL-Abfrageparametern werden abgewiesen, da URLs von Proxys und in Zugriffsprotokollen gespeichert werden können.

Änderung bei der Authentifizierung

Früher wurde der API-Schlüssel als URL-Parameter api_key akzeptiert. Anfragen mit ?api_key=YOUR_API_KEY funktionieren nicht mehr. Verwende stattdessen den HTTP-Header Authorization:

Authorization: Bearer YOUR_API_KEY

Die Beispiele verwenden YOUR_API_KEY, die Gruppen-ID 123 und https://www.loomio.com/. Ersetze sie durch deinen API-Schlüssel, deine Gruppen-ID und die URL deiner Loomio-Installation.

Antworten der Benutzer-API haben ein zusammengesetztes Format: Neben den angeforderten Datensätzen enthalten sie verknüpfte Datensätze wie Topics, Gruppen, Benutzer, Abstimmungen und Reaktionen. So kann ein Client seinen lokalen Datenspeicher mit einer einzigen Anfrage füllen. Die Antwort kann dadurch aber mehr Daten enthalten, als eine einfache Integration benötigt.

Mit compact=1 lässt du umfangreiche verknüpfte Topics, Gruppen, übergeordnete Gruppen, Mitgliedschaften, Reaktionen, Schlagwörter und Übersetzungen weg. Die angeforderten Datensätze und die zum Verständnis ihrer Inhalte benötigten verknüpften Datensätze bleiben erhalten.

curl -H 'Authorization: Bearer YOUR_API_KEY' 'https://www.loomio.com/api/b2/threads/123/items?compact=1'

Mit exclude_types kannst du gezielt Datensatztypen ausschließen. Gib dazu die Typen im Singular durch Leerzeichen getrennt an. Beispielsweise lässt exclude_types=group reaction verknüpfte Gruppen und Reaktionen weg. Häufige Werte sind topic, group, parent, membership, reaction, tag, translation, user, discussion, poll, poll_option, stance, stance_choice, outcome und topic_item. Der Ausschluss betrifft verknüpfte Datensätze, nicht die vom Endpunkt angeforderte Hauptressource.

Antworten auf Sammlungsanfragen enthalten meta.total, wenn eine genaue Anzahl definiert ist. Die Anzahl wird vor der Anwendung von limit und offset berechnet. Endpunkte wie die Suche, die ihre Ergebnismenge bewusst begrenzen, lassen meta.total weg, statt null zurückzugeben.

Übersicht der Endpunkte

Methode Endpunkt Zweck
GET /api/b2/groups Gruppen des API-Schlüssel-Benutzers auflisten
GET /api/b2/groups/:id_or_key_or_handle Eine sichtbare Gruppe abrufen
GET /api/b2/reports Einen Beteiligungsbericht erstellen
GET /api/b2/search Sichtbare Diskussionen, Kommentare, Abstimmungen, Stimmen und Fazits durchsuchen
POST /api/b2/discussions Eine Diskussion erstellen
GET /api/b2/discussions/:id Eine Diskussion abrufen
GET /api/b2/discussions Diskussionen in einer Gruppe auflisten
PATCH /api/b2/discussions/:id Eine Diskussion bearbeiten
DELETE /api/b2/discussions/:id Eine Diskussion vorläufig löschen
GET /api/b2/threads Sichtbare Threads von Diskussionen und eigenständigen Abstimmungen auflisten
GET /api/b2/threads/:topic_id Einen Thread abrufen
GET /api/b2/threads/:topic_id/items Die Einträge eines Threads in ihrer Reihenfolge abrufen
GET /api/b2/threads/:topic_id/markdown Einen vollständigen Thread als Markdown abrufen
POST /api/b2/comments Einen Kommentar oder eine Antwort erstellen
PATCH /api/b2/comments/:id Einen Kommentar bearbeiten
DELETE /api/b2/comments/:id Einen Kommentar vorläufig löschen
POST /api/b2/polls Eine Abstimmung erstellen
GET /api/b2/polls/:id Eine Abstimmung abrufen
GET /api/b2/polls Abstimmungen in einer Gruppe auflisten
PATCH /api/b2/polls/:id Eine Abstimmung bearbeiten
DELETE /api/b2/polls/:id Eine Abstimmung vorläufig löschen
GET /api/b2/memberships Mitgliedschaften einer Gruppe auflisten
POST /api/b2/memberships Mitglieder hinzufügen und optional nicht aufgeführte Mitglieder entfernen
GET /api/b2/chatbots Chat-Integrationen und Webhooks einer Gruppe auflisten
POST /api/b2/chatbots Eine Chat-Integration oder einen Webhook erstellen
PATCH /api/b2/chatbots/:id Eine Chat-Integration oder einen Webhook aktualisieren
DELETE /api/b2/chatbots/:id Eine Chat-Integration oder einen Webhook löschen
POST /api/b2/chatbots/check Eine Testnachricht zur Prüfung der Webhook-Verbindung senden

Gruppen

Gruppen auflisten

Ruft die Gruppen ab, in denen der API-Schlüssel-Benutzer eine aktive Mitgliedschaft hat.

GET /api/b2/groups

curl -H 'Authorization: Bearer YOUR_API_KEY' https://www.loomio.com/api/b2/groups

Die Antwort enthält alle passenden Datensätze in einem groups-Array ohne Paginierung. Dazu gehören übergeordnete Gruppen und Untergruppen, auch wenn deren Abonnement derzeit nicht aktiv ist. Prüfe das Feld enabled, wenn eine Integration nur für aktivierte Gruppen arbeiten soll.

Wichtige Gruppenfelder sind:

Feld Beschreibung
id Numerische Gruppen-ID, die andere Endpunkte der Benutzer-API verwenden
key Beständiger Kurzschlüssel für Loomio-URLs
handle Lesbare Kennung der Gruppe
name Gruppenname
full_name Gruppenname mit dem Kontext der übergeordneten Gruppe
parent_id Numerische ID der übergeordneten Gruppe bei einer Untergruppe, sonst null
enabled Gibt an, ob die Gruppe und ihr Abonnement aktiv sind
memberships_count Anzahl aktiver und ausstehender Mitgliedschaften
accepted_memberships_count Anzahl angenommener Mitgliedschaften
pending_memberships_count Anzahl ausstehender Einladungen
admin_memberships_count Anzahl der Gruppenadministratoren
delegates_count Anzahl der Delegierten
discussions_count Anzahl der Diskussionen direkt in der Gruppe
polls_count Anzahl der Abstimmungen direkt in der Gruppe
subgroups_count Anzahl der Untergruppen

Die Antwort kann weitere Gruppeneinstellungen, verknüpfte Datensätze übergeordneter Gruppen und die Mitgliedschaften des API-Benutzers enthalten. Clients sollten Felder ignorieren, die sie nicht verwenden.

Eine Gruppe abrufen

Ruft eine Gruppe ab, die für den API-Schlüssel-Benutzer sichtbar ist.

GET /api/b2/groups/:id_or_key_or_handle

Als Kennung kannst du die numerische ID, den Schlüssel oder die lesbare Kennung der Gruppe verwenden.

curl -H 'Authorization: Bearer YOUR_API_KEY' https://www.loomio.com/api/b2/groups/123
curl -H 'Authorization: Bearer YOUR_API_KEY' https://www.loomio.com/api/b2/groups/example-group

Die Antwort enthält die Gruppe im groups-Array und verwendet dieselben Felder wie der Endpunkt zum Auflisten. Wenn der API-Schlüssel-Benutzer keinen Zugriff auf die Gruppe hat, wird ein Berechtigungsfehler zurückgegeben.

Webhooks

Die Benutzer-API arbeitet mit Anfragen: Eine Integration ruft Loomio auf, wenn sie Daten lesen oder ändern möchte. Ein Gruppen-Webhook übermittelt Ereignisse in die andere Richtung. Loomio sendet ausgewählte Gruppenereignisse an deinen Endpunkt, sobald sie eintreten. Die Integration muss die REST-API daher nicht regelmäßig auf Änderungen abfragen.

Webhooks werden für jede Gruppe einzeln eingerichtet. Dafür sind Administratorrechte in der Gruppe erforderlich. Du kannst sie über die Loomio-Oberfläche verwalten:

  1. Öffne die Gruppe.
  2. Öffne das Gruppenmenü und wähle Chat-Integrationen.
  3. Füge die Integration hinzu, deren Nutzdatenformat dein Endpunkt unterstützt. Verwende für einen allgemeinen Endpunkt das Format Mattermost/Markdown.
  4. Gib einen Namen und die Ziel-URL ein.
  5. Wähle die Ereignisse aus, die Loomio automatisch senden soll.
  6. Speichere die Integration und sende mit Testverbindung eine Testnachricht.

Verwende ein HTTPS-Ziel mit einer nicht erratbaren URL. Loomio verlangt, dass das Ziel zu einer öffentlichen Adresse aufgelöst wird, und blockiert Anfragen an lokale oder private Netzwerkadressen.

Agenten und andere Integrationen können Webhooks auch über die unten beschriebenen Chatbot-Endpunkte mit Bearer-Authentifizierung verwalten. Die Ressource heißt aus Kompatibilitätsgründen mit Loomios Chat-Integrationen chatbots, steht aber auch für allgemeine ausgehende Webhooks.

Webhooks auflisten

Ruft die für eine Gruppe eingerichteten Chat-Integrationen ab. Der API-Schlüssel-Benutzer muss Administrator dieser Gruppe sein. Die Antwort enthält Ziel-URLs und darf daher gewöhnlichen Gruppenmitgliedern nicht zugänglich gemacht werden.

GET /api/b2/chatbots?group_id=123

curl -H 'Authorization: Bearer YOUR_API_KEY' 'https://www.loomio.com/api/b2/chatbots?group_id=123'

Die Antwort enthält ein chatbots-Array mit diesen Feldern:

Feld Beschreibung
id Integrations-ID für Aktualisierungen und zum Löschen
group_id Gruppe, aus der die Ereignisse stammen
name Name der Integration für die Verwaltung
kind webhook für einen ausgehenden Webhook oder matrix für eine Matrix-Integration
webhook_kind Nutzdatenformat: markdown, slack, discord, microsoft oder webex
server Ziel-URL
event_kinds Automatisch gesendete Ereignisse
notification_only Gibt an, ob Nachrichten nur die Überschrift der Benachrichtigung enthalten

Webhook erstellen

POST /api/b2/chatbots

curl -X POST \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "group_id": 123,
    "name": "Planning system",
    "kind": "webhook",
    "webhook_kind": "markdown",
    "server": "https://hooks.example.org/loomio/unguessable-token",
    "event_kinds": ["new_discussion", "new_comment", "poll_created", "outcome_created"],
    "notification_only": false
  }' \
  https://www.loomio.com/api/b2/chatbots

Der Benutzer des API-Schlüssels muss Administrator der Gruppe group_id sein. Vor dem Speichern wird geprüft, ob die Ziel-URL öffentlich erreichbar ist.

Webhook aktualisieren

PATCH /api/b2/chatbots/:id

Sende die Felder, die geändert werden sollen. Durch Ändern von group_id kannst du den Webhook nicht einer anderen Gruppe zuordnen.

curl -X PATCH \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"name":"Planning events","event_kinds":["new_discussion","outcome_created"]}' \
  https://www.loomio.com/api/b2/chatbots/456

Webhook-Ziel testen

Sende vor oder nach dem Speichern der Konfiguration eine Markdown-kompatible Testnachricht an das Ziel.

POST /api/b2/chatbots/check

curl -X POST \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"group_id":123,"server":"https://hooks.example.org/loomio/unguessable-token"}' \
  https://www.loomio.com/api/b2/chatbots/check

Webhook löschen

DELETE /api/b2/chatbots/:id

curl -X DELETE -H 'Authorization: Bearer YOUR_API_KEY' https://www.loomio.com/api/b2/chatbots/456

Wenn du die Konfiguration löschst, werden keine weiteren Ereignisse zugestellt. Inhalte der Loomio-Gruppe bleiben erhalten.

Ereignistypen

Ein Webhook kann diese Ereignistypen abonnieren:

Ereignis Zeitpunkt des Versands
new_discussion Eine Diskussion wird gestartet
discussion_edited Eine Diskussion wird bearbeitet
new_comment Ein Kommentar wird erstellt
poll_created Eine Abstimmung wird gestartet
poll_edited Eine Abstimmung wird bearbeitet
poll_closing_soon Der Schließzeitpunkt einer Abstimmung rückt näher
poll_expired Eine Abstimmung erreicht ihren Schließzeitpunkt
poll_closed_by_user Eine Person schließt eine Abstimmung manuell
poll_reopened Eine Abstimmung wird wieder geöffnet
outcome_created Ein Fazit wird veröffentlicht
outcome_updated Ein Fazit wird aktualisiert
outcome_review_due Die Überprüfung eines Fazits wird fällig
stance_created Eine Stimme wird abgegeben
stance_updated Eine Stimme wird geändert

Der Webhook gehört zu einer Gruppe und empfängt deren abonnierte Ereignisse. Personen können die Integration beim Teilen oder Senden bestimmter Benachrichtigungen auch ausdrücklich auswählen, selbst wenn das entsprechende automatische Ereignis nicht ausgewählt ist.

HTTP-Zustellung

Loomio sendet asynchron einen HTTP-POST an die konfigurierte URL mit diesem Header:

Content-Type: application/json; charset=utf-8

Die Zeitüberschreitung für die Anfrage beträgt fünf Sekunden. Eine 2xx-Antwort, einschließlich 204 No Content, gilt als erfolgreich. Webhook-Empfänger sollten zügig antworten, längere Aufgaben asynchron verarbeiten und doppelte oder in anderer Reihenfolge eintreffende Zustellungen berücksichtigen.

Loomio fügt derzeit weder eine Webhook-Signatur noch einen Header mit einem gemeinsamen Geheimnis, eine Ereignis-ID oder eine Zustellungs-ID hinzu. Behandle die vollständige Ziel-URL wie einen Zugangsschlüssel und veröffentliche sie nicht. Wenn der empfangende Dienst es unterstützt, füge der URL ein nicht erratbares Token hinzu. Wenn du ein stabiles maschinenlesbares Ereignisschema oder signierte Zustellungen benötigst, nutze den Webhook als Änderungsbenachrichtigung und rufe die aktuellen Datensätze über die authentifizierte Benutzer-API ab.

Nutzdatenformate

Webhook-Nutzdaten sind für Chat-Dienste aufbereitete Nachrichten. Sie enthalten keine vollständigen serialisierten Loomio-Datensätze. Links in der Nachricht verweisen auf die betroffenen Loomio-Inhalte. Wenn eine Integration den aktuellen Stand als strukturierte Daten benötigt, kann sie ihn über die Benutzer-API abrufen.

Integrationsformat Wichtigste JSON-Felder
Mattermost/Markdown text, icon_url, username
Slack text
Discord content, begrenzt auf etwa 1.900 Zeichen
Microsoft Teams @type, @context, themeColor, text, sections
Webex markdown

Das allgemeine Markdown-Format sendet beispielsweise einen Inhalt in dieser Form:

{
  "text": "Ada started a discussion: [Quarterly planning](https://example.loomio.org/d/example)",
  "icon_url": "https://example.loomio.org/path/to/group-logo.png",
  "username": "Loomio"
}

Der genaue Nachrichtentext hängt vom Ereignis, der Spracheinstellung der Gruppe, der Einstellung für reine Benachrichtigungen und der Loomio-Version ab. Empfänger sollten sich auf die dokumentierten Felder der obersten Ebene des gewählten Formats stützen, statt den Wortlaut der Sätze auszuwerten.

Suche nach Diskussionen, Kommentaren, Abstimmungen, Stimmen und Fazits, die für den Benutzer des API-Schlüssels sichtbar sind. Die Ergebnisse enthalten auch öffentliche Inhalte aus Gruppen, denen der Benutzer nicht angehört. Für private Inhalte gelten die üblichen Sichtbarkeitsregeln für Themen.

GET /api/b2/search

Parameter

Name Beschreibung
query Suchtext. Exakte und ungefähre Treffer werden unterstützt
group_id Ergebnisse auf eine sichtbare Gruppe beschränken
org_id Ergebnisse auf eine sichtbare übergeordnete Gruppe und deren sichtbare Untergruppen beschränken. Verwende 0 für direkte Diskussionen
type Ergebnisse auf einen Typ beschränken: Discussion, Comment, Poll, Stance oder Outcome
types Durch Kommas getrennte Liste von Ergebnistypen
tag Ergebnisse auf Themen mit diesem Schlagwort beschränken
author_id Ergebnisse auf Inhalte einer Person beschränken. Ohne query wird die jüngste sichtbare Aktivität dieser Person zurückgegeben
order Auf authored_at_desc setzen, um passende Inhalte nach Erstellungszeitpunkt zu sortieren
curl -H 'Authorization: Bearer YOUR_API_KEY' 'https://www.loomio.com/api/b2/search?query=quarterly+planning&type=Discussion'

Die Antwort enthält ein search_results-Array. Jedes Ergebnis kennzeichnet den gefundenen Datensatz und seinen sichtbaren Kontext. Dazu gehören die Felder searchable_type, searchable_id, highlight, group_id, group_name, discussion_key, poll_key, author_id, author_name, authored_at und tags. Felder, die für ein Ergebnis nicht gelten, haben den Wert null.

Bericht zur Beteiligung

Gibt dieselben zusammengefassten Beteiligungsdaten zurück, die Loomio im Bericht zur Beteiligung verwendet.

GET /api/b2/reports

Parameter

Name Beschreibung
section Berichtsabschnitt: base, users oder countries. Verwende users für die Aktivität einzelner Personen
group_scope custom oder my. Der bisherige Wert all wird wie my behandelt, da Schlüssel der Benutzer-API keinen instanzweiten Zugriff gewähren
group_ids Durch Kommas getrennte Gruppen-IDs bei group_scope=custom. IDs von Gruppen, in denen der API-Benutzer kein Mitglied ist, werden ignoriert
start_month Erster berücksichtigter Monat im Format YYYY-MM; standardmäßig vor 12 Monaten
end_month Letzter berücksichtigter Monat im Format YYYY-MM; standardmäßig der aktuelle Monat
interval Intervall für den Abschnitt base: day, week, month oder year
member_type Mit section=users auf delegate setzen, um nur aktuelle Delegierte zurückzugeben

Eine Person gilt als delegiert, wenn sie in mindestens einer ausgewählten Gruppe eine aktive Mitgliedschaft als Delegierte hat. Ihre Zahlen werden über alle ausgewählten Gruppen zusammengefasst. Zeilen für Delegierte werden auch dann zurückgegeben, wenn alle Aktivitätszahlen null sind. Die Zahlen umfassen Threads, Kommentare, Abstimmungen, Stimmen, Fazits und Reaktionen. Sie sind keine Quoten für die Teilnahme an Abstimmungen. Benutzerzeilen enthalten außerdem die Zahlen der für identifizierte Personen ausgegebenen, abgegebenen und nicht abgegebenen Stimmzettel. Anonyme Abstimmungen sind von allen personenbezogenen Stimmzahlen ausgenommen. all_votes_cast ist nur dann wahr, wenn mindestens ein Stimmzettel ausgegeben und jeder ausgegebene Stimmzettel abgegeben wurde.

Die API wendet dieselben Regeln für die Sichtbarkeit von Gruppen an wie der Bericht in Loomio. Ein Schlüssel der Benutzer-API kann keine Berichtsdaten aus Gruppen offenlegen, auf die sein Benutzer keinen Zugriff hat.

Beispiel

curl -H 'Authorization: Bearer YOUR_API_KEY' 'https://www.loomio.com/api/b2/reports?section=users&group_scope=custom&group_ids=123&member_type=delegate&start_month=2026-01&end_month=2026-09'

Das users-Array enthält vollständige Zeilen mit Aktivitätsdaten:

{
  "users": [
    {
      "id": 456,
      "name": "Ada Lovelace",
      "country": "NZ",
      "delegate": true,
      "threads": 2,
      "comments": 8,
      "polls": 1,
      "votes": 5,
      "votes_cast": 5,
      "votes_issued": 6,
      "votes_missed": 1,
      "all_votes_cast": false,
      "outcomes": 1,
      "reactions": 4
    }
  ]
}

Diskussion erstellen

Erstelle eine Diskussion mit dem Benutzerkonto, zu dem der API-Schlüssel gehört.

POST /api/b2/discussions

Parameter

Name Beschreibung
group_id Gruppe, in der der Thread erstellt wird
title Titel des Threads, erforderlich
description Kontext für den Thread, optional
description_format md oder html, optional, Standardwert md
recipient_audience group oder null. Bei group wird die gesamte Gruppe über den neuen Thread benachrichtigt
recipient_user_ids Array mit Benutzer-IDs von Personen, die benachrichtigt oder zum Thread eingeladen werden sollen
recipient_emails Array mit E-Mail-Adressen von Personen, die zum Thread eingeladen werden sollen
recipient_message Nachricht für die Einladung per E-Mail

Beispiel

curl -H 'Authorization: Bearer YOUR_API_KEY' -X POST -H 'Content-Type: application/json' -d '{"group_id": 123, "title":"example thread", "recipient_emails":["person@example.com"]}' https://www.loomio.com/api/b2/discussions

Diskussion abrufen

Rufe eine Diskussion über ihre numerische ID oder ihren Schlüssel als Zeichenfolge ab.

GET /api/b2/discussions/:id

Beispiel

curl -H 'Authorization: Bearer YOUR_API_KEY' https://www.loomio.com/api/b2/discussions/abc123

Diskussionen auflisten

Liste die Diskussionen einer Gruppe auf, die für den Benutzer mit dem API-Schlüssel sichtbar sind. In einer öffentlich sichtbaren Gruppe können auch Personen ohne Mitgliedschaft die öffentlichen Diskussionen auflisten. Private Diskussionen bleiben auf Personen beschränkt, die sie in Loomio lesen dürfen.

GET /api/b2/discussions

Parameter

Name Beschreibung
group_id Ganzzahl, erforderlich. ID der Gruppe, deren Diskussionen aufgelistet werden sollen
status Zeichenfolge, optional, Standardwert open. Werte: open, closed, all
limit Ganzzahl, optional, Standardwert 50. Seitengröße
offset Ganzzahl, optional, Standardwert 0. Versatz für die Seitennummerierung

Aus Kompatibilitätsgründen werden per und from weiterhin als alternative Namen für limit und offset akzeptiert.

Beispiel

curl -H 'Authorization: Bearer YOUR_API_KEY' 'https://www.loomio.com/api/b2/discussions?group_id=123'

Threads auflisten

Liste die für den Benutzer mit dem API-Schlüssel sichtbaren Diskussions- und Abstimmungs-Threads auf, sortiert nach der letzten Aktivität. Die ID eines Threads ist seine topic_id.

GET /api/b2/threads

Parameter

Name Beschreibung
limit Ganzzahl, optional, Standardwert 50. Seitengröße
offset Ganzzahl, optional, Standardwert 0. Versatz für die Seitennummerierung

Beispiel

curl -H 'Authorization: Bearer YOUR_API_KEY' 'https://www.loomio.com/api/b2/threads?limit=50&offset=0'

Thread lesen

Lies einen Thread, seine chronologisch geordneten Ereignisse oder sein vollständiges sichtbares Markdown-Dokument.

GET /api/b2/threads/:topic_id

GET /api/b2/threads/:topic_id/items

GET /api/b2/threads/:topic_id/markdown

Beispiel

GET https://www.loomio.com/api/b2/threads/<topic_id>
GET https://www.loomio.com/api/b2/threads/<topic_id>/items
GET https://www.loomio.com/api/b2/threads/<topic_id>/markdown

Der Endpunkt items gibt die Ereignisse in ihrer Reihenfolge zurück, einschließlich sichtbarer Kommentare, Abstimmungen, Stimmen und Fazits. Der Endpunkt markdown gibt den vollständigen sichtbaren Thread als ein Markdown-Dokument zurück. Begründungen für Stimmen sind nur enthalten, wenn sie für den Benutzer mit dem API-Schlüssel sichtbar sind.

Für alle Thread-Endpunkte gelten dieselben Berechtigungen wie in der Loomio-Oberfläche. Der API-Schlüssel gewährt keinen Zugriff auf einen Thread, den der Benutzer normalerweise nicht öffnen kann.

Diskussion bearbeiten

Bearbeite eine Diskussion mit dem Benutzerkonto, zu dem der API-Schlüssel gehört. Es gelten dieselben Berechtigungen wie in Loomio: Der Benutzer muss diese Diskussion bearbeiten dürfen.

PATCH /api/b2/discussions/:id

Parameter

Name Beschreibung
title Neuer Titel
description Neuer Kontext
description_format md oder html, optional, Standardwert md
recipient_audience group oder null. Bei group wird die gesamte Gruppe über die Bearbeitung benachrichtigt
recipient_user_ids Array mit Benutzer-IDs von Personen, die benachrichtigt oder zum Thread eingeladen werden sollen
recipient_emails Array mit E-Mail-Adressen von Personen, die zum Thread eingeladen werden sollen
recipient_message Nachricht für die Einladung per E-Mail

Beispiel

curl -H 'Authorization: Bearer YOUR_API_KEY' -X PATCH -H 'Content-Type: application/json' -d '{"title":"updated thread title", "description":"updated context", "description_format":"md"}' https://www.loomio.com/api/b2/discussions/123

Diskussion vorläufig löschen

Lösche eine Diskussion mit dem Benutzerkonto, zu dem der API-Schlüssel gehört, vorläufig. Die Diskussion wird verworfen, ihr Datensatz bleibt jedoch erhalten.

DELETE /api/b2/discussions/:id

Beispiel

curl -H 'Authorization: Bearer YOUR_API_KEY' -X DELETE https://www.loomio.com/api/b2/discussions/123

Kommentar erstellen

Erstelle mit dem Benutzerkonto, zu dem der API-Schlüssel gehört, einen Kommentar in einer Diskussion.

POST /api/b2/comments

Parameter

Name Beschreibung
discussion_id Ganzzahl, erforderlich. ID der Diskussion, die kommentiert werden soll
body Kommentartext, erforderlich, sofern kein Anhang angegeben wird
body_format md oder html, optional, Standardwert md

Beispiel

curl -H 'Authorization: Bearer YOUR_API_KEY' -X POST -H 'Content-Type: application/json' -d '{"discussion_id": 123, "body":"example comment", "body_format":"md"}' https://www.loomio.com/api/b2/comments

Kommentar bearbeiten

Bearbeite einen Kommentar mit dem Benutzerkonto, zu dem der API-Schlüssel gehört. Es gelten dieselben Berechtigungen wie in Loomio: Der Benutzer muss diesen Kommentar bearbeiten dürfen.

PATCH /api/b2/comments/:id

Parameter

Name Beschreibung
body Neuer Kommentartext
body_format md oder html, optional, Standardwert md

Beispiel

curl -H 'Authorization: Bearer YOUR_API_KEY' -X PATCH -H 'Content-Type: application/json' -d '{"body":"updated comment", "body_format":"md"}' https://www.loomio.com/api/b2/comments/123

Kommentar vorläufig löschen

Lösche einen Kommentar mit dem Benutzerkonto, zu dem der API-Schlüssel gehört, vorläufig. Der Kommentar wird verworfen und sein Text ausgeblendet, sein Datensatz bleibt jedoch erhalten.

DELETE /api/b2/comments/:id

Beispiel

curl -H 'Authorization: Bearer YOUR_API_KEY' -X DELETE https://www.loomio.com/api/b2/comments/123

Umfrage erstellen

Erstelle eine Umfrage mit dem Benutzerkonto, zu dem der API-Schlüssel gehört.

POST /api/b2/polls

Parameter

Name Beschreibung
group_id Ganzzahl, optional, Standardwert null. ID der Gruppe für die Umfrage. Wenn discussion_id angegeben ist, wird group_id ignoriert
discussion_id Ganzzahl, optional, Standardwert null. ID der Diskussion, zu der diese Umfrage hinzugefügt wird
title Zeichenfolge, erforderlich. Titel der Umfrage
poll_type Zeichenfolge, erforderlich. Werte: proposal, poll, count, score, ranked_choice, meeting, dot_vote
details Zeichenfolge, optional. Beschreibung der Umfrage
details_format Zeichenfolge, optional, Standardwert md. Werte: md oder html
options Array von Zeichenfolgen. Bei poll_type proposal sind agree, disagree, abstain und block gültig. Bei poll_type meeting gib Datums- oder Datumszeitangaben im ISO-8601-Format an. Für alle anderen Umfragetypen ist jede Zeichenfolge gültig
closing_at Zeichenfolge im ISO-8601-Format oder null, Standardwert null. Beispiel: 2026-09-01T12:00:00Z. Bei null ist die Stimmabgabe deaktiviert und die Umfrage gilt als Entwurf
specified_voters_only Boolescher Wert, optional, Standardwert false. Bei true können nur die angegebenen Personen abstimmen. Bei false werden alle Gruppenmitglieder zur Abstimmung eingeladen
hide_results Zeichenfolge, optional, Standardwert off. Werte: off, until_vote, until_closed
shuffle_options Boolescher Wert, Standardwert false. Zeigt den Abstimmenden die Optionen in zufälliger Reihenfolge an
anonymous Boolescher Wert, optional, Standardwert false. Verbirgt die Identität der Abstimmenden
recipient_audience group oder null, optional, Standardwert null. Bei group wird die gesamte Gruppe benachrichtigt
notify_on_closing_soon Zeichenfolge, optional, Standardwert nobody. Werte: nobody, author, undecided_voters, voters
recipient_user_ids Array von Benutzer-IDs der Personen, die benachrichtigt oder eingeladen werden sollen
recipient_emails Array von E-Mail-Adressen der Personen, die zur Abstimmung eingeladen werden sollen
recipient_message Nachricht für die Einladung per E-Mail
notify_recipients Boolescher Wert, Standardwert false. Bei false werden Personen ohne Benachrichtigung hinzugefügt. Bei true erhalten alle mit dieser Anfrage eingeladenen Personen eine Benachrichtigung per E-Mail

Beispiel

curl -H 'Authorization: Bearer YOUR_API_KEY' -X POST -H 'Content-Type: application/json' -d '{"group_id": 123, "title":"example poll", "poll_type": "proposal", "options": ["agree", "disagree"], "closing_at": "2026-09-01T12:00:00Z", "recipient_emails":["person@example.com"]}' https://www.loomio.com/api/b2/polls

Umfrage abrufen

Rufe eine Umfrage über ihre numerische ID oder ihren Schlüssel als Zeichenfolge ab.

GET /api/b2/polls/:id

Beispiel

curl -H 'Authorization: Bearer YOUR_API_KEY' https://www.loomio.com/api/b2/polls/abc123

Umfragen auflisten

Liste die Umfragen einer Gruppe auf, die für die Person mit dem API-Schlüssel sichtbar sind. In einer öffentlich sichtbaren Gruppe können auch Personen ohne Mitgliedschaft öffentliche Umfragen auflisten. Private Umfragen sind nur für Personen sichtbar, die sie in Loomio lesen dürfen. Die Antwort enthält das aktuelle Fazit jeder sichtbaren Umfrage. Mit status=closed kannst du daher Vorschläge mit einem Fazit auflisten.

GET /api/b2/polls

Parameter

Name Beschreibung
group_id Ganzzahl, erforderlich. ID der Gruppe, deren Umfragen aufgelistet werden sollen
status Zeichenfolge, optional, Standardwert active. Werte: active, closed, all
limit Ganzzahl, optional, Standardwert 50. Seitengröße
offset Ganzzahl, optional, Standardwert 0. Versatz für die Seitennummerierung

Aus Kompatibilitätsgründen werden per und from weiterhin als alternative Namen für limit und offset akzeptiert.

Beispiel

curl -H 'Authorization: Bearer YOUR_API_KEY' 'https://www.loomio.com/api/b2/polls?group_id=123'

Umfrage bearbeiten

Bearbeite eine Umfrage mit dem Benutzerkonto, zu dem der API-Schlüssel gehört. Es gelten dieselben Berechtigungen wie in Loomio: Die Person muss diese Umfrage bearbeiten dürfen.

PATCH /api/b2/polls/:id

Parameter

Name Beschreibung
title Aktualisierter Titel
details Aktualisierte Beschreibung der Umfrage
details_format md oder html, optional, Standardwert md
options Aktualisierte Optionsnamen. Je nach Status der Umfrage kann eine Änderung der Optionen bestehende Stimmen beeinflussen
closing_at Zeichenfolge im ISO-8601-Format oder null
recipient_audience group oder null. Bei group wird die gesamte Gruppe benachrichtigt
recipient_user_ids Array von Benutzer-IDs der Personen, die benachrichtigt oder eingeladen werden sollen
recipient_emails Array von E-Mail-Adressen der Personen, die zur Abstimmung eingeladen werden sollen
recipient_message Nachricht für die Einladung per E-Mail

Beispiel

curl -H 'Authorization: Bearer YOUR_API_KEY' -X PATCH -H 'Content-Type: application/json' -d '{"title":"updated poll title", "details":"updated details", "details_format":"md"}' https://www.loomio.com/api/b2/polls/123

Umfrage vorläufig löschen

Lösche eine Umfrage vorläufig mit dem Benutzerkonto, zu dem der API-Schlüssel gehört. Die Umfrage wird verworfen, ihr Datensatz bleibt jedoch erhalten.

DELETE /api/b2/polls/:id

Beispiel

curl -H 'Authorization: Bearer YOUR_API_KEY' -X DELETE https://www.loomio.com/api/b2/polls/123

Mitgliedschaften auflisten

Liste die Mitgliedschaften auf, die für die Person mit dem API-Schlüssel sichtbar sind. Gruppenmitglieder können Namen, IDs, Titel und Rollen der Mitglieder lesen. E-Mail-Adressen werden nur für das eigene Konto oder für Gruppenadministratoren angezeigt.

GET /api/b2/memberships

Parameter

Name Beschreibung
group_id Ganzzahl, erforderlich. ID der Gruppe, deren Mitgliedschaften aufgelistet werden sollen

Beispiel

curl -H 'Authorization: Bearer YOUR_API_KEY' 'https://www.loomio.com/api/b2/memberships?group_id=123'

Mitgliedschaften verwalten

Sende eine Liste von E-Mail-Adressen. Neue Adressen auf der Liste erhalten eine Einladung zur Gruppe. Anders als beim Auflisten von Mitgliedschaften benötigst du für diese Aktion Gruppenadministratorrechte.

POST /api/b2/memberships

Parameter

Name Beschreibung
group_id Ganzzahl, erforderlich. ID der Gruppe, deren Mitgliedschaften verwaltet werden sollen
emails Array von Zeichenfolgen, erforderlich. E-Mail-Adressen der Personen, die zur Gruppe eingeladen werden sollen
remove_absent Boolescher Wert. Bei true werden alle Personen aus der Gruppe entfernt, deren E-Mail-Adresse nicht in der Liste steht

Beispiel

curl -H 'Authorization: Bearer YOUR_API_KEY' -X POST -H 'Content-Type: application/json' -d '{"group_id": 123, "emails":["person@example.com"]}' https://www.loomio.com/api/b2/memberships

Wenn du remove_absent=1 angibst, werden alle Gruppenmitglieder entfernt, die nicht auf der Liste stehen. Achte darauf, dass du damit alle Mitglieder deiner Gruppe entfernen könntest.

curl -H 'Authorization: Bearer YOUR_API_KEY' -X POST -H 'Content-Type: application/json' -d '{"group_id": 123, "emails":["person@example.com"], "remove_absent": 1}' https://www.loomio.com/api/b2/memberships

Die Antwort ist ein Objekt mit {added_emails: ["person@added.com"], removed_emails: ["person@removed.com"]}.