Документація користувацького API Loomio
/api/b2 — користувацький API для інтеграцій із Loomio. Він використовує ключ API облікового запису користувача. Усі дії виконуються від імені цього користувача.
Дії з групами залежать від членства та прав доступу користувача, якому належить ключ API. Статус адміністратора інстанції не розширює доступ ключа API до груп або їхнього вмісту. Для адміністрування інстанції використовуйте Server 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. Loomio надсилає вибрані події групи на вашу кінцеву точку, щойно вони відбуваються. Тому інтеграції не потрібно регулярно опитувати REST API.
Вебхуки налаштовують окремо для кожної групи. Для цього потрібні права адміністратора групи. Керувати ними можна через інтерфейс Loomio:
- Відкрийте групу.
- Відкрийте меню групи та виберіть Інтеграції чату.
- Додайте інтеграцію, формат даних якої підтримує ваша кінцева точка. Для кінцевої точки загального призначення використовуйте формат Mattermost/Markdown.
- Введіть назву та URL-адресу призначення.
- Виберіть події, які Loomio має надсилати автоматично.
- Збережіть інтеграцію та натисніть Тестове підключення, щоб надіслати тестове повідомлення.
Використовуйте HTTPS-адресу призначення з URL-адресою, яку неможливо вгадати. Loomio вимагає, щоб адреса призначення вказувала на публічну IP-адресу, і блокує запити до локальних або приватних мережевих адрес.
Агенти та інші інтеграції також можуть керувати веб-хуками через описані нижче кінцеві точки чат-ботів з автентифікацією 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 |
Ідентифікатор інтеграції для оновлення та видалення |
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 не додає підпис вебхука, заголовок зі спільним секретом, ідентифікатор події або ідентифікатор доставки. Вважайте повний 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 користувача не надають доступу до всього екземпляра |
group_ids |
Ідентифікатори груп, розділені комами, коли задано group_scope=custom. Ідентифікатори груп, учасником яких не є користувач 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 |
Масив ID користувачів, яких потрібно сповістити або запросити до теми |
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
Отримання обговорення
Отримайте обговорення за його числовим ID або текстовим ключем.
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 |
Ціле число, обов’язкове поле. 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'
Список тем
Отримайте список доступних користувачу тем обговорень і опитувань, упорядкований за останньою активністю. ID теми — це її 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 |
Масив ID користувачів, яких потрібно сповістити або запросити до теми |
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 |
Ціле число, обов’язкове поле. 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"]}.