Setup path: Dashboard → Edit server → Vote Rewards (and Minecraft Details for Votifier).
01
How it works
1
Player opens your vote link, ideally with ?p=USERNAME so the form is prefilled.
2
They submit the vote. We enforce a 24-hour cooldown per IP (and per logged-in account). If rewards are configured, the username / parameter is required.
3
We notify your rewards systems: HTTP GET to your postback URL and/or a Votifier packet to your Minecraft host — using the same parameter and the voter’s IP.
4
You grant the reward. Delivery failures on your side are logged here but do not remove the vote.
Choose a method
HTTP Postback
Best for websites, launchers, and non-Minecraft games. For Minecraft this is an optional alternative to Votifier (or an addition if you also reward on a website).
For Minecraft, use Votifier first. HTTP postback is optional (or additional). Each enabled channel runs independently after the vote.
Quick start
1Log in and open Dashboard.
2Edit your approved server listing.
3Set a Postback URL and/or enable Votifier under Minecraft Details.
4Copy the incentive voting link from the edit form (ends with ?p=USERNAME).
5Place that link on your website or Discord; replace USERNAME per player.
6Cast a test vote and confirm rewards arrive.
02
Postback PHP
After a successful vote we request your URL with the player parameter and their IP. Your script marks that account as having voted and grants points or items.
Whitelist this website’s public outbound IP in your firewall and postback script. Reject every other source. Prefer HTTPS.
1. Set your Postback URL
Dashboard → Edit server → Vote Rewards → Postback URL.
https://YOURDOMAIN/postback.php
The filename is arbitrary — use any path your stack prefers.
Only public http/https URLs are accepted. Localhost, private LAN IPs, and URL credentials are rejected (SSRF protection).
We follow a small number of redirects and time out after a few seconds so voting stays fast.
2. Build incentive voting links
Append a parameter so each player is identified when they land on the vote page.
/GAME/server/SLUG/vote?p=PARAMETER
Piece
Rules
PARAMETER / p_resp
Letters, numbers, _, - only · max 32 characters · username, account id, or any id you track
ip
IPv4 or IPv6 of the voter as seen by this list (proxy-aware when enabled)
Prefill query
?p= or ?username=
3. What we call after a vote
Only on success. If the player did not complete a valid vote, we send no request.
When we hit your postback with p_resp=Razor, player Razor has voted. The ip value is the address they used on this list.
What your script should do
Verify the request comes from this list’s public IP.
Sanitize p_resp and ip (never trust raw input).
Confirm the account / character exists in your database.
Apply your own reward cooldown if you need something stricter than 24 hours.
Grant points, coins, or items; log the event; return HTTP 200.
postback.php example
Host this on your rewards site, not necessarily on this vote list. Set VOTE_LIST_IP to this website’s outbound public IP before going live.
<?php
/**
* Example vote postback receiver for YOUR game website / CMS.
*
* Configure this URL on your listing under Dashboard → Edit server → Vote Rewards.
* This list will call it ONLY after a successful vote:
*
* https://yoursite.com/postback.php?p_resp=PARAMETER&ip=USERIP
*
* PARAMETER is the username / account id the player entered on the vote form
* (or the value from ?p= on your incentive voting link).
*
* Docs: /voting-check
*/
define('DEBUG', 0); // set to 1 to write _postback.log
define('LOG_FILE', __DIR__ . '/_postback.log');
/**
* Only accept callbacks from the vote list's public IP.
* Leave empty to skip the allowlist (not recommended in production).
*
* Example: define('VOTE_LIST_IP', '203.0.113.10');
*/
define('VOTE_LIST_IP', '');
$ipRequest = $_SERVER['HTTP_CF_CONNECTING_IP']
?? (isset($_SERVER['HTTP_X_FORWARDED_FOR'])
? trim(explode(',', (string) $_SERVER['HTTP_X_FORWARDED_FOR'])[0])
: null)
?? $_SERVER['REMOTE_ADDR']
?? '';
$ipRequest = trim((string) $ipRequest);
if (VOTE_LIST_IP !== '' && $ipRequest !== VOTE_LIST_IP) {
if (DEBUG) {
error_log(date('[Y-m-d H:i] ') . "[Invalid] Request from {$ipRequest}" . PHP_EOL, 3, LOG_FILE);
}
http_response_code(403);
exit('Forbidden');
}
if (DEBUG) {
error_log(date('[Y-m-d H:i] ') . "[OK] Valid callback: {$ipRequest}" . PHP_EOL, 3, LOG_FILE);
}
// Clean parameters from the vote list (letters, numbers, underscore, hyphen).
$p = preg_replace('/[^A-Za-z0-9_\-]+/', '', (string) ($_GET['p_resp'] ?? '')) ?? '';
$userIp = preg_replace('/[^0-9a-fA-F:\.]+/', '', (string) ($_GET['ip'] ?? '')) ?? '';
if ($p === '') {
http_response_code(400);
exit('Missing p_resp');
}
if (DEBUG) {
error_log(date('[Y-m-d H:i] ') . "[GET] Parameters [p_resp]={$p} [ip]={$userIp}" . PHP_EOL, 3, LOG_FILE);
}
// ---------------------------------------------------------------------------
// Connect to your database, verify account $p exists, enforce your own
// cooldown if needed, then grant vote points / items to $p (voted from $userIp).
// We send p_resp + ip ONLY when that player successfully voted on the list.
// ---------------------------------------------------------------------------
http_response_code(200);
echo 'OK';
03
Minecraft Votifier
We can push the vote straight into your Minecraft server. A listener plugin then runs your reward commands.
Firewall: allow inbound TCP from this website’s public IP to your Votifier port (default 8192). Do not expose the port to the whole internet if you can avoid it.
1
Player enters their Minecraft username on our vote page (or arrives via ?p=Steve).
2
Vote succeeds on this list.
3
We connect to your Votifier host/port and deliver the vote packet.
4
Your listener grants crates, keys, money, etc.
Enable Votifier under Minecraft Details, choose NuVotifier v2 or Classic, then enter host, port, and token or RSA public key.
Install NuVotifier (classic RSA and protocol v2) or classic Votifier, plus a listener for your Minecraft version (GAListener, SuperbVote, or a custom listener).
Classic / v1: paste the full public.key file. Host and port come from config.yml. Keep debug: true while connecting this list, then turn it off.
host: YOUR_PUBLIC_IP
port: 8192
debug: true
Packets identify this list as: JoinGameServers
04
NuVotifier v2
Protocol v2 replaces RSA with a shared token and a one-time challenge. Map a token to this list’s service name, or use the default token.
Greeting has no challenge — use Classic, or upgrade NuVotifier and enable v2.
Invalid signature / unknown service
Wrong token, or service name not mapped. Add the list service name or use default.
Connect failed / timeout
Bad host/port, Votifier offline, or firewall blocking this list’s IP.
No response
Proxy/plugin interference; enable NuVotifier debug and retry.
05
Testing checklist
Save listing settings without validation errors.
Open an incentive link — the username field should prefill from ?p=.
Cast one vote. You should see the success state. A second vote within 24 hours must be blocked.
Verify postback: enable DEBUG in your receiver; confirm p_resp and ip arrive.
Verify Votifier: with debug true, the Minecraft console should show an incoming vote for your username and this list’s service name.
Confirm the in-game or site reward. If not, fix the listener — the list vote still counts.
Delivery attempts are recorded in vote_reward_logs (ok / fail / skipped). A failed callback never rolls back the vote on this list.
06
FAQ & troubleshooting
No. Guests can vote. Logged-in accounts share the same 24-hour cooldown rules for abuse prevention.
If you configured a postback URL or Votifier, we need a parameter to tell you who to reward. Without rewards configured, username stays optional.
Yes. Both run after a successful vote. Failures are independent.
It must be a public http(s) URL. Localhost, .local, private IPs (e.g. 10.*, 192.168.*), and URLs with embedded credentials are blocked.
Confirm the vote succeeded on this list. Check your postback logs or NuVotifier debug output. Verify firewall allowlists and that the username matches an in-game account. List cooldown is 24 hours; your own reward cooldown can differ.
Only A–Z, a–z, 0–9, _, and -. Anything else is stripped. Keep parameters ≤ 32 characters.
Install appAdd JoinGameServers to your home screen for quick access.