Developer API

Reward your players for voting

Find out if a player voted for your server and give an in-game reward — set up in 3 simple steps.

100% free No API key Simple JSON No double rewards

Quick start

Replace {SERVER_ID} with your server ID and {PLAYER} with the player's account name or ID.

1

Send your players to the vote page

Put this link on your website or in your game (e.g. a "Vote" button). The player name is remembered with the vote.

https://vtop100.com/vote/{SERVER_ID}/{PLAYER}
2

Ask our API if the player voted

Call this URL from your game server or website (not from the player's browser). ?claim=1 marks the vote as rewarded.

https://vtop100.com/api/v1/vote/{SERVER_ID}/{PLAYER}?claim=1
3

Give the reward when "reward": true

You get "reward": true only once per vote — calling the URL again returns false, so players can't collect the same reward twice. They can vote again every 12 hours.

{
  "voted": true,
  "reward": true,      // ← give the reward now
  "next_vote_at": "2026-11-14T21:12:00+01:00"
}

Code examples

Copy & paste — only the reward part is up to you.

// PHP
$serverId = 1234;
$player   = 'PlayerName';

$url  = "https://vtop100.com/api/v1/vote/$serverId/" . rawurlencode($player) . "?claim=1";
$data = json_decode(file_get_contents($url), true);

if (!empty($data['reward'])) {
    // give the reward to $player here
}
// JavaScript (Node.js 18+)
const serverId = 1234;
const player = 'PlayerName';

const res = await fetch(`https://vtop100.com/api/v1/vote/${serverId}/${encodeURIComponent(player)}?claim=1`);
const data = await res.json();

if (data.reward) {
  // give the reward to player here
}
# Python 3
import json, urllib.parse, urllib.request

server_id = 1234
player = "PlayerName"

url = f"https://vtop100.com/api/v1/vote/{server_id}/{urllib.parse.quote(player)}?claim=1"
data = json.load(urllib.request.urlopen(url))

if data.get("reward"):
    # give the reward to player here
    pass
# Terminal
curl "https://vtop100.com/api/v1/vote/1234/PlayerName?claim=1"

Try it live

Check a player without claiming — the tester never uses up a reward.

200

API reference

All answers are JSON. You can use the plain ID (1234) or the ID with name (1234-servername).

GET/api/v1/vote/{server}/{player}

Did this player vote for your server in the last 12 hours?

ParameterDescription
serverYour server ID
playerAccount name or ID, the same as in the vote link (upper/lower case doesn't matter, max. 100 characters)
claim=1Optional. Marks the vote as rewarded — reward is true only on the first call
{
  "ok": true,
  "server": 1234,
  "user": "PlayerName",
  "voted": true,             // voted in the last 12 hours
  "voted_at": "2026-11-14T09:12:00+01:00",
  "next_vote_at": "2026-11-14T21:12:00+01:00",
  "claimed": true,           // reward was already taken
  "reward": true             // true only on the first ?claim=1 call
}
GET/api/v1/server/{server}

Public stats of a server — show your votes and rank on your website.

{
  "ok": true,
  "id": 1234,
  "name": "servername",
  "title": "My Server x50 | Season 6",
  "category": "Metin2",
  "votes_in": 2431,
  "votes_out": 987,
  "rank": 3,
  "premium": false,
  "vote_url": "https://vtop100.com/vote/1234-servername",
  "detail_url": "https://vtop100.com/details/1234-servername"
}
HTTP statusMeaning
200Everything OK
404server_not_found — wrong server ID
422invalid_user — empty or too long player name
429Too many requests — max. 600 per minute

Good to know

Call it from your serverRequest the API from your game server or backend, not from the player's browser — otherwise players could fake the answer.
Every 12 hoursPlayers can vote once every 12 hours. next_vote_at tells you when the next vote is possible.
Same player nameUse the same player name in the vote link and in the API call (upper/lower case doesn't matter).
Old API still works/api/{SERVER_ID}/{PLAYER} keeps answering {"status": true|false} — we recommend switching to v1.

Need help with your integration? Contact us — we're happy to help.