Connect-time risk check
Query the API during playerConnecting and surface the risk level to your admin console — without delaying legitimate players.
Reduce cheater incidents on your FiveM server with a Discord ID risk-intelligence layer. CheatSentry surfaces admin-reviewed risk signals at connect time so your staff can act on evidence — not gut feeling.
Repeat offenders, multi-account creators and cheat-sales channels are well-documented patterns in FiveM. CheatSentry helps your staff recognise them earlier without exposing private data.
Query the API during playerConnecting and surface the risk level to your admin console — without delaying legitimate players.
Use the API as part of your whitelist application review. A risk signal becomes one input among many, not the sole gate.
We deliberately recommend against auto-ban-on-API-response patterns. Your staff stays the decision-maker.
Discord IDs only — no real names, no IPs, no game-state telemetry. Less attack surface for your players and your server.
If a flagged player believes the entry is wrong, they can request a manual review directly. Your staff is not the appeals court.
Pro plans let you reuse the same key across all your FiveM servers and your Discord bot. Unified moderation across your community.
A minimal connect-time risk check. It logs and flags — it never auto-bans. Full version with secret handling lives in the API docs.
-- server.lua (FiveM)
local API_KEY = GetConvar("cheatsentry_key", "")
local API_URL = "https://cheatsentry.com/api/v1/check/"
AddEventHandler("playerConnecting", function(name, _, deferrals)
local src = source
local discordId
for _, id in ipairs(GetPlayerIdentifiers(src)) do
if string.sub(id, 1, 8) == "discord:" then
discordId = string.sub(id, 9); break
end
end
if not discordId then return end
deferrals.defer()
deferrals.update("Running CheatSentry risk check...")
PerformHttpRequest(API_URL .. discordId, function(status, body)
deferrals.done()
if status ~= 200 or not body then return end
local ok, data = pcall(json.decode, body); if not ok then return end
if data.riskLevel == "high" or data.riskLevel == "confirmed" then
TriggerEvent("cheatsentry:flagPlayer", src, data)
end
print(("[CheatSentry] %s -> %s"):format(discordId, data.riskLevel or "clean"))
end, "GET", "", { ["Authorization"] = "Bearer " .. API_KEY })
end)
Your playerConnecting handler extracts the Discord ID from the player's identifiers.
CheatSentry returns risk level, status and a short summary in under ~100 ms.
For high or confirmed signals, your admin tooling is notified — the player is not silently banned.
Your moderators apply your rules and policies. Affected players can request an appeal.
All paid plans include API access, dashboard and abuse-prevention. Limits scale with your daily volume.
Sign in to view
Sign in to view
Sign in to view
Sign in to view
CheatSentry should be used as an additional risk signal. We recommend manual review before taking action against a user.
Free tier, no credit card. Production-ready Lua example included in the docs.