API de récompenses de vote
Donnez aux joueurs une récompense en jeu quand ils votent pour votre serveur. Utilisez le callback (nous vous appelons), la vérification Vote4Buff ou l'API pull (vous nous interrogez), ou plusieurs à la fois.
Lien de vote
Envoyez les joueurs vers ce lien, avec leur nom en jeu dans userid :
https://metin2privateservers.com/vote/YOUR-SERVER-SLUG?userid=PLAYER_NAMEVous venez d'une autre toplist ? Inutile de changer votre paramètre. Nous lisons aussi username, player_id, pingUsername, custom, postback, incentive et id. Les noms peuvent contenir des lettres, des chiffres, - et _, jusqu'à 32 caractères.
Callback (postback)
Définissez une URL de callback dans votre tableau de bord. Après chaque vote comportant un nom de joueur, nous envoyons une requête GET à cette URL avec ces champs ajoutés à la query string :
| Champ | Signification |
|---|---|
userid | Le nom du joueur indiqué dans le lien de vote |
userip | Adresse IP du votant |
voted | 1 = vote compté. Ne récompensez que si la valeur est 1. |
reset | Heure Unix à partir de laquelle ce joueur peut revoter |
server | Le slug de votre serveur |
vote_id | ID unique du vote. Conservez-le pour qu'un vote ne soit jamais récompensé deux fois. |
timestamp | Heure Unix d'envoi du callback |
Chaque requête porte un en-tête X-Signature: sha256=… : un HMAC-SHA256 des champs de vote ci-dessus (dans cet ordre, encodés en URL) calculé avec votre secret de callback. Vérifiez-le, pour que personne ne puisse simuler des votes en appelant votre URL. Nous réessayons jusqu'à 3 fois si votre serveur ne répond pas avec un statut 2xx. Si votre URL contient {userid}, nous le remplaçons par le nom du joueur, pour les scripts qui attendent le nom dans le chemin.
Exemple de handler en PHP :
<?php
// vote-callback.php on your server
$secret = 'YOUR_CALLBACK_SECRET'; // from your dashboard
$query = $_SERVER['QUERY_STRING'];
// The signature covers the vote fields, which are always appended last.
$fields = ['userid','userip','voted','reset','server','vote_id','timestamp'];
$parts = [];
foreach ($fields as $f) { $parts[] = $f . '=' . rawurlencode($_GET[$f] ?? ''); }
$signed = implode('&', $parts);
$expected = 'sha256=' . hash_hmac('sha256', $signed, $secret);
$given = $_SERVER['HTTP_X_SIGNATURE'] ?? '';
if (!hash_equals($expected, $given)) { http_response_code(403); exit('bad signature'); }
if (($_GET['voted'] ?? '0') !== '1') { exit('ignored'); }
if (abs(time() - (int)$_GET['timestamp']) > 300) { http_response_code(400); exit('too old'); }
$player = $_GET['userid'];
$voteId = (int)$_GET['vote_id'];
// TODO: skip if $voteId was already rewarded, then give the reward to $player.
echo 'ok';Utilisez Envoyer un vote de test dans le tableau de bord pour envoyer un callback pour le joueur TEST et voir la réponse de votre serveur.
Vérification Vote4Buff
Chaque vote donne au joueur un buff qui dure 7 jours, jusqu'à ce qu'il puisse revoter. Demandez si le buff d'un joueur est actif quand il se connecte ou ouvre le PNJ de buff :
GET https://metin2privateservers.com/api/v1/vote4buff?userid=PLAYER_NAME
X-API-Key: YOUR_API_KEY
{"userid":"PLAYER_NAME","voted":true,"buff_active":true,"vote_id":1234,
"voted_at":"2026-11-09T18:02:11.000Z","buff_expires_at":"2026-11-16T18:02:11.000Z",
"next_vote_at":"2026-11-16T18:02:11.000Z","seconds_left":604700}
{"userid":"PLAYER_NAME","voted":false,"buff_active":false,"vote_url":"/vote/your-server?userid=PLAYER_NAME"}Jusqu'à 600 requêtes par minute et par serveur. Les votes signalés comme frauduleux par les modérateurs ne donnent plus de buff.
API pull
Vous préférez interroger plutôt qu'être appelé ? Envoyez votre clé API dans l'en-tête X-API-Key.
Ce joueur a-t-il voté ?
GET https://metin2privateservers.com/api/v1/votes/check?userid=PLAYER_NAME
{"voted":true,"userid":"PLAYER_NAME","vote_id":1234,"claimed":false,
"voted_at":"2026-11-09T18:02:11.000Z","next_vote_at":"2026-11-10T06:02:11.000Z"}Votes pas encore récompensés
GET https://metin2privateservers.com/api/v1/votes/unclaimed?limit=50
{"votes":[{"vote_id":1234,"userid":"PLAYER_NAME","created_at":"2026-11-09T18:02:11.000Z"}]}Marquer des votes comme récompensés
POST https://metin2privateservers.com/api/v1/votes/claim
Content-Type: application/json
{"vote_ids":[1234,1235]}
{"claimed":[1234,1235],"already_claimed_or_unknown":[]}Lancez unclaimed puis claim chaque minute depuis une tâche cron pour distribuer les récompenses exactement une fois.
Limites
- Un vote par joueur tous les 7 jours et par serveur, vérifié par IP et par nom de joueur.
- Chaque vote demande de recopier les lettres d'une image (captcha).
- L'API pull renvoie les votes des 7 derniers jours.