New to InviziPoll
What anonymous means here, and how to ship your first poll in under ten minutes.
Answers stay ciphertext on our servers — these guides show you exactly how. Written and maintained by the team that builds it, for poll authors, workspace owners, and developers.
Documentation surfaces index with live article counts by section.
Verify, don't trust — primary sources
Start here
Pick the role you're in today. Each path is ordered — finish it and you'll have a working, verifiable poll.
What anonymous means here, and how to ship your first poll in under ten minutes.
Roles, SSO, provisioning and folder permissions for a workspace you can hand over.
Client-side encryption, key wrapping, and what ciphertext we can and cannot see.
Browse
Security & architecture
Every response is sealed in the respondent's browser against a per-poll public key. The server stores the sealed blob and nothing else — no plaintext, no identity, no IP-linked record.
// runs in the respondent's browser — nothing leaves in plaintext
const pollKey = await fetchPollPublicKey(pollId); // ML-KEM-768
const { ciphertext, sharedSecret } = await mlKem768.encapsulate(pollKey);
const sealed = await aesGcm.seal({
key: sharedSecret,
data: encode({ q1: "unlikely", q2: "…" }),
aad: pollId,
});
await post("/v1/responses", {
pollId,
kem: ciphertext, // encapsulated secret
payload: sealed, // opaque blob · size varies
identity: null, // never persisted
});Still stuck