Документация пользовательского API Loomio
/api/b2 — пользовательский API для интеграций с Loomio. Он использует API-ключ учётной записи, и каждое действие выполняется от имени этого пользователя.
При работе с группами действуют права и членство пользователя, которому принадлежит API-ключ. Статус администратора экземпляра не расширяет доступ API-ключа к группам и их содержимому. Для управления экземпляром используйте серверный API.
Используйте API-ключ учётной записи Loomio, от имени которой будут выполняться действия. Отдельная учётная запись бота удобна, если интеграция не должна получать приглашения к голосованиям и уведомления.
Пользователи, вошедшие в систему, могут найти свой API-ключ и идентификаторы групп на странице доступа к API.
Передавайте API-ключ в заголовке Authorization: Bearer. API-ключи в строке запроса отклоняются, поскольку URL могут сохраняться в журналах прокси-серверов и доступа.
Изменение способа аутентификации
Раньше API-ключ можно было передать в параметре URL api_key. Запросы с ?api_key=YOUR_API_KEY больше не работают. Используйте заголовок HTTP Authorization:
Authorization: Bearer YOUR_API_KEY
В примерах используются YOUR_API_KEY, идентификатор группы 123 и https://www.loomio.com/. Замените их своим API-ключом, идентификатором группы и URL вашей установки Loomio.
Размер ответа и связанные записи
Ответы пользовательского API имеют составной формат: вместе с основными записями возвращаются связанные записи, например темы, группы, пользователи, голосования и реакции. Это позволяет клиенту заполнить локальное хранилище записей одним запросом, но объём данных может быть больше, чем требуется простой интеграции.
Передайте compact=1, чтобы исключить объёмные связанные записи о темах, группах, родительских группах, участии в группах, реакциях, тегах и переводах. Основные записи и связанные записи, необходимые для понимания их содержимого, останутся в ответе.
curl -H 'Authorization: Bearer YOUR_API_KEY' 'https://www.loomio.com/api/b2/threads/123/items?compact=1'
Для точного выбора исключений передайте в exclude_types типы записей в единственном числе, разделённые пробелами. Например, exclude_types=group reaction исключает связанные группы и реакции. Распространённые значения: topic, group, parent, membership, reaction, tag, translation, user, discussion, poll, poll_option, stance, stance_choice, outcome и topic_item. Исключения относятся к связанным записям, а не к основному ресурсу, запрошенному через конечную точку.
Ответы с коллекциями содержат meta.total, когда определён точный размер коллекции. Общее число рассчитывается до применения limit и offset. Конечные точки, которые намеренно возвращают ограниченный набор результатов, например поиск, не включают meta.total вместо значения null.
Обзор конечных точек
| Метод | Конечная точка | Назначение |
|---|---|---|
GET |
/api/b2/groups |
Получить список групп пользователя, которому принадлежит API-ключ |
GET |
/api/b2/groups/:id_or_key_or_handle |
Получить доступную группу |
GET |
/api/b2/reports |
Сформировать отчёт об участии |
GET |
/api/b2/search |
Найти доступные обсуждения, комментарии, голосования, голоса и заключения |
POST |
/api/b2/discussions |
Создать обсуждение |
GET |
/api/b2/discussions/:id |
Получить обсуждение |
GET |
/api/b2/discussions |
Получить список обсуждений в группе |
PATCH |
/api/b2/discussions/:id |
Изменить обсуждение |
DELETE |
/api/b2/discussions/:id |
Пометить обсуждение как удалённое |
GET |
/api/b2/threads |
Получить список доступных тем обсуждений и отдельных голосований |
GET |
/api/b2/threads/:topic_id |
Получить тему |
GET |
/api/b2/threads/:topic_id/items |
Получить элементы темы по порядку |
GET |
/api/b2/threads/:topic_id/markdown |
Получить всю тему в формате Markdown |
POST |
/api/b2/comments |
Создать комментарий или ответ |
PATCH |
/api/b2/comments/:id |
Изменить комментарий |
DELETE |
/api/b2/comments/:id |
Пометить комментарий как удалённый |
POST |
/api/b2/polls |
Создать голосование |
GET |
/api/b2/polls/:id |
Получить голосование |
GET |
/api/b2/polls |
Получить список голосований в группе |
PATCH |
/api/b2/polls/:id |
Изменить голосование |
DELETE |
/api/b2/polls/:id |
Пометить голосование как удалённое |
GET |
/api/b2/memberships |
Получить список участников группы |
POST |
/api/b2/memberships |
Добавить участников и при необходимости удалить тех, кого нет в списке |
GET |
/api/b2/chatbots |
Получить список интеграций чата и вебхуков группы |
POST |
/api/b2/chatbots |
Создать интеграцию чата или вебхук |
PATCH |
/api/b2/chatbots/:id |
Обновить интеграцию чата или вебхук |
DELETE |
/api/b2/chatbots/:id |
Удалить интеграцию чата или вебхук |
POST |
/api/b2/chatbots/check |
Отправить тестовое сообщение для проверки соединения с вебхуком |
Группы
Список групп
Возвращает группы, в которых пользователь, которому принадлежит API-ключ, является действующим участником.
GET /api/b2/groups
curl -H 'Authorization: Bearer YOUR_API_KEY' https://www.loomio.com/api/b2/groups
Ответ содержит все подходящие записи в массиве groups без разбивки на страницы. В него входят родительские группы и подгруппы, в том числе группы, чья подписка сейчас неактивна. Если интеграция должна работать только с активными группами, проверяйте поле enabled.
Важные поля группы:
| Поле | Описание |
|---|---|
id |
Числовой идентификатор группы, используемый другими конечными точками пользовательского API |
key |
Постоянный короткий ключ, используемый в URL Loomio |
handle |
Читаемый идентификатор группы |
name |
Название группы |
full_name |
Название группы с указанием родительской группы |
parent_id |
Числовой идентификатор родительской группы для подгруппы, иначе null |
enabled |
Активны ли группа и её подписка |
memberships_count |
Число действующих участников и ожидающих вступления |
accepted_memberships_count |
Число подтверждённых участников |
pending_memberships_count |
Число приглашений, ожидающих ответа |
admin_memberships_count |
Число администраторов группы |
delegates_count |
Число делегатов |
discussions_count |
Число обсуждений непосредственно в группе |
polls_count |
Число голосований непосредственно в группе |
subgroups_count |
Число подгрупп |
Ответ также может содержать дополнительные настройки группы, связанные записи родительской группы и сведения об участии пользователя API в группах. Клиентам следует игнорировать поля, которые они не используют.
Получение группы
Возвращает одну группу, доступную пользователю, которому принадлежит API-ключ.
GET /api/b2/groups/:id_or_key_or_handle
В качестве идентификатора можно указать числовой ID, ключ или читаемый идентификатор группы.
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
Ответ содержит группу в массиве groups с теми же полями, что и конечная точка для получения списка. Если у пользователя, которому принадлежит API-ключ, нет доступа к группе, запрос вернёт ошибку доступа.
Вебхуки
Пользовательский API работает по запросу: интеграция обращается к Loomio, когда ей нужно прочитать или изменить данные. Вебхук группы работает в обратном направлении. Loomio отправляет выбранные события группы на вашу конечную точку по мере их возникновения, поэтому интеграции не нужно регулярно опрашивать REST API.
Вебхуки настраиваются отдельно для каждой группы. Для этого нужны права администратора группы. Управлять ими можно через интерфейс Loomio:
- Откройте группу.
- Откройте меню группы и выберите Интеграция чата.
- Добавьте интеграцию с форматом данных, который принимает ваша конечная точка. Для конечной точки общего назначения используйте формат Mattermost/Markdown.
- Введите название и URL назначения.
- Выберите события, которые Loomio должна отправлять автоматически.
- Сохраните интеграцию и нажмите Тестовое соединение, чтобы отправить тестовое сообщение.
Используйте HTTPS-адрес назначения с URL, который трудно угадать. Loomio требует, чтобы адрес назначения был публичным, и блокирует запросы к локальным или частным сетевым адресам.
Агенты и другие интеграции также могут управлять вебхуками через описанные ниже эндпоинты чат-интеграций с авторизацией Bearer. Ресурс называется chatbots для совместимости с чат-интеграциями Loomio, но также используется для обычных исходящих вебхуков.
Список вебхуков
Возвращает интеграции чата, настроенные для группы. Пользователь, которому принадлежит API-ключ, должен быть администратором этой группы. Ответ содержит URL назначения, поэтому его нельзя показывать обычным участникам группы.
GET /api/b2/chatbots?group_id=123
curl -H 'Authorization: Bearer YOUR_API_KEY' 'https://www.loomio.com/api/b2/chatbots?group_id=123'
Ответ содержит массив chatbots со следующими полями:
| Поле | Описание |
|---|---|
id |
ID интеграции для обновления и удаления |
group_id |
Группа, в которой происходят события |
name |
Название интеграции для администраторов |
kind |
webhook для исходящего вебхука или matrix для интеграции с Matrix |
webhook_kind |
Формат данных: markdown, slack, discord, microsoft или webex |
server |
URL назначения |
event_kinds |
События, отправляемые автоматически |
notification_only |
Содержат ли сообщения только заголовок уведомления |
Создать вебхук
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
Владелец ключа API должен быть администратором группы group_id. Перед сохранением проверяется, что URL назначения общедоступен.
Обновить вебхук
PATCH /api/b2/chatbots/:id
Передайте поля, которые нужно изменить. Изменение group_id не позволяет перенести вебхук в другую группу.
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
Проверить адрес назначения вебхука
Отправьте тестовое сообщение в формате Markdown на адрес назначения до или после сохранения настроек.
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
Удалить вебхук
DELETE /api/b2/chatbots/:id
curl -X DELETE -H 'Authorization: Bearer YOUR_API_KEY' https://www.loomio.com/api/b2/chatbots/456
После удаления настроек новые сообщения доставляться не будут. Содержимое группы Loomio сохранится.
Типы событий
Вебхук может получать события следующих типов:
| Событие | Когда отправляется |
|---|---|
new_discussion |
Начато обсуждение |
discussion_edited |
Обсуждение изменено |
new_comment |
Создан комментарий |
poll_created |
Начат опрос |
poll_edited |
Опрос изменён |
poll_closing_soon |
Скоро закончится срок голосования |
poll_expired |
Закончился срок голосования |
poll_closed_by_user |
Пользователь закрыл опрос вручную |
poll_reopened |
Опрос открыт повторно |
outcome_created |
Опубликовано заключение |
outcome_updated |
Заключение обновлено |
outcome_review_due |
Наступил срок пересмотра заключения |
stance_created |
Подан голос |
stance_updated |
Голос изменён |
Вебхук относится к одной группе и получает выбранные события из неё. Пользователи также могут выбрать интеграцию при публикации или отправке некоторых уведомлений, даже если соответствующее автоматическое событие не выбрано.
Доставка по HTTP
Loomio отправляет асинхронный HTTP-запрос POST на настроенный URL со следующим заголовком:
Content-Type: application/json; charset=utf-8
Время ожидания ответа — пять секунд. Ответ 2xx, включая 204 No Content, считается успешным. Получателям вебхуков следует быстро отвечать на запросы, выполнять длительные задачи асинхронно и учитывать возможность повторной доставки или доставки не по порядку.
Сейчас Loomio не добавляет подпись вебхука, заголовок с общим секретом, ID события или ID доставки. Считайте полный URL назначения секретом и не публикуйте его. Если принимающий сервис поддерживает такую возможность, добавьте в URL токен, который невозможно угадать. Если вам нужна стабильная машиночитаемая схема событий или доставка с подписью, используйте вебхук как уведомление об изменении, а актуальные записи получайте через Пользовательский API с аутентификацией.
Форматы данных
Данные вебхуков предназначены для отображения сообщений в чат-сервисах. Они не содержат полные записи Loomio. Ссылки в сообщении указывают на соответствующее содержимое Loomio. Если интеграции нужны структурированные актуальные данные, она может запросить их через Пользовательский API.
| Формат интеграции | Основные поля JSON |
|---|---|
| Mattermost/Markdown | text, icon_url, username |
| Slack | text |
| Discord | content, не более примерно 1 900 символов |
| Microsoft Teams | @type, @context, themeColor, text, sections |
| Webex | markdown |
Например, сообщение в общем формате Markdown имеет следующую структуру:
{
"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"
}
Точный текст сообщения зависит от события, языка группы, настройки отправки только заголовка уведомления и версии Loomio. Используйте документированные поля верхнего уровня выбранного формата. Не разбирайте текст сообщения по словам.
Поиск
Ищите обсуждения, комментарии, опросы, голоса и заключения, доступные владельцу ключа API. В результаты входит общедоступное содержимое, даже если пользователь не состоит в группе. Доступ к закрытому содержимому определяется обычными правилами видимости темы.
GET /api/b2/search
Параметры
| Название | Описание |
|---|---|
query |
Поисковый текст. Поддерживаются точные и приблизительные совпадения |
group_id |
Ограничить результаты одной доступной группой |
org_id |
Ограничить результаты доступной родительской группой и её доступными подгруппами. Для прямых обсуждений используйте 0 |
type |
Ограничить результаты одним типом: Discussion, Comment, Poll, Stance или Outcome |
types |
Список типов результатов через запятую |
tag |
Ограничить результаты темами с этим тегом |
author_id |
Ограничить результаты содержимым одного автора. Без query возвращается его недавняя доступная активность |
order |
Укажите authored_at_desc, чтобы упорядочить совпадения по времени публикации |
curl -H 'Authorization: Bearer YOUR_API_KEY' 'https://www.loomio.com/api/b2/search?query=quarterly+planning&type=Discussion'
Ответ содержит массив search_results. Каждая запись указывает найденный объект и его доступный контекст. Среди полей — searchable_type, searchable_id, highlight, group_id, group_name, discussion_key, poll_key, author_id, author_name, authored_at и tags. Поля, которые не относятся к результату, имеют значение null.
Отчёт об участии
Возвращает те же сводные данные об активности, что и отчёт Loomio об участии.
GET /api/b2/reports
Параметры
| Название | Описание |
|---|---|
section |
Раздел отчёта: base, users или countries. Для активности отдельных пользователей укажите users |
group_scope |
custom или my. Устаревшее значение all обрабатывается как my, поскольку ключи Пользовательского API не дают доступ ко всему экземпляру Loomio |
group_ids |
ID групп через запятую при group_scope=custom. ID групп, в которых владелец ключа API не состоит, игнорируются |
start_month |
Первый месяц периода в формате YYYY-MM. По умолчанию — месяц 12 месяцев назад |
end_month |
Последний месяц периода в формате YYYY-MM. По умолчанию — текущий месяц |
interval |
Интервал для раздела base: day, week, month или year |
member_type |
Укажите delegate вместе с section=users, чтобы получить данные только действующих делегатов |
Пользователь считается делегатом, если он является действующим делегатом хотя бы в одной выбранной группе. Его показатели суммируются по всем выбранным группам. Данные делегата возвращаются, даже если все показатели активности равны нулю. Они охватывают темы, комментарии, опросы, голоса, заключения и реакции; это не показатели участия в голосовании. Данные пользователей также содержат число назначенных, поданных и пропущенных бюллетеней в открытых голосованиях. Анонимные опросы исключаются из всех показателей голосования отдельных пользователей. Значение all_votes_cast равно true, только если был назначен хотя бы один бюллетень и все назначенные бюллетени были поданы.
API применяет те же правила видимости групп, что и отчёт в Loomio. Ключ Пользовательского API не позволяет получить данные отчёта по группам, к которым у его владельца нет доступа.
Пример
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'
Массив users содержит полные записи об активности:
{
"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
}
]
}
Создать обсуждение
Создайте обсуждение от имени пользователя, которому принадлежит ключ API.
POST /api/b2/discussions
Параметры
| Имя | Описание |
|---|---|
group_id |
Группа, в которой будет создана тема |
title |
Название темы, обязательное поле |
description |
Описание темы, необязательное поле |
description_format |
md или html, необязательное поле, по умолчанию md |
recipient_audience |
group или null. Если указано group, вся группа получит уведомление о новой теме |
recipient_user_ids |
Массив идентификаторов пользователей, которых нужно уведомить или пригласить в тему |
recipient_emails |
Массив адресов электронной почты людей, которых нужно пригласить в тему |
recipient_message |
Сообщение для приглашения по электронной почте |
Пример
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
Получить обсуждение
Получите обсуждение по числовому идентификатору или строковому ключу.
GET /api/b2/discussions/:id
Пример
curl -H 'Authorization: Bearer YOUR_API_KEY' https://www.loomio.com/api/b2/discussions/abc123
Получить список обсуждений
Получите список обсуждений группы, доступных пользователю, которому принадлежит ключ API. Если группа общедоступна, человек, не состоящий в ней, может получить список её общедоступных обсуждений. Закрытые обсуждения доступны только тем, кто может читать их в Loomio.
GET /api/b2/discussions
Параметры
| Имя | Описание |
|---|---|
group_id |
Целое число, обязательное поле. Идентификатор группы, обсуждения которой нужно получить |
status |
Строка, необязательное поле, по умолчанию open. Значения: open, closed, all |
limit |
Целое число, необязательное поле, по умолчанию 50. Размер страницы |
offset |
Целое число, необязательное поле, по умолчанию 0. Смещение для постраничного вывода |
Для совместимости по-прежнему можно использовать per и from вместо limit и offset.
Пример
curl -H 'Authorization: Bearer YOUR_API_KEY' 'https://www.loomio.com/api/b2/discussions?group_id=123'
Получить список тем
Получите список тем обсуждений и голосований, доступных пользователю, которому принадлежит ключ API. Темы упорядочены по времени последней активности. Идентификатор темы — её topic_id.
GET /api/b2/threads
Параметры
| Имя | Описание |
|---|---|
limit |
Целое число, необязательное поле, по умолчанию 50. Размер страницы |
offset |
Целое число, необязательное поле, по умолчанию 0. Смещение для постраничного вывода |
Пример
curl -H 'Authorization: Bearer YOUR_API_KEY' 'https://www.loomio.com/api/b2/threads?limit=50&offset=0'
Прочитать тему
Получите тему, упорядоченный список её событий или полный доступный вам документ в формате Markdown.
GET /api/b2/threads/:topic_id
GET /api/b2/threads/:topic_id/items
GET /api/b2/threads/:topic_id/markdown
Пример
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
Конечная точка items возвращает упорядоченный список событий, включая доступные комментарии, голосования, голоса и итоги. Конечная точка markdown возвращает всю доступную тему одним документом в формате Markdown. Причины голосования включаются, только если они доступны пользователю, которому принадлежит ключ API.
Для всех конечных точек тем действуют те же права доступа, что и в интерфейсе Loomio. Ключ API не даёт доступ к теме, которую пользователь обычно не может открыть.
Редактировать обсуждение
Редактируйте обсуждение от имени пользователя, которому принадлежит ключ API. Действуют те же права доступа, что и в Loomio: пользователь должен иметь право редактировать это обсуждение.
PATCH /api/b2/discussions/:id
Параметры
| Имя | Описание |
|---|---|
title |
Новое название |
description |
Новое описание |
description_format |
md или html, необязательное поле, по умолчанию md |
recipient_audience |
group или null. Если указано group, вся группа получит уведомление об изменении |
recipient_user_ids |
Массив идентификаторов пользователей, которых нужно уведомить или пригласить в тему |
recipient_emails |
Массив адресов электронной почты людей, которых нужно пригласить в тему |
recipient_message |
Сообщение для приглашения по электронной почте |
Пример
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
Удалить обсуждение без удаления записи
Удалите обсуждение от имени пользователя, которому принадлежит ключ API. Обсуждение будет помечено как удалённое, но его запись сохранится.
DELETE /api/b2/discussions/:id
Пример
curl -H 'Authorization: Bearer YOUR_API_KEY' -X DELETE https://www.loomio.com/api/b2/discussions/123
Создать комментарий
Создайте комментарий в обсуждении от имени пользователя, которому принадлежит ключ API.
POST /api/b2/comments
Параметры
| Имя | Описание |
|---|---|
discussion_id |
Целое число, обязательное поле. Идентификатор обсуждения, в котором нужно оставить комментарий |
body |
Текст комментария, обязателен, если не добавлено вложение |
body_format |
md или html, необязательное поле, по умолчанию md |
Пример
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
Редактировать комментарий
Редактируйте комментарий от имени пользователя, которому принадлежит ключ API. Действуют те же права доступа, что и в Loomio: пользователь должен иметь право редактировать этот комментарий.
PATCH /api/b2/comments/:id
Параметры
| Имя | Описание |
|---|---|
body |
Новый текст комментария |
body_format |
md или html, необязательное поле, по умолчанию md |
Пример
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
Удалить комментарий без удаления записи
Удалите комментарий от имени пользователя, которому принадлежит ключ API. Комментарий будет помечен как удалённый, его текст скрыт, а запись сохранится.
DELETE /api/b2/comments/:id
Пример
curl -H 'Authorization: Bearer YOUR_API_KEY' -X DELETE https://www.loomio.com/api/b2/comments/123
Создать голосование
Создайте голосование от имени пользователя, которому принадлежит ключ API.
POST /api/b2/polls
Параметры
| Название | Описание |
|---|---|
group_id |
Целое число, необязательно, по умолчанию null. ID группы, в которой будет создано голосование. Если передан discussion_id, значение group_id игнорируется |
discussion_id |
Целое число, необязательно, по умолчанию null. ID обсуждения, в которое нужно добавить голосование |
title |
Строка, обязательно. Название голосования |
poll_type |
Строка, обязательно. Значения: proposal, poll, count, score, ranked_choice, meeting, dot_vote |
details |
Строка, необязательно. Текст голосования |
details_format |
Строка, необязательно, по умолчанию md. Значения: md или html |
options |
Массив строк. Если poll_type — proposal, допустимые значения: agree, disagree, abstain, block. Если poll_type — meeting, укажите даты или дату и время в формате ISO 8601. Для остальных типов голосования подходит любая строка |
closing_at |
Строка в формате ISO 8601 или null, по умолчанию null. Пример: 2026-09-01T12:00:00Z. Если значение равно null, голосовать нельзя, а голосование считается черновиком |
specified_voters_only |
Логическое значение, необязательно, по умолчанию false. Если true, голосовать могут только указанные люди. Если false, приглашение проголосовать получат все участники группы |
hide_results |
Строка, необязательно, по умолчанию off. Значения: off, until_vote, until_closed |
shuffle_options |
Логическое значение, по умолчанию false. Показывать варианты голосующим в случайном порядке |
anonymous |
Логическое значение, необязательно, по умолчанию false. Скрывать личности голосующих |
recipient_audience |
group или null, необязательно, по умолчанию null. Если group, уведомление получит вся группа |
notify_on_closing_soon |
Строка, необязательно, по умолчанию nobody. Значения: nobody, author, undecided_voters, voters |
recipient_user_ids |
Массив ID пользователей, которых нужно уведомить или пригласить |
recipient_emails |
Массив адресов электронной почты людей, которых нужно пригласить проголосовать |
recipient_message |
Сообщение для приглашения по электронной почте |
notify_recipients |
Логическое значение, по умолчанию false. Если false, люди будут добавлены без уведомлений. Если true, все приглашённые в этом запросе получат уведомление по электронной почте |
Пример
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
Получить голосование
Получите голосование по числовому ID или строковому ключу.
GET /api/b2/polls/:id
Пример
curl -H 'Authorization: Bearer YOUR_API_KEY' https://www.loomio.com/api/b2/polls/abc123
Список голосований
Получите список голосований группы, доступных пользователю, которому принадлежит ключ API. В публичной группе человек без членства может получить список публичных голосований. Закрытые голосования доступны только тем, кто может просматривать их в Loomio. Ответ содержит текущее заключение по каждому доступному голосованию, поэтому с помощью status=closed можно получить список предложений, по которым принято решение.
GET /api/b2/polls
Параметры
| Название | Описание |
|---|---|
group_id |
Целое число, обязательно. ID группы, голосования которой нужно перечислить |
status |
Строка, необязательно, по умолчанию active. Значения: active, closed, all |
limit |
Целое число, необязательно, по умолчанию 50. Размер страницы |
offset |
Целое число, необязательно, по умолчанию 0. Смещение для постраничного вывода |
Для совместимости по-прежнему можно использовать per и from вместо limit и offset.
Пример
curl -H 'Authorization: Bearer YOUR_API_KEY' 'https://www.loomio.com/api/b2/polls?group_id=123'
Изменить голосование
Измените голосование от имени пользователя, которому принадлежит ключ API. Действуют те же права доступа, что и в Loomio: пользователь должен иметь право изменять это голосование.
PATCH /api/b2/polls/:id
Параметры
| Название | Описание |
|---|---|
title |
Новое название |
details |
Новый текст голосования |
details_format |
md или html, необязательно, по умолчанию md |
options |
Новые названия вариантов. В зависимости от состояния голосования изменение вариантов может повлиять на уже поданные голоса |
closing_at |
Строка в формате ISO 8601 или null |
recipient_audience |
group или null. Если group, уведомление получит вся группа |
recipient_user_ids |
Массив ID пользователей, которых нужно уведомить или пригласить |
recipient_emails |
Массив адресов электронной почты людей, которых нужно пригласить проголосовать |
recipient_message |
Сообщение для приглашения по электронной почте |
Пример
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
Скрыть голосование
Скройте голосование от имени пользователя, которому принадлежит ключ API. Голосование будет помечено как удалённое, но его запись сохранится.
DELETE /api/b2/polls/:id
Пример
curl -H 'Authorization: Bearer YOUR_API_KEY' -X DELETE https://www.loomio.com/api/b2/polls/123
Список участников групп
Получите список участников групп, доступный пользователю, которому принадлежит ключ API. Участники группы могут видеть имена, ID, должности и роли других участников. Адрес электронной почты доступен только для собственной учётной записи пользователя или администратору группы.
GET /api/b2/memberships
Параметры
| Название | Описание |
|---|---|
group_id |
Целое число, обязательно. ID группы, участников которой нужно перечислить |
Пример
curl -H 'Authorization: Bearer YOUR_API_KEY' 'https://www.loomio.com/api/b2/memberships?group_id=123'
Управление участниками группы
Отправьте список адресов электронной почты. Владельцы новых адресов получат приглашение в группу. В отличие от просмотра списка участников, для этой операции нужны права администратора группы.
POST /api/b2/memberships
Параметры
| Название | Описание |
|---|---|
group_id |
Целое число, обязательно. ID группы, составом которой нужно управлять |
emails |
Массив строк, обязательно. Адреса электронной почты людей, которых нужно пригласить в группу |
remove_absent |
Логическое значение. Если true, из группы будут удалены все, чьих адресов электронной почты нет в списке |
Пример
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
Если передать remove_absent=1, из группы будут удалены все участники, не включённые в список. Так можно случайно удалить из вашей группы всех участников.
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
Ответ содержит объект {added_emails: ["person@added.com"], removed_emails: ["person@removed.com"]}.