Documentazione delle API del server Loomio
/api/server0 serve per le operazioni a livello di server. Usa /api/user0 per le azioni eseguite con un account utente Loomio.
Usa un'unica chiave del server per creare e gestire account, trovare gruppi nell'intera installazione e gestire le appartenenze e i ruoli nei gruppi. Non sono necessari un account bot, una chiave API utente o l'appartenenza ai gruppi. Le chiavi API utente continuano a rispettare i permessi dell'utente nei gruppi.
Autenticazione
La chiave è il valore dell'impostazione SERVER_API_KEY nell'ambiente del server. create_env.sh ne genera una per le nuove installazioni.
Invia la chiave come token bearer:
curl -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users
Invia le credenziali solo nell'intestazione Authorization. Le chiavi API nelle stringhe di query o nei corpi delle richieste vengono rifiutate.
Crea account e gestisci le appartenenze ai gruppi
| Metodo | Endpoint | Scopo |
|---|---|---|
POST |
/api/server0/users |
Creare un account |
GET |
/api/server0/groups |
Trovare gruppi nell'intera installazione |
GET |
/api/server0/memberships |
Elencare le appartenenze a un gruppo |
POST |
/api/server0/memberships |
Invitare membri o sincronizzare un elenco completo dei membri |
PATCH |
/api/server0/memberships/:id |
Modificare i ruoli di amministratore e delegato del gruppo |
DELETE |
/api/server0/memberships/:id |
Revocare un'appartenenza |
Gli endpoint esistenti per l'aggiornamento, la disattivazione, la riattivazione, l'anonimizzazione e l'eliminazione degli account sono descritti di seguito.
Crea un account
POST /api/server0/users
Invia un oggetto user con il campo obbligatorio email. Gli spazi iniziali e finali degli indirizzi email vengono rimossi e gli indirizzi vengono convertiti in minuscolo. I campi facoltativi sono name, username e is_admin. Qui is_admin indica un amministratore dell'istanza; i ruoli di amministratore del gruppo vengono gestiti tramite le appartenenze. Ometti username per generarne uno automaticamente. I campi sconosciuti vengono rifiutati.
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
}
}'
La risposta è HTTP 201 con un oggetto user. Campi non validi oppure un indirizzo email o un nome utente già in uso restituiscono HTTP 422. La creazione di un account non invia un invito, non fa accedere la persona e non contrassegna il suo indirizzo email come verificato. Invita la persona in un gruppo tramite l'endpoint delle appartenenze per inviare un invito attraverso il normale flusso di notifiche.
Trova i gruppi
GET /api/server0/groups
Elenca tutti i gruppi che non sono stati eliminati, inclusi i gruppi privati e quelli con abbonamenti scaduti. I risultati sono ordinati per ID crescente. Usa limit (valore predefinito e massimo 50) e offset (valore predefinito 0) per scorrerli per pagina.
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
}
}
Elenca le appartenenze
GET /api/server0/memberships?group_id=123
group_id è obbligatorio. I risultati includono le appartenenze accettate e gli inviti in attesa, ordinati per ID di appartenenza crescente. Le appartenenze revocate sono escluse. Usa limit (valore predefinito e massimo 50) e offset (valore predefinito 0) per la paginazione.
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 e delegate sono ruoli del gruppo. accepted_at indica la data e l'ora di accettazione, oppure null mentre un invito è in attesa. Questo endpoint non espone token di invito, credenziali di accesso o voti.
Invita o sincronizza i membri
POST /api/server0/memberships
Invia i campi obbligatori group_id e emails, quest'ultimo come array. Per impostazione predefinita, vengono aggiunte le persone elencate che non hanno già un'appartenenza attiva, mantenendo tutti gli altri membri. Gli spazi iniziali e finali degli indirizzi email vengono rimossi, gli indirizzi vengono convertiti in minuscolo e i duplicati vengono eliminati. Per i nuovi indirizzi vengono creati account e inviti in attesa. I membri già verificati di un altro gruppo attivo nella stessa organizzazione vengono accettati automaticamente, come nel flusso di invito delle API utente.
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"
]
}'
Per sincronizzare un elenco completo dei membri, imposta esplicitamente remove_absent su true. Chiunque non sia presente nell'elenco viene rimosso dal gruppo e dai suoi sottogruppi. Un array vuoto con remove_absent: true rimuove tutti, inclusi gli amministratori del gruppo. Ometti remove_absent o impostalo su false quando vuoi solo aggiungere persone. Sono accettati anche i valori precedenti 1 e 0.
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"
]
}
Ripetere la stessa richiesta non crea appartenenze duplicate e non invia nuovamente gli inviti. Invitare di nuovo un membro la cui appartenenza è stata revocata ripristina il suo accesso al gruppo senza ripristinare un precedente ruolo di amministratore. I nuovi inviti e le modifiche ai ruoli usano il normale flusso di notifiche, senza registrare alcun utente come autore dell'azione.
Elenchi di indirizzi email mancanti o non correttamente formati e valori booleani non validi restituiscono HTTP 400. Un account disattivato presente nell'elenco restituisce HTTP 422; riattivalo esplicitamente prima di aggiungerlo. Dati dell'account non validi, limiti dell'abbonamento o altri errori annullano l'intera sincronizzazione, inclusi i nuovi account e le rimozioni delle appartenenze. Le aggiunte richiedono un gruppo attivo e restano soggette ai limiti sul numero di membri previsti dall'abbonamento.
Aggiorna i ruoli di un'appartenenza
PATCH /api/server0/memberships/:id
Invia un oggetto membership contenente uno o entrambi i campi booleani admin e delegate. I ruoli omessi restano invariati. I campi sconosciuti vengono rifiutati; l'endpoint non può trasferire un'appartenenza, accettare un invito o modificare i pesi dei voti.
curl https://loomio.example.org/api/server0/memberships/456 \
-X PATCH \
-H 'Authorization: Bearer YOUR_SERVER_API_KEY' \
--json '{
"membership": {
"admin": true,
"delegate": false
}
}'
Restituisce un oggetto membership con gli stessi campi di un'appartenenza restituita nell'elenco. L'assegnazione di un ruolo genera la consueta notifica relativa al ruolo; ripetere un ruolo invariato non invia una nuova notifica. Le modifiche ai ruoli richiedono un gruppo attivo. Le appartenenze revocate restituiscono HTTP 404.
Rimuovi un'appartenenza
DELETE /api/server0/memberships/:id
curl https://loomio.example.org/api/server0/memberships/456 \
-X DELETE \
-H 'Authorization: Bearer YOUR_SERVER_API_KEY'
Restituisce {"success": true}. La rimozione revoca l'accesso al gruppo e ai suoi sottogruppi, inclusi l'accesso agli argomenti e il diritto di voto nei sondaggi attivi. Non elimina l'account, non modifica i gruppi non correlati e non revoca l'accesso diretto alle conversazioni. Ripetere una rimozione ha esito positivo. Puoi rimuovere appartenenze da gruppi con abbonamenti scaduti; i gruppi eliminati restituiscono HTTP 404.
Oggetto utente
Le risposte relative agli utenti usano questa struttura:
{
"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"
}
]
}
Elenca gli utenti
Elenca tutti gli account utente dell'installazione Loomio.
GET /api/server0/users
Esempio
curl -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users
Restituisce:
{
"users": []
}
Mostra un utente
Trova un utente tramite il suo ID utente Loomio o la sua identità esterna.
GET /api/server0/users/:id
GET /api/server0/users/identity/:identity_type/:uid
Esempi
Tramite ID utente Loomio:
curl -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users/123
Tramite identità esterna:
curl -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users/identity/oauth/external-123
Restituisce:
{
"user": {}
}
Aggiorna un utente
Aggiorna i campi del profilo di un utente trovato tramite il suo ID utente Loomio o la sua identità esterna.
PATCH /api/server0/users/:id
PATCH /api/server0/users/identity/:identity_type/:uid
Parametri
| Campo | Descrizione |
|---|---|
name |
Nome visualizzato |
username |
Nome utente Loomio |
email |
Indirizzo email |
Esempi
Tramite ID utente Loomio:
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
Tramite identità esterna:
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
Restituisce l'utente aggiornato:
{
"user": {}
}
Disattiva un utente
Disattiva un account utente trovato tramite il suo ID utente Loomio o la sua identità esterna.
POST /api/server0/users/:id/deactivate
POST /api/server0/users/identity/:identity_type/:uid/deactivate
Esempi
Tramite ID utente Loomio:
curl -X POST -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users/123/deactivate
Tramite identità esterna:
curl -X POST -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users/identity/oauth/external-123/deactivate
Restituisce:
{
"success": true,
"user": {}
}
Riattiva utente
Riattiva un account utente disattivato individuato tramite il suo ID utente Loomio o la sua identità esterna.
POST /api/server0/users/:id/reactivate
POST /api/server0/users/identity/:identity_type/:uid/reactivate
Esempi
Tramite ID utente Loomio:
curl -X POST -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users/123/reactivate
Tramite identità esterna:
curl -X POST -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users/identity/oauth/external-123/reactivate
Restituisce:
{
"success": true,
"user": {}
}
Rimuovi i dati personali dell'utente
La rimozione dei dati personali conserva i commenti dell'utente e gli altri contenuti che ha creato nei suoi gruppi, ma rimuove le informazioni identificative personali note, come nome, biografia, foto del profilo, indirizzo email, credenziali di accesso, identità e sessioni attive.
Questo è il metodo consigliato per rimuovere un utente da Loomio.
POST /api/server0/users/:id/redact
POST /api/server0/users/identity/:identity_type/:uid/redact
Esempi
Tramite ID utente Loomio:
curl -X POST -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users/123/redact
Tramite identità esterna:
curl -X POST -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users/identity/oauth/external-123/redact
Restituisce:
{
"success": true
}
Elimina utente
L'eliminazione rimuove l'utente e i record che ha creato. I commenti vengono rimossi dalle conversazioni, i voti vengono rimossi dai sondaggi e anche i gruppi, le discussioni, i sondaggi e gli altri record creati dall'utente possono essere eliminati tramite le associazioni del database.
Questa operazione è molto distruttiva. È fortemente consigliato usare invece la rimozione dei dati personali.
DELETE /api/server0/users/:id
DELETE /api/server0/users/identity/:identity_type/:uid
Esempi
Tramite ID utente Loomio:
curl -X DELETE -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users/123
Tramite identità esterna:
curl -X DELETE -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users/identity/oauth/external-123
Restituisce:
{
"success": true
}
Impostazioni di sincronizzazione del profilo SSO
Usa queste impostazioni quando un altro sistema gestisce i campi del profilo Loomio.
LOOMIO_DISABLE_EDIT_USER_PROFILE=1
# LOOMIO_SSO_UPDATE_USER_PROFILE_ON_LOGIN=1
LOOMIO_DISABLE_EDIT_USER_PROFILE=1 impedisce agli utenti di modificare autonomamente questi campi:
| Campo | Note |
|---|---|
name |
Gestito dalla sincronizzazione esterna |
username |
Gestito dalla sincronizzazione esterna |
email |
Gestito dalla sincronizzazione esterna |
avatar_kind / uploaded_avatar |
Gestito dalla sincronizzazione esterna |
Gli utenti possono comunque modificare i campi locali di Loomio, come short_bio e location.
LOOMIO_SSO_UPDATE_USER_PROFILE_ON_LOGIN=1 aggiorna name ed email usando i dati di accesso SSO. Lascia questa impostazione commentata o non impostata quando uno script di sincronizzazione esterna deve essere l'unica fonte di questi aggiornamenti.
LOOMIO_SSO_FORCE_USER_ATTRS continua a funzionare per le installazioni esistenti. Impedisce le modifiche da parte degli utenti e aggiorna name ed email all'accesso tramite SSO.