> ## Documentation Index
> Fetch the complete documentation index at: https://docs.heartbreakhotel.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Players

Route: `/players`
Sidebar group: Players
Permission: `players.view`

## What it does

Offline-and-online player database. Every account that ever joined your server, grouped by license. Each row shows all the characters under that license.

## What you see

* **Account row** with:
  * All characters (one or many).
  * Total money across characters (cash / bank / crypto / dirty).
  * Job + gang of the active character.
  * Inventory item count.
  * Discord, Steam, FiveM, license identifiers.
  * First seen + last seen timestamps.
* **Search bar**, name, license, identifier.

## Common actions

* **Click row** → opens full [Player Profile](/nexora-dashboard/pages/player-profile).
* **Sort** by money, last seen, first seen.
* **Adjust money** (the `$` button), pick character, type (cash / bank / crypto / dirty), positive or negative amount, and optional reason. Requires `players.money.edit`.
  * Online players go through the framework's `AddMoney` / `RemoveMoney`, so the player sees the standard chat / phone-app feedback and the framework keeps SQL in sync.
  * Offline characters get a direct SQL write against the `players` JSON `money` column (qbcore / qbox) or the `users.accounts` blob (ESX, both array and object schema variants). On ESX, `crypto` is rejected because vanilla ESX has no crypto account.
  * Every adjustment is recorded in [Audit Logs](/nexora-dashboard/pages/audit-logs).
* **Give / take items** (the `+ Item` button), searchable dropdown of every item registered by the active inventory script (ox / qb / framework default), quantity (negative removes), optional reason. Requires `players.inventory.edit`.
  * Catalog comes from the `/api/items/sync` push the Lua resource runs at startup; unknown item names are rejected before the SQL write.
  * Online players go through the active inventory script's `AddItem` / `RemoveItem` export (or `xPlayer.addInventoryItem` for ESX default), so the existing inventory UI reflects the change immediately.
  * Offline characters get a direct write into the `players.inventory` JSON (qbcore / qbox, ox- or qb-shape depending on `inventory_script`) or `users.inventory` (ESX, ox-array or simple `{name:count}` object). Removals decrement the matching slot and drop it when it hits zero.

## Notes

Pulls data from your existing FiveM tables, `players` / `users` depending on framework. The dashboard never deletes or modifies these without explicit action.
