#Troubleshooting
#The panel won't open
Make sure you're actually in the god or admin framework group, or have a row in admin_roles (check with /setrole or the Users page from another admin account). Config.EnableAdminPanelCommand also needs to be true.
#A web API request returns 401 Unauthorized
The token is missing, wrong, or was regenerated since you last copied it. Generate a new pair from the panel's Users -> Web dashboard access card and enter it wherever it's being used - the dashboard's "Edit connection" page for a server that's already added, or "Connect a server" for a new one.
#Every dashboard action says "No permission", even as a god admin
Almost always a dashboard-secret mismatch. Your server verifies a signature over the acting Discord ID before trusting it; if the secret stored on the dashboard is not the one your server currently has, the identity claim is ignored and the request falls back to the token's own role - which has no permissions by default. Your server console will show:
[upgrade-admin] Rejected unsigned/invalid X-Acting-Id '...' - falling back to the token's own role.
Generate a new pair from the panel's Users -> Web dashboard access card and enter both values on the dashboard via Edit connection. GET /me is the quick check: if it reports no role while you know you have one in admin_roles, the signature is not being accepted.
#A web API request returns "No permission" (403)
The token is valid, but the person acting doesn't have a role for that action. Web requests get their permission level from an admin_roles row keyed by "discord:<their Discord ID>" - not from the token itself. Grant one from the Users page (or /setrole) using discord:1234567890 as the identifier and a role like god or admin. Having "Manage access" on the dashboard alone doesn't grant any permissions - it only controls whether they can see/open the server.
If this happens while connecting a server for the first time, it means your own Discord account doesn't resolve to god on that server yet - grant yourself discord:<your Discord ID> = god in-game first.
#A web API request returns 404
Double check the URL - it needs to be http://your-server-ip:port/upgrade-admin/..., where upgrade-admin is literally the resource's folder name on your server (FXServer routes on the folder name automatically; if you renamed the resource folder, use that name instead). A path like /api/upgrade-admin/... or anything with an extra segment before the resource name will always 404.
#Some actions say "requires the admin to be in-game"
That's expected for anything that moves the admin's own character or camera (teleporting to a player, spectating, spawning a vehicle at your position, and similar) - there's no in-game presence to act through when the request comes from the web with no matching connected session.
#Money edits aren't saving from the Players page
Money can only be edited while the target player is online. Job and gang can be edited either way.
#The web dashboard says my Tebex transaction is invalid
Double check the transaction ID is copied exactly (it starts with tbx-), that the purchase shows as complete (not refunded), and that it's actually a purchase of Upgrade Admin and not a different product in the store.
#A banned player can still reconnect
Bans are enforced by this resource on connect, matching on licence, Discord ID and IP. If someone still gets in, check that Config.DB.BansTable points at the table the ban was actually written to, and that the ban has not already expired (2147483647 means permanent). Note that a ban of 0 hours now means permanent - in older versions it produced a ban that expired immediately.
#The Players page is slow to open
It should not be any more: the list is built with a fixed number of queries, cached briefly, and searched and paged server-side. If it is still slow, check that Config.DB.CharactersTable and Config.DB.VehiclesTable are correct - a wrong name there turns every lookup into a full scan.
#Some resources can't be stopped or restarted from the panel
That's deliberate. Config.ProtectedResources covers the database bridge, the framework core and this resource itself; stopping any of them takes the server (or the panel issuing the command) down with it. Use the server console for those.
#The server console warns that there is no API token
server_api_token has no active row at all means the boot-time generation did not complete, usually because the database was not reachable yet. Restart the resource - the startup self-check will report the underlying problem.
#Where do I get the API token?
From the panel: Users -> Web dashboard access -> Generate credentials. It needs the manageapitokens permission (god by default), and it only works from in-game - generating from the dashboard would revoke the token that request was using to reach your server.
Older versions generated a token automatically at boot and printed it to the server console. That no longer happens: it wrote live credentials into console logs on every install, including for the many servers that never connect the dashboard at all.
#I typed /apitoken in-game and nothing happened
That's expected - it's a server-console command now, not a chat one, so live credentials never end up in chat where other resources' loggers can read them. Use the panel's Users page instead.