Документація користувацького 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
Ідентифікатором може бути числовий ідентифікатор, ключ або псевдонім групи.
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 |
Ідентифікатор інтеграції для оновлення та видалення |
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-адреси призначення як до облікових даних, не оприлюднюйте її та додайте до неї токен, який неможливо вгадати, якщо сервіс-отримувач це підтримує. Якщо потрібна стабільна машиночитана схема подій або підписана доставка, використовуйте вебхук як сповіщення про зміни й отримуйте актуальні записи через Користувацький 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 |
Ідентифікатори груп, розділені комами, коли 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 застосовує ті самі правила видимості груп, що й звіт у застосунку. Ключ 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
Перегляд обговорення
Отримайте обговорення за його 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'
Список тем
Отримайте список тем з обговореннями та опитуваннями, доступних користувачу, якому належить ключ API, упорядкований за останньою активністю. 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. Учасники групи можуть переглядати імена, ідентифікатори, посади та ролі інших учасників. Адреси електронної пошти включаються лише для власного облікового запису користувача з ключем API або якщо цей користувач є адміністратором групи.
GET /api/b2/memberships
Параметри
| Назва | Опис |
|---|---|
group_id |
Ціле число, обов’язкове. Ідентифікатор групи, список учасників якої потрібно отримати |
Приклад
curl -H 'Authorization: Bearer YOUR_API_KEY' 'https://www.loomio.com/api/b2/memberships?group_id=123'
Керування учасниками групи
Надішліть список адрес електронної пошти. На всі нові адреси буде надіслано запрошення до групи. На відміну від отримання списку учасників групи, ця операція потребує прав адміністратора групи.
POST /api/b2/memberships
Параметри
| Назва | Опис |
|---|---|
group_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"]}.