FiveM setup guide
How to connect a FiveM server to Sentinel, give staff their tools, require Sentinel Live, and show players their link PIN from your own scripts.
1. Install the resource
- Add your server at your servers and copy its key. It is shown once.
- Copy the
sentinelresource into your server'sresourcesfolder. - In
server.cfg, addset sentinel_key "snl_..."and thenensure sentinel. Useset, neversetr: setr sends the value to every player who joins. - Restart the server. The console prints
Connected to Sentineland your server page shows it online within about 30 seconds.sentinel statusin the console says why if it does not.
Run the server with OneSync on (+set onesync on on the command line, or the txAdmin setting) so staff can go to and bring players.
2. Staff and the in-game menu
On your server page, open a player on the Players tab and choose Staff permissions. Tick what they may do; they open the menu in game with /sentinelmenu or F9.
| Permission | What it allows |
|---|---|
| Message | Send a private message to a player |
| Warn | Send a player a warning |
| Freeze | Hold a player in place and release them |
| Kick | Remove a player from the server |
| Ban | Ban a player, for a time or for good |
| Unban | See the ban list and lift bans |
| Announce | Send a message to everyone |
| Heal | Restore a player to full health |
| Armour | Give a player full armour |
| Teleport | Teleport a player to coordinates, go to a player, or bring one to you |
- The resource checks every action against these ticks. The menu only shows them.
- Staff cannot kick, ban, freeze, teleport or bring another staff member.
- Teleport coordinates are numbers inside the map: X -4500 to 6000, Y -6500 to 8500, Z -200 to 2800.
- On the website, the owner and admins can also heal, give armour and teleport players from the Players tab. It reaches the server within about 5 seconds while the page is open.
- Everything is in the activity log: who, to whom, what and when.
3. Sentinel Live
Sentinel Live is the SentinelLive-FiveM app players run on their PC. Each player picks your server in it. Set what happens on your server page, Sentinel Live tab:
- Not required (the default): anyone can join.
- Kick: players without a Sentinel Live session for your server are refused at the door and removed the moment it stops.
- Allow but flag: they can join, and are marked on the Players tab and in the activity log.
A player whose Rockstar account is not linked to Sentinel yet does not need to type anything. The resource gets them a link PIN when they join, and on Kick the refusal reads:
Your account isn't linked to Sentinel yet. Go to sentinelpriv.com/fivem/link and enter PIN: ABC-123 (valid for 5 minutes). Then start SentinelLive-FiveM, pick this server, and rejoin.
If Sentinel cannot be reached, joining players are let in and logged, or kept out, as you set. Players already on your server are never removed because Sentinel is down.
4. Showing the PIN yourself
You can show the PIN in your own loading screen, phone script or Discord bot with the handover data, exports, event and web API below. A PIN is for that player alone. Whoever has it can link that player's Rockstar account to their own Sentinel account, so never post it in public chat or logs, and keep your server key secret: it can read your players' PINs.
PINs are 6 characters, work once, last 5 minutes, and a player can get at most 5 every 10 minutes. The website takes them with or without the dash.
5. Loading screen data
On Kick or Flag, a player who is let in arrives at your loading screen with window.nuiHandoverData.sentinel. A refused player never reaches the loading screen; they see the refusal message instead.
| Field | Type | Meaning |
|---|---|---|
mode | "kick" or "flag" | Your setting. |
checked | boolean | false when Sentinel could not be reached and the player was let in anyway; the other fields are then missing. |
linked | boolean | Their Rockstar account is linked to Sentinel. |
sessionActive | boolean | Sentinel Live is running for your server. |
pin | string or missing | Only when not linked: 6 characters, no dash. |
pinExpiresAt | number or missing | When the PIN stops working, unix seconds. |
linkUrl | string | sentinelpriv.com/fivem/link |
// In your loading screen's script.
const sentinel = (window.nuiHandoverData || {}).sentinel;
if (sentinel && sentinel.pin) {
const pin = sentinel.pin.slice(0, 3) + "-" + sentinel.pin.slice(3);
document.getElementById("sentinel-pin").textContent =
"Link your account at " + sentinel.linkUrl + " with PIN " + pin;
}6. Exports
Server side. linked and sessionActive refresh on every heartbeat (30 seconds, or 5 while your server page is open), whatever the Sentinel Live setting.
-- What Sentinel last said about this player.
local status = exports.sentinel:GetLinkStatus(source)
-- {
-- known = true, -- false until Sentinel has answered about them
-- linked = false,
-- sessionActive = false,
-- pin = "ABC123", -- only while not linked and the PIN still works
-- expiresAt = 1761055200, -- unix seconds, with pin
-- linkUrl = "sentinelpriv.com/fivem/link", -- with pin
-- }
-- A fresh PIN for a player whose PIN ran out. Returns false if not asked
-- (unknown or already linked). The PIN arrives through the event.
exports.sentinel:RequestLinkPin(source)7. Event
A server event. Listen with AddEventHandler, not RegisterNetEvent, so players' games cannot send it.
AddEventHandler('sentinel:linkStatus', function(source, status, reason)
-- status: the same table as GetLinkStatus
-- reason: 'join' first status for this player (they arrived, or
-- the resource restarted)
-- 'pin' a PIN was made for them
-- 'linked' they linked their account on the website
-- 'session' Sentinel Live started or stopped for this server
if reason == 'pin' and status.pin then
TriggerClientEvent('myphone:notify', source, 'Sentinel PIN: ' .. status.pin)
end
end)8. Web API
For tools outside FiveM, such as a Discord bot. Authenticated with your server key, 60 requests a minute. Look a player up by one of playerId (their id on the server now), discord (Discord user id) or license (Rockstar license).
curl -H "Authorization: Bearer snl_..." \
"https://sentinelpriv.com/api/fivem/resource/link-status?discord=123456789012345678"{
"ok": true,
"player": { "id": 12, "name": "Fire" },
"linked": false,
"sessionActive": false,
"pin": "ABC123",
"pinExpiresAt": 1761055200,
"linkUrl": "sentinelpriv.com/fivem/link"
}Notes
playeris there forplayerIdlookups.pinonly while the player is not linked and has a PIN made on your server. The API never makes one: they are made when a player joins a Kick or Flag server, or types/identify.- Unknown players answer 404 with
NOT_FOUND.
Last updated: October 21, 2026