ServerTop100 implements the same incentive contract as Arena-Top100, plus TopG, XtremeTop100, Top100Arena and GTop100 vote URLs so existing game vote buttons keep working.
https://servertop100.com/index.php?a=in&u=[USERNAME]&id=[PlayerID]
Aliases: id, postback or incentive. Dynamic callback: append callback=[base64].
secret — your API secret from the dashboard. The tester sends TEST.voted — 1 unique vote, 0 duplicate / failed.reset — unix timestamp of next noon or midnight UTC.userip — voter IP.userid — player id if you passed it.custom — the base64 callback string if you used callback=.https://servertop100.com/wow/in-[USERNAME]-[PlayerID] https://servertop100.com/wow/server-[USERNAME]-[PlayerID]
On successful votes only we also GET your callback as:
https://YOURGAME/postback.php?p_resp=[PlayerID]&ip=[USERIP]
No callback is sent on duplicate votes in TopG mode — matching monitor.topg.org behaviour.
XtremeTop100 https://servertop100.com/in.php?site=[USERNAME]&postback=[PlayerID] Top100Arena https://servertop100.com/in.asp?id=[USERNAME]&incentive=[PlayerID] GTop100 https://servertop100.com/wow/sitedetails/[USERNAME]?vote=1&pingUsername=[PlayerID]
Test your callback Open dashboard
<?php
$my_secret = 'YOUR_API_SECRET'; // or 'TEST' while developing
$secret = isset($_POST['secret']) ? $_POST['secret'] : (isset($_GET['secret']) ? $_GET['secret'] : '');
if ($secret !== $my_secret) { exit; }
$userid = isset($_POST['userid']) ? $_POST['userid'] : (isset($_GET['userid']) ? $_GET['userid'] : null);
$valid = (int)(isset($_POST['voted']) ? $_POST['voted'] : (isset($_GET['voted']) ? $_GET['voted'] : 0));
$reset = (int)(isset($_POST['reset']) ? $_POST['reset'] : (isset($_GET['reset']) ? $_GET['reset'] : 0));
if ($userid && $valid === 1) {
// reward player, store $reset as next_vote
}