Voting API
Two ways to reward voters. Votifier pushes each vote to your server the moment it is cast; the pull API lets your plugin poll for votes, which is easier when you cannot open an inbound port. You can use both.
Authentication
Endpoints under /api/v1/votes/queue and /api/v1/votes/claim need your listing's API key. Find it in the dashboard under Manage → Voting API key.
Authorization: Bearer mcl_your_key_here
You can also pass it as ?key= or an X-API-Key header. Keys are stored hashed, so rotate one the moment it leaks.
GET /api/v1/votes/check
Public, no key needed. The endpoint most reward plugins use — has this player voted inside the last 24 hours?
curl "https://www.servershulker.com/api/v1/votes/check?server=your-slug&username=Notch"
{
"server": "your-slug",
"username": "Notch",
"voted": true,
"lastVoteAt": "2026-08-10T14:03:11.000Z",
"cooldownHours": 24
}GET /api/v1/votes/queue
Every vote you have not yet acknowledged, oldest first. Poll this on a timer — once a minute is plenty.
curl -H "Authorization: Bearer mcl_…" \
"https://www.servershulker.com/api/v1/votes/queue?limit=100"
{
"server": { "id": "…", "name": "Example", "slug": "example" },
"count": 2,
"votes": [
{ "id": "…", "username": "Notch", "timestamp": "2026-08-10T14:03:11.000Z" },
{ "id": "…", "username": "Jeb_", "timestamp": "2026-08-10T14:07:52.000Z" }
]
}POST /api/v1/votes/claim
Acknowledge votes once you have given the reward. Claimed votes drop out of the queue. Omit voteIds to claim everything pending.
curl -X POST -H "Authorization: Bearer mcl_…" \
-H "Content-Type: application/json" \
-d '{"voteIds":["uuid-1","uuid-2"]}' \
"https://www.servershulker.com/api/v1/votes/claim"
{ "claimed": 2 }Claim only after the reward is safely delivered. If your plugin crashes mid-loop the vote stays in the queue and gets retried, which is the failure mode you want.
GET /api/v1/servers/{slug}
Public listing data: live status, vote totals, a 30-day history and the current featured placement. Useful for embedding your rank on your own site.
curl "https://www.servershulker.com/api/v1/servers/your-slug"
Votifier
Turn it on under Manage → Votifier. We support NuVotifier (v2, a signed token) and classic Votifier (v1, RSA). v2 is what almost every modern server runs — paste the token from plugins/NuVotifier/config.yml. For v1, paste the contents of plugins/Votifier/rsa/public.key.
Delivery is attempted immediately and retried for 24 hours if your listener is unreachable, so a restart does not cost your players their rewards.
Rate limits
The queue endpoint allows 60 requests per minute per listing; the public check endpoint allows 120 per minute per IP. Exceed either and you get a 429 with a Retry-After header.