The PollIt API
Everything the app does goes through a JSON API that you can use too. No key is needed to make or answer polls; an account's API key lets scripts see the polls of that account.
Keys and headers
X-Admin-Key: …– the organizer key you get when you make a poll (it is also in the organizer link)X-Participant-Keys: id.key,…– keys of answers, to change or withdraw themX-Poll-Pass: …– for polls with a password: the token fromPOST /api/polls/{id}/unlockX-Browser-Key: …– any random string of 16-64 letters, for polls that take one answer per browserAuthorization: Bearer …– an API key (Account > API keys) or a session
Make a poll
curl -X POST https://poll-it-quick.com/api/polls -H "Content-Type: application/json" -d '{
"poll": {
"type": "date", "title": "Team lunch", "tz": "Europe/Prague",
"options": [ { "start": "2026-11-12T12:00", "end": "2026-11-12T13:00" }, { "date": "2026-11-13" } ],
"settings": { "mode": "ynm", "deadline": "2026-11-10T18:00:00Z" }
}
}'
# -> { "id": "…", "key": "<organizer key>", "poll": {…} }Types: date, grid, choice, rank, score, signup, booking, open. Options: a label (and image, note, capacity), or a date, or start/end as YYYY-MM-DDTHH:mm in the poll's tz. grid takes "grid": { days | weekdays, from, to, step }; booking takes "booking": { duration, weekly, … }.
Read and answer
curl https://poll-it-quick.com/api/polls/{id} # the poll, answers, comments (as its settings allow)
curl https://poll-it-quick.com/api/polls/{id}?v=12 # { "unchanged": true } when nothing changed since version 12
curl -X POST https://poll-it-quick.com/api/polls/{id}/participants -H "Content-Type: application/json" \
-d '{ "name": "Ann", "answers": { "sel": { "o1": "y", "o2": "m" } } }'
# answers: date/choice/signup { sel: { optionId: "y" | "m" } }, rank { order: [ids] }, score { scores: { id: n } },
# grid { cells, maybe } (base64url bits), booking { slot: startMs }, open { text }
curl -X PATCH https://poll-it-quick.com/api/polls/{id}/participants/{pid} -H "X-Participant-Keys: {pid}.{key}" ...
curl -X DELETE https://poll-it-quick.com/api/polls/{id}/participants/{pid} -H "X-Participant-Keys: {pid}.{key}"
curl -X POST https://poll-it-quick.com/api/polls/{id}/comments -d '{ "name": "Ann", "text": "…" }'Organizer
PATCH /api/polls/{id} { "poll": {…}, "password": "…" | null, "private": { "email", "webhook" } }
POST /api/polls/{id}/close | /reopen
POST /api/polls/{id}/final { "options": ["o2"], "note": "…", "notify": true }
GET /api/polls/{id}/final.ics
GET /api/polls/{id}/invites · POST /api/polls/{id}/invites { "invites": [{ "name", "email" }] }
GET /api/polls/{id}/events (activity log)
POST /api/polls/{id}/pin (six-digit join code)
DELETE /api/polls/{id}
GET /api/me/polls (with an API key: the account's polls)Webhooks
A poll with a webhook address gets a POST for every answer, change, comment, new option and decision:
POST <your address>
X-PollIt-Event: vote
X-PollIt-Signature: sha256=<HMAC-SHA256 of the body with the poll's webhook secret, hex>
{ "event": "vote", "at": "…", "poll": { "id", "title", "type", "url" }, "participant": { "id", "name", "answers" }, "text": "Ann answered." }Events: vote, update, withdraw, comment, option, final, closed, reopened, booking, rebooking, cancel. The secret is in the organizer tools.
Limits
Requests are limited per internet address (for example 60 new polls an hour and 120 answers in 10 minutes). Errors come as { "error": "…", "key": "…" } with an HTTP status.