Results
Read tallies for an event or one position.
Endpoints
| Method | Path | Scope | Description |
|---|---|---|---|
GET | /voting-events/:idOrCode/results | read | Get results for all positions. |
GET | /voting-events/:idOrCode/results/:positionId | read | Get results for one position. |
These endpoints do not accept request bodies.
Example
curl "https://api.pepvote.com/voting-events/BOARD26/results/j57position01" \
-H "Authorization: Bearer $PEPVOTE_API_KEY" -H "User-Agent: my-app/1.0"{
"data": {
"id": "j57position01",
"title": "Board chair",
"desc": null,
"groupId": null,
"votingMethod": "plurality",
"tallyRule": {
"type": "plurality_total"
},
"totalCandidates": 2,
"totalVotes": 184,
"totalWeightedVotes": null,
"totalVotedVoters": null,
"totalWeightedVotedVoters": null,
"rankedChoiceCount": null,
"tallyComputedAt": 1777089700000,
"tallyRecountPending": false,
"tallyTrace": null,
"referendum": null,
"candidates": [
{
"id": "j57candidate01",
"name": "Amina Bello",
"status": "approved",
"groupId": null,
"referendumRole": null,
"avatarUrl": null,
"votesWon": 112,
"weightedVotesWon": null,
"percentageVotesWon": 60.9,
"weightedPercentageVotesWon": null,
"percentageVotersWon": null,
"weightedPercentageVotersWon": null
}
]
}
}The all-results response has votingEventId and positions.
Shares of votes and shares of voters
Every candidate has percentageVotesWon: its share of every vote on the
position. A position's shares add up to 100.
Plurality and approval positions that allow more than one pick also have
percentageVotersWon: the share of voters who picked the candidate, out of
totalVotedVoters. On a pick-2 position, a candidate every voter picked has
percentageVotesWon 50 and percentageVotersWon 100, so the voter shares
can add up to more than 100. Use them for rules such as "a winner needs more
than half of the voters".
On a weighted event, weightedPercentageVotersWon and
totalWeightedVotedVoters do the same with voter weights, counting each
voter's weight once.
The voter fields are null on every other position, and on results filtered
by date, because voters are counted for the whole event, not per time range.
The event's resultSettings.percentageBase says which share the result page
shows by default.
Last updated October 22, 2026