Pagination
Read list responses and use cursors to page through them.
Response envelopes
A single resource uses a data envelope:
{
"data": {
"id": "j57...",
"name": "Amina Bello"
}
}A list response includes data and nextCursor:
{
"data": [
{
"id": "j57...",
"name": "Amina Bello"
}
],
"nextCursor": "eyJ..."
}When nextCursor is null, there are no more results.
Success status codes
| Status | When |
|---|---|
200 | Read or update succeeded. |
201 | Create succeeded. The body holds the new record. |
202 | Delete of a position, candidate, group, or voter was queued. The row disappears within seconds. |
204 | Delete of a voting event, invite, or webhook endpoint succeeded. No body. |
302 | Result PDF export redirects to a signed download URL. |
Pagination
Use limit and cursor only on endpoints that list voting events, voters, or votes. limit defaults to 50 and has a maximum of 200. Pass the previous nextCursor unchanged as cursor to get the next page.
GET /voting-events/BOARD26/voters?limit=100&cursor=eyJ...
Do not construct, parse, or modify a cursor. Unknown query parameters return 400 bad_request.
Other lists return every row in one response and do not accept limit or cursor. They are bounded by the per-event caps: 100 positions, 1,000 candidates, 200 groups, and 1,000 sponsors. Use search and the filter parameters on those endpoints to narrow large lists.
Last updated September 6, 2026