Pepvote Support Center
Pepvote API

Voting events

Read, update, and inspect voting events.

Use a voting event's short code in event URLs. All endpoints except health require a bearer API key.

Endpoints

MethodPathScopeDescription
GET/voting-eventsreadList accessible voting events.
GET/voting-events/:codereadGet one voting event.
PATCH/voting-events/:codewriteUpdate allowed event settings.
GET/voting-events/:code/statsreadGet event counts and turnout.

List query parameters

NameTypeRequiredDescription
limitintegerNoPage size from 1 to 200. Default: 50.
cursorstringNoCursor from nextCursor.
typeelection or pollNoFilter by event type.
statusunscheduled, upcoming, live, or endedNoFilter by lifecycle.

Update request fields

Send at least one field. Send null to clear desc, startsAt, endsAt, or resultDisplayLimit.

FieldTypeRequiredDescription
titlestringNo1 to 200 characters.
descstring or nullNoUp to 5,000 characters.
startsAtinteger or nullNoUnix milliseconds.
endsAtinteger or nullNoUnix milliseconds.
liveResultbooleanNoShow results while voting is live.
publishedResultbooleanNoPublish results.
voterCanRegisterbooleanNoAllow public voter registration.
candidateCanRegisterbooleanNoAllow public candidate registration.
resultDisplayLimitinteger or nullNoMinimum 1.

Example

curl -X PATCH "https://api.pepvote.com/voting-events/BOARD26" \
  -H "Authorization: Bearer $PEPVOTE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title":"Board election 2026","liveResult":true}'
{
  "data": {
    "id": "j57event01", "code": "BOARD26", "type": "election", "title": "Board election 2026",
    "desc": null, "startsAt": 1777003200000, "endsAt": 1777089600000, "status": "upcoming",
    "locked": false, "liveResult": true, "publishedResult": false, "resultDisplayLimit": null,
    "groupMode": false, "votingFormat": "single", "shuffleCandidates": false, "multiStepVoting": false,
    "canContestMultiplePositions": false, "enableWeightedVoting": false, "enablePayToVote": false,
    "enablePayToRegisterCandidate": false,
    "registration": { "voterCanRegister": false, "voterPublicRegistrationClosesAt": null, "candidateCanRegister": false, "candidatePublicRegistrationClosesAt": null, "requireVoterId": false, "voterIdValidationLogic": null, "voterIdValidatingValue": null },
    "aliases": { "votingEvent": null, "votingCenter": null, "position": null, "group": null, "positionGroup": null, "candidateGroup": null, "voterGroup": null, "candidate": null, "voter": null, "voterId": null, "sponsor": null, "weight": null },
    "plan": { "name": "Starter", "maxVoters": 500 }, "logoUrl": null, "createdAt": 1776900000000
  }
}

The stats response has votingEventId, positionCount, candidateCount, approvedCandidateCount, sponsorCount, groupCount, voterCount, approvedVoterCount, pendingVoterCount, votedVoterCount, votesCast, votesConfirmed, and turnoutPercent.

Was this helpful?

Last updated September 5, 2026

On this page