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

  1. Get Pro, then open your dashboard and choose Create API key. The key starts with ppk_ and is shown once.
  2. Send it in the Authorization header: Authorization: Bearer ppk_...
  3. 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

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

StatusMeaning
400The body or a parameter is invalid; error says which.
401Missing, wrong or revoked key.
403The account is not on Pro ("code": "API_NEEDS_PRO").
404No such endpoint, or the poll is not in your account.
429Daily 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.