Loomio API /api/b2

/api/b2 is the user-oriented API for integrations with Loomio. It uses the API key of a user account, and every action is performed as that user.

Group operations use the permissions of the API-key user. If the user can access or administer a group in Loomio, the same access applies through this API.

Your API key is: ``

This user account is not marked as "bot". This means it will be issued votes and expected to participate in decision. You may want to set up a bot account for API requests. Bot accounts are not issued votes or considered when calculating poll results.

Select a group for example commands:

No adminable groups found

Create Discussion

Example

curl -X POST -H 'Content-Type: application/json' -d '{"group_id": 123, "title":"example thread", "recipient_emails":[""], "api_key": ""}' https://www.loomio.com/api/b2/discussions

Params

Name Description
group_id Group where thread will exist
title Title of the thread, required
description Context for the thread, optional
description_format Either md or html, optional, default md
recipient_audience group or null. If group, the whole group will be notified about the new thread
recipient_user_ids Array of user IDs to notify or invite to the thread
recipient_emails Array of email addresses of people to invite to the thread
recipient_message Message to include in the email invitation

Show Discussion

Fetch a discussion using the discussion ID, an integer, or key, a string.

Example

curl https://www.loomio.com/api/b2/discussions/abc123?api_key=

List Discussions

List discussions in a group. The caller must be a member of the group or a global admin.

Example

https://www.loomio.com/api/b2/discussions?api_key=&group_id=123

curl 'https://www.loomio.com/api/b2/discussions?api_key=&group_id=123'

Params

Name Description
group_id Integer, required. ID of the group to list discussions from
status String, optional, default open. Values: open, closed, all
limit Integer, optional, default 50. Page size
offset Integer, optional, default 0. Offset for pagination

Legacy: per and from are accepted as aliases for limit and offset and will continue to work.

Edit Discussion

Edit a discussion as the API-key user. The same permissions apply as in Loomio: the user must be allowed to edit that discussion.

Example

curl -X PATCH -H 'Content-Type: application/json' -d '{"title":"updated thread title", "description":"updated context", "description_format":"md", "api_key": ""}' https://www.loomio.com/api/b2/discussions/123

Params

Name Description
title Updated title
description Updated context
description_format Either md or html, optional, default md
recipient_audience group or null. If group, the whole group will be notified about the edit
recipient_user_ids Array of user IDs to notify or invite to the thread
recipient_emails Array of email addresses of people to invite to the thread
recipient_message Message to include in the email invitation

Soft Delete Discussion

Soft delete a discussion as the API-key user. This discards the discussion and keeps the discussion record in place.

Example

curl -X DELETE -H 'Content-Type: application/json' -d '{"api_key": ""}' https://www.loomio.com/api/b2/discussions/123

Create Comment

Create a comment in a discussion as the API-key user.

Example

curl -X POST -H 'Content-Type: application/json' -d '{"discussion_id": 123, "body":"example comment", "body_format":"md", "api_key": ""}' https://www.loomio.com/api/b2/comments

Params

Name Description
discussion_id Integer, required. ID of the discussion to comment on
body Comment body, required unless an attachment is provided
body_format Either md or html, optional, default md

Edit Comment

Edit a comment as the API-key user. The same permissions apply as in Loomio: the user must be allowed to edit that comment.

Example

curl -X PATCH -H 'Content-Type: application/json' -d '{"body":"updated comment", "body_format":"md", "api_key": ""}' https://www.loomio.com/api/b2/comments/123

Params

Name Description
body Updated comment body
body_format Either md or html, optional, default md

Soft Delete Comment

Soft delete a comment as the API-key user. This discards the comment, hides its body, and keeps the comment record in place.

Example

curl -X DELETE -H 'Content-Type: application/json' -d '{"api_key": ""}' https://www.loomio.com/api/b2/comments/123

Create Poll

Example

curl -X POST -H 'Content-Type: application/json' -d '{"group_id": 123, "title":"example poll", "poll_type": "proposal", "options": ["agree", "disagree"], "closing_at": "2026-07-08T16:00:00Z", "recipient_emails":[""], "api_key": ""}' https://www.loomio.com/api/b2/polls

Params

Name Description
group_id Integer, optional, default null. ID of group for poll. If discussion_id is passed, group_id is ignored
discussion_id Integer, optional, default null. ID of discussion thread to add this poll to
title String, required. Title of the poll
poll_type String, required. Values: proposal, poll, count, score, ranked_choice, meeting, dot_vote
details String, optional. The body text of the poll
details_format String, optional, default md. Values: md or html
options Array of strings. If poll_type is proposal, valid values are agree, disagree, abstain, block. If poll_type is meeting, provide ISO 8601 date or datetime strings. For all other poll types, any string is valid
closing_at ISO 8601 string or null, default null. Example: 2026-07-08T16:00:00Z. If null, voting is disabled and poll is considered work in progress
specified_voters_only Boolean, optional, default false. If true, only specified people can vote. If false, everyone in the group will be invited to vote
hide_results String, optional, default off. Values: off, until_vote, until_closed
shuffle_options Boolean, default false. Display options to voters in random order
anonymous Boolean, optional, default false. Hide identities of voters
recipient_audience group or null, optional, default null. If group, the whole group will be notified
notify_on_closing_soon String, optional, default nobody. Values: nobody, author, undecided_voters, voters
recipient_user_ids Array of user IDs to notify or invite
recipient_emails Array of email addresses of people to invite to vote
recipient_message Message to include in the email invitation
notify_recipients Boolean, default false. If false, add people without sending notifications. If true, everyone invited in this request will get a notification email

Show Poll

Fetch a poll using the poll ID, an integer, or key, a string.

Example

curl https://www.loomio.com/api/b2/polls/abc123?api_key=

List Polls

List polls in a group. The caller must be a member of the group or a global admin. The response includes each poll's current outcome, so you can use status=closed to list decided proposals.

Example

https://www.loomio.com/api/b2/polls?api_key=&group_id=123

curl 'https://www.loomio.com/api/b2/polls?api_key=&group_id=123'

Params

Name Description
group_id Integer, required. ID of the group to list polls from
status String, optional, default active. Values: active, closed, all
limit Integer, optional, default 50. Page size
offset Integer, optional, default 0. Offset for pagination

Legacy: per and from are accepted as aliases for limit and offset and will continue to work.

Edit Poll

Edit a poll as the API-key user. The same permissions apply as in Loomio: the user must be allowed to edit that poll.

Example

curl -X PATCH -H 'Content-Type: application/json' -d '{"title":"updated poll title", "details":"updated details", "details_format":"md", "api_key": ""}' https://www.loomio.com/api/b2/polls/123

Params

Name Description
title Updated title
details Updated poll details
details_format Either md or html, optional, default md
options Updated option names. Changing options may affect existing votes depending on poll state
closing_at ISO 8601 string or null
recipient_audience group or null. If group, the whole group will be notified
recipient_user_ids Array of user IDs to notify or invite
recipient_emails Array of email addresses of people to invite to vote
recipient_message Message to include in the email invitation

Soft Delete Poll

Soft delete a poll as the API-key user. This discards the poll and keeps the poll record in place.

Example

curl -X DELETE -H 'Content-Type: application/json' -d '{"api_key": ""}' https://www.loomio.com/api/b2/polls/123

List Memberships

https://www.loomio.com/api/b2/memberships?api_key=&group_id=123

curl https://www.loomio.com/api/b2/memberships?api_key=&group_id=123

Manage Memberships

Send a list of emails. It will invite all the new email addresses to the group.

curl -X POST -H 'Content-Type: application/json' -d '{"group_id": 123, "emails":["person@example.com"], "api_key": ""}' https://www.loomio.com/api/b2/memberships

If you pass remove_absent=1, any members of the group who were not included in the list will be removed from the group. Be careful, you could remove everyone in your group.

curl -X POST -H 'Content-Type: application/json' -d '{"group_id": 123, "emails":["person@example.com"], "remove_absent": 1, "api_key": ""}' https://www.loomio.com/api/b2/memberships

Params

Name Description
emails Array of strings, required. Email addresses of people to invite into the group
remove_absent Boolean. If true, remove anyone from the group whose email is not present in the list

This returns an object with {added_emails: ["person@added.com"], removed_emails: ["person@removed.com"]}.