qrvote API for developers and agents
qrvote has a small JSON API. Anyone can read a contest, survey or hunt and, when the organizer made them public, its results. With the organizer key, software (including AI agents) can do what the dashboard does. Creating, voting, answering, collecting and reporting are for people in a browser.
Authentication
There are no accounts or OAuth. Each contest, survey or hunt has one organizer key, found in its organizer link (https://qrvote.org/c/<slug>/admin#key=<key>). Send it as Authorization: Bearer <key>. It controls only that one contest; treat it like a password. Details: https://qrvote.org/auth.md
Endpoints
| Method | Path | Auth | What it does |
|---|---|---|---|
GET | /api/health | none | Service status |
GET | /api/c/{slug} | none | A contest, survey or hunt as the public sees it |
GET | /api/c/{slug}/results | none, or organizer key if private | Tallies, survey totals or a hunt leaderboard |
GET | /api/admin/{slug} | organizer key | Everything on the dashboard |
PATCH | /api/admin/{slug} | organizer key | Change settings; {"closed": true} ends voting |
POST | /api/admin/{slug}/entrants | organizer key | Add entries or checkpoints |
GET | /api/admin/{slug}/export.csv | organizer key | Votes, responses or players as CSV |
GET | /api/admin/{slug}/responses | organizer key | Survey responses |
Discovery
OpenAPI 3.1: https://qrvote.org/openapi.json. API catalog (RFC 9727): https://qrvote.org/.well-known/api-catalog. Status: https://qrvote.org/api/health. A plain summary for agents: https://qrvote.org/llms.txt. Every public page is also available as markdown with Accept: text/markdown.
Limits and fair use
Votes, survey answers and hunt finds need a real browser, a Turnstile check and a person at the event, and automated clients are refused. Please don’t try to work around that. Organizer endpoints act only on the contest the key belongs to.
Example
curl -H "Authorization: Bearer $QRVOTE_KEY" https://qrvote.org/api/admin/scarecrow-contest-2026-ab12