How to add vote rewards to your FiveM / RedM server
Players vote for your server on RPLookout with Discord (once every 12 hours). You reward them in-game with a drop-in resource, a signed webhook, or both. Voting is free for players and for owners — claim your server to unlock rewards.
What you need
- Sign in with Discord on RPLookout.
- Find your server on the RedM or FiveM list (USA, Canada & UK only) and claim it with a one-line
server.cfgverify code. - Open Dashboard → your server → Vote rewards. Generate an API key (copy it once) and optionally set a webhook URL.
Ask players to vote
Send them to https://rplookout.com/server/<your-join-code>/vote. On your public server page there is a Vote button; from the dashboard you can also copy a vote link next to your badge embeds. Monthly vote totals appear on server cards and on the RedM / FiveM most-voted lists.
Option A — drop-in resource (recommended)
Download rplookout_votes.zip, drop it in resources/, set Config.ApiKey, pick a framework reward in config.lua (VORP, RSG-Core, QBCore, ESX, or a generic TriggerEvent('rplookout:voteReward', src, vote)), then ensure rplookout_votes.
Every ~60 seconds the resource pulls unclaimed votes, matches online players by their discord: identifier, runs your reward function, and claims the vote. If the player is offline, the vote stays pending for up to 7 days.
Option B — signed webhook
On each counted vote we POST JSON to your webhook URL with header X-RPLookout-Signature (hex HMAC-SHA256 of the raw body, keyed with your API key). Retries use exponential backoff for about 8 attempts.
POST /your-hook
X-RPLookout-Signature: <hmac-sha256-hex>
Content-Type: application/json
{"event":"vote","timestamp":1710000000,"vote_id":42,"server_id":"abc12",
"discord_id":"123456789012345678","discord_username":"player"}
Verify in Node.js:
const crypto = require('crypto');
function ok(rawBody, sig, apiKey) {
const expect = crypto.createHmac('sha256', apiKey).update(rawBody).digest('hex');
return crypto.timingSafeEqual(Buffer.from(expect), Buffer.from(sig || ''));
}
Or Python:
import hmac, hashlib
def ok(raw_body: bytes, sig: str, api_key: str) -> bool:
expect = hmac.new(api_key.encode(), raw_body, hashlib.sha256).hexdigest()
return hmac.compare_digest(expect, sig or "")
Option C — pull API
GET /api/v1/votes/pending— Authorization: Bearer <api key> (or?key=) → unclaimed votesPOST /api/v1/votes/<id>/claim— mark rewarded after you pay outGET /api/v1/vote-check?server=<id>&discord=<id>— has this Discord voted in the last 12 hours?
Rules
- One vote per Discord account per server every 12 hours.
- Only listed (USA / Canada / UK) servers can be voted for.
- Very new Discord accounts (younger than about a day) are logged but do not count toward rewards or monthly totals.
- In-game rewards require a claimed / verified server and an API key.
Download rplookout_votes.zip Open owner dashboard Featured listings