Loomio API /api/b2

/api/b2 was released in October 2023. It will replace the previous /api/b1

Your API key is:
This user account is a human. You may want to setup a bot account for API requests.

Select a group for example commands

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

group_idgroup where thread will exist
titletitle of the thread (required)
descriptioncontext for the thread (optional)
description_formatstring. either 'md' or 'html' (optional, default: md)
recipient_audiencestring 'group' or null. if 'group' whole group will be notified about the new thread (optional)
recipient_user_idsarray of user ids to notify or invite to the thread (optional)
recipient_emailsarray of email addresses of people to invite to the thread (optional)
recipient_messagestring. message to include in the email invitation (optional)

show discussion

Fetch a discussion using the discussion id (an integer) or key (a string) using the following request format

example

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

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-02-23T16:00:00Z", "recipient_emails":[""], "api_key": ""}' https://www.loomio.com/api/b2/polls

params

group_idinteger. optional. default: null. id of group for poll. If discussion_id is passed, group_id is ignored.
discussion_idinteger. optional. default: null. id of discussion thread to add this poll to.
titlestring. required. title of the poll
poll_typestring. required. values: 'proposal', 'poll', 'count', 'score', 'ranked_choice', 'meeting', 'dot_vote'
detailsstring. optional. the body text of the poll
details_formatstring. optional. default: md. values: 'md' or 'html'.
optionsarray of strings. If poll_type is proposal then valid values are 'agree', 'disagree', 'abstain', 'block'. If poll_type is meeting then provide iso8601 date or datetime strings. For all other poll_types, any string is valid.
closing_atiso8601 string or null. default: null. Specify when the poll closes with an iso8601 string such as '2026-02-23T16:00:00Z'. If null then voting is disabled and poll is considered "Work in progress".
specified_voters_onlyboolean. optional. default: false. true: only specified people can vote, false: everyone in the group will be invited to vote
hide_resultsstring. optional. default: 'off'. values: 'off', 'until_vote', 'until_closed'. allow voters to see the results before the poll has closed
shuffle_optionsboolean. default false. display options to voters in random order.
anonymousboolean. optional. default: false. true: hide identities of voters.
recipient_audiencestring 'group' or null. optional. default: null. if 'group' whole group will be notified about the new thread.
notify_on_closing_soonstring. optional. default: 'nobody'. values: 'nobody', 'author', 'undecided_voters' or 'voters'. specify the who to send a reminder notification to, 24 hours before the poll closes.
recipient_user_idsarray of user ids to notify or invite
recipient_emailsarray of email addresses of people to invite to vote
recipient_messagemessage to include in the email invitation
notify_recipientsboolean. default false. false: add people to a poll without sending notifications. 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 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 then 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

emailsarray of strings. required. email addresses of people to invite into the group
remove_absentboolean. If true, remove anyone from the group who's email is not present in the list

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