FiveM vehicle class ID list
The Cfx native reference lists the following engine classes. Use the numeric value when an API expects a class ID, and keep it separate from a model hash or entity handle. This reference concerns GTA V on FiveM; it does not establish GTA VI compatibility.
| ID | Class | ID | Class |
|---|---|---|---|
| 0 | Compacts | 12 | Vans |
| 1 | Sedans | 13 | Cycles |
| 2 | SUVs | 14 | Boats |
| 3 | Coupes | 15 | Helicopters |
| 4 | Muscle | 16 | Planes |
| 5 | Sports Classics | 17 | Service |
| 6 | Sports | 18 | Emergency |
| 7 | Super | 19 | Military |
| 8 | Motorcycles | 20 | Commercial |
| 9 | Off-road | 21 | Trains |
| 10 | Industrial | 22 | Open Wheel |
| 11 | Utility | — | — |
Inspect the vehicle you are sitting in
Place this example in a client script declared by your resource manifest. On a staging server, sit in a vehicle and run magnate_vehicleclass in F8. It prints the engine class ID and its localized label to the client console. Run it once outside a vehicle to check the empty-state message, then compare two known vehicle types.
This is a documentation-based diagnostic example, not a game-runtime test performed by Magnate. It reads information and does not spawn a vehicle, change handling, assign ownership or save a garage entry. Choose a unique command name if another resource already uses this one.
RegisterCommand('magnate_vehicleclass', function()
local vehicle = GetVehiclePedIsIn(PlayerPedId(), false)
if vehicle == 0 or not DoesEntityExist(vehicle) then
print('Sit in a vehicle before running this command.')
return
end
local classId = GetVehicleClass(vehicle)
local label = GetLabelText(('VEH_CLASS_%d'):format(classId))
print(('Vehicle class: %d (%s)'):format(classId, label))
end, false) Entity handle, model hash and class ID are different inputs
GetVehicleClass expects a vehicle entity that exists in the game world. GetVehicleClassFromName expects a model hash, despite its name. Passing a display label, a class number or an entity handle into the model-hash API confuses different identifiers. Preserve the variable names and types as you trace a resource.
For a known model already available in your installation, a client-side expression such as GetVehicleClassFromName(joaat(knownModelName)) reads its class without requiring that specific vehicle entity. The variable knownModelName must contain the actual registered model name. Do not treat an arbitrary return value for an unavailable model as validation that a custom vehicle installed correctly.
A display label is another layer: GetDisplayNameFromVehicleModel returns the model’s gameName label, not a spawn command or class ID. When diagnosing a menu, record which field the menu uses instead of replacing several identifiers at once.
Why your dealership tier can disagree with the engine class
A server can organize its shop or race rules using its own categories. A label such as S tier, luxury or job-only is not one of the numeric engine classes above. Before editing a resource, identify whether its filter reads GetVehicleClass, a framework vehicle table, an allowlist or a database field.
For example, if the native returns 6 while a dealership places the same model in an expensive tier, those observations alone do not establish a bug. They may describe two independent systems. Trace the menu configuration and the gameplay restriction separately, then change the system that owns the behavior you intend to alter.
Do not use a client-side class check as the sole authorization for purchases, rewards or restricted vehicle access. Validate sensitive actions on the server against the server’s own rules and state. A cosmetic menu filter is not a permission boundary.
Troubleshooting a custom vehicle in the wrong category
Begin with a reproducible staging record: model name, resource version, game build, returned class ID and the menu category you expected. Compare the engine result with the resource’s category source. If only the menu differs, inspect its mapping before changing the vehicle package.
If the engine classification is unexpected, review the supplied vehicle metadata and check for conflicting resources defining the same model. Follow the package documentation, change one item at a time and repeat the diagnostic after the documented reload procedure. Avoid broad cache deletion as a substitute for identifying which configuration is being read.
- Test the current vehicle rather than accidentally reading the last vehicle.
- Confirm the model being tested matches the resource you changed.
- Keep a backup of the original metadata and configuration.
- Retest garage, dealership and job behavior separately after a change.
- Use the vehicle resource guide for manifest and package checks.
Questions, answered.
What is vehicle class 18 in FiveM?
The Cfx engine class list labels ID 18 Emergency. It does not by itself grant a player an emergency-services job or permission to use a vehicle.
Is class 7 the same as a server’s S class?
Class 7 is the engine category Super. A server’s S tier can be a separate configuration; check the resource that defines it.
Can I pass a spawn name directly to GetVehicleClass?
No. GetVehicleClass takes a vehicle entity. For model-based lookup, GetVehicleClassFromName takes a model hash.
Sources & editorial notes
Source review: November 7, 2026. Platform announcements can change. This guide separates published facts from Magnate’s original analysis and preparation advice.
- Cfx native reference — GetVehicleClass Native signature and documented behavior; reviewed November 7, 2026.
- Cfx native reference — GetVehicleClassFromName Native signature and documented behavior; reviewed November 7, 2026.
- Cfx native reference — GetVehiclePedIsIn Native signature and documented behavior; reviewed November 7, 2026.
- Cfx native reference — GetDisplayNameFromVehicleModel Native signature and documented behavior; reviewed November 7, 2026.
- Cfx — Secure your events Server-side validation of client-triggered actions.
Published by an independent editorial brand. Read our editorial standards.