Logs panel
Configure the public staff-log surface served at /logs/<your-project-key>.
Logs panel
The logs panel lives at unbbound.com/logs/<your-project-key> and is the dashboard your staff visits to read game-server events.
Authentication uses your own Discord application — Unbbound never sees your staff's tokens.
Setup wizard
The wizard is six guided steps:
- Application — create a Discord app on the developer portal.
- Client — paste Client ID + Client Secret.
- Bot — paste the bot token (revealed once via Reset Token).
- Redirect URL — copy the URL we display and paste it under OAuth2 → Redirects.
- Invite — invite the bot to your Discord server with
botscope andAdministratorpermission. - Server — paste the Discord server ID. We then run the verification, and any failed check jumps you back to the relevant step.
Allowed roles
Once verification passes, Unbbound fetches every role on your Discord server. Tick the ones that should see the panel — the rest of your community gets a friendly "you're not part of staff" page.
Public URL
The slug is derived from your project identifier (set during the onboarding wizard). To rename it, change the project key first.
Emitting a log line
From any server-side script, push events through the Unbbound logs API. The agent batches calls and POSTs every 2 seconds:
local Unbbound = exports['unbbound']
RegisterNetEvent('shop:purchase', function(itemId, price)
local src = source
local player = ESX.GetPlayerFromId(src)
Unbbound:log({
script = 'shop',
author = player.getName(),
uniqueId = player.identifier,
message = ('Bought %sx %s for $%d'):format(1, itemId, price),
metadata = { itemId = itemId, price = price },
})
end)Each call shows up under /logs/<your-slug> in real time. Filtering on script, author or uniqueId is server-side, so even a million-row history stays snappy.
// Or from a JS-bundled script (txAdmin, monitors, etc.)
const res = await fetch(`https://api.unbbound.com/log-panel/${slug}/ingest`, {
method: "POST",
headers: {
"content-type": "application/json",
"x-unbbound-token": INGEST_TOKEN,
},
body: JSON.stringify({
script: "monitor",
author: "system",
uniqueId: "node-1",
message: "Server warmup complete",
}),
});