Home › Vote rewards

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

  1. Sign in with Discord on RPLookout.
  2. Find your server on the RedM or FiveM list (USA, Canada & UK only) and claim it with a one-line server.cfg verify code.
  3. 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

Rules

Download rplookout_votes.zip Open owner dashboard Featured listings