What goes wrong most often, what it actually means, and what to do about it. Most of these are configuration, not faults — the message the player sees usually names the gate that shut. Find it below before opening a ticket.
Installation and Setup#
The console says standalone, but I run ESX, QBCore or Qbox
Your framework starts after Vehicle Keys, and detection only sees what is already running. Move its ensure above ensure qs-vehiclekeys and restart the server. The same goes for the inventory.
Using a key, plate or tracker item does nothing
Usually one of four things:
The item was spawned with a give command and carries no plate. Hand keys out with
/givekeys, the admin panel or the exports, and buy plates at the copy shop.The item names in your inventory differ from the ones in
config/main.lua.On ox_inventory, the plate, GPS and tracker are missing their
client.exportlines — see Inventory Items.ESX's default inventory stores no metadata, so no key can ever work on it.
The key transfer, admin or diagnostic window never appears
The interface ships built in web/build/. If that folder is missing or half-copied, the windows stay blank with no error in game — re-copy the whole resource. Check too that the folder is still named qs-vehiclekeys.
"Locale xx not found, fallback en.json"
Config.Locale names a file that is not in locales/. Use one of the 41 codes listed in Integrations.
The console fills with [DEBUG] lines
Config.Debug ships on. Set it to false once the server is live.
A keybind does nothing, or I changed it in the config and nothing moved
Another resource uses the same key, or the player rebound it. Settings → Key Bindings → FiveM shows and changes every Vehicle Keys binding. The keys in Config.KeyMappings are defaults only — they reach players who have never bound that command.
Keys and Access#
"You don't have keys for this vehicle" on my own car
With OwnerAccessWithoutKey on, owners need no key at all — so the car is not in your framework's owned-vehicle table under that plate, or the framework was not detected. With it off, the player holds no key for this plate: another script may have changed the plate. Recover a key at the bank clerk, or take one from /vkadmin → Give Self Key.
A car from my garage or job asks to be hotwired
The script that spawned it did not hand over a key. Add the one-line export call to its spawn code — Integrations shows it — or, for a script written for qb-vehiclekeys, check that it fires vehiclekeys:client:SetOwner or qb-vehiclekeys:client:AddKeys, and that any exports['qb-vehiclekeys'] call now says qs-vehiclekeys.
Police and EMS have to hotwire their own vehicles
Either the job script gives a key when it spawns the vehicle, or list the models in Config.NoLockVehicles so they never need one.
Anyone can drive any car
Config.Hotwire.Enabled is false, or a script called disableHotwire(true) for that player. With hotwiring off, a key is no longer needed to drive. If it is only some models, they are in a Whitelist or in NoLockVehicles — exempt on purpose.
The key transfer fails
Target player is too far away — stand within 8 m. Target already has this vehicle key — they hold it already. And yes, the giver keeps their own key: a transfer hands over a copy.
/givekeys says "You do not have permission"
/givekeys is for admins. Players share keys through F7, the key transfer menu.
/cleankeys removed keys I wanted
It removes every key for a car the player does not own in the database — job vehicles and friends' cars included. On a standalone server that is every key. Switch it off with Config.CleanKeys.Enabled = false.
Inventories fill up with duplicate keys
A garage or job gives keys with bypassKeyCheck = true every time it spawns a car. Pass false and a player who already holds the key is skipped.
Hotwiring, Lockpicks and Carjacking#
"Not enough police online"
That action has RequirePolice on and MinimumPolice above the number of online players whose job is in Config.PoliceJobs. Robbing NPC drivers asks for two by default. Check the job names, and that they are written as police = true — a plain list counts nobody.
The hotwire prompt never appears
Hotwiring is off, the model is exempt, or the player already has access — a key, the master key or ownership. Only the driver's seat shows the prompt.
"You need a weapon" or "Aim at an NPC driver first"
Stealing keys needs a gun drawn and aimed at an NPC who is driving — not a passenger, not a parked car, not a player — within MaxDistance.
"This vehicle driver has already been robbed"
Each car's driver can be robbed once per session, so a player cannot farm the same car.
"You do not have a lockpick" — but I do
The item in your inventory has a different name from Config.Lockpick.Item or AdvancedItem. Note that /lockpick always uses the standard one — use the advanced item from the inventory.
"This vehicle is not locked"
Lockpicks only work on locked cars. Try the door first.
The lockpick opened the doors, but the car will not start
Correct behaviour: a lockpick opens doors, nothing more. Hotwire the car, or set Config.Lockpick.GiveKeyOnSuccess = true.
Plates, Trackers and the Copy Shop#
"Invalid plate item metadata"
The plate item has no plate number — it was given with a command. Buy plates at the copy shop, which numbers each one. On ox_inventory any plate is numbered automatically when it is created.
"This plate is already in use"
An owned car already wears that plate. Use another plate item.
"Vehicle database update failed"
Config.Plate.RequireOwnedVehicle is on and the car is not in the owned-vehicle table. Swaps on cars nobody owns need that setting off.
"Tracked vehicle not found in world"
The car is stored in a garage, or too far away for the player's game to have loaded it. The tracker can only point at cars that are out and in range.
There is no option to remove a tracker
Removal needs ox_target and Config.Tracker.UseTarget, and the option only shows on cars in the player's own tracker list — ones they fitted, or hold a key to.
"You do not have a tracker device item"
/tracker needs the receiver, vehicletracker, in the inventory.
Copy shop: "You do not have enough money"
Payment comes from the account in Config.CopyShop.Account — money on ESX, cash on QBCore — not the bank. On a standalone server every priced service is refused; set the prices to 0.
Copy shop: "You do not have this key" or "No nearby vehicle found"
Both copy services need the original key in your inventory. For the nearby copy, the car must also be parked right beside you — within InteractDistance, 2 m by default.
"You are not authorized for diagnostic"
The player's job is not in Config.Diagnostic.AllowedJobs (or AllowedTintJobs for the tint meter). An empty table lets everyone use it.
Sounds and the Admin Panel#
There is no key-fob sound
interact-sound is not running, or carkeys.ogg is not in its sounds folder. Check Config.Sounds too — see Integrations.
/vkadmin says "You do not have permission"
The player is not an admin by your framework's rule. Installation → Admin Access lists who counts on ESX, QBCore and standalone.
The admin panel is empty
On standalone there is no owned-vehicle table to read. On ESX and QBCore, the list comes from owned_vehicles or player_vehicles — if your garage stores cars elsewhere, adapt the queries in custom/<framework>/server.lua.
"Vehicle owner is not online"
Give Owner Key needs the owner on the server. Take the key with Give Self Key and hand it over later, or wait for them to join.
"Vehicle is not spawned in the world"
Go To Vehicle can only reach a car your game has loaded. Cars in a garage, or far across the map, are out of its reach.
Still stuck? Open a ticket and include your framework and inventory with their versions, the
VEHICLEKEYS INFOlines from the server and F8 consoles, the exact message the player sees, and the config block for that feature. A screenshot of the F8 console helps for anything about the interface.



