The FiveM plugin
Connects your Cfx.re server to Onyx: live status in Discord, a status card that keeps itself current, a server line on every new ticket, and (with one extra step) the ability to tell staff who a Discord member is in game.
Setting it up
Open Plugins → FiveM and paste either the code from your cfx.re/join/... link or the server's address. A join code is enough on its own; Onyx resolves the address from it. Press Test connection and the card tells you exactly what it found.
For the address field: a bare ip:port like 51.75.12.4:30120 is the usual answer, and a bare host with no port is assumed to be on the standard game port 30120. If your server sits behind Cloudflare or a reverse proxy, enter the full address including https://. That is the address your players actually reach, and Onyx uses it exactly as the game client does. If a connection test fails, the hint names the precise URL it tried, so you can see whether it guessed the port wrong.
That card is the important part of this plugin. It never says "N/A" and leaves you guessing. It reports which capability level you have reached and what the next concrete step is:
- Not connected: Onyx cannot reach the server. The card names the address it tried.
- Status only: counts, player numbers, map and mode all work. Identity does not yet.
- Identity live: everything works.
Why identity needs a token
In July 2026 Cfx stopped exposing player data on the public endpoints. Player names come back as "Player" and identifiers come back empty, on every server running a current artifact. This was a platform change, not a setting you can put back: the opt-in convars that used to restore it were removed at the same time.
The replacement Cfx points at is sv_playersToken. There is nowhere to go and get one: you invent it, the way you would invent a password. Any long random string works. What matters is that the same string goes in two places.
Add it to your server.cfg, using your own value rather than this one:
set sv_playersToken "J8kQ2mXp94vTzR7wLnB3"
Restart the server, then paste the exact same value into the plugin drawer. If the two do not match, the connection test fails and player names stay hidden; nothing else stops working.
Onyx encrypts it with the same pipeline it uses for Discord bot tokens, because that token exposes every player's identifiers. It is never shown back to you, only replaced.
One honest caveat, before you rely on it: a player only carries a discord: identifier if they launched FiveM with the Discord desktop app running. That is most players, but never all of them, and no integration can change that. When there is no match, Onyx says so plainly rather than pretending the lookup failed.
Commands
/fivem status: the server card. Open to everyone by default; you can make it staff only. Staff also see the capability diagnostic./fivem players: who is on right now. Staff only. Addidentifiers: trueto include their identifiers, which needs the token./fivem whois <member>: match a Discord member to their in-game player. Staff only, needs the token.
The status card
Pick a channel and Onyx posts one card there, then edits that same message every minute. It deliberately does not rename a channel to show the player count: Discord only allows about two channel renames every ten minutes, so a 🟢 12/64 channel name is wrong most of the time. One edited message has no such limit and carries far more.
The card leads with your server name and the player count, with an occupancy bar under it, and adds your server logo beside the name if you set one. That field takes a direct https image link, so an image URL from Discord or Imgur works while the page it sits on does not. Leave it empty and the card simply has no picture.
If the server stops answering, the card keeps the last known numbers, marks itself stale, and says when it was last true.
Two things you may expect from txAdmin's card and will not find here: uptime and next restart. txAdmin runs your server process, so it knows both. Onyx reads the same public HTTP endpoints your players' game clients read, and neither number is in them. Guessing uptime from when Onyx first saw the server would report minutes for a machine that has been up a week, which is worse than leaving it out.
If your game port is closed to us
Some hosts firewall the game port to everything except Cfx. If Onyx cannot reach your server directly, it falls back to the Cfx server list, so status, player counts, map and mode keep working. /fivem status tells staff when that is happening.
Player identity cannot come from that route: Cfx anonymized the server list itself, so no token helps there. If you want /fivem whois, the game port has to be reachable by Onyx.
Where else it shows up
On new tickets. Turn on "Add server context to new tickets" and the opening staff panel gains a line with the current server state, plus the opener's in-game name, server id and identifiers when identity is live. If they are not online it says so. It never blocks or slows the ticket: enrichment runs with a hard time budget and simply renders nothing if the server is slow.
In every AI answer. Turn on "Tell the AI the live server status" and Onyx knows, on every message, whether the server is up and how busy it is. So "is the server down?" gets a real answer instead of a guess, and a member who cannot connect while the server is fine gets treated as a specific fault rather than an outage. This costs nothing extra: the status is already cached for the card.
Rate limits, handled for you
FiveM endpoints allow roughly 4 requests a second per IP, and sv_requestParanoia will ban peers that behave badly. Onyx polls each server at most once every thirty seconds and shares that one snapshot across every command, the status card, ticket enrichment, and the AI. A burst of /fivem status from ten people costs your server one request, not ten.