API Documentation
With the MicupList API you can post your bot's server count, check whether users voted and receive vote webhooks.
Authentication
Create an API token on your bot's dashboard page and send it in the Authorization header of every request.
Authorization: ml_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxBase URL:
https://micuplist.me/api/v1Rate limits: 60 requests per minute per IP; stats posting is limited to 2 requests per minute per bot.
Endpoints
/bots/{id}/statsToken requiredUpdates your bot's server (and optional shard) count.
{ "serverCount": 1250, "shardCount": 2 }/bots/{id}/check?userId={userId}Token requiredReturns whether the user voted within the cooldown window.
{ "voted": true }/bots/{id}/votesToken requiredReturns the latest 100 votes for your bot.
/bots/{id}Returns public information about an approved bot.
/servers/{id}Returns public information about an approved server.
Vote webhook
If you set a webhook URL in your dashboard, a POST request like the one below is sent on every vote. Verify it by comparing the Authorization header with your webhook secret. Failed deliveries are retried 3 times.
POST https://your-bot.example.com/micuplist
Authorization: <webhook secret>
Content-Type: application/json
{
"type": "vote", // "test" when sent from the dashboard
"botId": "1564535472599334913",
"userId": "1559444666317799424",
"isWeekend": false,
"timestamp": "2026-10-27T12:00:00.000Z"
}Examples
JavaScript
const TOKEN = process.env.MICUPLIST_TOKEN;
const BOT_ID = '<your bot id>';
// Post server count every 30 minutes
setInterval(async () => {
await fetch('https://micuplist.me/api/v1/bots/' + BOT_ID + '/stats', {
method: 'POST',
headers: { Authorization: TOKEN, 'Content-Type': 'application/json' },
body: JSON.stringify({ serverCount: client.guilds.cache.size }),
});
}, 30 * 60 * 1000);
// Check whether a user voted
const res = await fetch('https://micuplist.me/api/v1/bots/' + BOT_ID + '/check?userId=' + userId, {
headers: { Authorization: TOKEN },
});
const { voted } = await res.json();Python
import os, requests
TOKEN = os.environ["MICUPLIST_TOKEN"]
BOT_ID = "<your bot id>"
requests.post(
f"https://micuplist.me/api/v1/bots/{BOT_ID}/stats",
headers={"Authorization": TOKEN},
json={"serverCount": 1250},
timeout=10,
)Errors
Errors are returned with an appropriate HTTP status code in the following format.
{ "error": "RATE_LIMITED", "resetAt": "2026-10-27T12:01:00.000Z" }