Casts a fan’s vote for one of a poll’s options. A fan has one vote in each poll, whichever collection they found it in, and only their first vote counts. Send a new Idempotency-Key with each vote, so a retry is never counted twice.
Your organisation's API key, supplied by Dizplai. Send it on every request. It isn't a secret, so it can ship in your app: what a fan does is protected by the fan's token.
Authorization
string
header
required
The fan's token from your own login, sent as Authorization: Bearer <token>: a signed-in fan's or a guest's. Dizplai checks it against your login's details, agreed when you're set up, and a guest's token carries the guest claim agreed at the same time. Needed to vote, upload, send a message, and read the fan's own vote or messages.
Headers
Idempotency-Key
string<uuid>
required
Required. A new UUID for each vote. If the connection drops, send the vote again with the same key: it's never counted twice.
Path Parameters
poll_id
string<uuid>
required
The poll's ID, from a list of experiences or polls.
A poll's ID, a UUID.
Example:
"0192fa7b-8d41-7bbc-9b58-02311fc6ef8e"
Body
application/json
A fan's vote, the option they chose.
option_id
string<uuid>
required
One of the poll's options.
Example:
"01a1f97a-b538-778f-bad7-0c1c35ff701c"
Response
Received, not yet counted, with a snapshot of the poll's results that includes the vote. Show the snapshot straight away as a static view: it doesn't update, and a read straight after the vote may not include it yet. For live results, keep reading the poll. A later vote from the same fan also answers 202, with its own snapshot, but is never counted, so retrying after a lost response, with the same Idempotency-Key, is safe. To show the fan's choice on any device, use Get the fan's vote. If the poll closes before a retry, the retry answers not_open, and Get the fan's vote shows whether the first attempt counted.
The vote, received but not yet counted, with a snapshot of the poll's results that includes it.
option_id
string<uuid>
required
The option the fan voted for, as sent.
Example:
"01a1f97a-b538-778f-bad7-0c1c35ff701c"
results
Withheld · object
required
The poll's latest results with this vote added, for a static view straight after the vote. It doesn't update: for live results, keep reading the poll. withheld when fans may not see results yet, as results_visibility says.
Withheld
Counted
Another state
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Dizplai API","colors":{"primary":"#A00066","light":"#FF10A8","dark":"#DC008C"},"logo":{"light":"https://mintcdn.com/dizplai-77024896/lmZzH95OOSORiYIT/logo/light.png?fit=max\u0026auto=format\u0026n=lmZzH95OOSORiYIT\u0026q=85\u0026s=7ba40c5f8a08a90459fbaced5737c13c","dark":"https://mintcdn.com/dizplai-77024896/lmZzH95OOSORiYIT/logo/dark.png?fit=max\u0026auto=format\u0026n=lmZzH95OOSORiYIT\u0026q=85\u0026s=8286d2098664f6af36a26a60667c4e0a"},"favicon":{"light":"https://mintcdn.com/dizplai-77024896/lmZzH95OOSORiYIT/favicon/light.png?fit=max\u0026auto=format\u0026n=lmZzH95OOSORiYIT\u0026q=85\u0026s=8f0db8c7cd1f3902780d7961ec3d1f13","dark":"https://mintcdn.com/dizplai-77024896/lmZzH95OOSORiYIT/favicon/dark.png?fit=max\u0026auto=format\u0026n=lmZzH95OOSORiYIT\u0026q=85\u0026s=5a704a691408bfbcc241ceb17472db24"},"appearance":{"default":"dark"},"background":{"decoration":"gradient","color":{"light":"#FAF4FF","dark":"#11061B"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/dizplai"}},"fonts":{"heading":{"family":"Outfit"},"body":{"family":"Outfit"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"dizplai-77024896","hasAudioNarration":false,"actualSubdomain":"dizplai-77024896","customDomains":["developer.dizplai.com"],"gitSource":{"type":"github","owner":"dizplai","repo":"dizplai-platform","deployBranch":"api-docs-site","contentDirectory":"api-docs","isPrivate":true,"mountPath":"","label":"","_id":"6adb4bbb93b56c4f04aae929"},"feedback":{"thumbs":false},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6af588fa55c1ebcca521ce1b","clientVersion":"0.0.4143","searchFilterCounts":[{"language":"default","tag":"API reference","count":15},{"language":"default","tag":"Experiences API","count":12},{"language":"default","tag":"Guides","count":6},{"language":"default","tag":"Experiences","count":5},{"language":"default","tag":"Fan Voices","count":5},{"language":"default","tag":"Polls","count":4},{"language":"default","tag":"Using the API","count":3},{"language":"default","tag":"Introduction","count":2},{"language":"default","tag":"Collections","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"privacy":{"consentBanner":{"enabled":true}},"googleFontsInlined":true},"customCss":[],"page":{"pagePath":"api-reference/polls/cast-a-vote","slug":"/api-reference/polls/cast-a-vote","pageMetadata":{"title":"Cast a vote","description":"Casts a fan's vote for one of a poll's options. A fan has one vote in each poll, whichever collection they found it in, and only their first vote counts. Send a new Idempotency-Key with each vote, so a retry is never counted twice.","deprecated":null,"version":null,"openapi":"/experiences/api-reference/experiences.openapi.yaml post /polls/{poll_id}/votes","href":"/api-reference/polls/cast-a-vote","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Casts a fan’s vote for one of a poll’s options. A fan has one vote in each poll, whichever collection they found it in, and only their first vote counts. Send a new Idempotency-Key with each vote, so a retry is never counted twice.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Cast a vote","description":"Casts a fan's vote for one of a poll's options. A fan has one vote in each poll, whichever collection they found it in, and only their first vote counts. Send a new Idempotency-Key with each vote, so a retry is never counted twice.","deprecated":null,"version":null,"openapi":"/experiences/api-reference/experiences.openapi.yaml post /polls/{poll_id}/votes","href":"/api-reference/polls/cast-a-vote","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Polls"],"operationId":"castPollVote","summary":"Cast a vote","description":"Casts a fan's vote for one of a poll's options. A fan has one vote in each poll, whichever collection they found it in, and only their first vote counts. Send a new Idempotency-Key with each vote, so a retry is never counted twice.","security":["f8d2c678-9728-443e-a3fe-c70aec75bfd5"],"parameters":["b3fc0037-62f5-41bf-b61d-d29f1f9e6e06"],"requestBody":"721f5403-b772-4e2c-8af4-7d4dc7c59502","responses":{"202":"1023878d-9ec0-4e16-a684-c0eaa968e57e","400":"072b4765-1c45-4a7e-8704-c2316f020ee9","401":"8ecff5d4-837a-435e-8ac1-0cfe6502034f","403":"dc54a808-2240-43c3-83b0-a36dab97adf6","404":"5a9b8586-ca24-4b9b-99db-0d9c9625b0ae","429":"ad386533-41e2-437d-8928-1c64d886bb1c","503":"a29bd438-c52a-479c-a865-5e47a2bd43c7"},"method":"post","type":"path","servers":["8f572995-de18-42e6-9b79-a8b6680b8360"],"path":"/polls/{poll_id}/votes","baseUrlOptions":["https://api.dizplai.com/v1"],"title":"Cast a vote","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"b3fc0037-62f5-41bf-b61d-d29f1f9e6e06":{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","format":"uuid","isRequired":true,"description":"Required. A new UUID for each vote. If the connection drops, send the vote again with the same key: it's never counted twice.","uniqueKey":"","typeLabel":"string\u003cuuid>"},"example":"6d4e2a91-3c7b-4f05-8e1a-b29c5d7f0e63","description":"Required. A new UUID for each vote. If the connection drops, send the vote again with the same key: it's never counted twice."},"8fb8dbce-36a0-4a7c-9e24-a3379078d13b":{"name":"poll_id","in":"path","required":true,"description":"The poll's ID, from a list of experiences or polls.","schema":{"type":"string","description":"The poll's ID, from a list of experiences or polls.\nA poll's ID, a UUID.","format":"uuid","examples":["0192fa7b-8d41-7bbc-9b58-02311fc6ef8e"],"isRequired":true,"uniqueKey":"","typeLabel":"string\u003cuuid>"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["option_id"],"additionalProperties":false,"description":"A fan's vote, the option they chose.","properties":{"option_id":{"type":"string","description":"One of the poll's options.","format":"uuid","examples":["01a1f97a-b538-778f-bad7-0c1c35ff701c"],"isRequired":true,"uniqueKey":"option_id","typeLabel":"string\u003cuuid>"}},"title":"Poll vote","uniqueKey":"","typeLabel":"Poll vote · object"},"examples":{"example":{"title":"example","value":{"option_id":"01a1f97a-b538-778f-bad7-0c1c35ff701c"}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"1023878d-9ec0-4e16-a684-c0eaa968e57e":{"description":"Received, not yet counted, with a snapshot of the poll's results that includes the vote. Show the snapshot straight away as a static view: it doesn't update, and a read straight after the vote may not include it yet. For live results, keep reading the poll. A later vote from the same fan also answers 202, with its own snapshot, but is never counted, so retrying after a lost response, with the same Idempotency-Key, is safe. To show the fan's choice on any device, use Get the fan's vote. If the poll closes before a retry, the retry answers not_open, and Get the fan's vote shows whether the first attempt counted.","headers":{"x-request-id":{"description":"The request's ID. Quote it to support.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"title":"Vote received","type":"object","required":["option_id","results"],"description":"The vote, received but not yet counted, with a snapshot of the poll's results that includes it.","properties":{"option_id":{"type":"string","description":"The option the fan voted for, as sent.","format":"uuid","examples":["01a1f97a-b538-778f-bad7-0c1c35ff701c"],"isRequired":true,"uniqueKey":"option_id","typeLabel":"string\u003cuuid>"},"results":{"oneOf":[{"type":"object","title":"Withheld","description":"The poll's latest results with this vote added, for a static view straight after the vote. It doesn't update: for live results, keep reading the poll. withheld when fans may not see results yet, as results_visibility says.","required":["state"],"properties":{"state":{"type":"string","description":"What to show now. Treat a state you don't know as withheld: show no counts.","enum":["withheld"],"x-extensible-enum":["withheld","live","final"],"isRequired":true,"uniqueKey":"results.oneOf.0.state","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"results.oneOf.0","typeLabel":"Withheld · object"},{"type":"object","title":"Counted","description":"The poll's latest results with this vote added, for a static view straight after the vote. It doesn't update: for live results, keep reading the poll. withheld when fans may not see results yet, as results_visibility says.","required":["state","total_votes","options"],"properties":{"state":{"type":"string","description":"What to show now. Treat a state you don't know as withheld: show no counts.","enum":["live","final"],"x-extensible-enum":["withheld","live","final"],"isRequired":true,"uniqueKey":"results.oneOf.1.state","typeLabel":"enum\u003cstring>"},"total_votes":{"type":"integer","minimum":0,"description":"Fans who voted. Never null: 0 means no votes.","isRequired":true,"uniqueKey":"results.oneOf.1.total_votes","typeLabel":"integer"},"options":{"type":"array","description":"Every option, in the poll's order. Match option_id to the poll's options[].id for its label.","items":{"type":"object","required":["option_id","votes","percent"],"properties":{"option_id":{"type":"string","description":"An option's ID, what a fan's vote sends. Created with the option, opaque, and never reused, even if the option is removed before the poll goes live. Correcting an option's label keeps its ID.","format":"uuid","examples":["01a1f97a-b538-778f-bad7-0c1c35ff701c"],"isRequired":true,"uniqueKey":"results.oneOf.1.options.items.[INDEX].option_id","typeLabel":"string\u003cuuid>"},"votes":{"type":"integer","minimum":0,"description":"Votes counted. Never null: 0 means no votes.","isRequired":true,"uniqueKey":"results.oneOf.1.options.items.[INDEX].votes","typeLabel":"integer"},"percent":{"type":"number","minimum":0,"maximum":100,"description":"Of total_votes, 0 to 100, rounded to one decimal place, so they may not add up to exactly 100.","isRequired":true,"uniqueKey":"results.oneOf.1.options.items.[INDEX].percent","typeLabel":"number"}},"uniqueKey":"results.oneOf.1.options.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"results.oneOf.1.options","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"results.oneOf.1","typeLabel":"Counted · object"},{"type":"object","title":"Another state","description":"The poll's latest results with this vote added, for a static view straight after the vote. It doesn't update: for live results, keep reading the poll. withheld when fans may not see results yet, as results_visibility says.","required":["state"],"properties":{"state":{"type":"string","description":"What to show now. Treat a state you don't know as withheld: show no counts.","x-extensible-enum":["withheld","live","final"],"isRequired":true,"uniqueKey":"results.oneOf.2.state","typeLabel":"string"}},"isRequired":true,"uniqueKey":"results.oneOf.2","typeLabel":"Another state · object"}],"isRequired":true,"uniqueKey":"results","typeLabel":"Withheld · object | Counted · object | Another state · object"}},"uniqueKey":"","typeLabel":"Vote received · object"},"examples":{"visible":{"title":"visible","summary":"Results fans may see, with the vote added","value":{"option_id":"01a1f97a-b538-778f-bad7-0c1c35ff701c","results":{"state":"live","total_votes":4211,"options":[{"option_id":"01a1f97a-b538-778f-bad7-0c1c35ff701c","votes":2106,"percent":50},{"option_id":"01a1f97a-b5a7-7b5b-9458-203a658c1e8d","votes":1263,"percent":30},{"option_id":"01a1f97a-b5cc-7fcf-989c-56ebe53808c5","votes":842,"percent":20}]}}},"withheld":{"title":"withheld","summary":"Results withheld until votes stop","value":{"option_id":"01a1f97a-b538-778f-bad7-0c1c35ff701c","results":{"state":"withheld"}}}},"exampleType":"examples"}},"exampleType":"examples"},"072b4765-1c45-4a7e-8704-c2316f020ee9":{"description":"The body is invalid or has no Idempotency-Key (invalid_request), the option isn't one this experience has (unknown_option), or it isn't taking votes (not_open).","headers":{"x-request-id":{"description":"The request's ID. Quote it to support.","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"type":"object","required":["type","code","title","status","request_id"],"description":"What went wrong, in the same shape for every error: an RFC 9457 problem with a stable code. Act on code, which never changes meaning within a version, and on the HTTP status for a code you don't know. Quote request_id to support.","properties":{"type":{"type":"string","format":"uri-reference","description":"One URL per code: https://api.dizplai.com/problems/ followed by the code with hyphens, such as https://api.dizplai.com/problems/unknown-option for unknown_option.","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi-reference>"},"code":{"type":"string","x-extensible-enum":["invalid_request","unknown_option","not_open","media_not_accepted","invalid_upload","invalid_api_key","invalid_fan_token","forbidden","fan_blocked","sign_in_required","message_limit_reached","not_found","idempotency_conflict","rate_limited","unavailable"],"description":"More codes may be added: for one you don't know, act on the HTTP status.\n\n| code | Status | Retry? | Meaning |\n|---|---|---|---|\n| invalid_request | 400 | No | The body or a parameter is invalid, or a required header such as Idempotency-Key is missing. |\n| unknown_option | 400 | No; read the poll again | An option ID the poll doesn't have. |\n| not_open | 400 | No; read the experience again | The experience isn't taking votes or messages: it isn't live yet, or votes have stopped. |\n| media_not_accepted | 400 | No | The Fan Voice doesn't take this kind of message, or the file's type or size is outside the limits. |\n| invalid_upload | 400 | No; upload again | The upload_id is unknown, already used or another fan's, or the file was never uploaded or its type or size differs from what you asked for. |\n| invalid_api_key | 401 | No | A missing or invalid x-api-key. |\n| invalid_fan_token | 401 | Once, with a fresh token | A missing, invalid or expired fan token, or one from another organisation's login. It carries WWW-Authenticate. |\n| forbidden | 403 | No | Your API key isn't allowed to make this request. |\n| fan_blocked | 403 | No | The fan is blocked from this Fan Voice. |\n| sign_in_required | 403 | No; ask the fan to sign in | A guest on an experience that needs a signed-in fan, or a guest's voice note or photo. |\n| message_limit_reached | 403 | No | The fan has used up this Fan Voice's messages of this kind. |\n| not_found | 404 | No | Not found, or not yours. |\n| idempotency_conflict | 409 | No | An Idempotency-Key reused with a different body while it's kept: 24 hours, or 5 minutes for an upload. |\n| rate_limited | 429 | After Retry-After | Too many requests. |\n| unavailable | 503 | After Retry-After | Votes or messages can't be taken right now. |\n","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"title":{"type":"string","description":"A short title for the code, such as Not open. It doesn't change.","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"The HTTP status code.","minimum":400,"maximum":599,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"request_id":{"type":"string","description":"Matches the x-request-id response header.","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"detail":{"type":"string","description":"What went wrong, in plain English. It can change, so don't act on it.","uniqueKey":"detail","typeLabel":"string"},"errors":{"type":"array","description":"Field-level validation errors, with invalid_request.","items":{"type":"object","required":["pointer","message"],"properties":{"pointer":{"type":"string","description":"A JSON Pointer to the field.","isRequired":true,"uniqueKey":"errors.items.[INDEX].pointer","typeLabel":"string"},"message":{"type":"string","description":"What's wrong with that field.","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"invalid_request":{"title":"invalid_request","summary":"invalid_request","value":{"type":"https://api.dizplai.com/problems/invalid-request","code":"invalid_request","title":"Invalid request","status":400,"detail":"option_id is required.","request_id":"01JBX8P2R4T6V8X0Z2B4D6F8H0"}},"unknown_option":{"title":"unknown_option","summary":"unknown_option","value":{"type":"https://api.dizplai.com/problems/unknown-option","code":"unknown_option","title":"Unknown option","status":400,"detail":"01a1f97a-b538-7f26-8efa-04686cf52e39 isn't one of this poll's options.","request_id":"01JBX8P2R4T6V8X0Z2B4D6F8H0"}},"not_open":{"title":"not_open","summary":"not_open","value":{"type":"https://api.dizplai.com/problems/not-open","code":"not_open","title":"Not open","status":400,"detail":"Votes have stopped: this poll is closed.","request_id":"01JBX8P2R4T6V8X0Z2B4D6F8H0"}}},"exampleType":"examples"}},"exampleType":"examples"},"8ecff5d4-837a-435e-8ac1-0cfe6502034f":{"description":"A missing or invalid x-api-key (invalid_api_key), or a missing, invalid or expired fan token, or one from another organisation's login (invalid_fan_token). Only invalid_fan_token carries WWW-Authenticate: refresh the fan's token and retry once.","headers":{"x-request-id":{"description":"The request's ID. Quote it to support.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"With invalid_fan_token only: Bearer error=\"invalid_token\", with an error_description.","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"type":"object","required":["type","code","title","status","request_id"],"description":"What went wrong, in the same shape for every error: an RFC 9457 problem with a stable code. Act on code, which never changes meaning within a version, and on the HTTP status for a code you don't know. Quote request_id to support.","properties":{"type":{"type":"string","format":"uri-reference","description":"One URL per code: https://api.dizplai.com/problems/ followed by the code with hyphens, such as https://api.dizplai.com/problems/unknown-option for unknown_option.","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi-reference>"},"code":{"type":"string","x-extensible-enum":["invalid_request","unknown_option","not_open","media_not_accepted","invalid_upload","invalid_api_key","invalid_fan_token","forbidden","fan_blocked","sign_in_required","message_limit_reached","not_found","idempotency_conflict","rate_limited","unavailable"],"description":"More codes may be added: for one you don't know, act on the HTTP status.\n\n| code | Status | Retry? | Meaning |\n|---|---|---|---|\n| invalid_request | 400 | No | The body or a parameter is invalid, or a required header such as Idempotency-Key is missing. |\n| unknown_option | 400 | No; read the poll again | An option ID the poll doesn't have. |\n| not_open | 400 | No; read the experience again | The experience isn't taking votes or messages: it isn't live yet, or votes have stopped. |\n| media_not_accepted | 400 | No | The Fan Voice doesn't take this kind of message, or the file's type or size is outside the limits. |\n| invalid_upload | 400 | No; upload again | The upload_id is unknown, already used or another fan's, or the file was never uploaded or its type or size differs from what you asked for. |\n| invalid_api_key | 401 | No | A missing or invalid x-api-key. |\n| invalid_fan_token | 401 | Once, with a fresh token | A missing, invalid or expired fan token, or one from another organisation's login. It carries WWW-Authenticate. |\n| forbidden | 403 | No | Your API key isn't allowed to make this request. |\n| fan_blocked | 403 | No | The fan is blocked from this Fan Voice. |\n| sign_in_required | 403 | No; ask the fan to sign in | A guest on an experience that needs a signed-in fan, or a guest's voice note or photo. |\n| message_limit_reached | 403 | No | The fan has used up this Fan Voice's messages of this kind. |\n| not_found | 404 | No | Not found, or not yours. |\n| idempotency_conflict | 409 | No | An Idempotency-Key reused with a different body while it's kept: 24 hours, or 5 minutes for an upload. |\n| rate_limited | 429 | After Retry-After | Too many requests. |\n| unavailable | 503 | After Retry-After | Votes or messages can't be taken right now. |\n","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"title":{"type":"string","description":"A short title for the code, such as Not open. It doesn't change.","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"The HTTP status code.","minimum":400,"maximum":599,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"request_id":{"type":"string","description":"Matches the x-request-id response header.","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"detail":{"type":"string","description":"What went wrong, in plain English. It can change, so don't act on it.","uniqueKey":"detail","typeLabel":"string"},"errors":{"type":"array","description":"Field-level validation errors, with invalid_request.","items":{"type":"object","required":["pointer","message"],"properties":{"pointer":{"type":"string","description":"A JSON Pointer to the field.","isRequired":true,"uniqueKey":"errors.items.[INDEX].pointer","typeLabel":"string"},"message":{"type":"string","description":"What's wrong with that field.","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"invalid_fan_token":{"title":"invalid_fan_token","summary":"invalid_fan_token","value":{"type":"https://api.dizplai.com/problems/invalid-fan-token","code":"invalid_fan_token","title":"Invalid fan token","status":401,"detail":"The fan's token has expired.","request_id":"01JBX8P2R4T6V8X0Z2B4D6F8H0"}},"invalid_api_key":{"title":"invalid_api_key","summary":"invalid_api_key","value":{"type":"https://api.dizplai.com/problems/invalid-api-key","code":"invalid_api_key","title":"Invalid API key","status":401,"detail":"The x-api-key isn't recognised.","request_id":"01JBX8P2R4T6V8X0Z2B4D6F8H0"}}},"exampleType":"examples"}},"exampleType":"examples"},"dc54a808-2240-43c3-83b0-a36dab97adf6":{"description":"A guest on an experience that needs a signed-in fan (sign_in_required). Retrying won't help.","headers":{"x-request-id":{"description":"The request's ID. Quote it to support.","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"type":"object","required":["type","code","title","status","request_id"],"description":"What went wrong, in the same shape for every error: an RFC 9457 problem with a stable code. Act on code, which never changes meaning within a version, and on the HTTP status for a code you don't know. Quote request_id to support.","properties":{"type":{"type":"string","format":"uri-reference","description":"One URL per code: https://api.dizplai.com/problems/ followed by the code with hyphens, such as https://api.dizplai.com/problems/unknown-option for unknown_option.","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi-reference>"},"code":{"type":"string","x-extensible-enum":["invalid_request","unknown_option","not_open","media_not_accepted","invalid_upload","invalid_api_key","invalid_fan_token","forbidden","fan_blocked","sign_in_required","message_limit_reached","not_found","idempotency_conflict","rate_limited","unavailable"],"description":"More codes may be added: for one you don't know, act on the HTTP status.\n\n| code | Status | Retry? | Meaning |\n|---|---|---|---|\n| invalid_request | 400 | No | The body or a parameter is invalid, or a required header such as Idempotency-Key is missing. |\n| unknown_option | 400 | No; read the poll again | An option ID the poll doesn't have. |\n| not_open | 400 | No; read the experience again | The experience isn't taking votes or messages: it isn't live yet, or votes have stopped. |\n| media_not_accepted | 400 | No | The Fan Voice doesn't take this kind of message, or the file's type or size is outside the limits. |\n| invalid_upload | 400 | No; upload again | The upload_id is unknown, already used or another fan's, or the file was never uploaded or its type or size differs from what you asked for. |\n| invalid_api_key | 401 | No | A missing or invalid x-api-key. |\n| invalid_fan_token | 401 | Once, with a fresh token | A missing, invalid or expired fan token, or one from another organisation's login. It carries WWW-Authenticate. |\n| forbidden | 403 | No | Your API key isn't allowed to make this request. |\n| fan_blocked | 403 | No | The fan is blocked from this Fan Voice. |\n| sign_in_required | 403 | No; ask the fan to sign in | A guest on an experience that needs a signed-in fan, or a guest's voice note or photo. |\n| message_limit_reached | 403 | No | The fan has used up this Fan Voice's messages of this kind. |\n| not_found | 404 | No | Not found, or not yours. |\n| idempotency_conflict | 409 | No | An Idempotency-Key reused with a different body while it's kept: 24 hours, or 5 minutes for an upload. |\n| rate_limited | 429 | After Retry-After | Too many requests. |\n| unavailable | 503 | After Retry-After | Votes or messages can't be taken right now. |\n","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"title":{"type":"string","description":"A short title for the code, such as Not open. It doesn't change.","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"The HTTP status code.","minimum":400,"maximum":599,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"request_id":{"type":"string","description":"Matches the x-request-id response header.","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"detail":{"type":"string","description":"What went wrong, in plain English. It can change, so don't act on it.","uniqueKey":"detail","typeLabel":"string"},"errors":{"type":"array","description":"Field-level validation errors, with invalid_request.","items":{"type":"object","required":["pointer","message"],"properties":{"pointer":{"type":"string","description":"A JSON Pointer to the field.","isRequired":true,"uniqueKey":"errors.items.[INDEX].pointer","typeLabel":"string"},"message":{"type":"string","description":"What's wrong with that field.","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"sign_in_required":{"title":"sign_in_required","summary":"sign_in_required","value":{"type":"https://api.dizplai.com/problems/sign-in-required","code":"sign_in_required","title":"Sign-in required","status":403,"detail":"This poll needs a signed-in fan.","request_id":"01JBX8P2R4T6V8X0Z2B4D6F8H0"}}},"exampleType":"examples"}},"exampleType":"examples"},"5a9b8586-ca24-4b9b-99db-0d9c9625b0ae":{"description":"The poll doesn't exist, isn't yours, or was taken down or deleted (not_found).","headers":{"x-request-id":{"description":"The request's ID. Quote it to support.","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"type":"object","required":["type","code","title","status","request_id"],"description":"What went wrong, in the same shape for every error: an RFC 9457 problem with a stable code. Act on code, which never changes meaning within a version, and on the HTTP status for a code you don't know. Quote request_id to support.","properties":{"type":{"type":"string","format":"uri-reference","description":"One URL per code: https://api.dizplai.com/problems/ followed by the code with hyphens, such as https://api.dizplai.com/problems/unknown-option for unknown_option.","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi-reference>"},"code":{"type":"string","x-extensible-enum":["invalid_request","unknown_option","not_open","media_not_accepted","invalid_upload","invalid_api_key","invalid_fan_token","forbidden","fan_blocked","sign_in_required","message_limit_reached","not_found","idempotency_conflict","rate_limited","unavailable"],"description":"More codes may be added: for one you don't know, act on the HTTP status.\n\n| code | Status | Retry? | Meaning |\n|---|---|---|---|\n| invalid_request | 400 | No | The body or a parameter is invalid, or a required header such as Idempotency-Key is missing. |\n| unknown_option | 400 | No; read the poll again | An option ID the poll doesn't have. |\n| not_open | 400 | No; read the experience again | The experience isn't taking votes or messages: it isn't live yet, or votes have stopped. |\n| media_not_accepted | 400 | No | The Fan Voice doesn't take this kind of message, or the file's type or size is outside the limits. |\n| invalid_upload | 400 | No; upload again | The upload_id is unknown, already used or another fan's, or the file was never uploaded or its type or size differs from what you asked for. |\n| invalid_api_key | 401 | No | A missing or invalid x-api-key. |\n| invalid_fan_token | 401 | Once, with a fresh token | A missing, invalid or expired fan token, or one from another organisation's login. It carries WWW-Authenticate. |\n| forbidden | 403 | No | Your API key isn't allowed to make this request. |\n| fan_blocked | 403 | No | The fan is blocked from this Fan Voice. |\n| sign_in_required | 403 | No; ask the fan to sign in | A guest on an experience that needs a signed-in fan, or a guest's voice note or photo. |\n| message_limit_reached | 403 | No | The fan has used up this Fan Voice's messages of this kind. |\n| not_found | 404 | No | Not found, or not yours. |\n| idempotency_conflict | 409 | No | An Idempotency-Key reused with a different body while it's kept: 24 hours, or 5 minutes for an upload. |\n| rate_limited | 429 | After Retry-After | Too many requests. |\n| unavailable | 503 | After Retry-After | Votes or messages can't be taken right now. |\n","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"title":{"type":"string","description":"A short title for the code, such as Not open. It doesn't change.","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"The HTTP status code.","minimum":400,"maximum":599,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"request_id":{"type":"string","description":"Matches the x-request-id response header.","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"detail":{"type":"string","description":"What went wrong, in plain English. It can change, so don't act on it.","uniqueKey":"detail","typeLabel":"string"},"errors":{"type":"array","description":"Field-level validation errors, with invalid_request.","items":{"type":"object","required":["pointer","message"],"properties":{"pointer":{"type":"string","description":"A JSON Pointer to the field.","isRequired":true,"uniqueKey":"errors.items.[INDEX].pointer","typeLabel":"string"},"message":{"type":"string","description":"What's wrong with that field.","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"not_found":{"title":"not_found","summary":"not_found","value":{"type":"https://api.dizplai.com/problems/not-found","code":"not_found","title":"Not found","status":404,"detail":"No such poll.","request_id":"01JBX8P2R4T6V8X0Z2B4D6F8H0"}}},"exampleType":"examples"}},"exampleType":"examples"},"ad386533-41e2-437d-8928-1c64d886bb1c":{"description":"Too many requests (rate_limited). Wait the number of seconds in Retry-After, then retry.","headers":{"x-request-id":{"description":"The request's ID. Quote it to support.","schema":{"type":"string"}},"Retry-After":{"description":"How long to wait before retrying, as a whole number of seconds. Sent with every 429 and 503.","schema":{"type":"integer","minimum":0}}},"content":{"application/problem+json":{"schema":{"type":"object","required":["type","code","title","status","request_id"],"description":"What went wrong, in the same shape for every error: an RFC 9457 problem with a stable code. Act on code, which never changes meaning within a version, and on the HTTP status for a code you don't know. Quote request_id to support.","properties":{"type":{"type":"string","format":"uri-reference","description":"One URL per code: https://api.dizplai.com/problems/ followed by the code with hyphens, such as https://api.dizplai.com/problems/unknown-option for unknown_option.","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi-reference>"},"code":{"type":"string","x-extensible-enum":["invalid_request","unknown_option","not_open","media_not_accepted","invalid_upload","invalid_api_key","invalid_fan_token","forbidden","fan_blocked","sign_in_required","message_limit_reached","not_found","idempotency_conflict","rate_limited","unavailable"],"description":"More codes may be added: for one you don't know, act on the HTTP status.\n\n| code | Status | Retry? | Meaning |\n|---|---|---|---|\n| invalid_request | 400 | No | The body or a parameter is invalid, or a required header such as Idempotency-Key is missing. |\n| unknown_option | 400 | No; read the poll again | An option ID the poll doesn't have. |\n| not_open | 400 | No; read the experience again | The experience isn't taking votes or messages: it isn't live yet, or votes have stopped. |\n| media_not_accepted | 400 | No | The Fan Voice doesn't take this kind of message, or the file's type or size is outside the limits. |\n| invalid_upload | 400 | No; upload again | The upload_id is unknown, already used or another fan's, or the file was never uploaded or its type or size differs from what you asked for. |\n| invalid_api_key | 401 | No | A missing or invalid x-api-key. |\n| invalid_fan_token | 401 | Once, with a fresh token | A missing, invalid or expired fan token, or one from another organisation's login. It carries WWW-Authenticate. |\n| forbidden | 403 | No | Your API key isn't allowed to make this request. |\n| fan_blocked | 403 | No | The fan is blocked from this Fan Voice. |\n| sign_in_required | 403 | No; ask the fan to sign in | A guest on an experience that needs a signed-in fan, or a guest's voice note or photo. |\n| message_limit_reached | 403 | No | The fan has used up this Fan Voice's messages of this kind. |\n| not_found | 404 | No | Not found, or not yours. |\n| idempotency_conflict | 409 | No | An Idempotency-Key reused with a different body while it's kept: 24 hours, or 5 minutes for an upload. |\n| rate_limited | 429 | After Retry-After | Too many requests. |\n| unavailable | 503 | After Retry-After | Votes or messages can't be taken right now. |\n","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"title":{"type":"string","description":"A short title for the code, such as Not open. It doesn't change.","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"The HTTP status code.","minimum":400,"maximum":599,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"request_id":{"type":"string","description":"Matches the x-request-id response header.","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"detail":{"type":"string","description":"What went wrong, in plain English. It can change, so don't act on it.","uniqueKey":"detail","typeLabel":"string"},"errors":{"type":"array","description":"Field-level validation errors, with invalid_request.","items":{"type":"object","required":["pointer","message"],"properties":{"pointer":{"type":"string","description":"A JSON Pointer to the field.","isRequired":true,"uniqueKey":"errors.items.[INDEX].pointer","typeLabel":"string"},"message":{"type":"string","description":"What's wrong with that field.","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"rate_limited":{"title":"rate_limited","summary":"rate_limited","value":{"type":"https://api.dizplai.com/problems/rate-limited","code":"rate_limited","title":"Rate limited","status":429,"detail":"Too many requests. Retry after 2 seconds.","request_id":"01JBX8P2R4T6V8X0Z2B4D6F8H0"}}},"exampleType":"examples"}},"exampleType":"examples"},"a29bd438-c52a-479c-a865-5e47a2bd43c7":{"description":"Votes or messages can't be taken right now (unavailable). Wait the number of seconds in Retry-After, then retry.","headers":{"x-request-id":{"description":"The request's ID. Quote it to support.","schema":{"type":"string"}},"Retry-After":{"description":"How long to wait before retrying, as a whole number of seconds. Sent with every 429 and 503.","schema":{"type":"integer","minimum":0}}},"content":{"application/problem+json":{"schema":{"type":"object","required":["type","code","title","status","request_id"],"description":"What went wrong, in the same shape for every error: an RFC 9457 problem with a stable code. Act on code, which never changes meaning within a version, and on the HTTP status for a code you don't know. Quote request_id to support.","properties":{"type":{"type":"string","format":"uri-reference","description":"One URL per code: https://api.dizplai.com/problems/ followed by the code with hyphens, such as https://api.dizplai.com/problems/unknown-option for unknown_option.","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi-reference>"},"code":{"type":"string","x-extensible-enum":["invalid_request","unknown_option","not_open","media_not_accepted","invalid_upload","invalid_api_key","invalid_fan_token","forbidden","fan_blocked","sign_in_required","message_limit_reached","not_found","idempotency_conflict","rate_limited","unavailable"],"description":"More codes may be added: for one you don't know, act on the HTTP status.\n\n| code | Status | Retry? | Meaning |\n|---|---|---|---|\n| invalid_request | 400 | No | The body or a parameter is invalid, or a required header such as Idempotency-Key is missing. |\n| unknown_option | 400 | No; read the poll again | An option ID the poll doesn't have. |\n| not_open | 400 | No; read the experience again | The experience isn't taking votes or messages: it isn't live yet, or votes have stopped. |\n| media_not_accepted | 400 | No | The Fan Voice doesn't take this kind of message, or the file's type or size is outside the limits. |\n| invalid_upload | 400 | No; upload again | The upload_id is unknown, already used or another fan's, or the file was never uploaded or its type or size differs from what you asked for. |\n| invalid_api_key | 401 | No | A missing or invalid x-api-key. |\n| invalid_fan_token | 401 | Once, with a fresh token | A missing, invalid or expired fan token, or one from another organisation's login. It carries WWW-Authenticate. |\n| forbidden | 403 | No | Your API key isn't allowed to make this request. |\n| fan_blocked | 403 | No | The fan is blocked from this Fan Voice. |\n| sign_in_required | 403 | No; ask the fan to sign in | A guest on an experience that needs a signed-in fan, or a guest's voice note or photo. |\n| message_limit_reached | 403 | No | The fan has used up this Fan Voice's messages of this kind. |\n| not_found | 404 | No | Not found, or not yours. |\n| idempotency_conflict | 409 | No | An Idempotency-Key reused with a different body while it's kept: 24 hours, or 5 minutes for an upload. |\n| rate_limited | 429 | After Retry-After | Too many requests. |\n| unavailable | 503 | After Retry-After | Votes or messages can't be taken right now. |\n","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"title":{"type":"string","description":"A short title for the code, such as Not open. It doesn't change.","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"The HTTP status code.","minimum":400,"maximum":599,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"request_id":{"type":"string","description":"Matches the x-request-id response header.","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"detail":{"type":"string","description":"What went wrong, in plain English. It can change, so don't act on it.","uniqueKey":"detail","typeLabel":"string"},"errors":{"type":"array","description":"Field-level validation errors, with invalid_request.","items":{"type":"object","required":["pointer","message"],"properties":{"pointer":{"type":"string","description":"A JSON Pointer to the field.","isRequired":true,"uniqueKey":"errors.items.[INDEX].pointer","typeLabel":"string"},"message":{"type":"string","description":"What's wrong with that field.","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"unavailable":{"title":"unavailable","summary":"unavailable","value":{"type":"https://api.dizplai.com/problems/unavailable","code":"unavailable","title":"Unavailable","status":503,"detail":"Votes can't be taken right now. Retry after 5 seconds.","request_id":"01JBX8P2R4T6V8X0Z2B4D6F8H0"}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"f8d2c678-9728-443e-a3fe-c70aec75bfd5":{"apiKey":{"type":"apiKey","in":"header","name":"x-api-key","description":"Your organisation's API key, supplied by Dizplai. Send it on every request. It isn't a secret, so it can ship in your app: what a fan does is protected by the fan's token.","scopes":[],"schemeName":"apiKey"},"fanToken":{"type":"http","scheme":"bearer","description":"The fan's token from your own login, sent as `Authorization: Bearer \u003ctoken>`: a signed-in fan's or a guest's. Dizplai checks it against your login's details, agreed when you're set up, and a guest's token carries the guest claim agreed at the same time. Needed to vote, upload, send a message, and read the fan's own vote or messages.","scopes":[],"schemeName":"fanToken"}}},"servers":{"8f572995-de18-42e6-9b79-a8b6680b8360":{"url":"https://api.dizplai.com/v1","description":"The Dizplai API."}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"x-api-key","description":"Your organisation's API key, supplied by Dizplai. Send it on every request. It isn't a secret, so it can ship in your app: what a fan does is protected by the fan's token.","scopes":[],"schemeName":"apiKey"},"schema":{"title":"x-api-key","type":"string","description":"Your organisation's API key, supplied by Dizplai. Send it on every request. It isn't a secret, so it can ship in your app: what a fan does is protected by the fan's token.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"apiKey","name":"x-api-key"},{"scheme":{"type":"http","scheme":"bearer","description":"The fan's token from your own login, sent as `Authorization: Bearer \u003ctoken>`: a signed-in fan's or a guest's. Dizplai checks it against your login's details, agreed when you're set up, and a guest's token carries the guest claim agreed at the same time. Needed to vote, upload, send a message, and read the fan's own vote or messages.","scopes":[],"schemeName":"fanToken"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"The fan's token from your own login, sent as `Authorization: Bearer \u003ctoken>`: a signed-in fan's or a guest's. Dizplai checks it against your login's details, agreed when you're set up, and a guest's token carries the guest claim agreed at the same time. Needed to vote, upload, send a message, and read the fan's own vote or messages.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"fanToken","name":"Authorization"}],"title":"apiKey \u0026 fanToken"}]},"originalFileLocation":"experiences/api-reference/experiences.openapi.yaml"},"subdomain":"dizplai-77024896","siteName":"Dizplai API","title":"Cast a vote - Dizplai API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-10T11:05:01.841Z","originalFileLocation":"api-reference/polls/cast-a-vote.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Casts a fan\u0026#x27;s vote for one of a poll\u0026#x27;s options. A fan has one vote in each poll, whichever collection they found it in, and only their first vote counts. Send a new Idempotency-Key with each vote, so a retry is never counted twice.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Dizplai API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/dizplai-77024896/3nLUV7FzqdT27bAO/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/dizplai-77024896/3nLUV7FzqdT27bAO/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/dizplai-77024896/3nLUV7FzqdT27bAO/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/dizplai-77024896/3nLUV7FzqdT27bAO/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/dizplai-77024896/3nLUV7FzqdT27bAO/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/dizplai-77024896/3nLUV7FzqdT27bAO/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/dizplai-77024896/3nLUV7FzqdT27bAO/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/dizplai-77024896/3nLUV7FzqdT27bAO/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/dizplai-77024896/3nLUV7FzqdT27bAO/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Cast a vote - Dizplai API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Casts a fan\u0026#x27;s vote for one of a poll\u0026#x27;s options. A fan has one vote in each poll, whichever collection they found it in, and only their first vote counts. Send a new Idempotency-Key with each vote, so a retry is never counted twice.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Dizplai API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://developer.dizplai.com/api-reference/polls/cast-a-vote\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://dizplai-77024896.mintlify.site/_mintlify/api/og/v2?division=Polls\u0026amp;title=Cast+a+vote\u0026amp;description=Casts+a+fan%27s+vote+for+one+of+a+poll%27s+options.+A+fan+has+one+vote+in+each+poll%2C+whichever+collection+they+found+it+in%2C+and+only+their+first+vote+counts.+Send+a\u0026amp;theme=4cfd1fb4fbf3ee8fe3fa75b7\u0026amp;signature=b5aafa0ebfb82f82c97ce22fbf8727d22c4d14ea69d7293dcdb6d41e6d9617f1\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Cast a vote - Dizplai API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Casts a fan\u0026#x27;s vote for one of a poll\u0026#x27;s options. A fan has one vote in each poll, whichever collection they found it in, and only their first vote counts. Send a new Idempotency-Key with each vote, so a retry is never counted twice.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://dizplai-77024896.mintlify.site/_mintlify/api/og/v2?division=Polls\u0026amp;title=Cast+a+vote\u0026amp;description=Casts+a+fan%27s+vote+for+one+of+a+poll%27s+options.+A+fan+has+one+vote+in+each+poll%2C+whichever+collection+they+found+it+in%2C+and+only+their+first+vote+counts.+Send+a\u0026amp;theme=4cfd1fb4fbf3ee8fe3fa75b7\u0026amp;signature=b5aafa0ebfb82f82c97ce22fbf8727d22c4d14ea69d7293dcdb6d41e6d9617f1\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/dizplai-77024896/3nLUV7FzqdT27bAO/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Dizplai API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#A00066\">\u003clink data-mint-head rel=\"canonical\" href=\"https://developer.dizplai.com/api-reference/polls/cast-a-vote\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/polls/cast-a-vote.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://developer.dizplai.com/#organization\",\"name\":\"Dizplai API\",\"url\":\"https://developer.dizplai.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/dizplai-77024896/lmZzH95OOSORiYIT/logo/light.png?fit=max\u0026auto=format\u0026n=lmZzH95OOSORiYIT\u0026q=85\u0026s=7ba40c5f8a08a90459fbaced5737c13c\"}},{\"@type\":\"WebSite\",\"@id\":\"https://developer.dizplai.com#website\",\"name\":\"Dizplai API\",\"url\":\"https://developer.dizplai.com\",\"publisher\":{\"@id\":\"https://developer.dizplai.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://developer.dizplai.com/api-reference/polls/cast-a-vote#webpage\",\"url\":\"https://developer.dizplai.com/api-reference/polls/cast-a-vote\",\"name\":\"Cast a vote\",\"description\":\"Casts a fan's vote for one of a poll's options. A fan has one vote in each poll, whichever collection they found it in, and only their first vote counts. Send a new Idempotency-Key with each vote, so a retry is never counted twice.\",\"dateModified\":\"2026-11-10T11:05:01.841Z\",\"isPartOf\":{\"@id\":\"https://developer.dizplai.com#website\"},\"breadcrumb\":{\"@id\":\"https://developer.dizplai.com/api-reference/polls/cast-a-vote#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://developer.dizplai.com/api-reference/polls/cast-a-vote#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Experiences API\",\"item\":\"https://developer.dizplai.com/api-reference/experiences/list-experiences\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Polls\",\"item\":\"https://developer.dizplai.com/api-reference/polls/list-polls\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Cast a vote\",\"item\":\"https://developer.dizplai.com/api-reference/polls/cast-a-vote\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://developer.dizplai.com/api-reference/polls/cast-a-vote#apireference\",\"headline\":\"Cast a vote\",\"name\":\"Cast a vote\",\"description\":\"Casts a fan's vote for one of a poll's options. A fan has one vote in each poll, whichever collection they found it in, and only their first vote counts. Send a new Idempotency-Key with each vote, so a retry is never counted twice.\",\"url\":\"https://developer.dizplai.com/api-reference/polls/cast-a-vote\",\"mainEntityOfPage\":{\"@id\":\"https://developer.dizplai.com/api-reference/polls/cast-a-vote#webpage\"},\"dateModified\":\"2026-11-10T11:05:01.841Z\",\"publisher\":{\"@id\":\"https://developer.dizplai.com/#organization\"},\"isPartOf\":{\"@id\":\"https://developer.dizplai.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Dizplai API\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Dizplai API\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/polls/cast-a-vote.md","siteName":"Dizplai API","nav":{"global":null,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":""}]},{"tab":"API reference","groups":[{"group":"Using the API","pages":[{"title":"Authentication","href":"/authentication"},{"title":"Errors and retries","href":"/errors"},{"title":"Versions and changes","href":"/versioning"}]},{"group":"Experiences API","pages":[{"group":"Experiences","pages":[{"title":"List experiences","deprecated":null,"version":null,"openapi":"/experiences/api-reference/experiences.openapi.yaml get /experiences","href":"/api-reference/experiences/list-experiences"}]},{"group":"Collections","pages":[{"title":"List collections","deprecated":null,"version":null,"openapi":"/experiences/api-reference/experiences.openapi.yaml get /collections","href":"/api-reference/collections/list-collections"},{"title":"Get a collection","deprecated":null,"version":null,"openapi":"/experiences/api-reference/experiences.openapi.yaml get /collections/{collection_id}","href":"/api-reference/collections/get-a-collection"}]},{"group":"Polls","pages":[{"title":"List polls","deprecated":null,"version":null,"openapi":"/experiences/api-reference/experiences.openapi.yaml get /polls","href":"/api-reference/polls/list-polls"},{"title":"Get a poll","description":"Gets a poll with its question, options and results, to draw it and keep it up to date.","deprecated":null,"version":null,"openapi":"/experiences/api-reference/experiences.openapi.yaml get /polls/{poll_id}","href":"/api-reference/polls/get-a-poll"},{"title":"Cast a vote","deprecated":null,"version":null,"openapi":"/experiences/api-reference/experiences.openapi.yaml post /polls/{poll_id}/votes","href":"/api-reference/polls/cast-a-vote"},{"title":"Get the fan's vote","description":"Gets the vote that counts for the fan, so your app can show their choice on any device and knows when they've voted.","deprecated":null,"version":null,"openapi":"/experiences/api-reference/experiences.openapi.yaml get /polls/{poll_id}/votes/me","href":"/api-reference/polls/get-the-fans-vote"}]},{"group":"Fan Voices","pages":[{"title":"List Fan Voices","deprecated":null,"version":null,"openapi":"/experiences/api-reference/experiences.openapi.yaml get /fan-voices","href":"/api-reference/fan-voices/list-fan-voices"},{"title":"Get a Fan Voice","deprecated":null,"version":null,"openapi":"/experiences/api-reference/experiences.openapi.yaml get /fan-voices/{fan_voice_id}","href":"/api-reference/fan-voices/get-a-fan-voice"},{"title":"Create an upload","deprecated":null,"version":null,"openapi":"/experiences/api-reference/experiences.openapi.yaml post /fan-voices/{fan_voice_id}/uploads","href":"/api-reference/fan-voices/create-an-upload"},{"title":"Send a message","deprecated":null,"version":null,"openapi":"/experiences/api-reference/experiences.openapi.yaml post /fan-voices/{fan_voice_id}/messages","href":"/api-reference/fan-voices/send-a-message"},{"title":"List the fan's messages","deprecated":null,"version":null,"openapi":"/experiences/api-reference/experiences.openapi.yaml get /fan-voices/{fan_voice_id}/messages/me","href":"/api-reference/fan-voices/list-the-fans-messages"}]}]}]}]},"basePath":"","title":"Cast a vote - Dizplai API","buildId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","deploymentId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DdEMm2kG.js","utils-BMo572L7.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C-4m9KAx.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-DPLK2Oq9.js","snippetPresets-BKjfJMC9.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-DTsgtCEj.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C8vmhyQM.js","shallow-r9w8LQGS.js","getApiPlaygroundDisplay-DjPI64HQ.js","CodeSnippet-C8Bvhl16.js","CodeSnippets-BtWUwcMy.js","Page-BIYvYBgk.js","getPastedJson-Dcm_3Pgl.js","icon-BXwrTpjc.js","MethodPill-CcjfVmmy.js","DuplicateIcon-BuKIbXAQ.js","createIcon-DaL9yXsO.js","DynamicMarkdown-Co5nikxh.js","SectionHeading-P4UNTsMZ.js","axios-vUo_bRtp.js","Markdown-CEfymfIH.js","clsx-Dq9TQuNi.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-D2J8knkn.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BgZ2ThuU.js"]}