Poll Pixie API
Create polls from your own code, read live totals and download every vote. JSON over HTTPS, one API key per account. Included with Poll Pixie Pro ( a month).
Quick start
- Get Pro, then open your dashboard and choose Create API key. The key starts with
ppk_and is shown once. - Send it in the
Authorizationheader:Authorization: Bearer ppk_... - Call
https://api.pollpixie.com/v1/...from your server. Keep the key secret: never put it in a web page.
curl https://api.pollpixie.com/v1/polls \
-H "Authorization: Bearer $POLLPIXIE_KEY"
Limits
- 1,000 requests a day per account, reset at 00:00 UTC. Every answer carries
X-RateLimit-LimitandX-RateLimit-Remaining; over the limit you get429. - Polls made through the API follow your plan like any other poll: up to 10,000 votes each on Pro.
- If Pro ends, the key pauses (
403) and works again when Pro is back. Making a new key retires the old one.
Endpoints
GET /v1/polls
Your polls, newest first. Optional ?limit= from 1 to 100 (default 50).
{ "polls": [ { "pollId": "114c854e-...", "shortLink": "114c854e", "title": "Lunch?",
"totalVotes": 42, "optionCount": 3, "createdAt": "2026-10-30T16:00:00.000Z",
"expiresAt": null, "isExpired": false, "visibility": "private" } ], "count": 1 }
POST /v1/polls
Create a poll. Body fields: title (3 to 200 characters, required), options (2 to 50 strings of up to 100 characters, required), and optionally description, allowMultipleChoice (true/false), expiresInHours (1 to 8760; leave out for no end), visibility ("public" lists it on Discover, default "private").
curl -X POST https://api.pollpixie.com/v1/polls \
-H "Authorization: Bearer $POLLPIXIE_KEY" -H "Content-Type: application/json" \
-d '{"title":"Where should we eat?","options":["Pizza","Tacos","Sushi"],"expiresInHours":24}'
{ "pollId": "9f1c...", "shortLink": "9f1c2a7b", "shareUrl": "https://pollpixie.com/p/9f1c2a7b",
"resultsUrl": "https://pollpixie.com/p/9f1c2a7b/results",
"embedCode": "<iframe src=\"https://pollpixie.com/embed/9f1c2a7b\" ...></iframe>",
"title": "Where should we eat?", "options": [ { "id": "opt1", "text": "Pizza" }, ... ],
"expiresAt": "2026-10-31T16:00:00.000Z", "createdAt": "2026-10-30T16:00:00.000Z" }
GET /v1/polls/{id}
One of your polls with live totals. {id} is the pollId or the shortLink. Includes options[].votes, options[].percentage, totalVotes, voteLimit, isFull, isExpired and eventPassUntil.
GET /v1/polls/{id}/votes
Every vote, 2,000 per page. Pass the nextCursor you got back as ?cursor= until it is null. Survey polls also return name, email and phone. Voter IP addresses are never returned.
{ "pollId": "9f1c...", "title": "Where should we eat?", "survey": false, "totalVotes": 2,
"options": [ { "id": "opt1", "text": "Pizza", "votes": 1 }, ... ],
"votes": [ { "votedAt": "2026-10-30T16:05:11.201Z", "options": ["Pizza"] }, ... ],
"nextCursor": null }
Errors
| Status | Meaning |
|---|---|
| 400 | The body or a parameter is invalid; error says which. |
| 401 | Missing, wrong or revoked key. |
| 403 | The account is not on Pro ("code": "API_NEEDS_PRO"). |
| 404 | No such endpoint, or the poll is not in your account. |
| 429 | Daily limit reached. Try again after 00:00 UTC. |
Voting stays on poll pages and embeds, so every vote goes through the same one-vote-per-voter check. Questions or need more requests: support@pollpixie.com.