Pepvote API
Pagination and errors
Read list responses, use cursors, and handle API errors.
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 webhook endpoint succeeded. No body. |
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.
Error envelope
All API errors use this shape:
{
"error": {
"code": "validation_error",
"message": "name is required.",
"details": { "field": "name" }
}
}details appears only when Pepvote has useful structured information.
Error codes
| HTTP status | Code | Meaning |
|---|---|---|
| 400 | bad_request | The URL, query parameter, header, or HTTP method is invalid. |
| 401 | unauthorized | The API key is missing, invalid, revoked, or expired. |
| 403 | insufficient_scope | The key does not have the required scope. |
| 403 | forbidden | The key owner cannot perform this action. This can include a plan-gated feature. |
| 404 | not_found | The route or resource does not exist, or is not visible to the key owner. |
| 409 | conflict | A duplicate or already-used value conflicts with an existing resource. |
| 422 | validation_error | The body is invalid, a field is unknown, or an update has no fields. |
| 422 | idempotency_mismatch | An idempotency key was reused with a different request. |
| 422 | plan_limit | The action exceeds a plan limit. |
| 429 | rate_limited | The key has reached its request limit. Check Retry-After. |
| 500 | internal | Pepvote could not complete the request. Retry with backoff. |
Was this helpful?
Last updated September 5, 2026