Vote-Belohnungen & API
So belohnen Gameserver ihre Spieler für Votes auf SERVOTING.
So funktioniert es
- Ein Spieler votet für deinen Server und gibt seinen Ingame-Namen ein.
- SERVOTING erstellt ein Vote-Ereignis mit eindeutiger event_id.
- Dein Server bekommt das Ereignis: per Abfrage der API (FiveM-Ressource) oder als Webhook.
- 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
API
Erstelle auf deiner Serverseite unter Belohnungen & API einen API-Schlüssel und sende ihn bei jeder Anfrage mit:
Authorization: Bearer sv_xxxxxxxx.yyyyyyyy
| Endpunkt | Zweck |
|---|---|
GET /api/v1/votes/pending | Nicht eingelöste Votes der letzten 24 Stunden, älteste zuerst. |
POST /api/v1/votes/{event_id}/claim | Markiert einen Vote als belohnt. Ein zweites Einlösen liefert claimed: false. |
GET /api/v1/votes/check?player=Name | Hat dieser Spieler in den letzten 24 Stunden gevotet, und wurde der Vote eingelöst? |
GET /api/v1/server | Name, 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.
