Concepts
- A VoteCollection is one voting session — usually one meeting, one ratification cycle, or one election. It groups one or more
Voterecords. - A Vote is a single question — “Elect Treasurer”, “Approve Article 4 amendment”. A VoteCollection can have many votes voted on together.
- Voting can be secret (no audit trail of who voted what) or public (each ballot recorded against the voter).
Step 1 — Create the vote collection
unit determines eligibility — only active members in that unit (and any sub-units) can vote.
The collection is created in DRAFT. You can add questions and edit eligibility while in DRAFT; once published, the question set is locked.
Response:
Step 2 — Add questions (Votes)
questionType:
Add as many questions as the meeting needs. They appear in the order you create them.
Step 3 — Publish (members get notified)
Once questions are in place, publish:Step 4 — Open voting
When the meeting starts (or the calendar reachesdateOpen automatically):
POST /api/v1/votes/{id}/cast (per question).
The GET /api/v1/has_live_votes endpoint returns true for any user with at least one open VoteCollection they haven’t yet voted in — your member app can use this to surface “you have unfinished votes” badges.
Step 5 — Close voting and tally
WhendateClose passes (or you close it manually):
Step 6 — Export results
For board minutes, federation reporting, or external compliance, export the full result set as CSV:Step 7 — Archive
After the results are circulated and the board minutes are signed:GET /api/v1/vote_collections) but accessible via ?status=ARCHIVED. Results remain queryable indefinitely.
Cloning for the next cycle
To run “the same election” next year, clone instead of recreating:Common gotchas
Eligible-voter count is lower than expected
Eligible-voter count is lower than expected
The eligibility filter is
User.status == ACTIVE AND member of (unit OR child-units) AND isFeeActive. Lapsed members (fee expired) are excluded. To include them, transition them to ACTIVE first via the fee renewal flow.A voter says they didn't get the notification
A voter says they didn't get the notification
Notifications respect the member’s notification preferences. If they’ve disabled push + email for “governance” notifications, they won’t be alerted — but they can still cast a vote via the member dashboard while the collection is OPEN. Voters with no email at all are listed in
eligibleVoterCount but cannot be reached.Can a member change their vote after casting?
Can a member change their vote after casting?
Yes, while the collection is
OPEN. Re-cast via POST /api/v1/votes/{id}/cast; the latest choice wins. Once CLOSED, votes are locked.The vote needs a quorum — how do I enforce it?
The vote needs a quorum — how do I enforce it?
There’s no native quorum gate. Run the close manually and check
turnout against your bylaws before treating the result as binding. For meetings that may not reach quorum, extend dateClose to give more time, or proxy votes (which Orgo doesn’t model — capture as OPEN_TEXT questions and reconcile out-of-band).How are ties broken?
How are ties broken?
Orgo reports raw counts — tie-breaking is governance-level (board chair casts deciding vote, coin flip, runoff election). For a runoff, clone the collection with just the tied candidates and run again.
What to do next
- Permissions — only
HR_LOCALand above can create vote collections - Run a board election — the admin-side documentation
- Handle webhooks — react to vote results being finalized

