Sponsored poll bid responses include signed vote_url and results_url values. Use those URLs exactly as returned by the bid response — the signed token authorizes access to a rendered poll instance and keeps clients from voting against or reading raw poll IDs.
Voting records poll engagement only. It does not redirect to the advertiser. If the poll response includes cta_url, show that CTA after voting and use it for advertiser click-throughs.
Signed token from the poll creative’s vote_url. It is already present in the vote_url query string — POST to that URL exactly as returned. The token must be in the query string; it is not read from the request body.
Each signed poll token records at most one vote for its bid/impression. A duplicate vote attempt does not increment the aggregate counts and is not an error — the endpoint returns 200 with the current aggregate results, exactly like a first vote. There is no separate duplicate-vote status code, so clients do not need special handling; the returned data is always safe to render.
GET /api/v1/tracking/sponsored-polls/results?token=...
Retrieve current aggregate results without recording a vote. Use this endpoint to refresh percentages after rendering, or when the user returns to an already-voted poll.
Render the poll question and option buttons from the bid response.
Fire the impression pixel — extract the view_url query parameter from cta_url (or use the top-level view_url field when the poll has no cta_url) and request it when the poll becomes visible.
When the user selects an option, POST option_id to vote_url.
Replace the option buttons with the returned percentages and total vote count (read from the data object).
If cta_url is present, reveal the advertiser CTA after the vote.
Use results_url to refresh percentages without recording another vote.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Thrad Docs","colors":{"primary":"#1E1E20","light":"#F7F7F7","dark":"#1E1E20"},"logo":{"light":"https://mintcdn.com/thrads-5feffa3d/DxyVKooiEHOWBPsr/images/Thrad-Logo-Orange.png?fit=max\u0026auto=format\u0026n=DxyVKooiEHOWBPsr\u0026q=85\u0026s=271f3bf20d1b3427a47628ba4c698a12","dark":"https://mintcdn.com/thrads-5feffa3d/DxyVKooiEHOWBPsr/images/Thrad-Logo-Orange.png?fit=max\u0026auto=format\u0026n=DxyVKooiEHOWBPsr\u0026q=85\u0026s=271f3bf20d1b3427a47628ba4c698a12"},"favicon":"https://mintcdn.com/thrads-5feffa3d/Oy6te9OMcdFzEUX1/images/favicon.png?fit=max\u0026auto=format\u0026n=Oy6te9OMcdFzEUX1\u0026q=85\u0026s=6bc1a1db484b55f5818f27ac5946d6f8","api":{"mdx":{"auth":{"method":"key","name":"thrad-api-key"},"server":"https://ssp.thrad.ai"}},"appearance":{"default":"light"},"background":{"color":{"light":"#F2EDE9","dark":"#0A0A0A"}},"fonts":{"heading":{"family":"Lufga","weight":500,"source":"fonts/Lufga-Medium.woff2","format":"woff2"},"body":{"family":"Geist","source":"fonts/Geist-Regular.woff2","format":"woff2"}},"icons":{"library":"lucide"},"contextual":{"options":["copy","view","chatgpt","claude","cursor"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"thrads-5feffa3d","hasAudioNarration":false,"actualSubdomain":"thrads-5feffa3d","customDomains":["docs.thrad.ai"],"gitSource":{"type":"github","owner":"thrads","repo":"thrad-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6af35453c7de24114e237278","clientVersion":"0.0.4094","searchFilterCounts":[{"language":"default","tag":"Advertisers","count":27},{"language":"default","tag":"API Reference","count":21},{"language":"default","tag":"Publishers","count":21},{"language":"default","tag":"Attribution","count":14},{"language":"default","tag":"DSP","count":9},{"language":"default","tag":"Browser Tag","count":8},{"language":"default","tag":"Guides","count":7},{"language":"default","tag":"v1 (deprecated)","count":7},{"language":"default","tag":"Server-to-server Conversions API","count":5},{"language":"default","tag":"Serving Ads","count":5}]},"assistantConfig":{},"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":"llms-txt-v2","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}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"@font-face{font-family:\"Geist\";font-weight:500;font-display:swap;src:url(\"/fonts/Geist-Medium.woff2\") format(\"woff2\")}@font-face{font-family:\"Geist\";font-weight:600;font-display:swap;src:url(\"/fonts/Geist-SemiBold.woff2\") format(\"woff2\")}#content-area h1,#content-area h2,#content-area h3,#header h1{font-weight:500!important;letter-spacing:-0.01em}:root:not(.dark) :is(#content-area h1,#content-area h2,#content-area h3,#header h1){color:#1E1E20}:root:not(.dark) body{color:#1E1E20}:root:not(.dark) #content-container{background:#F7F7F7}:root:not(.dark) .prose p,:root:not(.dark) .prose li{color:#3A3A3C}:root{--rounded-sm: 0px;--rounded-md: 0px;--rounded-lg: 0px;--rounded-xl: 0px;--rounded-2xl: 0px}button,.card,pre,code,input,[class*=\"rounded\"]{border-radius:0!important}.sidebar-group-header .sidebar-title{font-size:0.7rem;font-weight:600;letter-spacing:0.08em;text-transform:uppercase}:root:not(.dark) #content-area .prose a{color:#28427A;text-decoration-color:rgba(40, 66, 122, 0.3)}:root:not(.dark) #sidebar li[data-active=\"true\"]>a{background:#F7F7F7!important;color:#1E1E20!important}:root:not(.dark) #sidebar .method-pill,:root:not(.dark) #sidebar [class*=\"bg-blue-400\"]{background:#DAE3F2!important;color:#28427A!important}:root:not(.dark) #content-area :not(pre)>code{background:#EFEDE9!important;border:1px solid rgba(10, 10, 10, 0.06);padding:1px 4px!important;color:#1E1E20}:root:not(.dark) .tryit-button,:root:not(.dark) [class*=\"bg-[#3064E3]\"]{background:#1E1E20!important;color:#F7F7F7!important}:root:not(.dark) .method-pill,:root:not(.dark) [class*=\"bg-blue-400/20\"]{background:#DAE3F2!important;color:#28427A!important}:root:not(.dark) #topbar-cta-button a,:root:not(.dark) #topbar-cta-button a>span{background:#EC521B!important;color:#fff!important}:root:not(.dark) #page-context-menu{border:1px solid rgba(10, 10, 10, 0.2);border-radius:999px;overflow:hidden;width:max-content!important;min-width:0!important;flex:none!important}#page-context-menu button{background:transparent!important;border:0!important}:root:not(.dark) #page-context-menu button{color:#1E1E20!important}:root:not(.dark) #page-context-menu button+button{border-left:1px solid rgba(10, 10, 10, 0.1)!important}:root:not(.dark) #page-context-menu button:hover{background:rgba(10, 10, 10, 0.04)!important}:root.dark #page-context-menu{border:1px solid rgba(255, 255, 255, 0.2);border-radius:999px;overflow:hidden;width:max-content!important;min-width:0!important;flex:none!important}:root.dark #page-context-menu button+button{border-left:1px solid rgba(255, 255, 255, 0.1)!important}:root.dark #page-context-menu button:hover{background:rgba(255, 255, 255, 0.06)!important}:root:not(.dark) [role=\"menu\"]{background:#fff!important;border:1px solid rgba(10, 10, 10, 0.1)!important;border-radius:4px!important;box-shadow:0 8px 24px rgba(10, 10, 10, 0.08)!important}[role=\"menu\"] [role=\"menuitem\"]>div:first-child{border:0!important}:root:not(.dark) [role=\"menu\"] [role=\"menuitem\"]:hover,:root:not(.dark) [role=\"menu\"] [role=\"menuitem\"][data-highlighted]{background:rgba(10, 10, 10, 0.04)!important}:root:not(.dark) .callout[data-callout-type=\"note\"],:root:not(.dark) .callout[data-callout-type=\"info\"]{--c-bg: #DAE3F2;--c-fg: #28427A}:root:not(.dark) .callout[data-callout-type=\"warning\"]{--c-bg: #F4E0BD;--c-fg: #6B4D14}:root:not(.dark) .callout[data-callout-type=\"tip\"],:root:not(.dark) .callout[data-callout-type=\"check\"]{--c-bg: #D5E5DD;--c-fg: #2D5B3F}:root:not(.dark) .callout[data-callout-type=\"danger\"]{--c-bg: #FCDADA;--c-fg: #8E2421}:root:not(.dark) .callout[data-callout-type]{background:color-mix(in srgb, var(--c-bg) 50%, #F7F7F7)!important;border-color:transparent!important}:root:not(.dark) .callout[data-callout-type] *:not(code){color:var(--c-fg)!important}:root:not(.dark) #content-area .callout :not(pre)>code{background:color-mix(in srgb, var(--c-fg) 8%, transparent)!important;border-color:color-mix(in srgb, var(--c-fg) 15%, transparent);color:var(--c-fg)}:root:not(.dark) div.border-standard:has(>div>.group>.method-pill),:root:not(.dark) div.border-standard:has(.group>.method-pill):not(.group){background:#fff!important;border-color:rgba(10, 10, 10, 0.1)!important}.group.border-standard:has(>.method-pill){border:0!important;background:transparent!important}#sidebar li a{border-radius:4px!important}:root:not(.dark) #sidebar li a{color:rgba(10, 10, 10, 0.65)}:root:not(.dark) #sidebar li:not([data-active=\"true\"])>a:hover{background:rgba(10, 10, 10, 0.04)!important;color:#1E1E20}:root:not(.dark) #sidebar li[data-active=\"true\"]>a svg{color:#EC521B!important;background-color:#EC521B}:root:not(.dark) #sidebar li[data-active=\"true\"] [class*=\"bg-[#3064E3]\"]{background:#DAE3F2!important;color:#28427A!important}#sidebar li a{min-height:38px;align-items:center!important;padding:0 12px!important;column-gap:10px!important;font:500 0.875rem/1.4 Geist, system-ui, sans-serif!important}:root:not(.dark) #sidebar li a{color:rgba(10, 10, 10, 0.65)!important}:root:not(.dark) #sidebar li a svg{width:18px;height:18px;background-color:rgba(10, 10, 10, 0.57)}:root:not(.dark) #sidebar li[data-active=\"true\"]>a{color:#1E1E20!important}#sidebar .sidebar-group-header{padding-left:12px!important}#sidebar li>button{min-height:38px;align-items:center!important;padding:0 12px!important;column-gap:10px!important;border-radius:4px!important;font:500 0.875rem/1.4 Geist, system-ui, sans-serif!important}:root:not(.dark) #sidebar li>button{color:rgba(10, 10, 10, 0.65)!important}:root:not(.dark) #sidebar li>button:hover{background:rgba(10, 10, 10, 0.04)!important;color:#1E1E20!important}.sidebar-group-header .sidebar-title{font:500 0.6875rem/1.4 Geist, system-ui, sans-serif!important;letter-spacing:0.08em;text-transform:uppercase}:root:not(.dark) .sidebar-group-header .sidebar-title{color:rgba(10, 10, 10, 0.57)!important}.sidebar-group-header{min-height:28px;margin-bottom:4px!important}#sidebar-content .sidebar-group~.sidebar-group,#navigation-items>div+div{border-top:1px solid rgb(from currentColor r g b / 0.1);padding-top:16px}:root:not(.dark) [class*=\"group/step-indicator\"]{background:#1E1E20!important;color:#F7F7F7!important}[class*=\"group/step-indicator\"]{border-radius:999px!important}:root:not(.dark) [class*=\"group/step-indicator\"] *{color:#F7F7F7!important}:root:not(.dark) .frame>div[class*=\"bg-grid\"]{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32' width='32' height='32' fill='none' stroke='rgba(10,10,10,0.06)'%3e%3cpath d='M0 .5H31.5V32'/%3e%3c/svg%3e\")!important}:root.dark .frame>div[class*=\"bg-grid\"]{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32' width='32' height='32' fill='none' stroke='rgba(255,255,255,0.06)'%3e%3cpath d='M0 .5H31.5V32'/%3e%3c/svg%3e\")!important}.frame>div[class*=\"bg-grid\"]{mask-image:none!important}a[aria-label=\"Navigate to header\"]>div{border-radius:4px!important;background:transparent!important;box-shadow:none!important;--tw-ring-shadow: 0 0 #0000 !important}a[aria-label=\"Navigate to header\"]{margin-left:-2rem!important}a[aria-label=\"Navigate to header\"]>div:hover{background:color-mix(in srgb, currentColor 12%, transparent)!important}div:has(>figure.frame)+div:has(>figure.frame){margin-top:1.5rem}#content-area td code{white-space:nowrap!important;word-break:normal!important;overflow-wrap:normal!important}#navbar a:has(>.nav-logo){display:inline-flex;align-items:center}#navbar a:has(>.nav-logo)::after{content:\"/\";margin-left:12px;font:400 0.875rem/1.4 Geist, system-ui, sans-serif;color:rgba(10, 10, 10, 0.57)}#navbar a:has(>.nav-logo)+div:not(:has(*)){display:none!important}.nav-dropdown-products-selector-trigger{height:40px!important;padding:0 8px!important;column-gap:10px!important;border-radius:4px!important;font:600 0.875rem/1.4 Geist, system-ui, sans-serif!important;color:#1E1E20!important}.nav-dropdown-products-selector-trigger:hover,.nav-dropdown-products-selector-trigger[aria-expanded=\"true\"]{background:rgba(10, 10, 10, 0.04)!important}.nav-dropdown-products-selector-trigger>svg:first-child{display:none}.nav-dropdown-products-selector-trigger>svg:last-child{color:rgba(10, 10, 10, 0.57)!important}.nav-dropdown-products-selector-trigger>span{display:inline-flex;align-items:center;gap:10px;max-width:none!important;overflow:visible!important}.nav-dropdown-products-selector-trigger>span::after{content:\"Docs\";display:inline-flex;align-items:center;height:18px;padding:0 6px;border-radius:4px;background:rgba(10, 10, 10, 0.04);font:500 0.6875rem/1.4 Geist, system-ui, sans-serif;letter-spacing:0.08em;text-transform:uppercase;color:rgba(10, 10, 10, 0.57)}.dark .nav-dropdown-products-selector-trigger{color:#F7F7F7!important}.dark #navbar a:has(>.nav-logo)::after,.dark .nav-dropdown-products-selector-trigger>span::after{color:rgba(255, 255, 255, 0.5)}#content-side-layout{margin-right:2rem}:root:not(.dark) [class*=\"bg-[#2AB673]\"]:not(.tryit-button),:root:not(.dark) .method-pill[class*=\"bg-green-400/20\"],:root:not(.dark) #sidebar [class*=\"bg-green-400/20\"]{background:#D5E5DD!important;color:#2D5B3F!important}@media (min-width: 1024px) and (max-width: 1279.98px){#content-area{padding-right:2.75rem!important}}@media (min-width: 1024px){#sidebar{width:15rem!important}}#sidebar li li>a,#sidebar li li>button{padding-left:24px!important}#sidebar div:has(>[class*=\"bg-[#FDEAD8]\"]){display:none!important}:root:not(.dark) #sidebar [class*=\"bg-[#F7F7F8]\"]{background:#E8E6E0!important;color:#5C4E2E!important}@media (max-width: 1023.98px){#content-area{padding-left:1.25rem!important;padding-right:1.25rem!important}#content-container{margin-left:-1rem;margin-right:-1rem}#navbar a:has(>.nav-logo)::after{content:none}}#navbar .nav-dropdown-products-selector-trigger{margin-left:-12px}:root:not(.dark) [role=\"dialog\"] [class*=\"bg-background-light\"]{background-color:#F7F7F7!important}"}],"page":{"pagePath":"api/api-reference/sponsored-poll-tracking","slug":"/api/api-reference/sponsored-poll-tracking","pageMetadata":{"title":"Poll Tracking (v1)","api":"POST /api/v1/tracking/sponsored-polls/vote","description":"Submit sponsored poll votes and retrieve signed aggregate results for direct API integrations.","href":"/api/api-reference/sponsored-poll-tracking"},"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: \"Submit sponsored poll votes and retrieve signed aggregate results for direct API integrations.\"\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,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{CodeBlock,Expandable,Heading,Note,ParamField,ResponseField,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Expandable)_missingMdxReference(`Expandable`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!ParamField)_missingMdxReference(`ParamField`,true);if(!ResponseField)_missingMdxReference(`ResponseField`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Sponsored poll bid responses include signed `,_jsx(_components.code,{children:`vote_url`}),` and `,_jsx(_components.code,{children:`results_url`}),` values. Use those URLs exactly as returned by the bid response — the signed token authorizes access to a rendered poll instance and keeps clients from voting against or reading raw poll IDs.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Voting records poll engagement only. It does not redirect to the advertiser. If the poll response includes `,_jsx(_components.code,{children:`cta_url`}),`, show that CTA after voting and use it for advertiser click-throughs.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`vote`,children:`Vote`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`http`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`http`,children:_jsxs(_components.code,{language:`http`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`POST`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` /api/v1/tracking/sponsored-polls/vote?token=...`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Submit a user’s selected poll option. The vote is recorded and the endpoint returns the current lifetime aggregate results for the poll.`}),`\n`,_jsx(Heading,{level:`3`,id:`request`,children:`Request`}),`\n`,_jsx(ParamField,{query:`token`,type:`string`,required:true,id:`param-token`,children:_jsxs(_components.p,{children:[`Signed token from the poll creative’s `,_jsx(_components.code,{children:`vote_url`}),`. It is already present in the `,_jsx(_components.code,{children:`vote_url`}),` query string — POST to that URL exactly as returned. The token must be in the query string; it is not read from the request body.`]})}),`\n`,_jsx(ParamField,{body:`option_id`,type:`string`,required:true,id:`param-option-id`,children:_jsxs(_components.p,{children:[`Selected option identifier from the poll creative’s `,_jsx(_components.code,{children:`options[].id`}),`.`]})}),`\n`,`\n`,_jsx(Heading,{level:`3`,id:`response`,children:`Response`}),`\n`,_jsxs(_components.p,{children:[`The response is wrapped in a `,_jsx(_components.code,{children:`status`}),` / `,_jsx(_components.code,{children:`data`}),` envelope. `,_jsx(_components.code,{children:`data`}),` holds the current aggregate results.`]}),`\n`,`\n`,_jsx(ResponseField,{name:`status`,type:`string`,id:`param-status`,children:_jsxs(_components.p,{children:[`Always `,_jsx(_components.code,{children:`\"success\"`}),` for a recorded (or deduplicated) vote.`]})}),`\n`,_jsxs(ResponseField,{name:`data`,type:`object`,id:`param-data`,children:[_jsx(_components.p,{children:`Current aggregate poll results.`}),_jsxs(Expandable,{title:`data properties`,children:[_jsx(ResponseField,{name:`sponsored_poll_id`,type:`integer`,id:`param-sponsored-poll-id`,children:_jsx(_components.p,{children:`Poll identifier.`})}),_jsx(ResponseField,{name:`question`,type:`string`,id:`param-question`,children:_jsx(_components.p,{children:`Poll question text.`})}),_jsx(ResponseField,{name:`total_votes`,type:`integer`,id:`param-total-votes`,children:_jsx(_components.p,{children:`Lifetime vote count for the poll.`})}),_jsxs(ResponseField,{name:`options`,type:`array`,id:`param-options`,children:[_jsx(_components.p,{children:`Lifetime aggregate result rows for each option.`}),_jsxs(Expandable,{title:`options properties`,children:[_jsx(ResponseField,{name:`id`,type:`string`,id:`param-id`,children:_jsx(_components.p,{children:`Option identifier.`})}),_jsx(ResponseField,{name:`text`,type:`string`,id:`param-text`,children:_jsx(_components.p,{children:`Option label.`})}),_jsx(ResponseField,{name:`votes`,type:`integer`,id:`param-votes`,children:_jsx(_components.p,{children:`Lifetime vote count for this option.`})}),_jsx(ResponseField,{name:`percentage`,type:`number`,id:`param-percentage`,children:_jsx(_components.p,{children:`Percentage of total votes for this option.`})})]})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`duplicate-votes`,children:`Duplicate Votes`}),`\n`,_jsxs(_components.p,{children:[`Each signed poll token records at most one vote for its bid/impression. A duplicate vote attempt does `,_jsx(_components.strong,{children:`not`}),` increment the aggregate counts and is `,_jsx(_components.strong,{children:`not`}),` an error — the endpoint returns `,_jsx(_components.code,{children:`200`}),` with the current aggregate results, exactly like a first vote. There is no separate duplicate-vote status code, so clients do not need special handling; the returned `,_jsx(_components.code,{children:`data`}),` is always safe to render.`]}),`\n`,_jsx(Heading,{level:`2`,id:`results`,children:`Results`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`http`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`http`,children:_jsxs(_components.code,{language:`http`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`GET`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` /api/v1/tracking/sponsored-polls/results?token=...`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Retrieve current aggregate results without recording a vote. Use this endpoint to refresh percentages after rendering, or when the user returns to an already-voted poll.`}),`\n`,_jsx(Heading,{level:`3`,id:`query-parameters`,children:`Query Parameters`}),`\n`,_jsx(ParamField,{query:`token`,type:`string`,required:true,id:`param-token-1`,children:_jsxs(_components.p,{children:[`Signed token from the poll creative’s `,_jsx(_components.code,{children:`results_url`}),`.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`response-2`,children:`Response`}),`\n`,_jsxs(_components.p,{children:[`Same `,_jsx(_components.code,{children:`status`}),` / `,_jsx(_components.code,{children:`data`}),` envelope as the vote endpoint.`]}),`\n`,`\n`,_jsx(ResponseField,{name:`status`,type:`string`,id:`param-status-1`,children:_jsxs(_components.p,{children:[`Always `,_jsx(_components.code,{children:`\"success\"`}),`.`]})}),`\n`,_jsx(ResponseField,{name:`data`,type:`object`,id:`param-data-1`,children:_jsxs(_components.p,{children:[`Current aggregate poll results — `,_jsx(_components.code,{children:`sponsored_poll_id`}),`, `,_jsx(_components.code,{children:`question`}),`, `,_jsx(_components.code,{children:`total_votes`}),`, and an `,_jsx(_components.code,{children:`options`}),` array of `,_jsx(_components.code,{children:`id`}),` / `,_jsx(_components.code,{children:`text`}),` / `,_jsx(_components.code,{children:`votes`}),` / `,_jsx(_components.code,{children:`percentage`}),` rows.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`error-handling`,children:`Error Handling`}),`\n`,_jsxs(_components.p,{children:[`Errors use the standard FastAPI shape — a single `,_jsx(_components.code,{children:`detail`}),` string:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"detail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Invalid poll option\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Status Code`}),_jsx(_components.th,{children:`Scenario`}),_jsx(_components.th,{children:_jsx(_components.code,{children:`detail`})}),_jsx(_components.th,{children:`Client Behavior`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`400 Bad Request`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`option_id`}),` does not match one of the poll options`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`Invalid poll option`})}),_jsx(_components.td,{children:`Keep the poll visible and let the user choose a valid option`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`404 Not Found`})}),_jsx(_components.td,{children:`Token is malformed, expired, or not valid for this poll`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`Link expired or not found`})}),_jsx(_components.td,{children:`Do not retry with the same token; request a fresh poll creative`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`422 Unprocessable Entity`})}),_jsxs(_components.td,{children:[`Required `,_jsx(_components.code,{children:`token`}),` query parameter or `,_jsx(_components.code,{children:`option_id`}),` body field is missing`]}),_jsx(_components.td,{children:`FastAPI validation detail`}),_jsx(_components.td,{children:`Fix the request; this indicates a client integration bug`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`500 Internal Server Error`})}),_jsx(_components.td,{children:`Tracking service failed unexpectedly`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`Internal Server Error`})}),_jsx(_components.td,{children:`Continue without blocking the chat experience`})]})]})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`422`}),` response body uses FastAPI’s validation format (`,_jsx(_components.code,{children:`detail`}),` is an array of field errors), not a single string.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`rendering-flow`,children:`Rendering Flow`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Render the poll question and option buttons from the bid response.`}),`\n`,_jsxs(_components.li,{children:[`Fire the impression pixel — extract the `,_jsx(_components.code,{children:`view_url`}),` query parameter from `,_jsx(_components.code,{children:`cta_url`}),` (or use the top-level `,_jsx(_components.code,{children:`view_url`}),` field when the poll has no `,_jsx(_components.code,{children:`cta_url`}),`) and request it when the poll becomes visible.`]}),`\n`,_jsxs(_components.li,{children:[`When the user selects an option, POST `,_jsx(_components.code,{children:`option_id`}),` to `,_jsx(_components.code,{children:`vote_url`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Replace the option buttons with the returned percentages and total vote count (read from the `,_jsx(_components.code,{children:`data`}),` object).`]}),`\n`,_jsxs(_components.li,{children:[`If `,_jsx(_components.code,{children:`cta_url`}),` is present, reveal the advertiser CTA after the vote.`]}),`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.code,{children:`results_url`}),` to refresh percentages without recording another vote.`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Poll Tracking (v1)","api":"POST /api/v1/tracking/sponsored-polls/vote","description":"Submit sponsored poll votes and retrieve signed aggregate results for direct API integrations.","href":"/api/api-reference/sponsored-poll-tracking"}}},"mdxSourceWithNoJs":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{CodeBlock,Expandable,Heading,Note,ParamField,RequestExample,ResponseExample,ResponseField,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Expandable)_missingMdxReference(`Expandable`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!ParamField)_missingMdxReference(`ParamField`,true);if(!RequestExample)_missingMdxReference(`RequestExample`,true);if(!ResponseExample)_missingMdxReference(`ResponseExample`,true);if(!ResponseField)_missingMdxReference(`ResponseField`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Sponsored poll bid responses include signed `,_jsx(_components.code,{children:`vote_url`}),` and `,_jsx(_components.code,{children:`results_url`}),` values. Use those URLs exactly as returned by the bid response — the signed token authorizes access to a rendered poll instance and keeps clients from voting against or reading raw poll IDs.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Voting records poll engagement only. It does not redirect to the advertiser. If the poll response includes `,_jsx(_components.code,{children:`cta_url`}),`, show that CTA after voting and use it for advertiser click-throughs.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`vote`,children:`Vote`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`http`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`http`,children:_jsxs(_components.code,{language:`http`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`POST`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` /api/v1/tracking/sponsored-polls/vote?token=...`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Submit a user’s selected poll option. The vote is recorded and the endpoint returns the current lifetime aggregate results for the poll.`}),`\n`,_jsx(Heading,{level:`3`,id:`request`,children:`Request`}),`\n`,_jsx(ParamField,{query:`token`,type:`string`,required:true,id:`param-token`,children:_jsxs(_components.p,{children:[`Signed token from the poll creative’s `,_jsx(_components.code,{children:`vote_url`}),`. It is already present in the `,_jsx(_components.code,{children:`vote_url`}),` query string — POST to that URL exactly as returned. The token must be in the query string; it is not read from the request body.`]})}),`\n`,_jsx(ParamField,{body:`option_id`,type:`string`,required:true,id:`param-option-id`,children:_jsxs(_components.p,{children:[`Selected option identifier from the poll creative’s `,_jsx(_components.code,{children:`options[].id`}),`.`]})}),`\n`,_jsx(RequestExample,{children:_jsx(CodeBlock,{filename:`Vote request body (POST to the returned vote_url)`,numberOfLines:`3`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"option_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"0\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})}),`\n`,_jsx(Heading,{level:`3`,id:`response`,children:`Response`}),`\n`,_jsxs(_components.p,{children:[`The response is wrapped in a `,_jsx(_components.code,{children:`status`}),` / `,_jsx(_components.code,{children:`data`}),` envelope. `,_jsx(_components.code,{children:`data`}),` holds the current aggregate results.`]}),`\n`,_jsxs(ResponseExample,{children:[_jsx(CodeBlock,{filename:`200 - Vote recorded`,numberOfLines:`13`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`13`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"status\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"success\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"data\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"sponsored_poll_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`123`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"question\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"What kind of playlist are you making?\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"total_votes\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`42`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"options\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"0\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"text\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Wedding\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"votes\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`21`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"percentage\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`50`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"1\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"text\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Study\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"votes\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`14`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"percentage\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`33.3`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"text\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Workout\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"votes\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`7`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"percentage\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`16.7`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`400 - Invalid option`,numberOfLines:`3`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"detail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Invalid poll option\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})]}),`\n`,_jsx(ResponseField,{name:`status`,type:`string`,id:`param-status`,children:_jsxs(_components.p,{children:[`Always `,_jsx(_components.code,{children:`\"success\"`}),` for a recorded (or deduplicated) vote.`]})}),`\n`,_jsxs(ResponseField,{name:`data`,type:`object`,id:`param-data`,children:[_jsx(_components.p,{children:`Current aggregate poll results.`}),_jsxs(Expandable,{title:`data properties`,children:[_jsx(ResponseField,{name:`sponsored_poll_id`,type:`integer`,id:`param-sponsored-poll-id`,children:_jsx(_components.p,{children:`Poll identifier.`})}),_jsx(ResponseField,{name:`question`,type:`string`,id:`param-question`,children:_jsx(_components.p,{children:`Poll question text.`})}),_jsx(ResponseField,{name:`total_votes`,type:`integer`,id:`param-total-votes`,children:_jsx(_components.p,{children:`Lifetime vote count for the poll.`})}),_jsxs(ResponseField,{name:`options`,type:`array`,id:`param-options`,children:[_jsx(_components.p,{children:`Lifetime aggregate result rows for each option.`}),_jsxs(Expandable,{title:`options properties`,children:[_jsx(ResponseField,{name:`id`,type:`string`,id:`param-id`,children:_jsx(_components.p,{children:`Option identifier.`})}),_jsx(ResponseField,{name:`text`,type:`string`,id:`param-text`,children:_jsx(_components.p,{children:`Option label.`})}),_jsx(ResponseField,{name:`votes`,type:`integer`,id:`param-votes`,children:_jsx(_components.p,{children:`Lifetime vote count for this option.`})}),_jsx(ResponseField,{name:`percentage`,type:`number`,id:`param-percentage`,children:_jsx(_components.p,{children:`Percentage of total votes for this option.`})})]})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`duplicate-votes`,children:`Duplicate Votes`}),`\n`,_jsxs(_components.p,{children:[`Each signed poll token records at most one vote for its bid/impression. A duplicate vote attempt does `,_jsx(_components.strong,{children:`not`}),` increment the aggregate counts and is `,_jsx(_components.strong,{children:`not`}),` an error — the endpoint returns `,_jsx(_components.code,{children:`200`}),` with the current aggregate results, exactly like a first vote. There is no separate duplicate-vote status code, so clients do not need special handling; the returned `,_jsx(_components.code,{children:`data`}),` is always safe to render.`]}),`\n`,_jsx(Heading,{level:`2`,id:`results`,children:`Results`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`http`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`http`,children:_jsxs(_components.code,{language:`http`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`GET`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` /api/v1/tracking/sponsored-polls/results?token=...`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Retrieve current aggregate results without recording a vote. Use this endpoint to refresh percentages after rendering, or when the user returns to an already-voted poll.`}),`\n`,_jsx(Heading,{level:`3`,id:`query-parameters`,children:`Query Parameters`}),`\n`,_jsx(ParamField,{query:`token`,type:`string`,required:true,id:`param-token-1`,children:_jsxs(_components.p,{children:[`Signed token from the poll creative’s `,_jsx(_components.code,{children:`results_url`}),`.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`response-2`,children:`Response`}),`\n`,_jsxs(_components.p,{children:[`Same `,_jsx(_components.code,{children:`status`}),` / `,_jsx(_components.code,{children:`data`}),` envelope as the vote endpoint.`]}),`\n`,_jsx(ResponseExample,{children:_jsx(CodeBlock,{filename:`200 - Results`,numberOfLines:`13`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`13`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"status\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"success\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"data\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"sponsored_poll_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`123`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"question\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"What kind of playlist are you making?\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"total_votes\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`42`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"options\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"0\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"text\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Wedding\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"votes\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`21`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"percentage\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`50`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"1\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"text\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Study\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"votes\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`14`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"percentage\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`33.3`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"text\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Workout\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"votes\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`7`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"percentage\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`16.7`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})}),`\n`,_jsx(ResponseField,{name:`status`,type:`string`,id:`param-status-1`,children:_jsxs(_components.p,{children:[`Always `,_jsx(_components.code,{children:`\"success\"`}),`.`]})}),`\n`,_jsx(ResponseField,{name:`data`,type:`object`,id:`param-data-1`,children:_jsxs(_components.p,{children:[`Current aggregate poll results — `,_jsx(_components.code,{children:`sponsored_poll_id`}),`, `,_jsx(_components.code,{children:`question`}),`, `,_jsx(_components.code,{children:`total_votes`}),`, and an `,_jsx(_components.code,{children:`options`}),` array of `,_jsx(_components.code,{children:`id`}),` / `,_jsx(_components.code,{children:`text`}),` / `,_jsx(_components.code,{children:`votes`}),` / `,_jsx(_components.code,{children:`percentage`}),` rows.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`error-handling`,children:`Error Handling`}),`\n`,_jsxs(_components.p,{children:[`Errors use the standard FastAPI shape — a single `,_jsx(_components.code,{children:`detail`}),` string:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"detail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Invalid poll option\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Status Code`}),_jsx(_components.th,{children:`Scenario`}),_jsx(_components.th,{children:_jsx(_components.code,{children:`detail`})}),_jsx(_components.th,{children:`Client Behavior`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`400 Bad Request`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`option_id`}),` does not match one of the poll options`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`Invalid poll option`})}),_jsx(_components.td,{children:`Keep the poll visible and let the user choose a valid option`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`404 Not Found`})}),_jsx(_components.td,{children:`Token is malformed, expired, or not valid for this poll`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`Link expired or not found`})}),_jsx(_components.td,{children:`Do not retry with the same token; request a fresh poll creative`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`422 Unprocessable Entity`})}),_jsxs(_components.td,{children:[`Required `,_jsx(_components.code,{children:`token`}),` query parameter or `,_jsx(_components.code,{children:`option_id`}),` body field is missing`]}),_jsx(_components.td,{children:`FastAPI validation detail`}),_jsx(_components.td,{children:`Fix the request; this indicates a client integration bug`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`500 Internal Server Error`})}),_jsx(_components.td,{children:`Tracking service failed unexpectedly`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`Internal Server Error`})}),_jsx(_components.td,{children:`Continue without blocking the chat experience`})]})]})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`422`}),` response body uses FastAPI’s validation format (`,_jsx(_components.code,{children:`detail`}),` is an array of field errors), not a single string.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`rendering-flow`,children:`Rendering Flow`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Render the poll question and option buttons from the bid response.`}),`\n`,_jsxs(_components.li,{children:[`Fire the impression pixel — extract the `,_jsx(_components.code,{children:`view_url`}),` query parameter from `,_jsx(_components.code,{children:`cta_url`}),` (or use the top-level `,_jsx(_components.code,{children:`view_url`}),` field when the poll has no `,_jsx(_components.code,{children:`cta_url`}),`) and request it when the poll becomes visible.`]}),`\n`,_jsxs(_components.li,{children:[`When the user selects an option, POST `,_jsx(_components.code,{children:`option_id`}),` to `,_jsx(_components.code,{children:`vote_url`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Replace the option buttons with the returned percentages and total vote count (read from the `,_jsx(_components.code,{children:`data`}),` object).`]}),`\n`,_jsxs(_components.li,{children:[`If `,_jsx(_components.code,{children:`cta_url`}),` is present, reveal the advertiser CTA after the vote.`]}),`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.code,{children:`results_url`}),` to refresh percentages without recording another vote.`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Poll Tracking (v1)","api":"POST /api/v1/tracking/sponsored-polls/vote","description":"Submit sponsored poll votes and retrieve signed aggregate results for direct API integrations.","href":"/api/api-reference/sponsored-poll-tracking"}}}},"mdxExtracts":{"tableOfContents":[{"title":"Vote","slug":"vote","depth":2,"children":[{"title":"Request","slug":"request","depth":3,"children":[]},{"title":"Response","slug":"response","depth":3,"children":[]},{"title":"Duplicate Votes","slug":"duplicate-votes","depth":3,"children":[]}]},{"title":"Results","slug":"results","depth":2,"children":[{"title":"Query Parameters","slug":"query-parameters","depth":3,"children":[]},{"title":"Response","slug":"response-2","depth":3,"children":[]}]},{"title":"Error Handling","slug":"error-handling","depth":2,"children":[]},{"title":"Rendering Flow","slug":"rendering-flow","depth":2,"children":[]}],"codeExamples":{"request":{"type":"RequestExample","children":[{"filename":"Vote request body (POST to the returned vote_url)","html":"\u003cpre class=\"shiki shiki-themes github-light-default dark-plus\" style=\"background-color:#ffffff;--shiki-dark-bg:#0B0C0E;color:#1f2328;--shiki-dark:#D4D4D4\" language=\"json\">\u003ccode language=\"json\" numberOfLines=\"3\">\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">{\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"option_id\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"0\"\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">}\u003c/span>\u003c/span>\n\u003c/code>\u003c/pre>"}],"attributes":[]},"response":{"type":"ResponseExample","children":[{"filename":"200 - Vote recorded","html":"\u003cpre class=\"shiki shiki-themes github-light-default dark-plus\" style=\"background-color:#ffffff;--shiki-dark-bg:#0B0C0E;color:#1f2328;--shiki-dark:#D4D4D4\" language=\"json\">\u003ccode language=\"json\" numberOfLines=\"13\">\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">{\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"status\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"success\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"data\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: {\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"sponsored_poll_id\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">123\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"question\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"What kind of playlist are you making?\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"total_votes\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">42\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"options\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: [\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> { \u003c/span>\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\">\"id\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"0\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">, \u003c/span>\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\">\"text\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"Wedding\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">, \u003c/span>\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\">\"votes\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">21\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">, \u003c/span>\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\">\"percentage\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">50\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> },\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> { \u003c/span>\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\">\"id\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"1\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">, \u003c/span>\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\">\"text\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"Study\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">, \u003c/span>\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\">\"votes\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">14\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">, \u003c/span>\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\">\"percentage\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">33.3\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> },\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> { \u003c/span>\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\">\"id\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"2\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">, \u003c/span>\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\">\"text\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"Workout\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">, \u003c/span>\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\">\"votes\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">7\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">, \u003c/span>\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\">\"percentage\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">16.7\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> }\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> ]\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> }\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">}\u003c/span>\u003c/span>\n\u003c/code>\u003c/pre>"},{"filename":"400 - Invalid option","html":"\u003cpre class=\"shiki shiki-themes github-light-default dark-plus\" style=\"background-color:#ffffff;--shiki-dark-bg:#0B0C0E;color:#1f2328;--shiki-dark:#D4D4D4\" language=\"json\">\u003ccode language=\"json\" numberOfLines=\"3\">\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">{\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"detail\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"Invalid poll option\"\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">}\u003c/span>\u003c/span>\n\u003c/code>\u003c/pre>"}],"attributes":[]}},"endpoint":{"title":"Poll Tracking (v1)","path":"/api/v1/tracking/sponsored-polls/vote","servers":[{"url":"https://ssp.thrad.ai"}],"method":"post","request":{"security":[{"title":"API Key Auth","parameters":{"header":{"thrad-api-key":{"type":"apiKey"}},"query":{},"cookie":{}}}],"parameters":{"query":{"token":{"schema":[{"type":"string","description":"Signed token from the poll creative’s `results_url` .","required":true}]}},"header":{},"cookie":{},"path":{}},"body":{"application/json":{"schemaArray":[{"type":"object","properties":{"option_id":[{"type":"string","description":"Selected option identifier from the poll creative’s `options[].id` .","required":true}]}}],"examples":{"example":{"value":{"option_id":"\u003cstring>"}}}}}},"response":{"200":{"application/json":{"schemaArray":[{"type":"object","properties":{"status":[{"type":"string","description":"Always `\"success\"` ."}],"data":[{"type":"object","properties":{},"description":"Current aggregate poll results — `sponsored_poll_id` , `question` , `total_votes` , and an `options` array of `id` / `text` / `votes` / `percentage` rows."}]}}],"examples":{"example":{"value":{"status":"\u003cstring>","data":{}}}}}}},"deprecated":false}},"jsLinks":[],"subdomain":"thrads-5feffa3d","siteName":"Thrad Docs","title":"Poll Tracking (v1) - Thrad Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-05T21:40:35.576Z","originalFileLocation":"api/api-reference/sponsored-poll-tracking.md"},"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=\"light\"}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=\"Submit sponsored poll votes and retrieve signed aggregate results for direct API integrations.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Thrad Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/thrads-5feffa3d/bkiWb08aHWdUwdNK/_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/thrads-5feffa3d/bkiWb08aHWdUwdNK/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/thrads-5feffa3d/bkiWb08aHWdUwdNK/_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/thrads-5feffa3d/bkiWb08aHWdUwdNK/_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/thrads-5feffa3d/bkiWb08aHWdUwdNK/_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/thrads-5feffa3d/bkiWb08aHWdUwdNK/_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/thrads-5feffa3d/bkiWb08aHWdUwdNK/_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/thrads-5feffa3d/bkiWb08aHWdUwdNK/_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/thrads-5feffa3d/bkiWb08aHWdUwdNK/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Poll Tracking (v1) - Thrad Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Submit sponsored poll votes and retrieve signed aggregate results for direct API integrations.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Thrad Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.thrad.ai/api/api-reference/sponsored-poll-tracking\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://thrads-5feffa3d.mintlify.site/_mintlify/api/og/v2?division=v1+%28deprecated%29\u0026amp;title=Poll+Tracking+%28v1%29\u0026amp;description=Submit+sponsored+poll+votes+and+retrieve+signed+aggregate+results+for+direct+API+integrations.\u0026amp;theme=3f468421409f48e312fa01a5\u0026amp;signature=95690c8a642fa5ddce216b79cce65df7244dede14fe422f2a29cc7eef8a819ce\">\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=\"Poll Tracking (v1) - Thrad Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Submit sponsored poll votes and retrieve signed aggregate results for direct API integrations.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://thrads-5feffa3d.mintlify.site/_mintlify/api/og/v2?division=v1+%28deprecated%29\u0026amp;title=Poll+Tracking+%28v1%29\u0026amp;description=Submit+sponsored+poll+votes+and+retrieve+signed+aggregate+results+for+direct+API+integrations.\u0026amp;theme=3f468421409f48e312fa01a5\u0026amp;signature=95690c8a642fa5ddce216b79cce65df7244dede14fe422f2a29cc7eef8a819ce\">\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/thrads-5feffa3d/bkiWb08aHWdUwdNK/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Thrad Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1E1E20\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.thrad.ai/api/api-reference/sponsored-poll-tracking\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api/api-reference/sponsored-poll-tracking.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.thrad.ai/#organization\",\"name\":\"Thrad Docs\",\"url\":\"https://docs.thrad.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/thrads-5feffa3d/DxyVKooiEHOWBPsr/images/Thrad-Logo-Orange.png?fit=max\u0026auto=format\u0026n=DxyVKooiEHOWBPsr\u0026q=85\u0026s=271f3bf20d1b3427a47628ba4c698a12\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.thrad.ai#website\",\"name\":\"Thrad Docs\",\"url\":\"https://docs.thrad.ai\",\"publisher\":{\"@id\":\"https://docs.thrad.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.thrad.ai/api/api-reference/sponsored-poll-tracking#webpage\",\"url\":\"https://docs.thrad.ai/api/api-reference/sponsored-poll-tracking\",\"name\":\"Poll Tracking (v1)\",\"description\":\"Submit sponsored poll votes and retrieve signed aggregate results for direct API integrations.\",\"dateModified\":\"2026-10-05T21:40:35.576Z\",\"isPartOf\":{\"@id\":\"https://docs.thrad.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.thrad.ai/api/api-reference/sponsored-poll-tracking#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.thrad.ai/api/api-reference/sponsored-poll-tracking#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API Reference\",\"item\":\"https://docs.thrad.ai/api/api-reference/bid-request-v2\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"v1 (deprecated)\",\"item\":\"https://docs.thrad.ai/api/api-reference/bid-request\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Poll Tracking (v1)\",\"item\":\"https://docs.thrad.ai/api/api-reference/sponsored-poll-tracking\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.thrad.ai/api/api-reference/sponsored-poll-tracking#apireference\",\"headline\":\"Poll Tracking (v1)\",\"name\":\"Poll Tracking (v1)\",\"description\":\"Submit sponsored poll votes and retrieve signed aggregate results for direct API integrations.\",\"url\":\"https://docs.thrad.ai/api/api-reference/sponsored-poll-tracking\",\"mainEntityOfPage\":{\"@id\":\"https://docs.thrad.ai/api/api-reference/sponsored-poll-tracking#webpage\"},\"dateModified\":\"2026-10-05T21:40:35.576Z\",\"publisher\":{\"@id\":\"https://docs.thrad.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.thrad.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Thrad Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Thrad Docs","nav":{"global":null,"products":[{"product":"Publishers","icon":"message-square","description":"Show ads in your AI app","groups":[{"group":"Get Started","pages":[{"title":"Introduction","href":"/introduction"},{"title":"Quickstart","href":"/quickstart"}]},{"group":"Build with AI","pages":[{"title":"Agent Skills","href":"/agent-skills"}]},{"group":"Serving Ads","pages":[{"title":"Ad Formats \u0026 Rendering","href":"/api/guides/rendering-v2"},{"title":"User \u0026 Chat Identification","href":"/api/guides/user-identification-v2"},{"title":"Impression Billing","href":"/api/guides/billing-viewability"},{"title":"Best Practices","href":"/api/guides/best-practices"},{"title":"Go live","href":"/go-live"}]},{"group":"Reporting","pages":[{"title":"Revenue \u0026 Metrics","href":"/insights/overview"}]},{"group":"API Reference","pages":[{"title":"Bid Request (v2)","api":"POST /api/v2/bid-request","href":"/api/api-reference/bid-request-v2"},{"title":"Feedback","api":"POST {actions.feedback_url}","playground":"none","href":"/api/api-reference/feedback-v2"},{"title":"Poll Voting","api":"POST {actions.vote_url}","playground":"none","href":"/api/api-reference/poll-voting"},{"title":"Insights","api":"GET https://api.thrad.ai/v1/publisher/insights","href":"/insights/api-reference"},{"title":"Publishers","api":"GET https://api.thrad.ai/v1/publisher/publishers","href":"/insights/publishers"},{"group":"v1 (deprecated)","pages":[{"title":"Bid Request (v1)","api":"POST /api/v1/ssp/bid-request","deprecated":true,"href":"/api/api-reference/bid-request"},{"title":"Feedback (v1)","api":"POST /api/v1/tracking/feedback","description":"Record user feedback (thumbs up / thumbs down) for an ad impression","href":"/api/api-reference/feedback"},{"title":"Poll Tracking (v1)","api":"POST /api/v1/tracking/sponsored-polls/vote","href":"/api/api-reference/sponsored-poll-tracking"},{"title":"Publisher Configuration","description":"Configure ad pacing, contextual serving, creative constraints, and experiments using the config object.","deprecated":true,"href":"/api/guides/publisher-config"},{"title":"Ad Formats \u0026 Rendering","deprecated":true,"href":"/api/guides/rendering-ads"},{"title":"Tracking \u0026 Viewability","deprecated":true,"href":"/api/guides/tracking"},{"title":"User \u0026 Chat Identification","deprecated":true,"href":"/api/guides/user-identification"}]}]}]},{"product":"Advertisers","icon":"megaphone","description":"Run campaigns and track conversions","pages":[{"title":"Advertisers","href":"/advertisers/introduction"}]},{"product":"DSP","icon":"gavel","description":"Bid on Thrad inventory","pages":[{"title":"DSP","href":"/dsp/introduction"}]}]},"basePath":"","title":"Poll Tracking (v1) - Thrad Docs","buildId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","deploymentId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","dynamics":["c2aa737661","2b790eda92","b0f84f53ff"],"chunks":["OpenApiReferenceProvider-C-hEh3I2.js","utils-CnF4QiUD.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C7PVNbel.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-8ytevL2A.js","snippetPresets-BT1alx3v.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BLXC0i_W.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CyLIGI9_.js","shallow-DC0lGVIW.js","getApiPlaygroundDisplay-CgDQ85tN.js","CodeSnippet-6-I-Gpv9.js","CodeSnippets-BAk1kDdu.js","Page-C945cI-W.js","getPastedJson-B276RuWN.js","icon-BqP8etTm.js","MethodPill-DM6sbxG1.js","DuplicateIcon-PyJglOaE.js","createIcon-CMeOMAc_.js","DynamicMarkdown-BoyYAA8K.js","SectionHeading-DAYv3gvZ.js","axios-vUo_bRtp.js"]}