FiveM CAD Documentation

Version 1.22.2 · Last updated May 2026

FiveM CAD is a cloud-based Computer Aided Dispatch system built specifically for FiveM roleplay communities. It provides real-time dispatching, character management, and law enforcement tools with seamless in-game integration.

The platform runs entirely in the cloud and connects to your server using a lightweight resource, allowing instant deployment with no backend setup required.

Purchase & Setup

After selecting a plan, your community is created instantly. You can access your dashboard by signing in and completing the onboarding wizard.

  • Create your community
  • Connect Discord authentication
  • Generate your API token
  • Invite staff and officers

All configuration is handled through the web dashboard.

FiveM Integration

Integrate your server using the provided Lua resource:

FiveM CAD — FiveM Resource
Available to active community owners. Requires a valid subscription.
⭳ Download Resource
  1. Download the atlantic_cad resource using the button above
  2. Extract and place the atlantic_cad folder inside your server's resources/ directory
  3. Add to server.cfg:
    ensure atlantic_cad
  4. Open atlantic_cad.lua and set your credentials at the top:
    local CAD_URL   = "https://your-cad-domain.com"
    local CAD_TOKEN = "your_api_token"

Generate your API token from Community Dashboard → Setup → FiveM Token. Restart your server after setup — players will then be able to use CAD commands in-game.

In-Game Commands

All command names are configurable in config.lua. The names listed below are the defaults shipped with the resource.

General

CommandUsageDescription
/duty /duty Toggle on/off duty status. Must be a configured LEO job.
/cadchar /cadchar Open the character selector. Auto-selects if you only have one character.

Dispatch & Calls

CommandUsageDescription
/cadcall /cadcall Open the call creation form. Auto-fills postal, street, and zone from your current position. Requires duty.
/911 /911 Opens the same call creation form as /cadcall without a duty requirement. Available to all players.
/respond /respond <call_id> Respond to a call by its ID or call number. Sets your status to Enroute and places a waypoint. Requires duty.
/onscene /onscene Mark yourself on-scene for your active call. Sets status to On Scene. Requires duty and an active responded call.
/closecall /closecall Close your active call and mark it complete in the CAD. Requires duty.
/clearcall /clearcall Detach yourself from your active call without closing it. Other units remain assigned. Requires duty.
/scenecommand /scenecommand Take scene command on your active call. Requires duty.
/releasescene /releasescene Release scene command on your active call. Requires duty.

Keybinds

Default KeyActionDescription
F6 Respond to Call When an incoming call overlay is visible, respond to it and set a waypoint. Rebindable in GTA V controls.
F7 Dismiss Call When an incoming call overlay is visible, dismiss it without responding. Rebindable in GTA V controls.
F9 Panic Button Broadcast an officer-in-distress alert to all on-duty units. Creates a flashing blip at your location for 90 seconds. Requires duty. Rebindable in GTA V controls.

Unit Status

CommandUsageDescription
/status /status List all available status codes.
/status <code> /status 10-8 Set your unit status. Requires duty.

Default Status Codes

CodeMeaning
10-8Available
10-6Busy
10-7Out of Service / Hospital
10-15Transporting Prisoner
10-97On Scene
10-98Call Complete

Status codes are configurable in config.lua.

Lookups, Reports & Citations

CommandUsageDescription
/lookup /lookup or /lookup <name or plate> Open the MDT lookup form. Supplying a plate (uppercase, 2–8 characters, no spaces) auto-routes to a plate search. Supplying a name auto-routes to a person search. Requires duty.
/report /report Open the report creation form. Fields: report type (Incident, Use of Force, Crash Report, Fire Report, Medical Report, Tow Report, Other — filtered by department), title, body, evidence, involved persons, and involved vehicles. Requires duty.
/citation /citation Open the citation form. Fields: suspect character ID, violation, fine amount, and points. Requires duty.

Traffic Stops

CommandUsageDescription
/ts /ts <plate> Log a traffic stop. Automatically looks up the plate, creates a call, and marks you on-scene in one command. Flags the vehicle as stolen or BOLO'd if applicable and displays the owner info. Requires duty.

Vehicles

CommandUsageDescription
/regvehicle /regvehicle Register the vehicle you are currently sitting in to the CAD. Records the plate, make, model, and color.
/delvehicle /delvehicle <plate> Deregister a vehicle from the CAD by plate.
/stolenvehicle /stolenvehicle <plate> Mark a vehicle as stolen in the CAD. Requires duty.
/recovervehicle /recovervehicle <plate> Mark a previously stolen vehicle as recovered. Requires duty.

BOLO

CommandUsageDescription
/bolo /bolo <plate> <description> Create a Be On Lookout alert. The plate is automatically uppercased. All text after the plate is used as the description. Broadcasts to all on-duty units. Requires duty.
/bolo ABC123 Red Dodge Charger, armed suspect, last seen near bank

Dispatch & Calls

The Dispatch tab is the real-time command center for your community. It stays live as calls come in and units respond — no page refreshes needed.

Layout

The dispatch view uses a three-column layout:

  • Left — Call Queue: all active calls, sorted by priority. Each row shows the call title, location, and which units are assigned (with a "+N more" chip if several units are on scene).
  • Center — Incident Detail: full detail for the selected call — description, narrative timeline, and unit management. Select a call from the queue to open it here.
  • Right — Units Sidebar: every on-duty unit in your community, grouped by department type (Police, Fire, EMS, Tow). Each group shows a live count.

Closed Incidents Panel

Below the incident detail pane, a scrollable panel shows the last 6 closed calls. You can click View to reopen any closed incident's full detail. Admins also see a Delete button per row.

Call Numbers

Every call is assigned a sequential call number (e.g. #42) automatically. Call numbers never reset and are unique per community.

Creating a Call

  • From the CAD dashboard: use the New Call button in the dispatch header
  • From in-game: use /cadcall or /911 — postal, street, and zone auto-fill from your position
  • Calls are pushed to all open CAD browser sessions instantly via Server-Sent Events

Unit Statuses

StatusMeaning
AvailableOn duty, not assigned to a call
EnrouteResponded to a call, heading to scene
On SceneArrived at the call location
BusyOn duty but unavailable for new calls

Characters

Each player can create and manage multiple characters. Your active character determines your callsign, department assignment, and what records are linked to you in the CAD.

  • Store name, date of birth, and personal identifiers
  • Assign to a department and rank
  • Link registered vehicles, driving licenses, weapon licenses, and records
  • Upload a mugshot photo (subject to community upload rules)
  • Switch your active character from the CAD nav bar or in-game with /cadchar

Character type controls what you can do in the CAD — leo, ems, and fd characters get access to the Dispatch, BOLOs, Warrants, Lookup, and Reports tabs. civilian and tow characters have a trimmed view.

DMV

The DMV system is an optional, feature-flagged module that tracks driving licenses and automatically enforces point-based suspensions. Admins enable it per community in Settings.

Driving Licenses

  • Characters can register a driving license (self-register if allowed, or admin-issued)
  • License classes are configurable per community. The default set is Florida-style: E (Standard), A (Commercial Semi), B (Commercial Large Truck/Bus), C (Commercial Small Truck), D (Chauffeur/For-Hire), M (Motorcycle)
  • Admins can override status, class, and suspension dates at any time

Point System

When DMV points are enabled, citations with a point value automatically update the character's license. Points expire after a configurable number of days (default: 365).

  • When a character's total points reach the community threshold (default: 12), their license is auto-suspended
  • Suspension length is configurable (default: 30 days)
  • When enough points expire to drop below the threshold, the suspension is lifted automatically on the next point recalculation
  • If the point system is disabled, licenses and points are still recorded — but no suspensions are triggered

Reports & Arrests

Officers can generate permanent law enforcement records from both the CAD dashboard and in-game commands.

Incident Reports

  • Types: Incident, Use of Force, Crash Report, Fire Report, Medical Report, Tow Report, Other — available types are filtered by your department type
  • Include a full narrative body, evidence notes, involved persons, and involved vehicles
  • Link to a dispatch call — when filing a report, search for any active or recent call by number, title, or location to attach the report to it. If you already have a call selected in Dispatch, it pre-fills automatically
  • Reports enter a supervisor review queue (pending status) until approved or rejected by an admin

Arrest Records

  • Filed against a specific character with charge list, jail time, and fine amount
  • Can be linked to a parent incident report
  • Attach photos at time of filing

Citations

  • Record a violation, fine amount, and optional DMV point value against a character
  • If DMV is enabled and points > 0, the character's driving license is updated automatically
  • Can be issued from in-game via /citation or from the CAD dashboard

Weapons

The weapons module is optional and enabled per community in Settings. It tracks registered firearms and civilian license requests.

  • Register firearms to specific characters with serial number, make, model, and caliber
  • Officers can look up weapon registrations during a subject search
  • Civilians can submit a weapons license application from their character profile
  • Supervisors approve or deny pending applications from the Weapons tab
  • A character's weapons license status is visible on lookup cards and subject searches

Live Map

Available on Premium (tier 3) communities. The Live Map tab renders a real-time canvas map of the GTA V world showing every on-duty LEO, EMS, and FD unit.

  • Unit blips update every 3 seconds with position and heading arrows
  • Sidebar lists all on-duty units with department color and callsign
  • Click a unit in the sidebar to center the map on it
  • Pan (drag) and zoom (scroll wheel) supported
  • Positions are pushed from the Lua resource every ~2 seconds per unit via POST /fivem/livemap/position
  • Entries older than 30 seconds are automatically pruned (unit went off-duty or lost connection)

FiveM API Reference

The FiveM Lua resource communicates with FiveM CAD through a REST API. All /fivem/* routes require a Bearer token generated from the Setup Wizard. Tokens are community-scoped — you never pass community_id in the request body.

Base URL: your CAD domain, e.g. https://cad.yourserver.com

Authentication

Include the token on every request:

Authorization: Bearer your_token_here

Tokens are created and revoked from the Setup → API Tokens tab in your dashboard. A missing or invalid token returns 401.

Events & Polling

GET /fivem/events

Opens a persistent Server-Sent Events connection. FiveM CAD pushes real-time events to any connected client. FiveM's HTTP client cannot hold long-lived SSE connections — use the polling fallback below.

EventWhen fired
connectedImmediately on connect
new_callA call is created (web or API)
call_updatedCall priority, status, or scene command changes
call_closedA call is closed
panicOfficer triggers panic button
heartbeatEvery 25 s (keep-alive comment)

GET /fivem/poll-calls

Returns calls created in the last 30 seconds. Poll every 15 s as a fallback when SSE is unavailable.

// Response
{
  "calls": [
    {
      "id": "uuid",
      "call_number": 42,
      "title": "10-50 MVA",
      "location": "Route 1",
      "postal": "334",
      "priority": 2,
      "status": "active",
      "created_at": "2026-04-29T14:32:00Z"
    }
  ]
}

Lookups

GET /fivem/lookup/player

Look up characters by name or Discord ID. One query param required.

ParamExampleNotes
name?name=John+SmithPartial match, up to 5 results
discord_id?discord_id=1234567890Exact match
// Response
{
  "found": true,
  "characters": [
    {
      "id": "uuid",
      "first_name": "John",
      "last_name": "Smith",
      "date_of_birth": "1990-04-15",
      "type": "leo",
      "department": "Los Santos Police Department",
      "rank": "Officer",
      "weapons_license": true,
      "flags": { "has_warrants": true, "warrant_count": 1 },
      "warrants": [{ "title": "Armed Robbery", "status": "active" }],
      "vehicles": [{ "plate": "ABC123", "make": "Vapid", "is_stolen": false }]
    }
  ]
}

Character type values: leo · ems · fd · tow · civilian

GET /fivem/lookup/plate/:plate

Full plate lookup with BOLO and warrant flags. Plate is case-insensitive.

// Response
{
  "plate": "ABC123",
  "vehicle": {
    "plate": "ABC123",
    "make": "Vapid",
    "model": "Dominator",
    "color": "Black",
    "year": 2020,
    "is_stolen": false,
    "owner_name": "John Smith"
  },
  "bolo": null,
  "warrants": [],
  "flags": {
    "registered": true,
    "is_stolen": false,
    "has_bolo": false,
    "has_warrants": false
  }
}

vehicle and bolo are null when not found.

Calls

POST /fivem/calls

Create a dispatch call. Pushes a new_call SSE event to all connected CAD browsers.

FieldRequiredTypeNotes
titleYesstringShort call type / title
descriptionNostring
locationNostringStreet / area name
postalNostring
priorityNoint1=high 2=medium 3=low (default 2)
created_byNoUUIDCharacter ID of the caller

Returns the full call object with status 201.

POST /fivem/respond

Mark a character enroute to a call. Character must be on duty.

{ "character_id": "uuid", "call_id": "uuid" }

POST /fivem/on-scene

Mark a character on-scene. Must have already called /respond for this call.

{ "character_id": "uuid", "call_id": "uuid" }

POST /fivem/unit-status

Update a unit's status on a call.

// Body
{ "character_id": "uuid", "call_id": "uuid", "status": "busy" }

// status values: available | enroute | on_scene | busy

POST /fivem/scene-command

Take or release scene command on a call. Only one unit can hold scene command at a time. Pushes call_updated SSE event.

FieldRequiredNotes
character_idYes
call_idYes
takeYestrue = take, false = release

POST /fivem/calls/:id/close

Close a call by its UUID. Pushes call_closed SSE event.

// Response
{ "message": "Call closed", "call_number": 42 }

POST /fivem/calls/:id/detach

Remove a unit from a call without closing it. Adds a "cleared" narrative.

// Body
{ "character_id": "uuid" }

// Response
{ "message": "Detached from call", "call_number": 42 }

Reports

POST /fivem/reports

Submit an incident / use-of-force / other report. Status defaults to pending (enters supervisor review queue).

FieldRequiredNotes
author_idYesWriting officer's character UUID
titleYes
bodyYesFull narrative text
typeNoincident · use_of_force · crash_report · fire_report · medical_report · tow_report · other
call_idNoLink to existing call UUID
evidenceNo
involved_personsNoArray of { name, notes }
involved_vehiclesNoArray of { plate, is_stolen }
report_dataNoStructured fields object — keys vary by type (see roadmap Report Types reference)
// Response (201)
{ "id": "uuid", "report_number": 7, "status": "pending", "message": "Report submitted" }

POST /fivem/reports/arrests

Record an arrest.

FieldRequiredNotes
character_idYesArrested character
arrested_byYesArresting officer character UUID
chargesYesComma-separated charge list
jail_time_minNoInteger minutes, default 0
fine_amountNoFloat, default 0
report_idNoLink to parent report UUID

POST /fivem/reports/citations

Issue a citation. If DMV is enabled and points > 0, points are added to the character's driving license and auto-suspension is evaluated.

FieldRequiredNotes
character_idYesCited character
issued_byYesOfficer character UUID
violationYes
fine_amountNoFloat, default 0
paidNoBoolean, default false
pointsNoDMV points 0–12 (clamped)

Characters & Duty

POST /fivem/player-connect

Called when a player joins the server. Resolves their Discord ID to CAD characters.

// Body
{ "discord_id": "123456789012345678" }

// Response (registered)
{
  "registered": true,
  "user": { "id": "uuid", "username": "AtlanticDev", "discord_id": "..." },
  "characters": [
    { "id": "uuid", "first_name": "John", "last_name": "Smith",
      "type": "leo", "callsign": "1-A-12", "dept_short": "LSPD" }
  ]
}

// Response (not registered)
{ "registered": false }

POST /fivem/create-character

Create a character for an existing CAD user from in-game, without requiring the web dashboard.

FieldRequiredNotes
user_idYesUUID from player-connect response
first_nameYes
last_nameYes
typeNoleo · ems · fd · tow · civilian
department_idNoAssign to a department UUID

Returns the full character row with status 201.

POST /fivem/duty

Toggle a character on or off duty. Fires the community's Duty Change Webhook if configured.

// Body
{ "character_id": "uuid", "action": "on" }
// action: "on" | "off"

// Response
{ "on_duty": true }

BOLOs

POST /fivem/bolos

Create a Be On Lookout from in-game.

FieldRequiredNotes
descriptionYesWhat to look for
typeNovehicle (default) · person · other
plateNoAuto-uppercased
created_byNoCharacter UUID

Returns the full BOLO row.

Vehicles

POST /fivem/vehicles

Register a vehicle for a character.

FieldRequiredNotes
character_idYesOwner's character UUID
plateYesAuto-uppercased, alphanumeric only
makeNo
modelNo
colorNo
yearNoInteger
vinNo

Returns the full vehicle row (201). Returns 409 with vehicle_id and owner_character_id if the plate is already registered.

DELETE /fivem/vehicles/:plate

Deregister a vehicle by plate. Plate is case-insensitive.

// Response
{ "ok": true, "plate": "ABC123" }

PATCH /fivem/vehicles/:plate/stolen

Mark a vehicle stolen or recovered.

// Body
{ "stolen": true }

// Response
{ "ok": true, "plate": "ABC123", "is_stolen": true }

Panic

POST /fivem/panic

Trigger an officer-in-distress alert. Creates a priority-1 call titled PANIC — [callsign] Name and pushes a panic SSE event to all connected CAD browsers.

FieldRequiredNotes
character_idYes
locationNoStreet / area name
postalNo
coordsNo{ x, y, z } GTA V world coords
// Response
{ "ok": true, "call_id": "uuid", "call_number": 43 }

Livemap

POST /fivem/livemap/position

Report a unit's live position. Call this server-side every ~2 s for each on-duty unit. Pass raw GetEntityCoords() values — do not scale or convert them. Positions older than 30 s are automatically pruned.

FieldRequiredNotes
character_idYesCharacter UUID
nameNoDisplay name shown on map, e.g. [K-1] John Smith
xYesRaw GetEntityCoords() X
yYesRaw GetEntityCoords() Y (positive = south)
zYesElevation
headingYesRaw GetEntityHeading() — 0=North, 90=East, 180=South, 270=West
// Lua example (server-side tick, every 2s per on-duty unit)
RegisterNetEvent('cad:updatePosition')
AddEventHandler('cad:updatePosition', function(x, y, z, heading)
  local charId = playerCharacters[source].activeCharId
  PerformHttpRequest(CAD_URL .. '/fivem/livemap/position', function() end, 'POST',
    json.encode({ character_id = charId, x = x, y = y, z = z, heading = heading }),
    { ['Content-Type'] = 'application/json', ['Authorization'] = 'Bearer ' .. CAD_TOKEN })
end)

Response: { "ok": true }

GET /fivem/livemap

Fetch all current on-duty unit positions for this community.

// Response
{
  "units": [
    {
      "character_id": "uuid",
      "name": "[K-1] John Smith",
      "x": -1234.5,
      "y": 4567.8,
      "z": 28.0,
      "heading": 182.3,
      "updated_at": 1714396800000
    }
  ]
}

Sounds

GET /fivem/sounds

Fetch the community's sound configuration. Call once on resource start to know which alert sounds are enabled, at what volume, and whether a custom audio file has been uploaded.

// Response
[
  { "event": "new_call", "enabled": true,  "volume": 0.7, "custom_url": null },
  { "event": "panic",    "enabled": true,  "volume": 1.0,
    "custom_url": "https://cad.yourserver.com/uploads/sounds/.../panic.mp3" }
]

custom_url is null when no custom file has been uploaded — fall back to your resource's bundled audio.

Error Reference

All errors return JSON: { "error": "Description" }

StatusMeaning
400Missing or invalid field
401Missing or invalid Bearer token
403Character not authorized, not on duty, or tier too low
404Record not found
409Conflict — e.g. plate already registered
429Rate limit exceeded (3000 req/min for FiveM routes)
500Server error

Billing

Billing is managed through the Admin dashboard.

  • View plan and billing cycle
  • Update payment methods
  • Access billing history

Failed payments include a 7-day grace period before service is restricted.