Admin Guide

Admin and player commands, keybinds, permissions, and the /police admin in-game admin panel walkthrough.

Admin and player commands for oxide-police, plus a walkthrough of the in-game admin UI (/police admin).

Permissions

The admin panel (/police admin) and all admin commands are for your server admins — the same people you already trust to run admin tools on your server. A player counts as an admin if they are in a group that has been given the admin permission.

If you have not set up an admin group yet, add these two lines to your server.cfg (the text file that tells your server which resources to start and holds your server's settings). Replace the licence with your own — you can find it in your server console with getrawendpoint, or in txAdmin under the player's profile:

server.cfg
# 1. Put your account in the "admin" group
add_principal identifier.license:abc123 group.admin

# 2. Give the "admin" group permission to use admin tools
add_ace group.admin admin allow

Save the file and restart your server. Anyone in group.admin can now use /police admin and the admin commands.

  • This is the same admin permission used across all Oxide resources, so if your admins can already use other Oxide admin tools, they can use these too — there is nothing extra to set up.
  • There is one admin level. A player either is an admin or is not — there are no tiers or per-command permissions to manage.
  • This works the same on QBCore, ESX, and Qbox. There is nothing framework-specific to configure.

The MDT itself has its own, separate rank requirements for officers (such as the minimum rank to issue a warrant). Those are set per grade and are different from the admin permission above — see Configuration.

Letting department bosses set up their own stations

By default only server admins can open /police admin, which means the server owner personally places every station, garage and door for every department.

Setting Config.AllowBossSetup = true lets a department boss — an officer whose grade has the boss flag — open the same panel for their own department only. Nothing about admin access changes, and the setting is off by default.

A boss with this enabled can configure:

  • Stations, including all their interaction points (clock-in, armory, evidence, lockers, and so on)
  • Garages
  • Doors
  • CCTV cameras
  • Speed cameras, including which jobs they ignore
  • Detention holding and mugshot points
  • Jail policy (the stripping mode and its whitelist)

Plus everything bosses could already manage: grades, loadouts, uniforms and fleet.

A boss can never:

  • See, open or touch another department — the panel only ever loads their own
  • Create, delete, rename or disable a department
  • Fund a treasury or permanently delete a fleet vehicle
  • Reach the server-wide screens (revive point, prisoner jobs, prison shop)

The department dropdown is replaced by a fixed label showing their department, and the panel is badged Dept Setup instead of Admin so it is obvious the view is narrowed.

All of this is enforced on the server, not just hidden in the interface — a modified client cannot reach another department's data. Every change a boss makes is written to the server log with their character id, so you can see who changed what.

Commands Overview

CommandDescriptionAccess
/police adminOpens the in-game admin panelAdmin or authorized department boss
/police settingsOpens the standalone DB-backed resource settings panelAdmin only
/police hire <serverID> <deptName> [gradeRank]Hires a player into a departmentAdmin only
/police fire <serverID> [deptName]Fires a player from a department (their current one by default)Admin only
/police writeoff <plate>Writes off a fleet vehicle lost where the server cannot see it, such as one sunk in a riverAdmin only
/police jail <serverID> <months> [reason]Sends a player to custody directly without going through bookingAdmin only
/police unjail <serverID>Releases an inmate from custodyAdmin only
/police addtime <serverID> <±minutes> [reason]Adds or reduces a prisoner's remaining sentenceAdmin or qualifying officer
/police setsentence <serverID> <minutes> [reason]Sets a prisoner's remaining sentenceAdmin or qualifying officer
/police speedcam createOpens the speed camera placement UIAdmin only
/police speedcam removeRemoves the nearest speed camera within rangeAdmin only
/police dutyToggles duty from anywhere, bypassing the clock-in zone (disabled by default — requires Config.RequireStationClockIn = false). Uses the first station in the officer's department for clock-inHired officer
/police mdtOpens the MDT when Config.MDT.useItem = false; otherwise use the configured tablet itemEligible officer
/police bodycamsOpens the bodycam roster viewerHired officer (any department)
/police camerasOpens the CCTV roster viewerHired officer (any department)
/cuff [serverID]Cuffs the nearest player or the given server ID (configurable: Config.OfficerTargetMenu.CuffCommand)On-duty officer
/uncuff [serverID]Uncuffs the nearest player or the given server ID (configurable: Config.OfficerTargetMenu.UncuffCommand)On-duty officer
/removeclampRemoves a wheel clamp from the nearest vehicle. Only registered once Config.FieldTools.WheelClamp.externalJobs names at least one job (configurable: WheelClamp.externalCommand)A player in one of those jobs
/police purgeevidence [caseNumber]Permanently empties a closed case's sealed evidence lockerAdmin or console
oxide-police:mapmode [mode]Shows or changes how the MDT map draws Cayo Perico (prefix with / in game). The global default is olink:mapmode <value>Admin or console

Keybinds

The keybinds below are registered through RegisterKeyMapping and can be rebound by each player via the FiveM keybinds menu (Settings → Key Bindings → FiveM).

CommandDefault keyFunction
+policeactionsF2 (Config.ActionMenuKey)Opens the police actions menu
+oxide_police_vehicle_paB (Config.Megaphone.vehicleKey)Toggles vehicle PA from a fleet vehicle with a megaphone
+policestopcarryE (Config.FieldActions.Carry.stopKey)Stops carrying the current target
+policetackleG (Config.Tackle.Key)Tackles the targeted suspect
+handsupX (Config.HandsUp.Key)Tap for standing hands-up, hold to kneel (command name is configurable via Config.HandsUp.Command)
+oxidepolicetoggledoorL (Config.Doors.ToggleKey)Toggles the nearest door's lock
+bodycamrecF6 (Config.Bodycam.recording.hotkey)Toggles a manual bodycam clip while watching another officer's feed

The vehicle-mounted speed radar uses three lib.addKeybind registrations: K (Config.Radar.KeyToggle) to toggle, J (Config.Radar.KeyLockFront) to lock the front target, M (Config.Radar.KeyLockRear) to lock the rear target. These appear in the FiveM key-bindings menu as oxide_police_radar_toggle / _lock_front / _lock_rear and are rebindable.

The handheld speed radar (WEAPON_RADAR) has no keybinds — aiming the weapon activates the radar overlay automatically.

Admin Commands

/police admin

Opens the administration panel. This is the primary tool for setting up everything in the database — departments, stations, grades, garages, armory loadouts, uniforms, doors, prison points, CCTV, and speed cameras. (The charge catalog is the one exception — it is edited in the MDT.)

The admin panel also includes a mugshot Preview under Detention Mugshot, which places you at the photo mark and shows the camera framing so you can line up the booth. Preview does not take or upload a photo — test the upload itself by booking a test suspect.

See the admin panel walkthrough below.

Command Details

/police speedcam create

Opens the speed camera placement UI for the calling admin.

The UI lets you:

  • Pick a model from Config.SpeedCam.Models
  • Aim and place the camera prop
  • Set the speed limit, sensor radius (default Config.SpeedCam.DefaultSensorRadius), and fine multiplier (capped by Config.SpeedCam.MaxFineMultiplier)

The camera is persisted to the database and visible to all officers. Speed unit follows Config.SpeedUnit (MPH or KMH).

/police speedcam remove

Removes the nearest speed camera within range. Useful for quick teardown without opening the admin panel.

oxide-police:mapmode [mode]

Shows or changes Config.MapMode — how the MDT map handles Cayo Perico. Run it from the server console, or prefix it with / in game as an admin. Anyone else gets "You do not have permission to change map settings."

ModeResult
inheritFollow the server-wide default set with olink:mapmode (the shipped value)
combinedMainland and Cayo Perico on one map
separateSeparate island views with a region picker
disabledMainland only
oxide-police:mapmode              -- prints the current mode in the server console
oxide-police:mapmode separate     -- server console
/oxide-police:mapmode combined    -- in-game chat

The value is saved to the database and reaches open MDTs straight away. The same setting is Map mode under General in /police settings. See Configuration → Shared map mode.

Player Commands

/police mdt

Opens the Mobile Data Terminal. Officer must be on duty, unless Config.MDT.allowOffDuty is set to true (default false), which lets any hired officer open the MDT while off duty.

If Config.MDT.useItem is set to true, this command is disabled and the MDT is opened by using the Config.MDT.itemName inventory item (default police_tablet) instead.

With oxide-tablet running and Config.MDT.useTablet on (the default), the command — or the item — opens the MDT as the Police MDT app inside the tablet instead of its own window. See Configuration → shared/config/mdt.lua.

/police duty

Toggles duty from anywhere without requiring the officer to stand on a clock-in zone. Restricted to hired officers. On clock-in, picks the first station in the officer's department. Useful for staff and for testing without a configured station.

This command is disabled by default because Config.RequireStationClockIn defaults to true (officers must use a station clock-in zone). Set it to false to enable /police duty and the duty toggle inside the police radial menu.

/police jail <serverID> <months> [reason]

Sends a player to custody for the given number of months without going through the booking flow. Months convert to seconds using Config.Custody.SecondsPerMonth (default 60 = 1 RP-month per real minute). Picks the admin's own department if they are hired into one, otherwise the first department with a jail-configured station. Admin only.

/police unjail <serverID>

Releases an inmate from custody. Admin only (or the server console).

/police addtime <serverID> <minutes> [reason]

Adds to or reduces a prisoner's remaining sentence. Pass a positive number of minutes to extend the sentence or a negative number to reduce it. Works on offline prisoners. If the adjustment brings the remaining time to zero or below, the prisoner is released.

ArgumentTypeRequiredDescription
serverIDnumberYesTarget player's server ID
minutesnumberYesMinutes to add (positive) or reduce (negative); must not be 0
reasonstringNoFree-text reason recorded in the log

Examples:

/police addtime 5 30 disorderly conduct   -- adds 30 minutes to player 5's sentence
/police addtime 5 -15 good behavior        -- reduces player 5's sentence by 15 minutes

Access: admins (or the server console), or on-duty officers whose grade meets the holding station's jail minGradeUnjail (default 0 = any rank).

/police setsentence <serverID> <minutes> [reason]

Sets a prisoner's remaining sentence to an exact number of minutes. Works on offline prisoners. Setting it to 0 releases the prisoner.

ArgumentTypeRequiredDescription
serverIDnumberYesTarget player's server ID
minutesnumberYesNew remaining sentence in minutes (must be 0 or greater)
reasonstringNoFree-text reason recorded in the log

Examples:

/police setsentence 5 45    -- sets player 5's remaining sentence to 45 minutes
/police setsentence 5 0     -- releases player 5

Access: admins (or the server console), or on-duty officers whose grade meets the holding station's jail minGradeUnjail (default 0 = any rank).

/cuff [serverID] / /uncuff [serverID]

Cuffs or uncuffs the nearest player (within Config.OfficerTargetMenu.Distance, default 2.5m), or the player whose server ID is passed as an argument. The command names are taken from Config.OfficerTargetMenu.CuffCommand / UncuffCommand (defaults: cuff / uncuff). Restricted to on-duty officers.

/police bodycams

Opens the bodycam roster viewer. Restricted to hired officers (any department, on or off duty). Lists active bodycam wearers and lets the officer watch a stream. By default, filtered to officers in the same department (Config.Bodycam.sameDepartmentOnly = true).

/police cameras

Opens the CCTV roster viewer. Restricted to hired officers (any department, on or off duty). Lists all CCTV cameras the officer can access (placed cameras + permanent admin-placed cameras).

/police purgeevidence [caseNumber]

Permanently destroys everything inside a case's evidence locker and empties it. Admin or server console only.

Every case gets its own evidence locker, and those lockers otherwise stay around forever. This is the way to reclaim that space on a long-running server.

The locker has to be sealed first, which means the case must be closed and Config.Evidence.locker.sealOnCaseClose must be turned on. That is deliberate: it makes purging a two-step action rather than something a mistyped case number can trigger against an active investigation.

This cannot be undone. The items are gone, not moved. Each purge is written to the log with the case number, who ran it, and a list of exactly what was destroyed. If your inventory system doesn't support clearing a stash, the command reports that and changes nothing.

/police admin Walkthrough

The admin panel is organised into tabs. First-time setup typically follows this order:

Department creation

Open /police admin and use the New Department button (the department selector sits at the top of the panel's sidebar). The create form asks for two things:

FieldNotes
nameMust match a job in your framework (e.g. police, lspd, bcso). Case-sensitive
labelDisplay name (e.g. Los Santos Police Department)

The rest of the department's settings are edited on their own screens after creation:

  • Overview — enable / disable the department and manage the treasury
  • Jail Policy — stripping mode (none / locker / wipe) and the keep-item whitelist (see Custody)
  • Speed Cameras — the "ignored jobs" list of framework jobs exempt from camera triggers

Departments start with a Config.BankingAccountStartBalance (default $30000) treasury when Config.UseBankingAccount = true.

Grade matrix

For each department, define grades on the Grades screen (with that department selected in the sidebar).

FieldNotes
grade_rankNumeric rank (must match framework job grades)
grade_nameInternal name (e.g. cadet)
grade_labelDisplay name (e.g. Cadet)
salaryPer-tick salary paid by Config.SalaryInterval
is_bossGrants access to the boss panel (opened from in-station ox_target interaction)

Grades are created entirely through the admin panel — there is no template file to copy from.

Station setup

/police admin → Stations → Create.

FieldNotes
department_idOwning department
labelDisplay name
typemain or substation
coords_x / y / z, headingStation origin

After creating, configure the station's points across the panel's screens:

Stations → [station] → Interaction tab:

  • Clock-in zone — where officers go on / off duty
  • Armory — where officers buy loadouts (loadouts themselves are built on the Loadouts screen)
  • Personal locker — where officers put on / take off uniforms
  • Boss menu — where bosses open the management panel
  • Evidence locker — the case-based evidence access point (the case selected in-app decides which locker opens); access controlled by Config.Evidence.locker.minGrade
  • Evidence lab — the evidence processing point

Stations → [station] → Services tab:

  • Station bell — desk bell for civilians
  • Trash bin — shared bin with slots / weight
  • Firearm registration desk — civilian firearm registration point

Detention screens (per station):

  • Detention Holding — booking desk, holding cells, jail cell, and release point
  • Detention Mugshot — camera position + suspect photo mark

Garages live on the Fleet → Garages screen, where each garage can be attached to a station.

Clock-in, armory, boss menu, evidence locker, evidence lab, and personal locker each support multiple points per station — use the add / remove controls to place more than one. Existing single-point stations keep working unchanged.

Garage and vehicle setup

/police admin → Fleet → Garages, then Fleet → Vehicles.

  • Create a garage first (label, type, spawn points), optionally attached to a station.
  • Add vehicles here free of charge — the admin panel does not touch the treasury. Bosses buying through their own Fleet screen are charged the vehicle's cost plus any addon surcharges (Config.FleetAddons.radar = 5000, Config.FleetAddons.megaphone = 2500, Config.FleetAddons.gun_rack = 3500), and that total is what a totalled unit costs to replace.
  • The model can be anything, not just Config.FleetCatalog — the catalog is the menu bosses shop from, not a restriction on what you can add here.
  • Set Type to what the model really is: Car, Bike, Quad, Boat, Helicopter or Plane. Vehicles always spawn as this type, so a motorbike set to Car (or the other way round) spawns broken. Picking a garage sets the type to the garage's kind until you choose one yourself. Editing an entry's type applies from each unit's next spawn; an entry marked Mixed types holds units saved with different types, and saving it gives them all the type shown.
  • Toggle has_radar to enable the vehicle radar keybinds (K / J / M).
  • Toggle Rack to fit a gun rack. On-duty officers of the department then get Access Gun Rack on those vehicles, a small stash per unit that empties when the unit is returned, towed back or destroyed (unless Config.GunRack.PersistOnReturn is on). Removing a rack does not delete what is in it — the items stay out of reach until a rack is fitted to that vehicle again. See Configuration → Gun racks.
  • Set Minimum Grade to gate spawn access. It's a list of the department's own ranks, so it can't be set to a rank nobody holds — a vehicle gated above the top rank would never appear in any garage.
  • One entry per vehicle spec. A fleet entry is identified by its model, garage, rank and radar/megaphone/gun rack flags — not by its name. Adding a second entry with the same spec is rejected; use the entry's quantity to add more units of it. Every unit in an entry shares its label, livery, extras, performance upgrades and trunk loadout.
  • Set Performance Upgrades (engine, brakes, transmission, armor and turbo) when adding or editing a vehicle. They apply to every unit in the entry, and units you add later inherit them. Upgrades take effect the next time a unit is taken out of the garage; a unit already out on the road keeps its current setup until it comes back. Setting a level back to Stock removes the upgrade. If a vehicle has fewer levels than you chose, it gets its highest one. Entries with upgrades show an Upgraded badge.
  • Copy an entry instead of rebuilding it. Press the copy icon on a vehicle row, pick a department and one of its garages, and press Copy — for example to give BCSO the same patrol fleet LSPD has. The copy gets the same number of units, label, model, minimum rank, livery, extras, performance upgrades, radar, megaphone and gun rack, replacement cost and trunk loadout. Every copied unit gets a new plate in the target department's plate format; plates, drivers and vehicle status are never copied. Copying is free, like adding a vehicle here.
    • Only garages of the same type (car, boat or helicopter) are offered.
    • The minimum rank is copied as a number and lowered to the target department's top rank if it has fewer ranks. Check it after copying — rank 3 in one department is not necessarily the same job as rank 3 in another.
    • If the target garage already has an entry with the same model, rank and addons, the copy is refused and names that entry — raise its quantity instead, or copy into another garage.
    • A boss can copy only within the department they run. Copying between two departments needs someone who manages both, which in practice means an admin.
  • The trash icon disables the whole entry, it does not delete one unit. Disabled entries stay in this list greyed out with a DISABLED badge and vanish from garages; press the ↺ button to bring them back, or the red trash to delete them permanently. To reduce unit count instead, lower the quantity.
  • Give the vehicle a trunk loadout so officers start a shift already equipped. Edit a vehicle and add items under Trunk Loadout, each with a count and a price. The equipment is loaded into the car when the unit is bought and then stays with it — officers take what they need and put things back. The loadout applies to every unit in the group, and units you add later inherit it.
    • Refilling. Press Refill (the box icon) on a vehicle row to restock every unit of that vehicle. The treasury is charged only for what is actually missing, at the prices you set — one used medkit costs one medkit. Vehicles that are already full aren't charged.
    • Because nothing is issued on checkout, officers can't farm equipment by taking a car in and out. A crew that loses its gear costs the department money instead.
    • Saving a loadout also stocks the cars straight away, so vehicles you already own pick it up without a separate step. The treasury is charged the same way as a refill — if it can't cover the equipment the save still succeeds and you're told the cost and the balance.
    • Trunk loadouts need o-link 1.6.7 or newer and an inventory that can write to vehicle trunks — see Configuration → Trunk loadouts.
  • Plate formats are set elsewhere — /police settings → Fleet → Fleet plate formats — because they apply per department rather than per vehicle. Only vehicles created after you set one are affected; plates already in service are never rewritten. See Configuration → Plate formats.
  • Checked-out vehicles stay in the world until physically returned to a garage bay (they survive clock-out, disconnect, and restarts). When a unit is stranded in the field, use the Tow action on the Fleet screen — it lists each out unit with its plate, holder, and last-seen street so you pick exactly which one to bring back. Each tow charges the treasury Config.FleetRecoveryFee (default 750).

Charges catalog

The charge catalog is managed in the MDT (Catalog tab), not the admin panel.

  • The catalog is seeded from Config.DefaultCharges (100 entries) the first time the resource starts.
  • Edit / add / archive charges through the MDT's Catalog tab (admins only).
  • Editing shared/config/charges.lua after first run does not retroactively modify the database.

Importing a penal code from a spreadsheet

Adding a few hundred charges one at a time is painful, so the Catalog tab has an Import button that takes a CSV.

The columns are code, title, category, description, fine_amount, jail_time. Only code and title are required, and the column order does not matter — the header row is what identifies each column. category must be infraction, misdemeanor, or felony; anything else becomes misdemeanor. A worked example is shown in the import panel.

You can either pick a .csv file or paste the rows straight into the box. Either way you get a preview before anything is saved, showing which rows will be added, which will update a charge that already exists, and which are invalid (flagged and skipped). Nothing is written until you confirm.

Because a row whose code already exists updates that charge rather than duplicating it, you can keep the spreadsheet as your working copy of the penal code and re-import it whenever you make changes. Charges you previously removed come back if their code reappears in the file.

Imports are capped at Config.MDT.limits.maxImportRows (default 500) per file. If a row fails, the rest still import and the failures are listed with their line numbers.

The Export button produces the same format from your current catalog — useful for backups, or for copying a penal code from a test server to a live one. Because the game's browser cannot save files directly, the export appears as selectable text: click it, select all, and copy.

Prison job points

/police admin → Detention → Prisoner Jobs.

  • Place rock spawns (mining), trash spawn zones (cleaning), and electrical meter points.
  • Each placed point is persisted and tied to one of the three job types.

Prison shop

/police admin → Detention → Prison Shop.

  • Set the vendor location (ped spawns at this point with WORLD_HUMAN_CLIPBOARD scenario) in one of two ways:
    • Place Interactively shows a see-through preview of the vendor where you aim. Scroll to turn it, then click to place it. Press Enter to fine-tune: drag the coloured arrows to slide it, scroll to turn it, use the arrow keys to nudge it, and press Enter again to save. ESC cancels at any point and leaves nothing behind.
    • Use My Position saves the spot you are standing on, facing the way you face.
  • Define meal windows (for the free prison_food_tray).
  • Build the paid catalog (item, label, price, category from Config.PrisonShop.categories).

Prison revive point

/police admin → Detention → Revive Point.

  • Sets the global revive point used when an inmate dies during their sentence.
  • Stored in the police_prison_revive_point table — without a row, the prison revive cutscene cannot fire and inmates fall through to the framework medical resource.

Speed camera placement

Use /police speedcam create from in-world for placement (see above) — this is faster than placing through the admin panel.

Next Steps