Zum Inhalt

Vote-Belohnungen & API

So belohnen Gameserver ihre Spieler für Votes auf SERVOTING.

So funktioniert es

  1. Ein Spieler votet für deinen Server und gibt seinen Ingame-Namen ein.
  2. SERVOTING erstellt ein Vote-Ereignis mit eindeutiger event_id.
  3. Dein Server bekommt das Ereignis: per Abfrage der API (FiveM-Ressource) oder als Webhook.
  4. Dein Server vergibt die Belohnung und markiert das Ereignis als eingelöst. Jedes Ereignis lässt sich nur einmal einlösen.

Tipp: Verlinke Spieler direkt auf die Vote-Seite mit vorausgefülltem Namen:

https://servoting.com/servers/<your-server>/vote?player=PlayerName

FiveM

Ressource herunterladen, nach resources/ kopieren, API-Schlüssel in die server.cfg eintragen und die Belohnung in config.lua anpassen. Spieler sehen den Vote-Link mit /vote.

set servoting_api_key "sv_xxxxxxxx.yyyyyyyy"
ensure servoting-rewards

FiveM-Ressource herunterladen

API

Erstelle auf deiner Serverseite unter Belohnungen & API einen API-Schlüssel und sende ihn bei jeder Anfrage mit:

Authorization: Bearer sv_xxxxxxxx.yyyyyyyy
EndpunktZweck
GET /api/v1/votes/pendingNicht eingelöste Votes der letzten 24 Stunden, älteste zuerst.
POST /api/v1/votes/{event_id}/claimMarkiert einen Vote als belohnt. Ein zweites Einlösen liefert claimed: false.
GET /api/v1/votes/check?player=NameHat dieser Spieler in den letzten 24 Stunden gevotet, und wurde der Vote eingelöst?
GET /api/v1/serverName, Vote-Link, Votes je Zeitraum und Platz.
curl -H "Authorization: Bearer $KEY" https://servoting.com/api/v1/votes/pending

{"events":[{"event_id":"evt_3f9c…","player":"Kritz","test":false,"created_at":"2026-11-05T14:12:03+00:00"}]}

curl -X POST -H "Authorization: Bearer $KEY" https://servoting.com/api/v1/votes/evt_3f9c…/claim

{"event_id":"evt_3f9c…","claimed":true,"already_claimed":false}

Limit: 120 Anfragen pro Minute und Schlüssel. Votes bleiben 24 Stunden abrufbar.

Webhooks

Mit einer Webhook-URL schickt SERVOTING jeden Vote als POST-Anfrage:

POST /your-endpoint
Content-Type: application/json
X-Servoting-Event: vote.created
X-Servoting-Event-Id: evt_3f9c…
X-Servoting-Signature: t=1793888000,v1=<hex hmac-sha256>

{"type":"vote.created","event_id":"evt_3f9c…","player":"Kritz","test":false,"created_at":"2026-11-05T14:12:03+00:00"}

Prüfe die Signatur: HMAC-SHA256 von "<t>.<roher Body>" mit deinem Webhook-Secret, und lehne alte Zeitstempel ab.

// PHP
$body = file_get_contents('php://input');
preg_match('/t=(\d+),v1=([a-f0-9]{64})/', $_SERVER['HTTP_X_SERVOTING_SIGNATURE'] ?? '', $m);
$valid = $m && abs(time() - (int) $m[1]) < 300
    && hash_equals(hash_hmac('sha256', $m[1] . '.' . $body, $secret), $m[2]);

// Node.js
const [, t, sig] = req.headers['x-servoting-signature'].match(/t=(\d+),v1=([a-f0-9]{64})/);
const expected = crypto.createHmac('sha256', secret).update(`${t}.${rawBody}`).digest('hex');
const valid = Math.abs(Date.now() / 1000 - t) < 300 && crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(sig));

Antworte mit einem 2xx-Status. Sonst wiederholt SERVOTING nach 1, 5, 30, 120, 360 und 720 Minuten.

Speichere die event_id jedes belohnten Votes. Kommt dasselbe Ereignis zweimal, belohne es nicht noch einmal.