Invites
Invite and manage voting event collaborators.
Endpoints
| Method | Path | Scope | Description |
|---|---|---|---|
GET | /voting-events/:idOrCode/invites | read | List every official invite. |
POST | /voting-events/:idOrCode/invites | write | Invite up to 200 emails to one role. |
POST | /voting-events/:idOrCode/invites/:id/revoke | write | Revoke an invite. |
DELETE | /voting-events/:idOrCode/invites/:id | write | Delete an invite. |
Limits
| Limit | Amount |
|---|---|
| Emails in one create request | 200 |
| Official invites per event (managers, polling officers, and observers, including revoked) | 2,000 |
The list returns every official invite in one page, newest first, so nextCursor is always null.
A create request that would pass the event cap fails with 422 validation_error and creates nothing. Delete revoked invites to free their slots. You can't create invites after the event ends.
Create request fields
| Field | Type | Required | Description |
|---|---|---|---|
emails | string array | Yes | 1 to 200 email addresses. |
role | manager, polling_officer, or observer | Yes | Role to grant. |
Repeats and emails that already hold the same role are skipped.
Create example
curl -X POST "https://api.pepvote.com/voting-events/BOARD26/invites" \
-H "Authorization: Bearer $PEPVOTE_API_KEY" -H "User-Agent: my-app/1.0" \
-H "Content-Type: application/json" \
-d '{"emails":["amina@example.com","omar@example.com"],"role":"observer"}'{
"data": {
"invitedCount": 1,
"skippedEmails": [
"omar@example.com"
],
"invites": [
{
"id": "j57invite01",
"votingEventId": "j57event01",
"email": "amina@example.com",
"role": "observer",
"status": "pending",
"accepted": false,
"createdAt": 1776900500000
}
]
}
}Revoke example
curl -X POST "https://api.pepvote.com/voting-events/BOARD26/invites/j57invite01/revoke" \
-H "Authorization: Bearer $PEPVOTE_API_KEY" -H "User-Agent: my-app/1.0"{
"data": {
"id": "j57invite01",
"votingEventId": "j57event01",
"email": "amina@example.com",
"role": "observer",
"status": "revoked",
"accepted": false,
"createdAt": 1776900500000
}
}Delete example
curl -X DELETE "https://api.pepvote.com/voting-events/BOARD26/invites/j57invite01" \
-H "Authorization: Bearer $PEPVOTE_API_KEY" -H "User-Agent: my-app/1.0"Delete is queued and returns 202. The invite may still appear in the list for a moment.
{
"data": {
"id": "j57invite01",
"deletion": "queued"
}
}Was this helpful?
Last updated October 16, 2026