Loomio サーバー API ドキュメント

/api/server0 はサーバーレベルの操作に使用します。Loomio のユーザーアカウントとして行うユーザー向けの操作には、/api/user0 を使用します。

1つのサーバーキーで、アカウントの作成と管理、環境全体のグループの検索、メンバーシップと役割の管理ができます。ボットアカウント、ユーザー API キー、グループへの所属は必要ありません。ユーザー API キーには、引き続きそのユーザーのグループ権限が適用されます。

認証

キーは、サーバー環境の SERVER_API_KEY 設定です。新規インストール時には、create_env.sh がキーを生成します。

キーを Bearer トークンとして送信します。

curl -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users

認証情報は Authorization ヘッダーでのみ送信してください。クエリ文字列やリクエスト本文に含まれる API キーは拒否されます。

アカウントとメンバーシップの作成・管理

メソッド エンドポイント 用途
POST /api/server0/users アカウントの作成
GET /api/server0/groups 環境全体のグループの検索
GET /api/server0/memberships グループのメンバーシップの一覧取得
POST /api/server0/memberships メンバーの招待、またはメンバーシップ一覧全体の同期
PATCH /api/server0/memberships/:id グループ管理者と代表者の役割の変更
DELETE /api/server0/memberships/:id 1件のメンバーシップの取り消し

既存のアカウントの更新、無効化、再有効化、個人情報の削除、アカウントの削除に使用するエンドポイントについては、後述します。

アカウントの作成

POST /api/server0/users

必須の email を含む user オブジェクトを送信します。メールアドレスの前後の空白は削除され、小文字に変換されます。任意のフィールドは name、username、is_admin です。ここでの is_admin はインスタンス管理者を意味します。グループ管理者の役割はメンバーシップで管理します。username を省略すると、自動生成されます。未定義のフィールドは拒否されます。

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
    }
  }'

レスポンスは HTTP 201 で、user オブジェクトを含みます。フィールドが無効な場合や、メールアドレスまたはユーザー名がすでに使用されている場合は、HTTP 422 を返します。アカウントを作成しても、招待の送信、ユーザーのログイン、メールアドレスの確認済みへの変更は行われません。通常の通知ワークフローで招待を送信するには、メンバーシップのエンドポイントを使用してグループに招待してください。

グループの検索

GET /api/server0/groups

非公開グループやサブスクリプションの有効期限が切れたグループを含め、削除されていないすべてのグループを一覧表示します。結果は ID の昇順に並びます。limit(既定値と最大値は 50)と offset(既定値は 0)を使用して、ページごとに取得します。

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
  }
}

メンバーシップの一覧取得

GET /api/server0/memberships?group_id=123

group_id は必須です。結果には承認済みのメンバーシップと承認待ちの招待が含まれ、メンバーシップ ID の昇順に並びます。取り消されたメンバーシップは含まれません。ページ分割には limit(既定値と最大値は 50)と offset(既定値は 0)を使用します。

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 と delegate はグループ内の役割です。accepted_at は承認日時を表し、招待が承認待ちの場合は null です。このエンドポイントは、招待トークン、ログイン認証情報、投票を公開しません。

メンバーの招待または同期

POST /api/server0/memberships

必須の group_id と emails 配列を送信します。既定では、一覧に含まれる人のうち、有効なメンバーシップをまだ持たない人を追加し、それ以外の人はそのまま残します。メールアドレスの前後の空白は削除され、小文字に変換され、重複が除かれます。新しいアドレスについては、アカウントと承認待ちの招待を作成します。同じ組織内の別の有効なグループにすでに所属し、メールアドレスが確認済みのメンバーは、ユーザー 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"
    ]
  }'

メンバーシップ一覧全体を同期するには、remove_absent を明示的に true に設定します。一覧に含まれない人は、そのグループとサブグループから削除されます。空の配列を remove_absent: true とともに送信すると、グループ管理者を含む全員が削除されます。追加のみを行う場合は、remove_absent を省略するか false に設定してください。従来の値である 1 と 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"
  ]
}

同じリクエストを繰り返しても、メンバーシップが重複して作成されたり、招待が再送信されたりすることはありません。メンバーシップが取り消されたメンバーを再度招待すると、グループへのアクセスは復元されますが、以前のグループ管理者の役割は復元されません。新しい招待と役割の変更には通常の通知ワークフローが使用され、操作したユーザーは記録されません。

メールアドレス一覧がない場合や形式が不正な場合、またはブール値が無効な場合は、HTTP 400 を返します。一覧に無効化されたアカウントが含まれている場合は、HTTP 422 を返します。追加する前に、明示的に再有効化してください。アカウントデータが無効な場合、サブスクリプションの上限に達した場合、その他のエラーが発生した場合は、新規アカウントの作成とメンバーシップの削除を含む同期全体がロールバックされます。追加には有効なグループが必要で、サブスクリプションのメンバー数の上限が適用されます。

メンバーシップの役割の更新

PATCH /api/server0/memberships/:id

ブール値フィールド admin と delegate のいずれか、または両方を含む membership オブジェクトを送信します。省略した役割は変更されません。未定義のフィールドは拒否されます。このエンドポイントでは、メンバーシップの移譲、招待の承認、投票の重みの変更はできません。

curl https://loomio.example.org/api/server0/memberships/456 \
  -X PATCH \
  -H 'Authorization: Bearer YOUR_SERVER_API_KEY' \
  --json '{
    "membership": {
      "admin": true,
      "delegate": false
    }
  }'

一覧取得時のメンバーシップと同じフィールドを持つ membership オブジェクトを返します。役割を付与すると、通常の役割通知が作成されます。役割を変更せずに同じリクエストを繰り返しても、再度通知されません。役割の変更には有効なグループが必要です。取り消されたメンバーシップの場合は HTTP 404 を返します。

1件のメンバーシップの削除

DELETE /api/server0/memberships/:id

curl https://loomio.example.org/api/server0/memberships/456 \
  -X DELETE \
  -H 'Authorization: Bearer YOUR_SERVER_API_KEY'

{"success": true} を返します。削除すると、トピックへのアクセスと進行中のアンケートでの投票権を含め、そのグループとサブグループへのアクセスが取り消されます。アカウントの削除、無関係なグループの変更、スレッドへの直接のアクセス権の取り消しは行われません。削除を繰り返しても成功します。サブスクリプションの有効期限が切れたグループからもメンバーシップを削除できます。削除済みのグループの場合は HTTP 404 を返します。

ユーザーオブジェクト

ユーザーのレスポンスは次の形式です。

{
  "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"
    }
  ]
}

ユーザー一覧の取得

Loomio 環境のすべてのユーザーアカウントを一覧で取得します。

GET /api/server0/users

使用例

curl -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users

次のレスポンスを返します。

{
  "users": []
}

ユーザーの取得

Loomio のユーザー ID または外部の識別情報でユーザーを検索します。

GET /api/server0/users/:id

GET /api/server0/users/identity/:identity_type/:uid

使用例

Loomio のユーザー ID を使用する場合:

curl -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users/123

外部の識別情報を使用する場合:

curl -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users/identity/oauth/external-123

次のレスポンスを返します。

{
  "user": {}
}

ユーザーの更新

Loomio のユーザー ID または外部の識別情報で検索したユーザーのプロフィール項目を更新します。

PATCH /api/server0/users/:id

PATCH /api/server0/users/identity/:identity_type/:uid

パラメーター

項目 説明
name 表示名
username Loomio のユーザー名
email メールアドレス

使用例

Loomio のユーザー 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

外部の識別情報を使用する場合:

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

更新後のユーザーを返します。

{
  "user": {}
}

ユーザーの無効化

Loomio のユーザー ID または外部の識別情報で検索したユーザーアカウントを無効化します。

POST /api/server0/users/:id/deactivate

POST /api/server0/users/identity/:identity_type/:uid/deactivate

使用例

Loomio のユーザー ID を使用する場合:

curl -X POST -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users/123/deactivate

外部の識別情報を使用する場合:

curl -X POST -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users/identity/oauth/external-123/deactivate

次のレスポンスを返します。

{
  "success": true,
  "user": {}
}

ユーザーの再有効化

Loomio のユーザー ID または外部の識別情報でユーザーアカウントを検索し、無効化されているアカウントを再有効化します。

POST /api/server0/users/:id/reactivate

POST /api/server0/users/identity/:identity_type/:uid/reactivate

例

Loomio のユーザー ID を使用する場合:

curl -X POST -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users/123/reactivate

外部 ID を使用する場合:

curl -X POST -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users/identity/oauth/external-123/reactivate

レスポンス:

{
  "success": true,
  "user": {}
}

ユーザーの個人情報の削除

個人情報の削除では、ユーザーがグループ内に投稿したコメントやその他のコンテンツは保持されますが、名前、自己紹介、プロフィール写真、メールアドレス、ログイン認証情報、外部 ID、有効なセッションなど、個人の特定につながる既知の情報は削除されます。

Loomio からユーザーを削除する際は、この方法を推奨します。

POST /api/server0/users/:id/redact

POST /api/server0/users/identity/:identity_type/:uid/redact

例

Loomio のユーザー ID を使用する場合:

curl -X POST -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users/123/redact

外部 ID を使用する場合:

curl -X POST -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users/identity/oauth/external-123/redact

レスポンス:

{
  "success": true
}

ユーザーの削除

削除では、ユーザーと、そのユーザーが作成したレコードが削除されます。スレッドからコメントが削除され、アンケートから投票が削除されます。また、データベースの関連付けによって、そのユーザーが作成したグループ、ディスカッション、アンケート、その他のレコードも削除される場合があります。

この操作では多くのデータが失われます。代わりに個人情報の削除を行うことを強く推奨します。

DELETE /api/server0/users/:id

DELETE /api/server0/users/identity/:identity_type/:uid

例

Loomio のユーザー ID を使用する場合:

curl -X DELETE -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users/123

外部 ID を使用する場合:

curl -X DELETE -H 'Authorization: Bearer YOUR_SERVER_API_KEY' https://www.loomio.com/api/server0/users/identity/oauth/external-123

レスポンス:

{
  "success": true
}

SSO プロフィール同期の設定

別のシステムで Loomio のプロフィール項目を管理する場合は、以下の設定を使用します。

LOOMIO_DISABLE_EDIT_USER_PROFILE=1
# LOOMIO_SSO_UPDATE_USER_PROFILE_ON_LOGIN=1

LOOMIO_DISABLE_EDIT_USER_PROFILE=1 を設定すると、ユーザー自身による以下の項目の編集を禁止します:

項目 備考
name 外部同期で管理します
username 外部同期で管理します
email 外部同期で管理します
avatar_kind / uploaded_avatar 外部同期で管理します

ユーザーは引き続き、short_bio や location などの Loomio 内で管理する項目を編集できます。

LOOMIO_SSO_UPDATE_USER_PROFILE_ON_LOGIN=1 を設定すると、SSO ログインデータから name と email を更新します。これらの更新を外部同期スクリプトのみで行う場合は、コメントアウトしたままにするか、設定しないでください。

既存のインストール環境では、引き続き LOOMIO_SSO_FORCE_USER_ATTRS を使用できます。この設定は、ユーザーによる編集を禁止するとともに、SSO ログイン時に name と email を更新します。

このページは機械翻訳されています。誤った言葉やわかりにくい表現がありましたら、contact@loomio.org までメールでお知らせください。修正します。