const response = await fetch(
`https://picked.gg/api/v1/bots/${client.user.id}/votes?limit=100`,
{ headers: { Authorization: process.env.PICKED_TOKEN } }
);
const { votes } = await response.json();
for (const vote of votes) {
if (Date.parse(vote.voted_at) <= lastSeen) break; // newest first
await grantReward(vote.user_id);
}
import os, aiohttp
async with aiohttp.ClientSession() as session:
async with session.get(
f"https://picked.gg/api/v1/bots/{bot.user.id}/votes",
params={"limit": 100},
headers={"Authorization": os.environ["PICKED_TOKEN"]},
) as response:
votes = (await response.json())["votes"]
for vote in votes:
if vote["voted_at"] <= last_seen: # newest first, same ISO format
break
await grant_reward(int(vote["user_id"]))
The vote log, newest first. Read from the append-only event log rather than the one-row-per-user table, which is the only place the history exists.
User ids and timestamps and nothing else: the caller already shares a server with these people, and returning names or avatars would turn a vote lookup into a profile scrape. Rate limit: 60 requests per minute per token.
const response = await fetch(
`https://picked.gg/api/v1/bots/${client.user.id}/votes?limit=100`,
{ headers: { Authorization: process.env.PICKED_TOKEN } }
);
const { votes } = await response.json();
for (const vote of votes) {
if (Date.parse(vote.voted_at) <= lastSeen) break; // newest first
await grantReward(vote.user_id);
}
import os, aiohttp
async with aiohttp.ClientSession() as session:
async with session.get(
f"https://picked.gg/api/v1/bots/{bot.user.id}/votes",
params={"limit": 100},
headers={"Authorization": os.environ["PICKED_TOKEN"]},
) as response:
votes = (await response.json())["votes"]
for vote in votes:
if vote["voted_at"] <= last_seen: # newest first, same ISO format
break
await grant_reward(int(vote["user_id"]))
The bot's API token, generated on its edit page. Sent bare or as Bearer <token> -- both are accepted, because the libraries already posting to other lists send both. The token is shown once; generating a new one invalidates the old.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Picked.gg API","description":"Post server counts, publish commands, read votes and receive vote webhooks from picked.gg.","colors":{"primary":"#3f6b00","light":"#b6f24a","dark":"#3f6b00"},"logo":{"light":"https://mintcdn.com/discord-bot-list/ejs7hyHiUJZbewnI/logo/light.png?fit=max\u0026auto=format\u0026n=ejs7hyHiUJZbewnI\u0026q=85\u0026s=b3c2ca9e1350b7d8f5788bd130b50b97","dark":"https://mintcdn.com/discord-bot-list/ejs7hyHiUJZbewnI/logo/dark.png?fit=max\u0026auto=format\u0026n=ejs7hyHiUJZbewnI\u0026q=85\u0026s=d2165dccd4ae3b8dad03991888f1535f","href":"https://picked.gg"},"favicon":"https://mintcdn.com/discord-bot-list/KJaZKDpHL7K-BdvD/favicon.png?fit=max\u0026auto=format\u0026n=KJaZKDpHL7K-BdvD\u0026q=85\u0026s=e99fa65cbfdd7473cb2e59955ce475cb","appearance":{"default":"dark"},"background":{"color":{"light":"#f5f6f8","dark":"#07090c"}},"navbar":{"links":[{"href":"https://picked.gg","label":"Site"}],"primary":{"type":"button","label":"List Your Bot","href":"https://picked.gg/submit"}},"footer":{"socials":{"website":"https://picked.gg"}},"fonts":{"heading":{"family":"Space Grotesk","weight":700},"body":{"family":"Inter","weight":400}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"discord-bot-list","hasAudioNarration":false,"actualSubdomain":"discord-bot-list","customDomains":["docs.picked.gg"],"gitSource":{"type":"github","owner":"quadey","repo":"picked.gg","deployBranch":"main","contentDirectory":"api-docs","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6abe2597d34a93f1d1a189e4","clientVersion":"0.0.4124","searchFilterCounts":[{"language":"default","tag":"API Reference","count":5},{"language":"default","tag":"Guides","count":4},{"language":"default","tag":"Getting Started","count":3},{"language":"default","tag":"Bot","count":2},{"language":"default","tag":"Votes","count":2},{"language":"default","tag":"Public","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[],"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":"html.dark #topbar-cta-button .bg-primary-dark{background-color:#b6f24a}html.dark #topbar-cta-button .text-white,html.dark #topbar-cta-button .text-white\\/90{color:#0a0f02}.mdx-content table td{min-width:0}.mdx-content table td code{white-space:nowrap}:root{--dur-base: 220ms;--dur-page: 450ms;--ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1)}@media (prefers-reduced-motion: no-preference){@keyframes doc-enter{from{opacity:0;transform:translateY(14px)}}@keyframes doc-reveal{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}#header,.mdx-content>:nth-child(-n+6){animation:doc-enter var(--dur-page) var(--ease-out-expo) backwards}.mdx-content>:nth-child(2){animation-delay:40ms}.mdx-content>:nth-child(3){animation-delay:80ms}.mdx-content>:nth-child(4){animation-delay:120ms}.mdx-content>:nth-child(5){animation-delay:160ms}.mdx-content>:nth-child(6){animation-delay:200ms}.card{transition:transform var(--dur-base) var(--ease-out-expo),\n border-color var(--dur-base) var(--ease-out-expo)}.card:hover{transform:translateY(-2px)}@supports (animation-timeline: view()){.mdx-content>:nth-child(n+7){animation:doc-reveal linear both;animation-timeline:view();animation-range:entry 0% entry 30%}}}"}],"page":{"pagePath":"api-reference/votes/recent-votes","slug":"/api-reference/votes/recent-votes","pageMetadata":{"title":"Recent Votes","description":"The vote log, newest first. Read from the append-only event log rather than the one-row-per-user table, which is the only place the history exists.\n\nUser ids and timestamps and nothing else: the caller already shares a server with these people, and returning names or avatars would turn a vote lookup into a profile scrape. Rate limit: 60 requests per minute per token.","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/bots/{id}/votes","href":"/api-reference/votes/recent-votes","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"The vote log, newest first. Read from the append-only event log rather than the one-row-per-user table, which is the only place the history exists.\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"User ids and timestamps and nothing else: the caller already shares a server with these people, and returning names or avatars would turn a vote lookup into a profile scrape. Rate limit: 60 requests per minute per token.\"\n })]\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":"Recent Votes","description":"The vote log, newest first. Read from the append-only event log rather than the one-row-per-user table, which is the only place the history exists.\n\nUser ids and timestamps and nothing else: the caller already shares a server with these people, and returning names or avatars would turn a vote lookup into a profile scrape. Rate limit: 60 requests per minute per token.","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/bots/{id}/votes","href":"/api-reference/votes/recent-votes","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"listVotes","summary":"Recent Votes","description":"The vote log, newest first. Read from the append-only event log rather than the one-row-per-user table, which is the only place the history exists.\n\nUser ids and timestamps and nothing else: the caller already shares a server with these people, and returning names or avatars would turn a vote lookup into a profile scrape. Rate limit: 60 requests per minute per token.","tags":["Votes"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl \"https://picked.gg/api/v1/bots/YOUR_BOT_ID/votes?limit=100\" \\\n -H \"Authorization: YOUR_API_TOKEN\""},{"lang":"javascript","label":"discord.js","source":"const response = await fetch(\n `https://picked.gg/api/v1/bots/${client.user.id}/votes?limit=100`,\n { headers: { Authorization: process.env.PICKED_TOKEN } }\n);\nconst { votes } = await response.json();\n\nfor (const vote of votes) {\n if (Date.parse(vote.voted_at) \u003c= lastSeen) break; // newest first\n await grantReward(vote.user_id);\n}"},{"lang":"python","label":"discord.py","source":"import os, aiohttp\n\nasync with aiohttp.ClientSession() as session:\n async with session.get(\n f\"https://picked.gg/api/v1/bots/{bot.user.id}/votes\",\n params={\"limit\": 100},\n headers={\"Authorization\": os.environ[\"PICKED_TOKEN\"]},\n ) as response:\n votes = (await response.json())[\"votes\"]\n\nfor vote in votes:\n if vote[\"voted_at\"] \u003c= last_seen: # newest first, same ISO format\n break\n await grant_reward(int(vote[\"user_id\"]))"}],"parameters":["fdf9bf19-2c6d-42a6-95a1-4f1bd50efd6b","1c15b7e5-2bd1-4f05-b7ad-8965769a40ed"],"responses":{"200":"aee74aef-4fe6-4f3a-827d-d5478ee5c067","401":"79ac919f-7682-4ed8-9ba7-fa9f8ba020fb","404":"77f43a97-5206-4931-a310-061eab66c6f9","429":"515804d0-72ac-43ee-9d47-3cb457316fcf"},"method":"get","type":"path","servers":["755fe365-e06e-4d26-95ca-7c6da2a485ae"],"security":["d8fa3247-b2b3-4c37-aab6-cfc626ce8b65"],"path":"/api/v1/bots/{id}/votes","baseUrlOptions":["https://picked.gg"],"title":"Recent Votes","codeSamples":[{"label":"cURL","lang":"bash","source":"curl \"https://picked.gg/api/v1/bots/YOUR_BOT_ID/votes?limit=100\" \\\n -H \"Authorization: YOUR_API_TOKEN\""},{"label":"discord.js","lang":"javascript","source":"const response = await fetch(\n `https://picked.gg/api/v1/bots/${client.user.id}/votes?limit=100`,\n { headers: { Authorization: process.env.PICKED_TOKEN } }\n);\nconst { votes } = await response.json();\n\nfor (const vote of votes) {\n if (Date.parse(vote.voted_at) \u003c= lastSeen) break; // newest first\n await grantReward(vote.user_id);\n}"},{"label":"discord.py","lang":"python","source":"import os, aiohttp\n\nasync with aiohttp.ClientSession() as session:\n async with session.get(\n f\"https://picked.gg/api/v1/bots/{bot.user.id}/votes\",\n params={\"limit\": 100},\n headers={\"Authorization\": os.environ[\"PICKED_TOKEN\"]},\n ) as response:\n votes = (await response.json())[\"votes\"]\n\nfor vote in votes:\n if vote[\"voted_at\"] \u003c= last_seen: # newest first, same ISO format\n break\n await grant_reward(int(vote[\"user_id\"]))"}],"requiredOnlyExamples":false,"requestExampleType":"codeSamples","responseExampleType":"generated"},"dependencies":{"parameters":{"fdf9bf19-2c6d-42a6-95a1-4f1bd50efd6b":{"name":"id","in":"path","required":true,"description":"The bot's Discord application id. It has to be the bot the token belongs to.","schema":{"type":"string","pattern":"^\\d{17,19}$","isRequired":true,"description":"The bot's Discord application id. It has to be the bot the token belongs to.","uniqueKey":"","typeLabel":"string"},"example":"1092194789458481202"},"1c15b7e5-2bd1-4f05-b7ad-8965769a40ed":{"name":"limit","in":"query","required":false,"description":"1 to 100. Anything outside the range is clamped rather than refused.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50,"isRequired":false,"description":"1 to 100. Anything outside the range is clamped rather than refused.","uniqueKey":"","typeLabel":"integer"}}},"responses":{"aee74aef-4fe6-4f3a-827d-d5478ee5c067":{"description":"The most recent votes.","content":{"application/json":{"schema":{"type":"object","properties":{"votes":{"type":"array","items":{"type":"object","properties":{"user_id":{"type":"string","uniqueKey":"votes.items.[INDEX].user_id","typeLabel":"string"},"voted_at":{"type":"string","format":"date-time","uniqueKey":"votes.items.[INDEX].voted_at","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"votes.items.[INDEX]","typeLabel":"object"},"uniqueKey":"votes","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"example":{"votes":[{"user_id":"336878018143223809","voted_at":"2026-09-12T08:15:00.000Z"}]},"examples":{"Example":{"title":"Example","value":{"votes":[{"user_id":"336878018143223809","voted_at":"2026-09-12T08:15:00.000Z"}]}}},"exampleType":"examples"}},"exampleType":"examples"},"79ac919f-7682-4ed8-9ba7-fa9f8ba020fb":{"description":"Missing, malformed or unknown token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"One sentence, safe to show a developer.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"retryAfter":{"type":"integer","description":"Seconds until the limit resets. Only on 429.","uniqueKey":"retryAfter","typeLabel":"integer"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"example":{"error":"Invalid token."},"examples":{"Example":{"title":"Example","value":{"error":"Invalid token."}}},"exampleType":"examples"}},"exampleType":"examples"},"77f43a97-5206-4931-a310-061eab66c6f9":{"description":"No such bot, or the token belongs to a different one.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"One sentence, safe to show a developer.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"retryAfter":{"type":"integer","description":"Seconds until the limit resets. Only on 429.","uniqueKey":"retryAfter","typeLabel":"integer"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"example":{"error":"Bot not found."},"examples":{"Example":{"title":"Example","value":{"error":"Bot not found."}}},"exampleType":"examples"}},"exampleType":"examples"},"515804d0-72ac-43ee-9d47-3cb457316fcf":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"One sentence, safe to show a developer.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"retryAfter":{"type":"integer","description":"Seconds until the limit resets. Only on 429.","uniqueKey":"retryAfter","typeLabel":"integer"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"example":{"error":"Rate limit exceeded.","retryAfter":42},"examples":{"Example":{"title":"Example","value":{"error":"Rate limit exceeded.","retryAfter":42}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"d8fa3247-b2b3-4c37-aab6-cfc626ce8b65":{"botToken":{"type":"apiKey","in":"header","name":"Authorization","description":"The bot's API token, generated on its edit page. Sent bare or as `Bearer \u003ctoken>` -- both are accepted, because the libraries already posting to other lists send both. The token is shown once; generating a new one invalidates the old.","scopes":[]}}},"servers":{"755fe365-e06e-4d26-95ca-7c6da2a485ae":{"url":"https://picked.gg","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"Authorization","description":"The bot's API token, generated on its edit page. Sent bare or as `Bearer \u003ctoken>` -- both are accepted, because the libraries already posting to other lists send both. The token is shown once; generating a new one invalidates the old.","scopes":[]},"schema":{"title":"Authorization","type":"string","description":"The bot's API token, generated on its edit page. Sent bare or as `Bearer \u003ctoken>` -- both are accepted, because the libraries already posting to other lists send both. The token is shown once; generating a new one invalidates the old.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"botToken","name":"Authorization"}],"title":"botToken"}]},"originalFileLocation":"openapi.json"},"subdomain":"discord-bot-list","siteName":"Picked.gg API","title":"Recent Votes - Picked.gg API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-01T09:19:23.367Z","originalFileLocation":"api-reference/votes/recent-votes.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=\"The vote log, newest first. Read from the append-only event log rather than the one-row-per-user table, which is the only place the history exists. User ids and timestamps and nothing else: the caller already shares a server with these people, and returning names or avatars would turn a vote lookup into a profile scrape. Rate limit: 60 requests per minute per token.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Picked.gg 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/discord-bot-list/WTUM4iwY_nK2wmqu/_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/discord-bot-list/WTUM4iwY_nK2wmqu/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/discord-bot-list/WTUM4iwY_nK2wmqu/_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/discord-bot-list/WTUM4iwY_nK2wmqu/_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/discord-bot-list/WTUM4iwY_nK2wmqu/_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/discord-bot-list/WTUM4iwY_nK2wmqu/_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/discord-bot-list/WTUM4iwY_nK2wmqu/_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/discord-bot-list/WTUM4iwY_nK2wmqu/_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/discord-bot-list/WTUM4iwY_nK2wmqu/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Recent Votes - Picked.gg API\">\u003cmeta data-mint-head property=\"og:description\" content=\"The vote log, newest first. Read from the append-only event log rather than the one-row-per-user table, which is the only place the history exists. User ids and timestamps and nothing else: the caller already shares a server with these people, and returning names or avatars would turn a vote lookup into a profile scrape. Rate limit: 60 requests per minute per token.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Picked.gg API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.picked.gg/api-reference/votes/recent-votes\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://discord-bot-list.mintlify.site/_mintlify/api/og/v2?division=Votes\u0026amp;title=Recent+Votes\u0026amp;description=The+vote+log%2C+newest+first.+Read+from+the+append-only+event+log+rather+than+the+one-row-per-user+table%2C+which+is+the+only+place+the+history+exists.%0A%0AUser+ids+an\u0026amp;theme=19a5af8f0aff01bf5002c367\u0026amp;signature=b4966a724de96456acf817fbc9b9ab8c3c04f8f066dee68ea9e0ba6aacb7328c\">\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=\"Recent Votes - Picked.gg API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"The vote log, newest first. Read from the append-only event log rather than the one-row-per-user table, which is the only place the history exists. User ids and timestamps and nothing else: the caller already shares a server with these people, and returning names or avatars would turn a vote lookup into a profile scrape. Rate limit: 60 requests per minute per token.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://discord-bot-list.mintlify.site/_mintlify/api/og/v2?division=Votes\u0026amp;title=Recent+Votes\u0026amp;description=The+vote+log%2C+newest+first.+Read+from+the+append-only+event+log+rather+than+the+one-row-per-user+table%2C+which+is+the+only+place+the+history+exists.%0A%0AUser+ids+an\u0026amp;theme=19a5af8f0aff01bf5002c367\u0026amp;signature=b4966a724de96456acf817fbc9b9ab8c3c04f8f066dee68ea9e0ba6aacb7328c\">\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/discord-bot-list/WTUM4iwY_nK2wmqu/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Picked.gg API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#3f6b00\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.picked.gg/api-reference/votes/recent-votes\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/votes/recent-votes.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.picked.gg/#organization\",\"name\":\"Picked.gg API\",\"url\":\"https://docs.picked.gg\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/discord-bot-list/ejs7hyHiUJZbewnI/logo/light.png?fit=max\u0026auto=format\u0026n=ejs7hyHiUJZbewnI\u0026q=85\u0026s=b3c2ca9e1350b7d8f5788bd130b50b97\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.picked.gg#website\",\"name\":\"Picked.gg API\",\"url\":\"https://docs.picked.gg\",\"publisher\":{\"@id\":\"https://docs.picked.gg/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.picked.gg/api-reference/votes/recent-votes#webpage\",\"url\":\"https://docs.picked.gg/api-reference/votes/recent-votes\",\"name\":\"Recent Votes\",\"description\":\"The vote log, newest first. Read from the append-only event log rather than the one-row-per-user table, which is the only place the history exists. User ids and timestamps and nothing else: the caller already shares a server with these people, and returning names or avatars would turn a vote lookup into a profile scrape. Rate limit: 60 requests per minute per token.\",\"dateModified\":\"2026-10-01T09:19:23.367Z\",\"isPartOf\":{\"@id\":\"https://docs.picked.gg#website\"},\"breadcrumb\":{\"@id\":\"https://docs.picked.gg/api-reference/votes/recent-votes#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.picked.gg/api-reference/votes/recent-votes#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API Reference\",\"item\":\"https://docs.picked.gg/api-reference/bot/post-the-server-count\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Votes\",\"item\":\"https://docs.picked.gg/api-reference/votes/check-a-user-vote\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Recent Votes\",\"item\":\"https://docs.picked.gg/api-reference/votes/recent-votes\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.picked.gg/api-reference/votes/recent-votes#apireference\",\"headline\":\"Recent Votes\",\"name\":\"Recent Votes\",\"description\":\"The vote log, newest first. Read from the append-only event log rather than the one-row-per-user table, which is the only place the history exists. User ids and timestamps and nothing else: the caller already shares a server with these people, and returning names or avatars would turn a vote lookup into a profile scrape. Rate limit: 60 requests per minute per token.\",\"url\":\"https://docs.picked.gg/api-reference/votes/recent-votes\",\"mainEntityOfPage\":{\"@id\":\"https://docs.picked.gg/api-reference/votes/recent-votes#webpage\"},\"dateModified\":\"2026-10-01T09:19:23.367Z\",\"publisher\":{\"@id\":\"https://docs.picked.gg/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.picked.gg#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Picked.gg API\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Picked.gg API\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/votes/recent-votes.md","siteName":"Picked.gg API","nav":{"global":null,"groups":[{"group":"Getting Started","pages":[{"title":"Picked.gg API","href":"/index"},{"title":"Authentication","href":"/authentication"},{"title":"Errors and Rate Limits","href":"/errors"}]},{"group":"API Reference","pages":[{"group":"Bot","pages":[{"title":"Post the Server Count","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/bots/{id}/stats","href":"/api-reference/bot/post-the-server-count"},{"title":"Publish the Commands","deprecated":null,"version":null,"openapi":"/openapi.json put /api/v1/bots/{id}/commands","href":"/api-reference/bot/publish-the-commands"}]},{"group":"Votes","pages":[{"title":"Check a User Vote","description":"Answers whether a user is inside their current 12-hour vote window. This is the endpoint that makes vote-for-perks possible, so its limit is the highest on the API: 600 requests per minute per token.\n\n`voted` is 0 or 1 because that is what bot code written against other lists expects; `hasVoted` is the readable alias for new code. `nextVoteAt` lets the bot tell the user when to come back without recomputing the cooldown.","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/bots/{id}/check","href":"/api-reference/votes/check-a-user-vote"},{"title":"Recent Votes","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/bots/{id}/votes","href":"/api-reference/votes/recent-votes"}]},{"group":"Public","pages":[{"title":"Vote Count Badge","description":"An embeddable badge, public and unauthenticated: the point is to be pasted into a README where no credential can be kept, and it exposes only the vote count, which is already on the public bot page.\n\nA hidden or unknown bot still gets a badge reading `unknown` rather than a 404 -- a broken image in somebody's README is the worse outcome. Cached for 5 minutes.","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/bots/{id}/widget","href":"/api-reference/public/vote-count-badge"}]}]},{"group":"Guides","pages":[{"title":"Official Libraries","href":"/guides/libraries"},{"title":"Autoposting Your Server Count","href":"/guides/autoposting"},{"title":"Vote Webhook","href":"/guides/vote-webhook"},{"title":"Vote Rewards","href":"/guides/vote-rewards"}]}]},"basePath":"","title":"Recent Votes - Picked.gg API","buildId":"dpl_8hoxaqFTU7hTr6A2fUraxAyjuiZo","deploymentId":"dpl_8hoxaqFTU7hTr6A2fUraxAyjuiZo","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CDiBsYGW.js","utils-KF9rPlmF.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C26urKTX.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-BdjmJAC1.js","snippetPresets-3IpDBjt3.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-D4x_2vvo.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BIWdc5Pa.js","shallow-LQqfiMNd.js","getApiPlaygroundDisplay-DryzlOZG.js","CodeSnippet-tcJujU4r.js","CodeSnippets-BHp0nVLL.js","Page-1CZdsdAn.js","getPastedJson-DU-1ayUv.js","icon-CZK2hPr4.js","MethodPill-DOaqmTFC.js","DuplicateIcon-B5-nUxxl.js","createIcon-CDP_U77G.js","DynamicMarkdown-GHvayGOn.js","SectionHeading-BYvpkmUD.js","axios-vUo_bRtp.js","Markdown-uxhlayGT.js","clsx-B35qUV0p.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-BvrGG8gU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-CAf0yVYe.js"]}