Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Looking to use Sonoran CAD with your community? Check out our getting started guides below!
Create your Sonoran CAD account to create a new community, or join an existing one. It's fast, easy, and free!
Registering Your AccountRegistering your community and creating your CAD is free and only takes seconds! See our guide below:
This guide covers how to clear your Windows Desktop app cache.
Registering your community and creating a CAD is fast, easy, and free!
This guide covers how to clear your desktop browser's cache.
You may need to manually clear your Sonoran CAD desktop browser's cache for troubleshooting steps. The guide below will walk you through the process.
Most modern browsers allow you to hold Shift and click Refresh at the same time. Doing so will reload the page with your local cache cleared.
Navigate to Roaming > Sonoran CAD and delete the Cache, Local Storage, and Session Storage folders.
Website (Optional)
Once you've filled out the information, press "Register Community" to create your CAD. Your community icon will now be displayed under the "My Communities" section. You can click on this to log into your new CAD.
In the Chrome address bar, paste the following:
chrome://settings/clearBrowserData?search=cache
Select the following options and press Clear Data.
Account verification emails may not be shown in your primary inbox.
If you're having trouble finding the email, check your spam, junk, promotions, or all mail folder.
If you've registered a new account, check your inbox for an email from Sonoran CAD. Select the "Verify Email" button, and your account will be automatically verified.

Lean how to more easily view Sonoran CAD while in-game.
Many users utilize Steam's browser/overlay system. The Steam browser utilizes an out-of-date version of CEF to run. Because of this, the Steam browser is known for it's infamous freezing, lagging, and general lack of support for developers.
While the Steam browser works well for basic websites, some users may experience issues with larger web apps like Sonoran CAD.
. This allows support for our , , and more!
Once you've opened the desktop app, open the settings modal to configure your show hotkey.
When pressed, this will open the desktop app on-top of your game client.
Depending on what game you're running, ensure it's in "Borderless Windowed" mode. This means the game is running as a window, with no top border.
In GTAV, this mode is actually just called Full Screen.
Specifically with streamers, some users may want to hide the Windows taskbar that appears when the CAD is placed on top of the game.
To do so, simply right-click the taskbar > Taskbar Settings > Automatically Hide the Taskbar
In-game, simply press your hotkey to toggle the CAD display both on and off. When the CAD is toggled off, your game will automatically regain focus!
This guide covers how to clear your FiveM game cache.
You may need to manually clear your FiveM cache for troubleshooting steps. The guide below will walk you through the process. Sometimes updates will not automatically apply to your tablet and this process will resolve the issue.
Make sure to close GTA RP before performing these steps
To do this, right-click on your GTA RP application shortcut and click on the Open file location.
Now you will need to go to the GTA RP Application Data.
You will find a data folder there; click on it.
Here you must delete the cache, nui-storage, server-cache and server-cache-priv folders.
Sonoran CAD is available on the web, Windows desktop, iOS App Store, and Google Play store! Select your platform below and download the official app today!




Sonoran CAD offers dozens of customization options for your community. Check out the configuration options below!
Learn more about our paid FiveM integration resources, powered by Tebex!
Looking to get started dispatching with Sonoran CAD? See our guides below!
Check out some of Sonoran CAD's other features below!
Sonoran CAD offers an in-depth record management system. For more information, see our guides below!
For users wanting in-game use via the Steam browser, you may experience issues.
Our Windows desktop application allows you to access global hotkeys regardless of whether or not the app is in-focus. You can even configure these on your stream deck or custom key binds to set your status, toggle your panic status, open lookup windows, and more!
Only Sonoran CAD has dedicated iOS and Android applications to access your community's CAD with a mobile native experience. Download it today for your tablet or mobile device!
Website
iOS App Store
Google Play Store
Windows Desktop

Invite your community members to join your community, and grant them access.
Sonoran CAD allows your community members to easily join your CAD. Users can manually enter in your community ID, or join automatically from a custom login page on your own domain.
can automatically add and remove accounts on your Sonoran CAD.
For more information on hosting your own custom login page, see our guide below:
Users can , and enter in your community ID in the "Join Community" popup. Users can search using your community ID and can press the "Join" button to add your community. From there, users can select your community card in the "My Communities" section to log into your CAD.
For communities outside of the US, Sonoran CAD allows you to change your CAD's geographical settings!
In addition to our free version, Sonoran CAD offers optional paid subscriptions. Find out how to view your community's limits below!
Experience Sonoran CAD, the free, most popular dispatching software for FiveM, ER:LC & gaming communities alike!
Sonoran CAD allows you to send customized, branded emails when your community members register from your custom login page.
NOTE: If you have not already, you will need to configure your .
Sonoran CAD allows you to share custom record formats between different communities.
In the custom record editor (Admin > Customization > Custom Records) select the blue download button next to the custom record. This will download a .json file with the custom record formatting.
Do not edit this JSON formatting unless you are highly familiar with the . It is highly recommended to edit everything in the UI editor only.
Sonoran's evidence camera allows you to send in-game photos directly to your CAD for reports!
The Sonoran Evidence Camera allows you to capture, hold, and share in-game photos with other players. Or, upload the in-game photo directly to Sonoran CAD for easy reports!
Sonoran's mobile command center enables you to take command like never before. Learn more about the integration with Sonoran CAD!
Learn more about our Speed Camera script on the Sonoran Store!
The Sonoran Speed Camera offers the most in-depth, integrated, and customizable traffic camera network available.
Learn more about our Shot Spotter script on the Sonoran Store!
The Sonoran Shot Spotter offers the most in-depth, integrated, and customizable shot spotter network available.
Learn more about our Power Grid script on the Sonoran Store!
Sonoran's Power Grid network allows players to manipulate and disable nearly any in-game feature imaginable!
Hack the grid to disable a Sonoran Radio tower, disable a speed or security camera, shut off a shot spotter, and more! Our in-depth permission customization and integration options allow communities to expand with vastly new and unique RP scenarios. Easily "wire" a power source to any compatible object with our link tool. Our power grid offers real-time alerts via Discord, in-game, on the Sonoran CAD live map and more!
.
If you've created your account through Discord or Apple and would like to link it to a Sonoran login, please follow the steps shown here.
Alternatively, if the tablet shows completely blank, then please delete your nui-storage folder as shown here.
If you cannot load Sonoran CAD due to a recent update, then please do Ctrl + Shift + Refresh to hard refresh the page and load it from scratch.
In certain cases, antivirus programs such as ESET are also known to block connections to the CAD. To add CAD to ESET's allow list, please follow the following instructions:
Open ESET program on your computer
Press the F5 key to open Advanced setup.
Click Web access protection. Expand URL list management and click Edit next to Address list
Select List of allowed addresses and click Edit
Click Add in the Edit list window. Paste *.sonorancad.com* in the respective field, click OK → OK to save your changes, and exit the Advanced setup window.
If using CMS, also add *sonorancms.com*
For more information, see here.







Everything you need to know about administrating your new CAD system.
In addition to our web version, you can download Sonoran CAD on the iOS App Store, the Google Play Store, or for Windows Desktop. It's never been more easy to access your community's CAD system, regardless of what platform you're on!
Tired of having to manually register civilians? With Sonoran CAD's Database Sync, all of your in-game characters, licenses, and vehicle registrations are automatically in your CAD!
Sonoran CAD's integration framework includes over a dozen drag-and-drop plugins for your game server!
Our official Discord bot automatically syncs Discord roles with CAD account permissions. This allows you to easily grant and remove permissions from a user's CAD account all through Discord!
Discord webhooks instantly notify your community when changes are made, calls are placed, units toggle their panic status, and more!
Only Sonoran CAD supports full i18n localization. Regardless of your community's native language, Sonoran CAD supports it! Sonoran CAD is currently fully translated in Chinese, Russian, Spanish, Polish, Italian, German, Arabic, and more! Anyone is allowed to contribute to our GitHub translation files.
Sonoran CAD also offers vast geographical location support for non-American communities.
Sonoran CAD's bodycam system offers live image feeds from in-game, right in the CAD!
Sonoran CAD's custom live map plugin allows you to edit and view live unit information, emergency call blips, smart road signs, and more!
We've partnered up with London Studios to integrate their Smart Signs script directly with Sonoran CAD! You can customize in-game roadway signs right from Sonoran CAD!
Does your community play Emergency Response Simulator?
Sonoran CAD's ERS integration allows dispatchers to create callouts from the live map, lookup character records, and more!
We've partnered up with Inferno Collection to integrate their Station Alert script directly with Sonoran CAD! Dispatchers can toggle station doors, lights, and text-to-speech messages right from Sonoran CAD!
Easily view and attach to calls, talk to other officers, and more all from the in-game mini CAD!
Nearby civilian witnesses will place an emergency call during car jackings, weapon brandishing, death, and more. Stop or cut their information short by killing them in time!
Sonoran CAD also offers a customizable stream overlay and Twitch bot to display your unit and attached call information in real time!
Do you play Roblox? Sonoran CAD is integrated with Emergency Response Liberty County!
Update your unit locations in real time, run name and plate searches, create automated traffic stops, and more!
Only Sonoran CAD lets you easily multitask and open multiple search windows, records, penal codes references, ten code lists, and more! Our workflow allows you to handle even the most complicated and demanding patrols.
Drag-and-drop allows you to easily view calls, attach units, and more!
Enforce security in your TeamSpeak 3 channels by requiring them to be signed into the CAD. Additionally, kick users from secured TS channels when they log off.
Check out our official Stream Deck profiles to change your unit status, panic, open a lookup, and more from a physical button. Along with the Sonoran CAD desktop application, these actions can be done even while the app is minimized.
In addition to over a dozen drag-and-drop integration plugins, you can write your own integration plugins using our API documentation.
We've complied extensive documentation for over two-dozen API endpoints and server push events!
Easily integrate external scripts with our LUA and JS export examples!
Create your very own custom report and record formats for your community to use!
Whether it's your own firearms registration system, an in-depth vehicle accident report format, or a custom incident record, Sonoran CAD allows you to customize it all.
You can even index specific record fields for custom search types. Allowing you to run a lookup on your record's custom ID numbers, phone numbers, and more!
Create detailed scene diagrams in custom reports!
Sonoran CAD enables you to place your community's name and branding in the CAD, customize user account emails, host a custom login page on your own domain, and more!
Don't have a dedicated dispatcher for your community? Sonoran CAD allows your units to easily self-dispatch, attach to calls, preview other open calls, and more!
Looking to store official criminal records or prior call logs in a PDF format? Sonoran CAD allows you to easily view and print records to PDF.
Sonoran CAD allows you to upload a custom spreadsheet with your game's street names and addresses. Dispatchers in the call editor can quickly and easily search and filter these names automatically.
Only Sonoran CAD allows you to configure customizable hotkeys for quick actions in the CAD. With our Desktop application, hotkeys are even registered globally and do not require the application to be visible or in-focus to trigger commands.
Sonoran CAD allows you to easily migrate your 10-codes and penal codes by importing directly from a spreadsheet (CSV) or JSON file. Fully customizable record formats/templates can also be exported and shared between communities.
Common tasks are made even easier with our voice commands. Sonoran CAD allows you to easily lookup a civilian's name, a vehicle license plate, or trigger a panic tone completely hands free!
As shown in our changelog, new features, fixes, and suggestions are added all the time!

In the admin page, navigate to Customization > Customization > Notification Tones
Here, you can specify the audio file that will play for new dispatches, panic sounds, dispatch signals, and more.
Don't forget to press save!
Text-to-speech notifications are currently only available on the Chrome web version. You can toggle these on/off in the settings menu.
For some users, text-to-speech sounds may cut out in-game or other audio sources. This is because the selected voice may be a Windows or system based source.
Simply change the selected TTS voice to a non-windows or system based source to resolve.
Text-to-speech voice and language options varry based on the user device or browser. If your text-to-speech notifications are in the wrong language (Ex: not English) use the following:
Users report limited or incorrect languages when using Safari. Switch to Chrome for the best compatability.
PC Settings > Time & Language > Speech
Install additional voice options
In the admin customization menu, expand the "Custom Community Emails" section. Here, you can set the email header, sub-header, and body text. NOTE: Your community logo will automatically be inserted into all emails.
Once saved, all user account registration and password recovery emails sent from your custom login page will be customized as configured.
In the admin page, navigate to Advanced > Logs
The log panel allows you to filter search results by date, log type, username, and log contents.
The log Type dropdown allows you to search and select specific log types. This allows you to search only for logs pertaining to a specific action in the CAD.
If left blank, no log filtering will be applied.
The log Date selection allows you to choose the specific date the logs are from.
Note: Dates and the accompanying timestamps are based in UTC.
The log Username selection allows you to search and filter logs down to a specific username. You can also search for a partial username.
You can also filter logs based on partial text put into the Log field.
Field
Description
Max Civilian Characters
This allows you to restrict the number of civilian characters a single user can register.
In the custom record editor (Admin > Customization > Custom Records) select the blue download button next to the custom record. This will download a .json file with the custom record formatting.
Paste in the JSON content from the download to populate the record editor with the new record format.
From here, you can edit the custom record and save it as you normally would.
Select TRANSFER CAD or REMOVE CAD:
Once you have chosen an option, you will be required to verify your email. (This will be the email you originally signed up for the CAD with.) Upon clicking the verification link, the process will be completed.
Once a CAD is deleted, there is NO WAY for us to recover it. Please consider this before making your choice.
Field
Description
Login Page Background
This is the background color of the page on your .
Login Box Background
This is the background color of the login box on your .
Menu Page Background
This is the background color of the community menu page.
Menu Box Background
This is the background color of the menu box in your community menu page.
Click on any active unit and select "Edit Unit" to change their identifier information.
You can easily adjust your volume, and set your text-to-speech voice in the settings modal:
Sonoran CAD also supports full language translation support for any country or locality. Click below for more information.
In the top right of the call viewer, select "Self Dispatch"
With self dispatch enabled, regular units can now open additional windows to view dispatch calls, 911 calls, and active units.
Customization
Description
Emergency Code
Replaces all instances of "911"
Penal Code Name
Replaces all instances of "Penal Codes"
Ten Code Name
Replaces all instances of "10-Codes"
Currency Delimiter
Replaces all instances of "$"
Troubleshooting for common issues encountered with Database Sync
Sometimes with certain server hosts, their networks tend to respond slower for a variety of reasons. In MySQL there is a process as part of each login in which a DNS lookup is run before the CAD or other database users can be allowed in.
With slow DNS server settings, this can sometimes cause lookups to take 5-20 seconds in the CAD. We are going to show you one way to resolve this in MySQL Server/MariaDB Server.
1. Open your my.ini configuration file for your MySQL server. If you are using XAMPP simply open the XAMPP Control Panel and click Config then my.ini from the line for your MySQL Module.
2. With the my.ini configuration file open, scroll down till you find the "[mysqld]" section and add the following line right under [mysqld]
skip-name-resolve
3. Save the my.ini file and then restart your MySQL server. For XAMPP simply click Stop in the XAMPP Control Panel then click Start.
Your lookups in Sonoran CAD with DBSync enabled should now be faster. If your lookup speed is still slow (ie. takes over 5 seconds) this is usually due to much greater issues either with the performance of your server or network.
Check out the other third-party scripts and projects that are directly integrated with SonoranCAD!
Integration: Update smart sign displays in-game from SonoranCAD!
Integration: Automatic 911 Calls sent directly to SonoranCAD!
Integration includes automatic 911 calls sent directly to SonoranCAD!
Sonoran CAD allows you to configure servers to separate units and dispatchers, but still share all records globally.
In the Admin Customization menu, expand the "Servers" section to add, edit, or remove additional servers in your CAD.
In the civilian page, the top right header allows users to swap back and forth between servers.
In the police, fire, EMS, and dispatch pages; users can select their server by clicking on the start menu.
This guide covers creating a new record in Sonoran CAD.
In the police, fire, EMS, or dispatch page open the record panel.
This can be found as a pinned tab, via taskbar search, or in the taskbar sub menu.
Click the "New Record" button and a dropdown menu will appear, where users can select the new record type.
Records (by default) are comprised of several sections:
Record Flags
Agency/Department Information
Civilian Information
Vehicle Information
Civilian and vehicle information sections also include a search feature. Here, you can search and import information from a registered civilian or vehicle. This feature can also .
Our official Discord bot provides deep integration for your community, including automatically syncing roles on your server with permissions in the CAD!
For the Discord x CAD Permissions Synchronization feature you will need either: - The Free version (CAD and CMS) with Sonoran CMS! or - The Plus version of Sonoran CAD For more information, see our pricing or view how to check your community limits.
Get started with SonoranBot today by inviting it to your Discord:
Learn more about SonoranBot's CAD integration features:
Configure SonoranBot's settings in your server:
Reference a list of bot commands:
Sonoran CAD allows you to print criminal records, civilian records, and call history logs to a PDF document!
Having trouble opening the PDF in the web version?
Your Ad-Blocker may be preventing the PDF from opening in a new window. Disable your Ad-Blocker on our website to prevent this issue.
To download a PDF copy of a criminal or civilian record, select the PDF button in the bottom action bar.
Prior call logs can also be printed to a PDF record.
Navigate to the "Active Calls" window
Select the "Call History" tab
Click the call and select "Print Call"
Sonoran CAD's robust API system comes complete with dozens of already developed integration submodules. Learn more about our framework and submodule system below!
Looking for VPS, web, or dedicated hosting? Check out our official server hosting!
From one-click installation options to pre-configured resource downloads, we've made integration setup a breeze!
Learn more about installing the resource below.
The Sonoran CAD FiveM resource is packed with dozens of submodules. Each submodule offers unique feature customization.
Learn more about submodule configurations and available features for your community below.
Looking to write your own submodules for Sonoran CAD? Learn more about writing your own integration submodules and accessing our API documentation.
Sonoran's ATM Robbery allows players to rob ATMs like never before!
Drill the ATM
Attach a rope and rip the ATM out with your vehicle
Drive the ATM to a safe location
ATM can be visibly loaded into the back of a vehicle (configurable) or dragged via rope
ATMs are trackable LIVE on the Sonoran CAD live map and in-game map (configurable)
Finish drilling into the ATM for the final payout
ESX, QB-Core, and third-party payout compatible (not-required)
This script integrates with Sonoran CAD's 911 system and live map!
Easily view your API ID with a command, and check if a given API ID is linked to an account.
This submodule supplies the command /apiid which will print the player's primary identifier (the one they should use in Settings) to their console.
Callback output parameter: true/false if API ID exists.
This is a server only event.
Event Name: SonoranCAD::apicheck:CheckPlayerLinked
Response Event: SonoranCAD::apicheck:CheckPlayerLinkedResponse
Connects Sonoran Radio with CAD
This submodule utilizes API endpoints that require the plus version of Sonoran CAD or higher. For more information, view our pricing page.
Looking for VPS, web, or dedicated hosting? Check out our official !
This submodule allows Sonoran Radio customers to connect the radio with the Sonoran CAD. View your unit status, dispatch call information, toggle a panic, and more!
If you haven't already, be sure to install and configure the first.
Follow the for the required submodules.
Don't forget to set your account to properly link your in-game user to the CAD.
Connects FivePD with the Sonoran CAD
This submodule utilizes API endpoints that require the plus version of Sonoran CAD or higher. For more information, view our pricing page.
Looking for VPS, web, or dedicated hosting? Check out our official server hosting!
This submodule allows players to see FivePD callout information in the CAD.
If you haven't already, be sure to install and configure the first.
Follow the for the required submodules.
Don't forget to set your account to properly link your in-game user to the CAD.
This submodule was sponsored by .
This submodule kicks police, fire, EMS, and Dispatch users from the CAD when they disconnect from your server.
This submodule utilizes API endpoints that require the Standard version of SonoranCAD or higher. For more information, view our pricing page.
Looking for VPS, web, or dedicated hosting? Check out our official server hosting!
If you haven't already, be sure to install and configure the first.
Follow the for the required submodules.
This submodule kicks user accounts from the CAD based upon their . Be sure your members have this set properly to properly link your in-game user to the CAD.
This guide covers the activation process for a general submodule.
All Sonoran CAD integration submodules require the standard version of Sonoran CAD or higher. For more information, see our page.
Looking for VPS, web, or dedicated hosting? Check out our official !
Learn more about Sonoran CAD's customizable global hotkey system!
Configurable hotkeys are not included with the free version. For more information, see our or view how to check your community .
View the Sonoran CAD app in-game on LB Phone!
Sends locations of all online players to the CAD.
This submodule utilizes API endpoints that require the standard version of Sonoran CAD or higher. For more information, view our page.
Looking for VPS, web, or dedicated hosting? Check out our official !
Learn how to manually update your submodule configuration file when there has been a configuration update.
Submodule Updater: X has a new configuration version: This means one of your submodules has been updated, but there is a newer configuration file available with additional properties. To resolve, we need to manually migrate the configuration file for the submodule.
In the \sonorancad\configurationdirectory, there will be two configuration files for the updated submodule:





Click to view our locations and postal install video.
Be sure you have already installed our core framework!
If you haven't already, be sure to install and configure the SonoranCAD Core first.
Follow the submodule activation guide for the required submodules.
Don't forget to set your account API ID to properly link your in-game user to the CAD.
Option
Description
Default Value
checkTime
How frequently to send location updates to the server.
5000 ms (5 seconds)
prefixPostal
Prefixes postal to locations (like [111] Some Road). Requires Postals plugin.
True
This plugin requires no configuration by default and will send locations of all active players. This can be seen by dispatch or other panels.
This function can only be used by other plugins and is not exported.
cadApiIdExists("identifier_here", callback)cadApiIdExists("steam:1234567890", function(exists)
if exists then
print("API ID exists!")
else
print("API ID does not exist!")
end
end)-- Request
TriggerEvent("SonoranCAD::apicheck:CheckPlayerLinked", source, identifier)
-- Response
AddEventHandler("SonoranCAD::apicheck:CheckPlayerLinkedResponse", function(player, identifier, exists)
print(("Player %s has API ID? %s"):format(player, exists))
end)function findPlayerLocation(source) -- returns location as a stringCharges
Narrative
Status

Sonoran CMS is your single point of management for your community's documents, whitelisting, in-game permissions, community website, and more!
In addition to whitelisting and in-game permissions, Sonoran CMS can automatically manage your Sonoran CAD permissions!
Our Discord bot allows you to automatically sync Discord roles with CAD permissions.
In the admin menu, select the "Accounts" option to view all user accounts in your community.
Simply click on an account to manually edit the permissions, ban, or kick a user. After changing a user's permissions, don't forget to press save!
Permission keys are a great way to allow users to automatically grant themselves their necessary permissions.
In the admin menu, select Accounts > Permission Keys
Here, you can create a new permission key. Simply enter the new key name, toggle the associated permissions, and press save.
At the community menu, your users can enter the new permission key. After pressing enter, the associated permissions will automatically be applied to their account.
On the Sonoran Account website, select Account > Advanced > Delete Account
This will send an email confirmation to the address on file.
Check your email for an account removal request and click the "Remove Account" button. Having trouble seeing it? Be sure to check your spam/junk folder.
When navigating to a page with voice commands enabled, the browser will prompt you for microphone access.
Now that microphone access has been granted, a red circle will appear at the top right of the browser tab.
Your keyword can be changed from "Sonoran" to something customizable. For more information, check out our guide on custom voice command keywords.
If you have not already, install the base FiveM resource.
The FiveM resource contains multiple "submodules" for each integration. These can be individually enabled/disabled and configured.
This example uses the postals submodule.
Navigate to the \sonorancad\configuration folder and locate the configuration file for your desired submodule.
For this example we will be using the postals_config.dist file (name depends on the submodule ). More details are on the specific submodule page.
Enable the submodule by changing the enabled variable from false to true in the plugin config.
Rename and remove the .dist from the file to postals_config.lua (depending on name of plugin).
If you've downloaded the pre-configured FiveM resource from the admin panel, this has already been done for you.
Save the configuration file.
Restart the sonorancad resource by entering ensure sonorancad in the server console and enjoy your submodule!
Learn more about the available submodules:
Sonoran CAD's integration core and submodules will automatically update with the latest features, fixes, and changes!
Or, run sonoran pluginupdate to instantly check and update all submodules.
If you're having trouble installing a plugin, check out our common troubleshooting guide:
For desktop users, we highly recommend viewing our guide on in-game use!
In the side menu, open the "Settings" modal to display your hotkey configuration menu. Here, you can configure your prefix and hotkey buttons using the drop-downs below.
Once changed, your settings are automatically applied and saved.
Quick links can be found in the taskbar under Documentation > Quick Links
Or via the taskbar search and pinning system.
In the lb-phone/config/config.lua file, add a new entry to the array of Config.CustomApps.
The example below shows the Config.CustomApps with a single, custom Sonoran CAD application.
Restart LB phone and you can now "install" Sonoran CAD on the LB Phone from the App Store.
NEW: {submoduleName}_config.dist.lua
OLD: {submoduleName}_config.lua
Note the differences in the file. In this example:
The configVersion is 1.5on our current file but is 1.6on the newly downloaded one.
Additionally we are missing the entire notificationTimers section in our current config file.
Simply copy and paste the entire contents of your new config file into your existing config file and make any needed configuration changes.
Save the file and restart the resource
Note down the changes in the new configuration file and add any missing properties to your existing configuration file.
Ensure you change the version number to the correct version from the new file.
Save your existing file and restart the resource
Navigate to one of our official street name Google sheet and make a copy. Using a copy of our official sheet ensures your street names are formatted correctly.
Now that you have copied this sheet into your Google Drive, you can add new rows and format your street names and addresses.
Do NOT add additional columns. Every street name must be on a separate row to be properly imported into Sonoran CAD.
In Google Sheets, navigate to File > Download > Comma Separated Values (.csv) to download the file.
In Sonoran CAD, navigate to Admin > Customization > Customization > Addresses
In the addresses section, select the "Import" button. Then, select "CSV" as the import type and select your downloaded CSV file.
After selecting the CSV file, your street names and addresses will be imported into the CAD and saved automatically.
In the dispatch call editor, the address section is now a dropdown. This dropdown will auto-filter and suggest your street names and addresses as you type.
Custom records can also have a field with the type set to address. This field will auto-filter the same list of street addresses from your gamemode.
























Build detailed scene diagrams in custom records!
The scene diagram builder allows you to create detailed visuals of vehicle accidents, crime scenes, and more.
The diagram builder can be added to any custom record template. Select Diagram from the Premade Sections dropdown.
Custom records with a diagram section will show an interactive canvas inside the record. Select the edit icon to open up the builder.
Drag-and-drop items from the toolbox to the canvas.
When selected, items can be moved, resized, and edited.
When an item is selected, the gear icon will open up an options menu for more customization.
Select multiple items at once with SHIFT + CLICK.
Select the item(s) and click the trash icon () to remove
The diagram builder is packed with powerful shortcuts to help quickly build the scene.
Hover over any of the top action items for a tooltip listing the shortcut.
Communities can also customize the diagram builder to have default images (like a ) for each record type. Simply hit the edit (pencil icon) in the custom record builder on the diagram to customize and save the template.
This guide covers finding your community ID, API keys and IDs, as well as finding your ownership authentication code.
Within Sonoran CAD, there are two different types of API Keys that you will need to use, each serving a different purpose.
First, there is your community API Key which allows CAD's in-game integrations to send data to the correct community.
To find your community API Key, see below.
This key will be placed in your config.json (for ) or the Server Settings panel (for ).
In addition to the community API Key, each user will also have their own API ID, which allows CAD to associate the user's in-game player with their Sonoran account. Generally, this will either be the user's Steam Hex, Discord ID, or Game License Key.
This API ID can be found in game by doing /apiid in game, if you have the plugin installed.
Every user will need to find their own API ID and add it to CAD as shown .
Your community ID allows users to .
Your community ID and API Key can be found in the Admin panel, under Advanced > In-Game Integration. Under the Web API section, your Community ID and API key will be listed as shown:
Click either box to copy its corresponding value to your clipboard.
Your community ID is also listed in the following places:
1. In the side navigation bar while logged in
2. In the Admin panel under Advanced > Limits
While requesting support from an official Sonoran team member, you may be asked to authenticate your community's ownership.
Your community's ownership authentication code can only be retrieved from your CAD owner. This code is used in support tickets to confirm that you are the registered owner of the community. NEVER give this code out to anyone that is not a member of the Sonoran support team!
In the admin page, navigate to Advanced > Authenticate
Press the "Request Code" button
Your ownership authentication code will be displayed on the screen
Sonoran CAD allows you to add custom searchable/indexed fields to your custom records.
Custom search types are limited based upon your subscription version. For more information, please view our pricing page.
View our on Sonoran CAD's custom search type feature.
In the admin customization menu, expand the lookup types section.
There are three sections for each lookup type:
Name
Label/Name of the lookup type
Field Mapping ID
Once configured, press save.
In the custom records editor, specify the Field Mapping ID from step one on the searchable field.
If this searchable field is in your in-game database, you can also set up mapping to pull that data from in-game when records are opened.
Press save, then move onto the next step.
If the search field is provided by your in-game database with , this custom record column will be display in your database sync configuration for any character, license, or vehicle registration.
This will then allow you to search characters, licenses, or vehicle registrations from your in-game database based on this custom column value.
With the exception of database sync records, any existing records with this field will not be searchable.
You will need to create a new record with the custom searchable field in order to find it via custom lookup.
The lookup window will now display your new custom search types. You can now search your records (including database sync/merge) using these custom search boxes.
Create custom timers to check in on pursuits, dispatch calls, units, and more!
Sonoran CAD allows users to create custom dispatch timers. Some example use cases of these timers are as follows:
Creating a 10 minute pursuit timer before authorizing a pit maneuver
Reminders to periodically check in on a unit
Reminders to check in on a specific dispatch call
When a timer has completed, it will flash an icon next to any and play a .
Dispatch timers can be created through multiple different shortcuts.
From the start menu: Unit Management > Timers
Press New to create a new timer.
If you have the timer , you can drag a unit, group, or dispatch call right to the tab.
Left click on a unit ID, group name, or dispatch call ID: Timers > New Timer
The timer panel has options to start, pause, restart, and remove a timer.
Additionally, you can expand the timer to change the name and duration.
When a unit, group, or call is you can click on the timer icon. A timer menu will be displayed, allowing you to start, pause, restart, or clear the timer's attachment.
You can attach a unit, group, or call to a timer. This will display a timer icon next to the attached unit or call. You can hover over this icon to view the remaining time, or click on it for the timer context menu.
In addition to dragging a unit, group, or dispatch call to a minimized tab you can also drag it to a timer in the panel.
Click on a unit, group, or dispatch call: Timers > Select a Timer

Sonoran CAD's CLI allows you to quickly create and close dispatch calls, attach, detach, add notes, change statuses, and more right from your keyboard!
Handles sending emergency calls to the CAD.
This submodule utilizes API endpoints that require the standard version of Sonoran CAD or higher. For more information, view our page.
Looking for VPS, web, or dedicated hosting? Check out our official !
Nearby witnesses will send an emergency call during car jackings, weapons being brandished, and more! Stop or cut their descriptions short by killing them in time!
This submodule utilizes API endpoints that require the standard version of Sonoran CAD or higher. For more information, view our page.
Looking for VPS, web, or dedicated hosting? Check out our official
Sonoran, PanicSonoran, lookup name John DoeSonoran, lookup plate ABCD1234







Locks the selected item(s) from moving.
G
Groups or ungroups the selected items together. Use SHIFT + CLICK to select multiple items.
CTRL + Z
Undo last action(s)
CTRL + SHIFT + Z
Redo last action(s)
DELETE
Delete selected item(s)
CTRL + C
Copy selected item(s)
CTRL + V
Paste copied item(s)
O
Opens the item options/settings when an element is selected.
UP ARROW or SHIFT + UP ARROW
Moves the selected item up a layer. Shift option brings it to the very top.
DOWN ARROW or SHIFT + DOWN ARROW
Moves the selected item down a layer. Shift option brings it to the very bottom.






L






Mask
Mask for the search bar - This uses the same mask system as the custom records.

The CLI can be brought up using a global hotkey. This will automatically open and focus your cursor in the first box, or maximize and focus a minimized CLI window tab.
You can also access the CLI from the start menu > Dispatch > Command Line
The CLI is broken into four boxes. Each box has auto-complete as you type.
Press Tab or Enter on your keyboard when the filter is down to one option. This will auto-complete to the remaining option and focus your cursor into the next box.
If you've already completed the last box for the action type, Tab or Enter will automatically submit the command.
CREATE
Unit Identifier
Postal Code
CLOSE
Call ID Number
ATTACH
CREATE: Create a new dispatch call from a saved type, specifying a unit and postal code.
CLOSE: Close a dispatch call from the ID.
ATTACH: Attach a unit to a dispatch call ID.
DETACH: Detach a unit from a dispatch call ID.
VIEW: View a dispatch call ID in the call editor.
CLEAR: Clear the call editor.
STATUS: Set a unit or group status.
NOTE: Add a note to a dispatch call ID.
A link to your community's logo.
This will be displayed on your custom login page, loading icon, community card, and more!
Name
This is your community's name.
This will be displayed on your custom login page, community card, and top header.
Subtitle
This is the text displayed below your community name on your custom login page and community card.
Website
This is a link to your community website, to be displayed in the community menu.
Discord
This is a link to your community Discord, to be displayed in the community menu.
Voice Command Keyword
This allows you to change the default keyword to something custom.
Timezone
All users in the CAD will have the clock at the top of the screen synced to this timezone. This helps avoid confusion, and improves report consistency.
Looking to change your community ID?
Navigate to Admin > Advanced > Change Community ID
Here, you can enter in and request a new community ID. Once submitted, you will be logged out. All active community members will also need to log out and back in to avoid any issues.
If your community has an active subscription, you will automatically be downgraded to the free version.
To transfer the subscription to the new community ID, update your community ID by pressing "Modify" on the active subscription in the payment center.
Field
Description
Image
Click to view our call commands install video.
If you haven't already, be sure to install and configure the SonoranCAD Core first.
Follow the submodule activation guide for the callcommands, locations, and postals submodules.
Command
Description
Panic
Toggles your unit panic status in the CAD
911
Sends specific 911 call to the CAD
511
Sends specific 511 call to the CAD (Civil)
311
Sends non-emergency call to the CAD (Civil)
Users can toggle a panic event via a customizable keybind in their GTA Settings -> Key Bindings -> FiveM -> (sonorancad)
By default, this keybind is blank.
By default, calls responded to via the /rcall command located in Dispatch Notify will attempt to be routed to the callers current location, rather than the location of the call. If you would like calls to route to the location of the original call, please set useCallLocation to true
If you haven't already, be sure to install and configure the SonoranCAD Core first.
Follow the submodule activation guide for the required submodules.
callCoolDown
int
How long in between calls for the same player
clearRecordsAfter
int
Time in minutes to clear records after a call is made | 0 will disable this feature
callTypes
table
Events that will trigger a 911 call. gun Will trigger based on brandishing or shooting a firearm. carJacking will trigger if you are trying to steal a car. death will trigger if a player dies
localRunTime
int
Time in seconds for how long "locals" will run towards the player to show interest in the call, 0 will disable this feature
When near an AI "local/ped" in-game, they will automatically pull out their phone and begin to place an emergency call if you are spotted committing one of the configured crimes.
While the local caller is placing the emergency call, killing them before the configured timer expires will only send a partial report—making it harder for police to get a full description of you.
Descriptions from the caller are based on clothing items. These can be configured and improved in the clothingConfig for custom items.
When running our desktop application, Discord can automatically detect and display information about your community.
Discord presence currently allows for two customizable buttons.
Navigate to Admin > Customization > Customization > Discord Rich Presence
- Button #2 may be customized to any Sonoran CAD or Sonoran CMS invitation link.
- Ex: https://sonorancad.com/#/?comid=mycommunityid or https://sonorancms.com/#/?comid=mycommunityid
- Both buttons may be customized to any URL desired. - The Icon and title can also be customized with a Discord developer application.
Communities on the Pro version may customize the rich presence icon:
On https://discord.com/developers/applications create a new application
Under OAuth2, copy your Client ID
Next, upload an icon for your new application. Be sure to copy down the name of the icon for later.
Back in the admin customization menu, we can paste the Discord application's Client ID and Icon name.
Once saved, your Discord presence for all community members will reflect your custom icon, title, and buttons.
To hide the invite button for your community's Discord rich presence, simply leave the button text and URL blank.
In the settings menu, users can toggle this display on or off for their individual desktop client.
If your Discord presence is visible to you personally but not to others, ensure the button labels don't include any sort of :emoji: in them.
Your CAD will forcefully format the emergency services action bars to mobile format. This is beneficial for communities that are embedding the CAD in-game on a smaller format that does not quite meet the standard mobile dimensions.
String
Usage
Description
audiolevel
app.sonorancad.com/#/?audiolevel=25
Your CAD audio settings will be set by default to the value provided. This is beneficial to communities that are embedding the CAD inside of a resource, and may wish to mute the audio by default.
String
Usage
Description
lockCommunity
app.sonorancad.com/#/?lockCommunity=true
For communities using the tablet resource or custom login page, this query string locks the user to your community and hides the "Switch Community" buttons.








Learn more about importing your 10-codes into Sonoran CAD.
10-Codes are used to differentiate and abbreviate dispatch situations. Ex: 10-10: Fight in Progress
Under Admin > Customization > 10-Codes you can add, edit, or remove 10-codes for your community.
Sonoran CAD allows you to change the naming of "10-Codes" to anything else you'd like. Learn more about our .
We've compiled 10-code spreadsheets for all 50 US states. Download a CSV from our and .
Sonoran CAD allows you to import 10-codes directly from a spreadsheet.
Spreadsheet (CSV) importing is only supported directly from Google sheets.
Support will not be provided to users modifying their spreadsheets with Excel, or any other program. The official Google sheet includes specific safety checks preventing invalid formats, blank spaces, etc.
Navigate to our official and make a copy. Using a copy of our official sheet ensures your 10-codes are formatted correctly.
You may ONLY use the Google sheet directly. Editing this via Excel or any other program is NOT supported.
Now that you have copied this sheet into your Google Drive, you can add new rows and format your 10-codes.
Do NOT add additional columns. Every 10-code must be on a separate row to be properly imported into Sonoran CAD.
In Google Sheets, navigate to File > Download > Comma Separated Values (.csv) to download the file.
In Sonoran CAD, navigate to Admin > Customization > 10-Codes
In the 10-codes section, select the "Import" button. Then, select "CSV" as the import type and select your downloaded CSV file.
After selecting the CSV file, your 10-codes will be imported into the CAD and saved automatically.
Having issues importing your CSV? .
Our Google sheet includes specific error checking and validation to handle common mistakes. Support is not provided if you are using Excel, or any other program.
You can also build and format your 10-Codes directly into JSON. These JSON formatted 10-Codes can then be pasted directly into the UI.
The JSON structure is an string array. Be sure to strictly follow the format.
In Sonoran CAD, navigate to Admin > Customization > 10-Codes
In the penal codes section, select the "Import" button. Then, select "JSON" and paste the JSON string array of 10-codes.
After pasting the JSON content, your 10-codes will be imported into the CAD and saved automatically.
Receive instant notifications in your Discord channel when new records are added, dispatches are modified, admin actions occur, and more!
Currently, Discord webhooks can only be created using the Desktop version of Discord.
Open the "Server Settings" panel in the top right of your Discord server.
In the server settings panel, select the “Integrations” tab.
On the right, click to view all of your current Discord webhooks.
Select the "New Webhook" button.
Here, you can set the Webhook name, channel and icon.
Press the "Copy Webhook URL" button to copy the webhook's URL. Press the "Save Changes" button to save your new webhook in Discord.
New webhooks are created as "discord.com". If you are having problems please change the URLs of the old webhooks from "discordapp.com" to "discord.com" so they will function.
In the Sonoran CAD Admin panel, select “Advanced > Discord Integration” Paste your Webhook URL in the desired webhook configuration box. Toggle the desired notification events for the specific webhook. Press the “Save Configuration” button.
As of Sonoran Bot v2, the ability to react to webhooks to create actions has been depreciated.
Footer metadata is still available to all communities.
to see this reimplemented!
Webhook footers contain metadata that can be pulled from a bot for further integration.
These follow the format: USERNAME or UUID | TYPE | ID
Sonoran CAD allows for fully customizable layouts to improve efficiency in your workflows.
By default, "Classic Layout" is enabled in the customization menu.
To customize your dispatch/unit panel layout, you will need to .
You can right click on any panel and to reveal multiple menu options.
: This locks and saves the window's position into place.
: This opens the quick resize tools for the window.
Bring to Top: This brings the window in front of any other open windows.
Minimize: This minimizes the window to a tab at the top of your screen.
Windows can be resized and positioned in multiple ways:
You can select one of the quick positions to move the window to one of the 9 quadrants on your screen. Or, toggle "Show Advanced" to specify the window's dimensions and positions down to the pixel.
Additionally, you can hover over the top edges of the window to click and drag the size.
Popout windows like a lookup, 10-code sheet, etc. can all be easily dragged and resized using the top header in addition to the quick resize tools.
Popout windows with in quick resize enabled or unlocked required windows (dispatch call editor, etc.) can be dragged simply by clicking and dragging anywhere on the window.
When a window is locked into place it can no longer be moved. Additionally, the size and positioning is saved locally to your device and will persist after a refresh or relog. You can lock or unlock the window by right clicking on the window.
If something goes wrong or you just want to start fresh, you can reset your saved layouts in the layout customization menu.
Simply right click on the empty area in the taskbar, or navigate to Start > System > Customization
The task bar can be opened with a configurable or with our integration. When opened, a search bar will be automatically focused on all non-mobile devices.
Here, you can search to quickly filter options. When the results have been filtered down to a single window, the search label will turn green indicating the window shortcut is available. Simply press ENTER to open the window.
The taskbar is a desktop style action bar that will contain the "Start Menu" (Sonoran CAD logo) and your active/pinned tabs.
The taskbar can be positioned on the top, bottom, left, or right of your screen.
To change the taskbar's position, access the customization menu by right-clicking on empty space in the taskbar. Or, from the start menu navigate to System > Customization
Sonoran CAD's advanced tab system allows for efficient window management and quickly accessing new programs.
Drag-and-Drop: Tabs can be dragged and dropped into new positions for organization. Pinned tabs will save their ordering past a refresh.
Duplicate Windows: When more than one window of the same type is minimized, the tab will show the number of minimized tabs in the top right. Clicking on a tab with more than one window minimized will display a menu allowing you to select a specific tab or open an entirely new one.
Pinned Tabs: Tabs can be pinned to the taskbar by right-clicking and selecting "Pin to taskbar" on the context menu. Pinned tabs will save their ordering past a page refresh. Pinned tabs with no actively minimized windows will be displayed as a lighter grey. Clicking on a pinned tab with no actively minimized windows will open a new window of that type.
Icon and Label: Tabs can be set to display as an icon, text, or both. This is toggleable in the customization menu. Note: Text will only be displayed if the taskbar is in the top or bottom screen position.
For some users, modifying the positions of dispatching panels may be too complicated. You can easily toggle on the "Classic Layout" to have the call windows automatically placed and responsive. Don't worry, popout windows can still be moved around and locked into place as normal.
Right Click on the Task Bar > Customization > Classic Layout
Don't forget, you can easily , , and !
Sonoran CAD's in-depth record management system makes searching for records easy!
From the start menu select Record Management > Lookup to open a new lookup window.
You can also minimize and pin this window type to your taskbar for faster access.
The lookup window has tabs at the top to search via name, license plate, unit identifier, record ID, or one of your .
The lookup window allows you to toggle the search to return only exact matches, or partial matches.
Running partial lookup on John Anderson will return results for John Anderson and John Handerson.
Running an exact lookup on John Anderson will only return results for John Anderson as Handerson is not an exact last name match.
Click on the filter button just above the results tab to expand the filters section.
Here, you can toggle on/off exactly what record types to search for.
Anyone on the Dispatcher page, or in self-dispatch mode has the option to send the lookup results to other units. Performing this action will have all record results sent to their CAD.
You can click on any active unit and select Lookup to open a new lookup window with this unit added, or have it added to any existing lookup windows.
Additionally, units and unit groups can be dragged-and-dropped directly to the lookup window.
Next to the search button, you can click on the Send to Unit(s) button to toggle this mode on.
Using the dropdown, you can type to filter active units or select them from the list directly.
Records can be via the Linked Records custom section, or .
Press the link icon in the top left to copy the record to your clipboard.
Our allows you to lock your plate reader in-game and have the lookup automatically ran in your CAD.
Lookups can also be ran via a search .
Any record results returned can be opened and printed to .
Utilize our desktop application's global hotkey system with your Elgato Stream Deck!
Our desktop application allows for global hotkey access to change your status, panic, open a new lookup, record center, and more even when the app is minimized.
For users with a Stream Deck, you can utilize these functions for quick access while in-game.
Download the profile for your or .
Typically, you can double click the .streamDeckProfile file and automatically import it. Otherwise, you can manually import it through the menu.
Select "Edit Profiles"
2. Select "Import"
3. Select the downloaded Stream Deck Profile
In Sonoran CAD, you can in the settings menu.
If you change them from the default values, you will need to update them in your Stream Deck.
Simply click on the icon, click the Hotkey field, and change the key.
You can edit the Sonoran CAD launch key to automatically launch the .
Select the Sonoran CAD launch logo and click the ... file browser under the file path bar.
Paste `%appdata% into the file browser bar and press enter.
Select the Sonoran CAD desktop application under AppData > Local > Programs > Sonoran CAD.exe
You can now press the Sonoran CAD icon on your Stream Deck to launch the desktop application.
Your Stream Deck can automatically launch the Sonoran CAD profile when you open the .
Hit the gear icon, or the dropdown under your profile name:
Select the Sonoran CAD profile and "Other" from the application dropdown. Then, follow the .
Learn more about Sonoran CAD's customizable tone board!
In the admin page, navigate to Customization > Customization > Tone Board
You can upload .mp3, .wav, and .mp4 files directly to the CAD with the plus version.
If your community is not on the plus version or higher, you will need to link your tone from an external URL. You can upload to a website or file store of your choosing, but it must be a direct link ending in the file extension (.mp3, .mp4, .wav).
You can even use something as easy as Discord.
Upload your tone file to Discord in any chat
Right click on the file name or download button
Select Copy Link
Paste the direct URL into Sonoran CAD
Your direct link will look something like this:
https://cdn.discordapp.com/attachments/12345/abc123/signal_100.mp3
Here, you can add new tones and specify the following:
Tone Label
Tone Link/URL (Direct uploading available based on your )
Tone Button Color (Hex)
Tone Button Icon
Tone buttons support icons from several different web libraries. Clicking the search icon will open the search. Here, you can search for an icon - click on it - and paste the icon name into the CAD. You can also use .
Don't forget to press save!
The tone board can be set to play tones for specific identifiers, groups, agencies, departments, subdivisions, and dispatch calls.
You can click on any one of these items and select "Tone Board" to add this group to the play target on the tone board.
The tone board can be opened by users in dispatch or self-dispatch mode.
From the start menu, this panel is located under Dispatch > Tone Board
This window can also be opened via a , also supported with our .
The window can also be minimized, and on your screen for quick access.
The tone board is designed to be as efficient as possible.
The top of the tone board includes a search box, allowing you to quickly filter tone options as you type.
If you filter down the options to a single tone, the search label will turn green - allowing you to press ENTER to play the tone.
The tone board is also designed to auto-focus this search box whenever it is opened, or the header is clicked.
allow you to open the tone board in a more advanced way. Opening the tone board with your or shortcut will first check for any existing tone board window opened or minimized. If one is found, that existing window will be opened and focused to the search bar. Otherwise, a new tone board window will be opened with the search box focused.
Instead of using the search box filtering, users can also manually click the tone board button to play the audio.
Tones can be repeated at a specific interval.
When sending a new tone, toggle repeat on and customize the seconds and count values. When the tone is sent, the repeat timer and counter will visualize any actively repeating tones.
Implements name and plate lookups via the CAD.
This submodule utilizes API endpoints that require the plus version of Sonoran CAD or higher. For more information, view our pricing page.
This submodule is currently only used as a dependency for other submodules , and does not have any in-game commands for general player usage.
Looking for VPS, web, or dedicated hosting? Check out our official !
This submodule Implements name and plate lookups via the CAD.
Click to view our .
If you haven't already, be sure to install and configure the first.
Follow the for the required submodules.
Don't forget to set your account to properly link your in-game user to the CAD.
Do not set the cache timer too low or you may run into rate limiting.
NOTE: For return object definitions, see the .
This plugin also adds the commands namefind and platefind which takes the above arguments and prints the returned JSON object to the console.
Our Station Alert integration resource allows you to toggle fire station doors, lights, and send text-to-speech messages directly from the CAD!
This resource utilizes API endpoints that require the Plus version of Sonoran CAD or higher. For more information, view our pricing page.
Looking for VPS, web, or dedicated hosting? Check out our official !
Users can get the Station Alert resource from Inferno Collection.
For Sonoran CAD Pro users, .
For Sonoran CAD Plus users, .
This resource is managed through Tebex and will require you to login with FiveM. Be sure to login using the account that has the keymaster license for your server.
Once purchased you can .
We suggest installing the inferno-station-alert folder within the [sonorancad] folder your integration framework is installed in. The final result would look like the image below:
In your server.cfg add the following new lines:
Information on adding stations, lights, speakers, and more can be found in the .
The provides further customization options.
On the live map, ensure you toggle station blips on. Clicking on a station will open the alert panel.
The following example:
Opens the Engine 19 door at station Davis
Closes the Ambo 61 door at station Davis
Sets the station indicator light to Blue
Dispatchers can also access the dedicated Station Alert panel under Unit Management.
Here, you can type-to-filter and select multiple stations at once.
The dispatch call editor has a shortcut to quickly access nearby stations from an emergency call.
When an emergency call from in-game is imported into the dispatch editor, the Nearby Stations icon will be available. Selecting one of these nearby stations opens the station alert builder with the Message box prefilled with call information.
Find out how to map a QB Core database with Sonoran CAD!
QB Core stores player information in the players table.
The player's first and last name is stored as JSON in the charinfo column. We'll toggle these as a JSON Column and set the JSON keys to firstname and lastname.
The citizenid column stores a unique player ID. This will be our Character Mapping Column.
QB Core also allows players to own multiple residences at once.
Sonoran CAD's DB Sync will pull all of these from their external player_houses table.
Because multiple residences can be listed at once, it's recommended you update your custom record's residence field to the textarea type.
The custom record now shows the residency textarea with all owned addresses.
QB Core stores the vehicle information in the player_vehicles table.
The Unique ID for vehicles is stored in the citizenid column and matches the values stored in the citizenid column from our player mapping.
The plate column stores the vehicle's license plates.
You can configure other custom fields may include color, make, model, etc. Vehicle colors are often stored as a number. You can use to convert a number to a color name.
Because of how licenses are stored in QB Core, this process adds a couple of extra steps.
You will first need to edit the License record to adapt it for how QBCore stores its licenses. Open the Admin Panel by going to the following...
Admin Panel -> Customization -> Custom Records -> Click #4 - License
Replace the last three fields in the License Information: section with the following. Make sure to change the type to text and remove the mask. You can use the screenshot below as a guide. Then click Save before moving on.
Don't forget to click Save before continuing!
Click Advanced -> In-Game Integration to open the DBSync settings menu.
As of writing on 2/28/2022, the following pictured settings will work for QBCore's latest version. Fill in the Table Name, Character Mapping Column, Column Names, JSON Columns and Friendly Mappings as shown below. Make sure to click Save Mapping Config once finished.
Congratulations! You should now be all set up to display your licenses from QBCore in Sonoran CAD. Feel free to test a record lookup to verify everything is in order.
Allows players to fetch ID information from the CAD on demand.
This submodule utilizes API endpoints that require the plus version of Sonoran CAD or higher. For more information, view our pricing page.
Looking for VPS, web, or dedicated hosting? Check out our official server hosting!
This submodule allows players to fetch their character information from the CAD. Basic functionality is provided with the /showid command, but developers are encouraged to use the export for their own creations.
If you haven't already, be sure to install and configure the first.
Follow the for the civintegration, and locations submodules.
Don't forget to set your account to properly link your in-game user to the CAD.
The submodule comes with a few basic commands to show off the functionality.
You can use this export to fetch all characters for a specific player ID. This is a server-side export only.
This function can also be used in other submodules (without the export bit).
Print CAD PDF records to viewable, sharable, in-game inventory items!
This submodule utilizes API endpoints that require the Pro version of Sonoran CAD or higher. For more information, view our pricing page.
Looking for VPS, web, or dedicated hosting? Check out our official server hosting!
Sonoran CAD’s Record Printer seamlessly connects CAD records with the in-game world, enabling officers to generate and view official documents directly through an interactive in-game printer.
Records can be printed at configurable printer objects or within vehicles, shared as inventory items, and viewed entirely in-game.
If you haven't already, be sure to install and configure the first.
The record printer settings are stored inside of the core configuration file.
When in-game, units must also be actively signed into the dispatch, police, fire, or EMS panel.
Using the records section in CAD, navigate to the record you would like to print, click the down arrow next to the blue PDF button and press Print In-Game.
After selecting Print In-Game, a message will appear in-game stating "You have a new record to print. Use /printqueue to view queue".
You can print this file by using the command /print <PRINT QUEUE #> near a configured printer (printerObjects) or inside a configured vehicle (vehicleConfig).
Once printed, the PDF will be placed in your hand with a viewer shown on your in-game screen. Buttons on-screen will allow you to maximize, minimize, and exit the window.
If configured, closing the record will . Otherwise, the record will be dropped on the ground and can be picked up to be viewed by other players.
Records can be stored and shared as an inventory item. The frameworks configuration item allows for inventories like ESX, QB Core, OX Inventory, and more.
Requires players to register on the CAD via a nag screen or freezing them. This can be restricted to specific jobs or ACE permissions.
This submodule utilizes API endpoints that require the standard version of Sonoran CAD or higher. For more information, view our pricing page.
Looking for VPS, web, or dedicated hosting? Check out our official server hosting!
If you haven't already, be sure to install and configure the first.
Follow the for the required submodules.
Don't forget to set your account to properly link your in-game user to the CAD.
The can be configured to automatically set user's API IDs when they login, removing the need for users to manually type this in.
This submodule requires no configuration by default and will show a message at the top of the screen telling players to register for the CAD. Depending on the selected option, this behavior can change.
This event is sent to the client after the check is completed.

View some basic troubleshooting steps when activating Sonoran CAD submodules.
Sonoran CAD's core includes powerful built-in commands. These commands are entered into your server console.
Ex: A may ask you to send detailed logging information to them. They will give you the specific ID number to enter. (ex: 123)
Entering sonoran support 123 in your server console will send your plugin configuration directly to our support application.
Allows sending nearest postal to the CAD via the location field. Also enables postal auto-fill for new dispatches and calls.
This plugin utilizes API endpoints that require the standard version of Sonoran CAD or higher. For more information, view our page.
Looking for VPS, web, or dedicated hosting? Check out our official !
EVENT: SonoranCAD::callcommands:cadIncomingCall
PARAMS:
emergency = true/false (911 or 311 call)
caller = name of caller
location = street / cross street string
description = description of call
source = playerId








Option
Description
Default
maxCacheTime
How long to cache a looked-up plate.
120 seconds
stalePurgeTimer
How long between "stale" plate cleanups (keep unscanned plates)
600 seconds (10 minutes)
Function
Arguments
Description
Returns
cadNameLookup
FirstName, MiddleInitial, LastName, callback
Looks up a character based on the arguments specified.
Objects containing character data and all associated objects.
cadPlateLookup
plate, basicFlag, callback, autoLookup
Looks up a vehicle based on specified plate number.
Objects containing vehicle data and all associated objects.
Plays Example Message as text-to-speech at station Davis
Plays Tone1 from the station alert resource tones at station Davis





false
whitelist.mode
What the whitelist will use to check if a player is whitelisted
qb-core
Options: qb-core, esx, ace
whitelist.aces
Ace permissions that will pass the whitelist and will get the ForceReg notifications if whitelist.mode is set to ace.
forcereg.whitelist
whitelist.jobs
QBCore of ESX jobs that will pass the whitelist and get the ForceReg notifications if whitelist.mode is set to qb-core or esx.
police
Option
Description
Default Value
captiveOption
The mode to use for telling players to sign up.
Nag
captiveMessage
Message to show to the player.
See Config
verifyMessage
Message to show how to confirm the player registered.
See Config
whitelist.enabled
Restrict forcing registration to only the configured people
--[[
cadNameLookup
first: First Name
last: Last Name
mi: Middle Initial
callback: function called with return data
]]
function cadNameLookup(first, last, mi, callback)
--[[
cadPlateLookup
plate: plate number
basicFlag: true returns cached record if possible which only contains vehicleRegistrations object, false calls the API
callback: the function called with the return data
autoLookup: when populated with an API ID, pops open a search window on the officer's CAD (optional)
]]
function cadPlateLookup(plate, basicFlag, callback, autoLookup)exec @inferno-station-alert/config.cfg
ensure inferno-station-alertEvent: "SonoranCAD::forcereg:PlayerReg"
Parameters:
identifier: The identifier checked
exists: true/false, if the identifier is linked to a CAD accountCall ID | Server ID
6: EDIT_DISPATCH
Call ID | Server ID
7: CLOSE_DISPATCH
Call ID
8: EMERGENCY
Call ID | Server ID
9: RECORD_ADD
Record ID
10: RECORD_EDIT
Record ID
11: RECORD_REMOVE
Record ID
12: TONE_PLAYED
Tone Label
999: SYSTEM
Systemwide Broadcast (From Sonoran)
0: UNIT_PANIC
Identifier ID
1: TEN_CODES
2: PENAL_CODES
3: SIGNAL
Signal Value
4: ACCOUNT

5: NEW_DISPATCH
Close: This closes the window.


false
Option
Description
Default Value
cacheTime
Time to cache characters in seconds
3600
allowCustomIds
Allow players to use /setid to set a custom name.
true
allowPurge
Allow players to use /refreshid to "purge" their character list from cache.
true
enableIDCardUI
Command
Description
/showid [id]
Shows the current ID of the specified player ID. If not specified, will show the current player's ID. Currently, it is displayed only to the calling client.
/setid
Sets a custom ID (first/last name, and date of birth). Overrides the currently selected CAD ID. Can be disabled in configuration.
/resetid
Resets the custom ID specified above.
/refreshid
Removes the "cached" characters for the client. This allows players to swap characters in the CAD without relogging or waiting for the cache timer.
Recommended: Allows for a more realistic identification ui with /showid
IF USING: Please ensure you start the resource sonoran_idcard BEFORE sonorancad in your server resource start order
printerObjects
Array of in-game printer objects that can be walked up to and print records
printerCoords
Array of specific in-game coordinates where a print station is
frameworks
Framework activation configuration
translations
List of translations
recordPurgeDays
The number of days that the downloaded PDF's will be stored on the local server
printQueueCommand
Command the view the print queue
printCommand
Command used to print PDF's in-game
clearPrintQueueCommand
Command to clear the print queue
maxPrintsPerQueue
Max number of print requests a user can have in their queue at a time
vehicleConfig
Configuration of LEO vehicles that have a printer



You can create your own "Charge Type" options for penal codes. If your country does not have "felonies" you can edit or remove this option.
You can also use the "Auto Sort" feature to quickly format the order of these charge types.
Be sure to hit "Save" before exiting the page.
You can create your own "Bond'/Bail Type" options for penal codes. Again, if your country does not use these, you can edit or remove them as needed.
You can also use the "Auto Sort" feature to quickly format the order of these charge types.
Adding, editing, or removing a penal code is easy. Simply click on the existing code to edit it, or press "New Penal Code" to create a new one.
Sonoran CAD allows you to change the naming of "Penal Codes" to anything else you'd like. Learn more about our geographical customization.
We've compiled penal code spreadsheets for all 50 US states. Download a CSV from our penal code repository and import it into the CAD.
Sonoran CAD allows you to easily import your penal codes from a spreadsheet (.CSV) file.
Spreadsheet (CSV) importing is only supported directly from Google sheets.
Support will not be provided to users modifying their spreadsheets with Excel, or any other program. The official Google sheet includes specific safety checks preventing invalid formats, blank spaces, etc.
Navigate to our official penal code Google sheet and make a copy. Using a copy of our official sheet ensures your penal codes are formatted correctly.
You may ONLY use the Google sheet directly. Editing this via Excel or any other program is NOT supported.
Now that you have copied this sheet into your Google Drive, you can add new rows and format your penal codes.
Do NOT modify the very first row. These names must remain the same to properly format the penal code structure.
Additionally, the bondAmount column must be kept as a number.
All other columns must be formatted as text.
In Google Sheets, navigate to File > Download > Comma Separated Values (.csv) to download the file.
In Sonoran CAD, navigate to Admin > Customization > Penal Codes
In the penal codes section, select the "Import" button. Then, select "CSV" as the import type and select your downloaded CSV file.
After selecting the CSV file, your penal codes will be imported into the CAD and saved automatically.
Having issues importing your CSV? Be sure you are using and editing our Google Sheet with the Google Sheets program only.
Our Google sheet includes specific error checking and validation to handle common mistakes. Support is not provided if you are using Excel, or any other program.
You can also build and format your penal codes directly into JSON. These JSON formatted penal codes can be sent via our API endpoint, or pasted directly into the UI for a more user-friendly experience.
The JSON structure is an object array. Be sure to strictly follow the format. All keys are strings, with the exception of bondAmount being a number.
In Sonoran CAD, navigate to Admin > Customization > Penal Codes
In the penal codes section, select the "Import" button. Then, select "JSON" and paste the JSON object array of penal codes.
After pasting the JSON content, your penal codes will be imported into the CAD and saved automatically.
Command
Description
sonoran debugmode
Enables detailed debug logging
sonoran info
Displays version and config information
sonoran support <NUMBER>
Sends important information for purposes.
The NUMBER parameter will be provided to you by a support team member.
Ex: sonoran support 123 sends us your plugin information for help.
sonoran plugin <NAME>
Displays plugin information
Ex: sonoran plugin callcommands
Your community's subscription may have expired and failed to renew. Do a quick check on your community limits to make sure your community version includes the submodule you are trying to install.
Be sure to follow the core installation and submodule activation guides thoroughly, depending on the specific submodule you are trying to activate.
Make sure you have not forgotten to enable the submodule in the plugin config file!
Enter sonoran info into your server console.
If the submodule you are having trouble with is listed as DISABLED, you may have forgotten to enable it in the submodule configuration.
Ensure you have set your API ID in the CAD using the value from the API ID submodule.
The SonoranCAD core includes a powerful debug mode. Enable this by entering sonoran debugmode into your server console.
Debug mode will print out additional error information and JSON data for all API calls or push events.
For plugins that require your individual CAD user account to have the API ID set (live map, unit locations, panic, etc.) you can view this data in the console output.
The image below shows an API Call being made from the server to Sonoran CAD. This API call is type UNIT_LOCATION and includes all the data necessary.
Ensure the APIID listed in the API call matches the API ID set in your CAD's user account.
Your community ID and API key is also listed in the debug API call information. Be sure that the community ID and API key are correct.
If you're still having trouble, our dedicated support team is here to help.
Your framework or plugin config is not correctly named config.json. Ensure that is has been spelt correctly, is not config.json.json, etc.
You may need to open the file in a text editor to more easily see the file extension, and ensure that it is correctly named as config.json.
The CAD backend will temporarily "blacklist" (deny) all API calls if multiple requests are made with an invalid format.
Third-party or custom integration scripts may not be utilizing our API correctly. Try disabling them to rule out the issue.
A bug with one of our FiveM submodules.
Enable debug mode on your FiveM server by entering the server command sonoran debugmode. All API calls made will have the full JSON payload printed in your server console.
Wait for your next API blacklist notice. In your server console, you should see multiple failed/errored API calls at the same time as your blacklist. The JSON will show the full, bad data being sent to Sonoran CAD. Based on the type of these API calls, you can narrow down the source to a third-party/custom script or one of our FiveM submodules.
If the bad API calls leading to the blacklist appear to be from an official Sonoran CAD submodule, reach out to our support team.
To add a unit to your call editor, click on an available unit or unit group, and select "Add to Call"
When emergency calls are sent from in-game, they contain a coordinate location. Importing the emergency call from the table or live map will display an option to select and attach the closest units.
Entering a postal code will work as a secondary option to find the nearest units. You must have the postals submodule enabled.
Drag-and-drop is another fast way to add a unit to an existing call:
You can also easily detach units from an existing call, or drag a unit from one call to another:
Click to view our locations and postal install video.
If you haven't already, be sure to install and configure the SonoranCAD Core first.
Follow the submodule activation guide for the required submodules.
If you're using the publicly available nearest-postal script, you will need to follow the steps in the usage section below.
If you're using a custom postal codes file, you will need to add the file to the plugin and Sonoran CAD's fxmanifest as shown in the usage section below.
If you're using an event triggered by a custom postals script, you must configure it as explained in the usage section below.
nearestPostalResourceName should ONLY be filled out if you're using our specific nearest postal script. In other words, do not put the name of your HUD script here, as that will not work.
sendTimer
Time between sending postal updates to the server.
950 ms
shouldSendPostalData
Toggles the plugin on/off
True
nearestPostalResourceName
If using our script, specify the name of its folder here
nearest-postal
mode
The plugin only supports 1.5.0 or higher of the nearest-postal plugin. Be sure to download the latest version before using.
If you're using the publicly available nearest-postal script, some minor configuration is required.
In the Sonoran CAD postals plugin config, change the nearestPostalsResourceName value to the exact name of your nearest postals resource.
Ex: nearest-postals-1.5
Be sure that you are starting the nearest-postals addon/resource before/above where you ensure sonorancad in your server.cfg.
Be sure to restart both the Sonoran CAD resource and the nearest-postal script, or restart your server entirely to apply the changes made.
If you want to use your own custom postal codes file with this plugin, open the config and change mode to file.
Next, copy your custom postal codes file to the submodules/postals folder, and set the value of customPostalCodesFile to the name of this file. Include the .json file extension in the name.
If you're not using the nearest-postal script or a custom postal codes file, you will need to create a export in your postals script, and have it return the player's current postal as a string.
Additionally, you will need to edit the config to set mode to event, then specify the name of this event in nearestPostalEvent.
Need help? You can always hire a developer.
This error may be seen by users attempting to set up the plugin to use a custom postal codes file. Specifically, the error will look something like this, substituting postals_file.json for whatever you've named your custom postal codes file to:
This means that either the postal codes file has not been correctly added to the fxmanifest, or that it has not been added at all. Please reference the above instructions on how to do so.
We recommend replacing the files { } section of your fxmanifest with the given code snippet, then changing postals_file.json to match the name of whatever postals file you're using.
If you've manually entered the line, verify that all the lines in the section except for the last are followed with a comma to ensure that the system can properly read it.
Call ID Number
Unit Identifier
DETACH
Call ID Number
Unit Identifier
VIEW
Call ID Number
CLEAR
STATUS
Status Code
Unit Identifier
NOTE
Call ID Number
Note Text
callTimers
table
How long each call type will take to put through
whitelistZones
table
Zones where only specific call types will trigger. (I.e. A shooting range won't trigger a brandishing call)
language
table
Translations
clothingConfig
table
Configure clothing colors and names if you have custom EUP as well as whitelist certain EUP items or peds to not trigger calls
weaponConfig
table
Configure custom caller descriptions for weapons.












Adds support for ESX and QBCore automatic in-game fines.
This submodule only functions with other submodules that require the standard version of Sonoran CAD or higher. The auto-fine functionality requires the pro version.
For more information, view our pricing page.
Looking for VPS, web, or dedicated hosting? Check out our official server hosting!
If you haven't already, be sure to install and configure the first.
Follow the for the callcommands, locations, and postals submodules.
This step is only required if you wish to use the automatic fine capability.
Be sure to have your game server IP and port set in the admin panel under Advanced > In-Game Integration > Server Events and Integrated Live Map
Don't forget to set your account API ID to properly link your in-game user to the CAD.
Review the frameworksupport_config.lua file to configure the submodule to behave how you like. The file is well documented. Please review all the settings!
Civilians in-game can be automatically fined for the crimes they commit based on fineable forms submitted.
To do so, simply enable issueFines in the config and add a list of custom record types to the fineableForms array. Also, be sure that you have configured your server IP and port in the admin menu.
Ex: fineableForms = {"Arrest Report", "Speeding Citation"}
The fines are pulled from your custom records:
Charges section -> Fine field
Speed section -> Fine field
This submodule can be used to issue fines to players when reports/records are entered into the CAD that include fines. You can configure the reports/records that are finable in the configuration. This submodule also adds support for ESX that other submodules can take advantage of. Currently, the following submodules are supported:
Adds the ability to show character names in dispatch responses (officer names)
Adds the ability to restrict functionality to certain jobs (like police). See the for how to do this.
Legacy ESX Support utilizes MySQL-Async in order to get character information from your database directly. ESX requires this in older versions so this shouldn't be an issue.
This is mainly for ESX v1 releases that were made before the character system implementation using only the users database table. These versions of ESX used the users table only for player information of active characters and a characters table that held all character information (active and secondary characters of your players).
Due to different handling of character information such as first name and last names, this option allows you to use esxsupport submodule with older "Legacy" ESX v1 releases.
Simply set legacyESX to true in your config_esxsupport.lua
Looking to use your own domain name with Sonoran CAD? We've made it easy for you!
Looking for VPS, web, or dedicated hosting? Check out our official server hosting!
The custom login page allows your community members to register, sign-in, and access your CAD all on your own domain! In addition, user signups and password recovery emails have your . Logging in also takes you directly to the community, instead of having to select the community at the menu.
If you are unsure how to add a DNS record, you will need to contact your domain registrar.
Your Sonoran CAD login page can be configured to display on your root custom domain or on a subdomain, such as example.com or cad.example.com.
When updating or changing an existing DNS record the changes may not be visible until public cache expires. Depending on your DNS provider, this can be anywhere from a few minutes to 24-48 hours.
You can try running ipconfig /flushdns in a Windows CMD window and restarting your browser. Otherwise, you can test with other browsers/devices/users while you wait.
In your domain registrar’s DNS management panel, add two CNAME records using the name and content provided in Sonoran CAD, and add one TXT record to verify domain ownership.
Cloudflare Users: Be sure to have the DNS record proxy DISABLED - and set to DNS Only.
The example below shows the TXT record verifying the community ID, and two CNAME records verifying domain ownership.
Users can now visit this custom domain to view the CAD with a custom login page, including receiving your for signups and password recovery messages.
If you are unable to use the , you can also host an HTML page that renders the CAD in an iFrame.
Replace YOUR_COMMUNITY_ID_HERE in the index.html file with your .
Now that you've saved the custom URL inside of the HTML file, you can host this with your own domain on your own web server. Users can now register and access your CAD from your custom domain, and will even receive your for account actions.
If you wish to use a custom login page when using the , you can set a convar in your server.cfg. The easiest way to show your is to use a query string.
"https://sonorancad.com/#/?comid=YOUR_COMMUNITY_ID_HERE"
Simply replace YOUR_COMMUNITY_ID_HERE in the URL with your .
EX: https://sonorancad.com/#/?comid=midwestrp
Add the following to your server.cfg before starting the tablet resource:
Fill in with your actual URL above with the comid you want.






The Sonoran CAD bodycam enables dispatchers to see live images from units in-game.
This submodule utilizes API endpoints that require the Pro version of Sonoran CAD or higher. For more information, view our page.
Looking for VPS, web, or dedicated hosting? Check out our official !
Function: "GetCharacters"
Parameters:
player: the player ID
callback: function to call after fetching the data. Returns an array of character objects.
Example:
exports["sonorancad"]:GetCharacters(playerId, function(result)
-- do stuff with result, an array of character objects
end)[
{
"code": "(2)06",
"type": "Felony",
"title": "Armed Robbery",
"bondType": "Federal Bail Bond",
"jailTime": "5-10 Years",
"bondAmount": 20000
},
{
"code": "(2)07",
"type": "Felony",
"title": "Murder",
"bondType": "Federal Bail Bond",
"jailTime": "5-50 Years",
"bondAmount": 100000
}
]The configured postals file (postals_file.json) was not found. Please check it.[
"10-10: Fight In Progress",
"10-11: Dog Case",
"10-15: Civil Disturbance",
"10-16: Domestic Problem",
"10-17: Meet Complainant",
"10-25: Report in Person (Meet)",
"10-31: Crime in Progress",
"10-32: Man with Gun",
"10-33: Emergency",
"10-34: Riot",
"10-35: Major Crime Alert",
"10-37: Suspicious Vehicle",
"10-45: Animal Carcass",
"10-46: Assist Motorist",
"10-52: Ambulance Needed",
"10-55: Intoxicated Driver",
"10-56: Intoxicated Pedestrian",
"10-57: Hit and Run",
"10-59: Escort",
"10-70: Fire Alarm",
"10-73: Smoke Report",
"10-80: Chase in Progress",
"10-89: Bomb Threat",
"10-90: Bank Alarm",
"10-91: Pick Up Prisoner / Subject",
"10-92: Improperly Parked Vehicle",
"10-94: Street Racing",
"10-96: Mental Subject",
"10-98: Prison / Jail Break"
]Adds the ability to show character names for the caller when they use /911. This is automatic when the submodule is installed.
Adds the ability to show character names on the map.
qbNotifyFinedPlayer
Set to true to notify only the fined individual of the fine
qbFineMessage
The message sent to notify the user of the fine. The placeholders are $AMOUNT and $OFFICER_NAME where $AMOUNT is the fine total and $OFFICER_NAME is the Unit Name of the officer issuing the fine
issueFines
Whether to issue fines to players for finable reports/forms
fineNotify
Whether to send a message in chat when a player is issued a fine
fineableForms
A list of the names of forms that should issue fines to players.
legacyESX
Set to true if default settings do not get character name properly (older esx_identity/ESX legacy versions) created for and tested with: ESX v1.1.0 esx_identity v1.0.2
identityType
Newer ESX version use license instead of steam for identity.
usePrefix
Some ESX versions don't use the prefix (such as license:abc) with the identity, set to false to disable the prefix.
usingQBCore
If you are using QBCore set this to true.
usingQBManagement
Set to true if you want to use qb-management accounts to receive fine payments.
qbManagementAccountNames
A table of department abbreviations to qb-management account names, see examples present in config
Specify what "mode" this plugin should use to determine postals. If using nearest-postal, set this to resource. If using an event fired by another resource, set this to event. If using a custom postals file, set this to file.
resource
nearestPostalEvent
If you've set mode to event, specify the name of the event fired by your postals resource here
customPostalCodesFile
If you've set mode to file, copy your custom postal codes file to the postals plugin folder, and add the name of that file here.





















Sonoran CAD is the only external CAD system offering live image feeds from in-game users accessible through the live map, active units preview, or a dedicated window.
This feature updates the image feed at intervals that can be configured by the user (1-10 seconds).
If you haven't already, be sure to install and configure the SonoranCAD Core first.
The locations submodule includes all logic required to send bodycam images to the CAD.
The bodycam settings are stored inside of the core configuration file.
command
The command name to toggle your body camera on or off.
requireUnitDuty
If enabled, the player must be logged into the CAD to use the body camera.
enableAnimation
Play an in-game animation when activating or deactivating the body camera.
enableOverlay
Enables or disables the blinking body camera image on screen when enabled.
Default true
overlayLocation
The position (corner) of the screen where the body camera image is displayed.
Options: top-left, top-right, bottom-left, bottom-right
Default: top-right
enableBeeps
Enables or disables the body camera beeping when turned on.
Default: true
When in-game, units must also be actively signed into the dispatch, police, fire, or EMS panel.
Use the /bodycam command to toggle your body camera on or off.
If enabled in your framework configuration, a periodic beep and blinking body camera logo will appear on your screen reflecting that your body camera is active.
The body camera plays server-sided beeps periodically while activated.
beepFrequency determines how often these beeps are played
beepRange determines how far away these beeps are heard
The body camera will automatically activate when an officer activates their lights or draws a firearm.
autoEnableWithWeapons enables automatic activation when one of the weapons items are used.
autoEnableWithLights to enabled automatic activation when emergency lights are enabled.
You can enable or disable the requirement for a unit to have to be logged into the Police, EMS or Fire portions of CAD in order to activate their bodycam by setting requireUnitDuty to true.
Users can customize a keybind to toggle their bodycams on and off.
Navigate to Settings > Keybinds > FiveM and look for the keybind "Toggle BodyCam" under the resource sonorancad
When toggling your body camera on or off, an animation will play if enableAnimation is true.
In the active units panel, units with their body camera enabled will show a pulsing camera icon.
Hover over this icon to see a preview image of their body camera.
Click the icon to open an adjustable window of their body camera.
In the live map, units with their body camera enabled will show a pulsing camera icon.
Click on the unit blip to view a live preview of their body camera in the unit action menu.
Some servers may see the following error print in their console:
SCRIPT ERROR: @sonorancad/core/screenshot.lua:15: No such export requestClientScreenshot in resource screenshots-basic
This means that you do not have the screenshot-basic resource installed on your server.
We recommend that you update your server artifacts, as newer versions come with this resource installed by default. Alternatively, you can manually install it from GitHub.
We are aware of an issue with the CFX proxy being unreachable on ZAP Hosting, a required piece for the body camera functionality.
Your CFX proxy URL is formatted as https://someCFXUsernameHere.users.cfx.re/ with someCFXUsernameHere being your CFX username. This proxy is native functionality to all FiveM servers.
We suggest contacting ZAP hosting directly (your game server provider) to try and resolve this issue.
Real-time video streams from in-game, right in the CAD panel.
Individual users require significantly upgraded PC hardware and networking to transcode and upload live video feeds.
The infrastructure to host and share these streams would require massive amounts of new hardware, making the service unaffordable for gaming communities.
Client Image Handling
Units in-game have local screenshots created and sent to the local game server for processing. These screenshots result in next to zero noticeable performance drop in comparison to transcoding live video streaming.
The local game server stores and serves these images to Sonoran CAD when requested by a CAD user. An on-going "feed" of images is sent, stored, and replaced as newer images replace the old ones. When the body camera is toggled off, or the server restarts, these folders are completely wiped to ensure your game server isn't bloating with old images.
CAD Image Requests
When a CAD dispatcher requests to look at a unit's body camera, they ask the game server for the screenshot and continually request new screenshots at the rate they're being generated. The current default is 2000ms (2 seconds) but can be lowered to as little as 1000ms (1 second).
This "screenshot feed" system allows dispatchers to stay up-to-date without requiring massive amounts of bandwidth, expensive processing for the user's PCs, and ensures quick responsiveness within the CAD.
Please note that this feature is in early development and may exhibit instability, influenced by server and network performance. Body camera images are generated by the client and temporarily stored on the community's server. Viewing these images, whether by dispatchers or units, involves active requests to your CFX nucleus proxy, leading to increased network traffic and processing demands.

























Getting your database Credentials to use with Database Sync.
Looking for VPS, web, or dedicated hosting? Check out our official !
View Sonoran CAD's vast library of integration plugins for your community!
Below is a table of which plugins require which version of Sonoran CAD to function due to the required API endpoints.
The FiveM resource does not work with the Free or Starter version of Sonoran CAD.
Each submodule can be in the sonorancad/configuration folder.
setr sonorantablet_cadUrl "YOUR_URL_HERE"beepType
Type of audio that the beeps use.
native = GTAV Native Sounds
nui = Custom Sound File
beepFrequency
Adjusts the frequency at which unit body camera beeps when turned on(in milliseconds).
Default: 30000 (30 seconds)
beepRange
The range at which a person can hear the bodycam beeps
screenshotFrequency
Adjusts the frequency at which unit body cameras update (in milliseconds).
Default: 2000 (2 seconds)
defaultKeybind
The default keybind for toggling the bodycam.
autoEnableWithLights
Automatically enable bodycam when emergency lights are enabled/disabled.
autoEnableWithWeapons
Automatically enable bodycam when a weapon is drawn.
clothing
Clothing items that must be worn in order to have a body camera.
weapons
Weapons that when drawn enable bodycam.
bodycamCommandChangeFrequency
The command to adjust your individual body camera screenshot frequency to be different than the server's screenshotFrequency value.
Default: bodycamFreq











































At the top of your screen click on User Accounts.
3. Create a new user account
The Host Name field should be set as Any Host and the value as %. This will allow external IPs (Sonoran CAD) to connect to your database.
SELECT and SHOW VIEW will ensure this account can only read from your database.
You will now want to go to and get your Public IP Address to use as your Host.
Database Translation Information:
See to figure out how to add Credentials to your CAD Instance using the information above.
If your database port has not already been opened, you will need to forward/open this port.
Typically, the default MySQL port is 3306.
To check if your MySQL port has been properly opened, visit a port checking utility and enter your MySQL server's IP address and port.
If you are unsure how to open a port, you will need to contact your hosting provider.
My community wants to whitelist only the Sonoran CAD IP address to connect on this SQL user account. How can I do this?
You may whitelist the following IPs:
Last Updated : 8/26/2025
No
No
Yes
Yes
Yes
Yes
Yes
Yes
Yes
No
Yes
Yes
No
Yes
Yes
Partial
Partial
Yes
Fire Siren
No
Yes
Yes
No
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
No
Yes
Yes
No
Yes
Yes
Yes
Yes
Yes
No
No
Yes
No
No
Yes
No
Partial
Yes
Partial
Yes
Yes
Yes
Yes
Yes
No
Yes
Yes
Yes
Yes
Yes
No
Yes
Yes
No
Yes
Yes
View your radar from first person!
Sonoran's Radar Display brings new levels of immersion to Police Radars in FiveM!
















Notify officers of incoming calls, allow them to attach to them, notify the caller, and route units via GPS in real-time to calls and the lead pursuit officer...all in one!
This submodule utilizes API endpoints that require the plus version of Sonoran CAD or higher. For more information, view our page.
Looking for VPS, web, or dedicated hosting? Check out our official
24.199.66.94
198.199.90.248
34.173.36.190





At the top of your screen click Tools and then User Manager.
Then, click Add at the top left.
Enter a user name, password, and enter % in the From host field. This will allow external IPs (Sonoran CAD) to connect to your database.
Under Allow Access To select Add Object
Select the name of your database, then hit Ok.
Check off the EXECUTE, SELECT, and SHOW VIEW read permissions. Then press Save.
You will now want to go to http://whatsmyip.org and get your Public IP Address to use as your Host.
Database Translation Information
HeidiSQL
SonoranCAD
Host
Host/Address
User name
Username
Password
Password
Database
Database
See Database Sync and Merge Connection Credentials to figure out how to add Credentials to your CAD Instance using the information above.
Scroll down until you see TOOLS on the left hand side of your screen and select Databases.
In the Center of your screen you will see you're database Credentials.
Database Translation Information
Zap Hosting
SonoranCAD
Server/IP
Host/Address
Database
Database
User
Username
Password
Password
See Database Sync and Merge Connection Credentials to figure out how to add Credentials to your CAD Instance using the information above.
phpMyAdmin
SonoranCAD
Host
Host/Address
Database
Database
User name
Username
Password
Password
This submodule:
Notifies officers of incoming calls
Automatically routes attached units to the postal code
Unit GPS routing is updated whenever the dispatch postal is updated
Notifies the civilian making the emergency call when an officer is en-route.
Check out our video showcase of this submodule here.
If you haven't already, be sure to install and configure the SonoranCAD Core first.
Dispatch Notify requires you to enable the following submodules:
callcommands
locations
postals
Be sure to have your game server IP and port set in the admin panel under Advanced > In-Game Integration > Server Events and Integrated Live Map
Don't forget to set your account API ID to properly link your in-game user to the CAD.
Review the dispatchnotify_config.lua file to configure the submodule to behave how you like. The file is well documented. Please review all the settings!
/rcall
Respond/Attach to the new dispatch call
/togglegps
Toggle the GPS auto-lock when dispatch updates the postal code
enableUnitNotify
Enable incoming 911 call notifications
emergencyCallType
Specifies what emergency calls are displayed as. Some countries use different numbers (like 999)
civilCallType
Specifies non-emergency call types. If unused, set to blank ("")
dotCallType
Some communities use 511 for tow calls. Specify below, or set blank ("") to disable
respondCommandName
Command to respond to calls with
This call can be placed from the Civilian menu of the CAD, or via the /911 command in-game, supplied by the callcommands submodule.
All on-duty officers get a notification (if configured) and can use the attach command to respond to the call.
By default, this command is /rcall <callid>, where callid is the ID shown in the call notification.
Units can optionally choose to disable the postal updating when dispatch updates the call (or primary unit tracking) by using the /togglegps command. This is a toggle and will be shown in chat what it gets changed to. This is ON by default.
Dispatch notify can also be used to track the primary unit on a call. This will auto route attached units via GPS to the primary unit in real-time. Additionally, the postal code on the call will be continually updated for dispatchers to easily view. This is highly useful for pursuits, where additional units need to catch up and join the chase.
Dispatchers can set the primary unit to any unit currently attached to the call. The slider next to the Primary Unit box will toggle tracking mode. When enabled, the postal will automatically update based on the primary unit's location and be sent to all attached units.
A unit can also designate themselves as primary, but only if Self Dispatch is enabled.
No notifications for 911 calls
Units must be logged into the CAD (by default) or meeting the requirements depending on how the submodule is configured.
If using pNotify notifications, ensure that resource is running.
Units do not automatically attach to calls
Ensure their is set so the server knows who they are.
Caller is not notified when units attach to the call
If the caller ever leaves the server and rejoins, this feature does not work.
If dispatch created the call within the CAD, there is no way to notify a caller.
Ensure you are not overriding the 911 command (default
In the admin panel, navigate to Advanced > In-Game Integration > Server Events and Integrated Live Map
Here, you can enable and select a default map option for GTA, Roblox, or others. Additionally, pro communities can upload a custom map.
Don't forget to have each community member set their account API ID to properly link their in-game user to the CAD.
Users will need to be granted access to view the live map. This can be done via Discord role sync, permission key, or by manually granting permissions in the admin menu.
In the Police, Fire, EMS, or Dispatch window you can now click the "Live Map" button to view your new live map! Selecting a blip will show it's updated position and unit information.
This is found in the task bar's start menu under Unit Management > Live Map
You can also pin the live map button to your taskbar for easy access.
The postal search functionality requires the Pro version of Sonoran CAD.
For more information, view our pricing page.
With the postals submodule configured, you can manually enter and search for a postal code on the live map.
Or, quickly auto-open and search for the location by clicking the search icon:
In the active call's postal field
In the active unit's location field
You can toggle specific blips visibility and outline colors for police, fire, EMS, and dispatch.
Unit blips display the live location of all police, fire, EMS, and dispatch units in-game. You can hover over a unit for brief details, or click on one for more options.
You can also easily filter the map to specific units by selecting them in the active units panel.
Clicking on a unit blip allows you to add the unit to a call, add the unit to a group, send the unit lookup results, edit the unit's information, toggle their panic state, and more.
Drag-and-drop support for the live map is currently only available for the Roblox (ER:LC) edition.
Drag-and-drop is also supported for unit blips. The following drag-and-drop options are supported:
Drag to the call editor
Drag to an active call
Drag to a unit group
Drag to the unit group header to create a new group
Drag to the lookup window or minimized tab
Drag to the timer window or minimized tab
Drag to the tone board window or minimized tab
Emergency calls placed in-game will also appear on the live map. You can hover over the blip for the call details.
Clicking on the emergency blip allows you to import the call to your editor or remove the emergency call.
Drag-and-drop is also supported for emergency call blips.
You can drag the emergency call to your call editor to import and view the information.
Smart signs will also appear as blips on the map. You can click on these to edit the signs in-game.
This feature requires the pro version of Sonoran CAD. For more information, view our pricing page.
Sonoran CAD allows communities to upload custom map images to the integrated, hosted live map. If your community does not use one of the map types provided, you can upload the images manually.
Extract the images from the YTD files with a program like OpenIV.
You will need six files named exactly as follows:
minimap_sea_0_0.png
minimap_sea_0_1.png
minimap_sea_1_0.png
minimap_sea_1_1.png
minimap_sea_2_0.png
minimap_sea_2_1.png
Navigate to Admin > Advanced > In-Game Integration > Live Map and Push Events Select "Upload Custom" and upload all six correctly named files.
Custom map images are limited to 30MB each. However, if you are uploading more than 100MB of images total, you will need to upload in separate batches.
If your community is utilizing the Roxwood map expansion, there will be additional tiles to upload.
minimap_sea_-1_-1.png
minimap_sea_-1_0.png
minimap_sea_-1_1.png (Optional, blank tile to the right)
Additionally, two existing map tiles will need to be updated, as they contain parts of both the main island and the Roxwood expansion.
minimap_sea_0_-1.png
minimap_sea_0_0.png
minimap_sea_0_1.png
If your community is utilizing the Cayo Perico map expansion, there will be extra tiles to upload. Ensure these are named as:
minimap_sea_2_1.png
Bottom right of the main island + top right of Cayo Perico
minimap_sea_2_2.png
minimap_sea_3_1.png
minimap_sea_3_2.png
Sonoran CAD allows any Roblox game to also send and update live map positions.
ER:LC map option available in the admin panel, or - upload a modified map with the same dimensions 3120x3120
Requires a custom map upload from the game





















/911enableUnitResponse
Enable call responding (self-dispatching)
If disabled, running commandName will return an error to the unit
dispatchDisablesSelfResponse
If a dispatcher is detected to be online, automatically disable the response command.
enableCallerNotify
Enable "units are on the way" notifications
unitNotifyMethod
chat: Sends a message in chat
pnotify: Uses pNotify to show a notification
custom: Use the custom event SonoranCAD::dispatchnotify:IncomingCallNotifyinstead (Provides single parameter) - The message.
notifyMessage
NotifyMessage: Message template to use when sending to the player
You can use the following replacements:
{officer} - officer name
incomingCallMessage
How should officers be notified of a new 911 call? Parameters: {location} - location of call (street + postal) {description} - description as given by civilian {caller} - caller's name {callId} - ID of the call so LEO can respond with /r911 {command} - The command to use
unitDutyMethod
How to detect if units are online? incad: units must be logged into the CAD permissions: units must have the "sonorancad.dispatchnotify" ACE permission (see docs) esxjob: requires esxsupport submodule, use jobs instead for on duty detection custom: Use custom function (defined below as unitDutyCustom)
esxJobsAllowed
What jobs should count as being on duty?
waypointType
Customise the title of a call made in the CAD postal: set gps to caller's postal (less accurate, more realistic) - REQUIRES CONFIGURED POSTAL SUBMODULE exact: set gps to caller's position (less realistic) none: disable waypointing
waypointFallbackEnabled
Fall back to postal if exact coordinates cannot be found (for self-generated calls)
callTitle
Type of waypoint to use when officer is attached Default: OFFICER RESPONSE
sendNotesToUnits
Enable "the sending of notes to units" notifications
noteNotifyMethod
chat: Sends a message in chat
pnotify: Uses pNotify to show a notification
custom: Use the custom event SonoranCAD::dispatchnotify:NewCallNoteinstead (Provides single parameter) - The message.
notifyMessage
NotifyMessage: Message template to use when sending to the player
You can use the following replacements:
{callid} - The CAD Call ID
{note} - The Note Added
enableAddNote
Enable "the adding of the notes" notifications
addNoteCommand
Command to add notes to a call with
enableAddPlate
Enable "the adding of plates that are locked" notifications - REQUIRES CONFIGURED WRAITHV2 SUBMODULE
addPlateCommand
Command to add plates to a call with









The Sonoran CAD ERS integration allows dispatchers to generate callouts from the live map, lookup character information, and more!
This submodule utilizes API endpoints that require the Pro version of Sonoran CAD or higher. For more information, view our pricing page.
Looking for VPS, web, or dedicated hosting? Check out our official server hosting!
Emergency Response Simulator is a paid, third-party script for FiveM.
This advanced (co-op) PVE roleplay game mode simulates emergency service calls, where you as emergency service worker have to respond to. Whether you are a medic, firefighter, tow service operator or police officer, there is always something to do. With finetuned callouts you’ll never get bored of driving around in your service vehicle. Rush to high-priority, dangerous calls, or handle routine tasks like warning a speeder. Each callout is unique, with random outcomes that keep you curious and engaged every time you respond to an emergency.
If you haven't already, be sure to install and configure the first.
Follow the to enable the ERS integration.
The ERS submodule comes with three record templates (character, license and vehicle registration).
Importing and using these record templates will ensure ERS callout character, license, and vehicle registration records are automatically generated.
These records can be located in the /sonorancad/submodules/ersintegration/SonoranCAD Records directory.
To import in Sonoran CAD, navigate to Admin -> Customization -> Custom Records -> Import.
Open each JSON file and copy/paste the contents into the CAD.
ERS Integration is highly configurable to allow for custom records and calls. All default configuration will work with the provided CAD records seamlessly. It is only recommended to edit if you are experienced with .
Dispatchers can use the live map to create a new ERS callout at a specific location.
Drag-and-drop the ERS icon from the toolbar to a location on the map. Clicking the new ERS map icon will allow you customize the callout and settings.
When a callout is first interacted with, character, license, and vehicle records will be generated in the CAD with the information.
This allows lookups in the CAD to be ran.
When a callout is generated in-game, a 911 call will be automatically created in the CAD.
911 calls generated from a callout will display with location on the live map.
When a callout is accepted by a unit:
A dispatch call is automatically generated.
Database Sync uses the database on your FiveM server, whereas ERS uses the CAD database to create records in the CAD. Thus, when you run a lookup with with DB sync enabled, CAD will query your server's database instead of the CAD database.
For this reason, the ERS integration and DB sync are incompatible. Please only enable one system at a time.
Sonoran CAD's Integration Core imports common API method wrappers and functionality. Installing our integration framework is easy! Learn more below.

create911Call
bool
Create a 911 call when an ERS callout is created
createEmergencyCall
bool
Create an emergency call when an ERS callout is accepted
callPriority
integer
Priority of the call created in CAD (1-3)
callCodes
array
Call codes for each ERS callout type. | Left side is the callout ID and right side is the corresponding 10 code
autoAddCall
bool
Automatically add members to the call when an ERS callout is accepted
customRecords
array
Array of record customization for CAD records. Please see comments in file for more information on record customization
The unit is automatically attached to the CAD dispatch call.
DOBFormat
string
Language code for the DOB format. Available options can be found in the configuration file
clearRecordsAfter
integer
Number of minutes to clear records after | 0 to never delete




--[[
Sonoran Plugins
Plugin Configuration
Put all needed configuration in this file.
]]
local config = {
enabled = false,
pluginName = "ersintegration", -- name your plugin here
pluginAuthor = "SonoranCAD", -- author
configVersion = "1.2",
-- put your configuration options below
DOBFormat = "en", -- Make sure this matches | en: dd/mm/yyyy | us: mm/dd/yyyy | iso: yyyy/mm/dd
clearRecordsAfter = 30, -- Clear records after this many minutes (0 = never)
create911Call = true, -- Create a 911 call when an ERS callout is created
createEmergencyCall = true, -- Create an emergency call when an ERS callout is accepted
callPriority = 2, -- Priority of the call created in CAD (1-3) | Only used if createEmergencyCall is true
callCodes = {
['Stolen_motorbike'] = '10-22'
}, -- Call codes for each ERS callout type | Only used if createEmergencyCall is true
autoAddCall = true, -- Automatically add members to the call when an ERS callout is accepted
customRecords = {
civilianRecordID = 7, -- Record ID for civilian records
civilianValues = {
-- Configurable mapping for SonoranCAD replaceValues.
-- The key is what SonoranCAD expects and the value is either:
-- • A string that matches a key in pedData, or
-- • A function that returns a value based on pedData.
-- • Left side of mapping is the SonoranCAD field mapping ID from Custom Records, right side is the ERS field.
["first"] = "FirstName",
["last"] = "LastName",
["dob"] = "DOB",
["age"] = function(pedData)
return returnAgeFromDobString(pedData.DOB)
end,
["sex"] = "Gender",
["residence"] = "Address",
["zip"] = "PostalCode",
["phone"] = "Phone",
["skin"] = "Nationality",
["img"] = "ProfilePicture"
-- Add more keys as needed:
-- email = "Email" -- Example: if pedData.Email exists.
},
vehicleRegistrationRecordID = 5, -- Record ID for vehicle registration records
vehicleRegistrationValues = {
-- Configurable mapping for SonoranCAD replaceValues.
-- The key is what SonoranCAD expects and the value is either:
-- • A string that matches a key in pedData, or
-- • A function that returns a value based on pedData.
-- • Left side of mapping is the SonoranCAD field mapping ID from Custom Records, right side is the ERS field.
-- Registration Information
["status"] = function(vehicleData)
if vehicleData.stolen then
return "STOLEN"
elseif not vehicleData.mot then
return "EXPIRED"
else
return "VALID"
end
end,
["_wsakvwigt"] = function(vehicleData)
if vehicleData.stolen then
return "STOLEN"
elseif not vehicleData.mot then
return "EXPIRED"
else
return "VALID"
end
end,
["_imtoih149"] = function(vehicleData)
return os.date("%m/%d/%Y", os.time() + (60 * 60 * 24 * 365)) -- +1 year from now
end,
-- Civilian Information
["first"] = function(vehicleData)
return vehicleData.owner_name:match("^(%S+)")
end,
["last"] = function(vehicleData)
return vehicleData.owner_name:match("%s(.+)$")
end,
-- Vehicle Information
["plate"] = "license_plate",
["model"] = "model",
["color"] = function(vehicleData)
if vehicleData.color_secondary and vehicleData.color_secondary ~= "" then
return vehicleData.color .. ", " .. vehicleData.color_secondary
else
return vehicleData.color
end
end,
["year"] = "build_year",
["type"] = function(vehicleData)
local classMap = {
[0] = "SEDAN", [1] = "SEDAN", [2] = "SUV", [3] = "SUV",
[4] = "COUPE", [5] = "COUPE", [6] = "OFFROAD", [7] = "TRUCK",
[8] = "MOTORCYCLE", [9] = "MARINE", [16] = "AIRCRAFT"
}
return classMap[vehicleData.vehicle_class] or "SEDAN"
end,
-- Add more keys as needed:
-- owner = "Owner" -- Example: if pedData.Owner exists.
},
licenseRecordId = 4, -- Record ID for license records
licenseTypeField = "7eddab31daf4a0182", -- Field ID for license type
licenseTypeConfigs = {
DRIVER = {
type = "DRIVER",
is_valid = "License_Car_Is_Valid",
license = "License_Car",
},
MOTORCYCLE = {
type = "MOTORCYCLE",
is_valid = "License_Bike_Is_Valid",
license = "License_Bike",
},
BOAT = {
type = "BOAT",
is_valid = "License_Boat_Is_Valid",
license = "License_Boat",
},
PILOT = {
type = "PILOT",
is_valid = "License_Pilot_Is_Valid",
license = "License_Pilot",
},
CDL = {
type = "CDL",
is_valid = "License_Truck_Is_Valid",
license = "License_Truck",
},
},
licenseRecordValues = {
-- License Information
["252c4250da9421cbd"] = function(pedData, ctx)
return pedData[ctx.is_valid] and "VALID" or "SUSPENDED"
end,
["878766af4964853a7"] = function(pedData, ctx)
return pedData[ctx.is_valid] and "VALID" or "EXPIRED"
end,
["_54iz1scv7"] = function(pedData, ctx)
if pedData[ctx.license] == "Expired" then
return os.date("%m/%d/%Y", os.time() - (60 * 60 * 24 * math.random(1, 365))) -- Within the last year
end
return os.date("%m/%d/%Y", os.time() + (60 * 60 * 24 * math.random(1, 365))) -- Within a year
end,
-- Civilian Information
["first"] = "FirstName",
["last"] = "LastName",
["mi"] = "", -- No M.I. mapped
["dob"] = "DOB",
["age"] = function(pedData)
return returnAgeFromDobString(pedData.DOB)
end,
["sex"] = "Gender",
["residence"] = "Address",
["zip"] = "PostalCode",
},
boloRecordID = 3, -- Record ID for BOLO records
boloRecordValues = {
['_olgxdruc3'] = 'bolo_description'
},
warrantRecordID = 2, -- Record ID for warrant records
warrantDescription = '_avb6wvgyi', -- Field ID for warrant description
warrantFlags = '_hlshajq0f' -- Field ID for warrant flags
}
}
if config.enabled then Config.RegisterPluginConfig(config.pluginName, config) end
function returnAgeFromDobString(dobString)
local day, month, year
if config.DOBFormat == "en" then -- dd/mm/yyyy
day = tonumber(dobString:sub(1,2))
month = tonumber(dobString:sub(4,5))
year = tonumber(dobString:sub(7,10))
elseif config.DOBFormat == "us" then -- mm/dd/yyyy
month = tonumber(dobString:sub(1,2))
day = tonumber(dobString:sub(4,5))
year = tonumber(dobString:sub(7,10))
elseif config.DOBFormat == "iso" then -- yyyy/mm/dd
year = tonumber(dobString:sub(1,4))
month = tonumber(dobString:sub(6,7))
day = tonumber(dobString:sub(9,10))
else
errorLog("Unsupported DOB format: " .. tostring(config.DOBFormat))
end
local today = os.date("*t")
local age = today.year - year
if today.month < month or (today.month == month and today.day < day) then
age = age - 1
end
return tostring(age)
end
Use code SONORANto save big!
The Sonoran CAD FiveM resources has multiple "submodules" for every integration feature. These are easily enabled and configured in the /configuration folder.
Download a pre-configured version of the in-game integration resource from the panel. This download will already have your community ID and API Key in the config.lua file in addition to file renaming done for you.
Navigate to Admin -> Advanced -> In-Game Integration -> FiveM
Extract the .zip file into your resources directory. Place the [sonorancad] folder directly in the resources root directory.
In your server.cfg file, simply add the following line:
It is very important that the sonoran_updatehelper resource is not started manually. Doing so may cause a server crash if updates are available due to a race condition.
DO NOT start the whole [sonorancad] folder as that will also start the sonoran_updatehelper which might cause crashing if it is started manually. Example of not what to do ensure [sonorancad]
Modify the /configuration/config.jsonfile for any additional configuration values.
The Sonoran CAD FiveM resources has multiple "submodules" for every integration feature. These are easily enabled and configured in the /configuration folder.
The Sonoran CAD FiveM resource contains an auto-updater that will override all non-configuration files when a new version of Sonoran CAD is released.
Some communities have custom files inside the [sonorancad] folder they don't wish to have overwritten, like custom plate reader images.
Simply add the direct path to the directory or individual files to the sonorancad/configuration/updaterIgnore.json file.
To disable this auto-update entirely set allowAutoUpdate to false in the config.json.
Download the latest zip file from our Github.
Extract the .zip file into your resources directory. Place the [sonorancad] folder directly in the resources root directory.
If you already have the wk_wars2x resource, please remove it from your resources folder and use the Sonoran version included with the framework download.
Open sonorancad\configuration\config.CHANGEME.json, update the values, then save it as config.json. Default configuration is below:
For information regarding the bodycam script config values, please see our Bodycam Submodule Guide.
Add the following to your server.cfg (if you don't want pNotify or wraith, leave those out):
It is very important that the sonoran_updatehelper resource is not started manually. Doing so may cause a server crash if updates are available due to a race condition.
DO NOT start the whole [sonorancad] folder as that will also start the sonoran_updatehelper which might cause crashing if it is started manually. Example of not what to do ensure [sonorancad]
Once completed please move to the Additional Configuration section to complete your setup
Starting with framework version 2.6.2, you can override any configuration option in your config.json file by specifying a convar before the sonorancad resource starts.
This feature does not work with arrays (like statusLabels). Any other configuration option can be set using the sonoran_<configSettingHere> format.
In the CAD admin panel, navigate to: Advanced > In-Game Integration Expand the "Server Events and Integrated Live Map" section.
Enter your server's public IP address and your game server's port. By default, this is port 30120.
Set your game server port and IP address in the admin panel of Sonoran CAD. The map port can be left blank, unless you are also installing the integrated live map.
Learn more about configuring multiple servers.
You may wish to also send push events to another external web server, like a Discord bot.
In the framework configuration file, simply set enablePushEventForwarding to true and pushEventForwardUrl to your web server address.
Check out our pre-bundled Submodule Configurationto make the integration useful.
For basic functionality, we recommend at least the locations, callcommands, and postals submodules.
You can also view our standard submodule activation guide.
As of new installations, the configuration file has been renamed to prevent it being overwritten by updates. To use the radar for the first time, you must rename the file config.dist.lua within the wk_wars2x folder to config.lua.
If your framework has the primaryIdentifier set to steam in the configuration (used for your API ID type), you'll need to ensure a Steam API key is set in your server.cfg file.
You can register a new Steam API Key at http://steamcommunity.com/dev/apikey
Then, paste it into your server.cfg
Sonoran CAD's integration framework and submodules will automatically update with the latest features, fixes, and changes!
Or, run sonoran update to instantly check and apply any updates for the framework core.
The Sonoran CAD integration framework comes with several commands. These commands can be run in your server console to provide information, update submodules , and more.
sonoran help
Display list of commands
sonoran update
Run core/framework updater
sonoran debugmode
Toggle debug mode on/off
sonoran info
Dump version info and configuration data
sonoran support
Dump information for support staff
1. Check to make sure sonoran_updatehelper or [sonorancad] is not being started in your server.cfg.
It is very important that the sonoran_updatehelper resource is not started manually. Doing so may cause a server crash if updates are available due to a race condition.
DO NOT start the whole [sonorancad] folder as that will also start the sonoran_updatehelper which might cause crashing if it is started manually. Example of not what to do ensure [sonorancad]
2. Try updating your smartsigns submodule manually to the latest version. This is done by copying over the lua files from the latest release found here and overrideing the old files.
1.) Check that the file in question is actually present in the specified file path. To find the correct path please read the example below:
In this example, you would navigate to the sonorancad resource, open the html folder and ensure the file config.js is present.










Database Sync is a highly advanced feature allowing you to automatically pull all character, license, and vehicle registration data from your own in-game database directly to Sonoran CAD.
Looking for VPS, web, or dedicated hosting? Check out our official !
Database Sync is a highly advanced feature allowing you to automatically pull all character, license, and vehicle registration data from your own in-game database directly to Sonoran CAD.
This feature is specifically designed for frameworks like ESX and QBus/QBCore, but is compatible with any MySQL database.
View our on enabling Database Sync.
Configuring Sonoran CAD's Database Sync may seem complicated, but you are simply specifying your table names and column values where your in-game data is stored.
REQUIRED fields in the CAD are shown in red. All other fields are optional and are not required to work properly.
In order for Sonoran CAD to connect to your SQL database, connection credentials must be configured properly.
Sonoran CAD requires an external connection to your database.
View our guide on creating a new read-only SQL user for external use.
Expand the SQL Connection Credentials section of the configuration, and toggle on Database Sync and the optional Database Merge feature.
Database Merge is an additional feature that allows you to save off additional, manually specified data in the CAD.
Example:
DB Merge pulls a character record into the CAD, but the address field in your custom record is blank (your DB doesn't have this info). DB merge allows you to manually edit the record pulled from your database and edit any blank field.
Next time you look up this character, it will pull the same character info from your database and then merge this with the manually specified data saved in Sonoran CAD.
Once the required SQL connection fields have been specified, select the “Test Connection” button. This will query your database for the version. If you see an alert similar to the following, your connection is successful:
If you see an error message, it's likely you have not or opened the database port for external use.
Sonoran CAD requires character mapping to be properly configured for the additional license and vehicle registration mapping.
The DB sync configuration is designed to show Sonoran CAD the specific tables and columns that data can be pulled from in your database.
The table name field will contain the name of your database table containing character records.
The column name field will contain the name of the specific column in the character records table containing data for this row.
The Character Mapping Column contains a unique ID for the specific character. This unique identifier will also map records in your license and vehicle registration tables back to the character that owns them. Typically, this is a Steam ID or license ID.
Character records can also pull data from multiple different tables, such as a properties table to add address information. Just be sure that those additional tables have a proper identifier column to map back to the other characters table.
Example:
In our database, the characters table contains our character records. The identifier column contains the character's unique ID, the firstname column contains the characters first name, the lastname character contains the characters last name, etc.
Be sure that you have enabled character mapping via the toggle. Once your character mapping has been completed, hit the save button and then the test button. The test button will attempt to select a single random character with the mapping configuration specified.
If you see "Success!" move onto the next section.
Licenses and Vehicle registrations can also be automatically pulled via CAD search with Database Sync.
Similar to the character mapping, specify the table name containing your vehicle registrations or licenses. Unlike character mapping, data for these records can only be pulled from a single table.
The vehicle and license mapping will also need to have the Character Mapping Column specified. Again, this is the name of the column in your license/vehicle table containing a unique ID that maps back to the character that owns it.
Example:
In our database, the owned_vehicles table contains our stored vehicles. The owner column contains the character's unique ID that owns the vehicle, and the plate column contains the vehicle's license plate.
Be sure that you have enabled the license/vehicle mapping via the toggle. Once your mapping has been completed, hit the save button and then the test button. The test button will attempt to select a single random license or vehicle with the mapping configuration specified.
If you see "Success!" move onto the next section.
Many databases store data in a JSON formatted column. Sonoran CAD can also parse these columns for data.
In some cases, your license or vehicle registration tables may not directly contain a Character Mapping ID column (a column with an ID that directly maps back to the character/civilian record), but may contain a unique ID that maps back to a specific character in another table.
In this example, the vehicle table contains all of the vehicle information, but does not contain a CharacterID column. Instead, the vehicle table contains a VehicleRegistrationID column.
The VehicleRegistrationId column then maps to the vehicleregistration table. The vehicleregistration table then contains a corresponding CharacterId column, which maps back to the character table.
In the CAD, the configuration is simple.
Toggle on the External Key checkbox, as the vehicle table's VehicleId needs to be mapped to an external table to be turned into the proper characterId.
Specify the external key's table (vehicleregistration) and the external key's column CharacterId.
Back in the mapping panel, we toggle the field as a JSON Column and set the column name to accounts as this is the column in our character table that contains the JSON data.
We can then set the JSON Key for this data as bank.
Friendly Mapping requires the pro version of Sonoran CAD.
For more information, see our or view how to check your community .
Friendly mapping allows you to convert any raw database value to a more user friendly value.
Ex: drive_license in your database is converted to Driver's License.
MySQL tinyint column types may be displayed as numerical values 0 and 1 but be read as True and False by Sonoran CAD.
Instead of mapping the "Database Vaue" as 0 or 1 you will need to map False and True.
In our SQL table, we can see the character's job columns has text values that can be improved. The taxi job value can be automatically converted to Taxi Driver in DB Sync records, and the cardealer jon can be automatically converted to Car Dealer.
In our character table mapping, we can select Modify on the job field's friendly mapping.
In the editor, we can now map the raw database value of taxi to a friendly value of Taxi Driver and the raw db value of cardealer to Car Dealer.
Be sure to hit save in the friendly mapping editor, and then save the configuration for your mapping section.
These new friendly mapped values will even work with !
Navigate to our and make a copy. Using a copy of our official sheet ensures your friendly mapping is formatted correctly.
You may ONLY use the Google sheet directly. Editing this via Excel or any other program is NOT supported.
2. Add your Friendly Mappings
Be sure to leave the top header line as it is. Below the header, add in your friendly mapping keys and values.
In Google Sheets, navigate to File > Download > Comma Separated Values (.csv) to download the file.
In the friendly mapping editor select Import > CSV > Select your downloaded Google spreadsheet
Then, save the mapping and save the database sync config.
You can also build and format your friendly mapping from raw JSON and paste them directly into the UI.
The JSON structure is an object array. Be sure to strictly follow the format.
In the friendly mapping editor select Import > JSON > Paste your JSON formatted structure
Sonoran CAD's records are entirely customizable, this includes database sync records! You can easily enable database sync mapping for any custom field you add to a character, license, or vehicle registration record.
Navigate to Admin > Customization > Custom Records
Select your custom character, license, or vehicle registration record to open the editor.
Simply add a field if the desired field doesn't already exist and note the Label name for the next step. For this example, we'll enable database sync for a new job field in our character's table.
Be sure to save your custom record format after enabling this!
Back in our database sync editor, we can now see the new Job field has been added. We can map this new field to our database as any other field.







exec @sonorancad/sonorancad.cfg{
"communityID": "",
"apiKey": "",
"mode": "production",
"postTime": 5000,
"serverId": "1",
"primaryIdentifier": "steam",
"apiSendEnabled": true,
"debugMode": false,
"updateBranch": "master",
"statusLabels": ["UNAVAILABLE", "BUSY", "AVAILABLE", "ENROUTE", "ON_SCENE"],
"allowAutoUpdate": true,
"autoUpdateUrl": "https://raw.githubusercontent.com/Sonoran-Software/SonoranCADLuaIntegration/{branch}/sonorancad/version.json",
"allowUpdateWithPlayers": false,
"noUnitTimer": false,
"forceSetApiId": false,
"enablePushEventForwarding": false,
"pushEventForwardUrl": "https://host",
"disableOverride": false,
"bodycamEnabled": true,
"bodycamBeepFrequency": 300000,
"bodycamScreenshotFrequency": 2000,
"bodycamPlayBeeps": true,
"bodycamOverlayEnabled": true,
"bodycamOverlayLocation": "top-right",
"bodycamCommandToggle": "bodycam",
"bodycamCommandChangeFrequncy": "bodycamfreq"
}exec @sonorancad/sonorancad.cfg# Steam Web API key
# If you want to use Steam authentication (https://steamcommunity.com/dev/apikey) # -> replace "" with the key
set steam_webApiKey "YOUR_KEY_HERE"Started resource sonorancad (3 warnings)
^3Warning: Could not find file `html/config.js` (defined in fxmanifest.lua:16^7







This is the password for the SQL account.
accountsbankTo more easily view the JSON data, we can copy it from the cell and paste it into a JSON formatter.
We can see that the JSON "key" for the bank account amount is bank.
Nested JSON values are also supported.
Here, the eye_color is a JSON object, with the item property of 0.
In the DB Sync config, we list the JSON key as eye_color.item
Then, we can use friendly mapping to convert the eye color 0 value to an actual color, like "brown".
[]{}To more easily view the JSON data, we can copy it from the cell and paste it into a JSON formatter.
For this example, we want to display the status (valid/invalid) of the license type drivers.
We want our Driver's License Status field in our custom record to reflect whether or not their license is valid. The expireDate JSON property displays true (expired) or false (valid).
For our JSON key, set it to the following:
[?(@.license='drivers')].expireDate
This tells DB sync to look in the array (list) [] for a license type of drivers and give us the expireDate value.
Then, we can use friendly mapping to convert the true to Expired and false to Valid.
Field
Description
Type
This is the type of SQL database your server is using (MySQL, PostgreSQL, etc.)
Host/Address
This is the external IP address or domain address to your SQL database.
Note: This IP will never be localhost or 127.0.0.1. This must be the external IP or domain to reach your database. Learn more about creating an external SQL connection.
Port
This is the port your database is accessible from. Typically, the default port for MySQL is 3306.
Database
This is the database or schema name that contains your community’s character, license and vehicle registration tables.
Username
This is the SQL account username.


Password
serverId
If using multiple servers in Sonoran CAD, specify the ID here.
primaryIdentifier
The identifier type your community uses in the CAD to enter their API IDs.
Valid values are: license, steam, or discord.
apiSendEnabled
When disabled, the integration will not send any API requests to SonoranCAD.
debugMode
When set to true, useful debugging information it outputted to the console.
Keep disabled in production due to console spam.
This can be toggled by entering sonoran debugmode in console.
updateBranch
Use this branch when checking for updates.
Keep master unless you know what you're doing.
statusLabels
Should match what you have set in your CAD's unit status code settings.
allowAutoUpdate
When enabled, the resource will update itself. When disabled, it will simply show an update notification every 2 hours.
autoUpdateUrl
Where to check for updated versions. Don't touch this unless you have a reason.
allowUpdateWithPlayers
When enabled, it will run the updates even with players on the server. The updater will stop/start all associated resources which could cause client crashes. When disabled, the resource "waits" until there are no players.
noUnitTimer
When set to true, the CAD will not check every minute for a current unit list. Should only be enabled for troubleshooting issues with the unit cache.
enableCanary
When enabled, allows the CAD to update to beta (aka canary) releases.
enablePushEventForwarding
Enables push event forwarding to the specific URL defined in the next option. NOTE: DO NOT ENABLE IF YOU DO NOT KNOW WHAT YOU ARE DOING (Used for custom development only!)
pushEventForwardUrl
Web server URL to forward push events to. NOTE: DO NOT ENABLE IF YOU DO NOT KNOW WHAT YOU ARE DOING (Used for custom development only!)
forceSetApiId
When enabled, the tablet resource will show an alert message stating they must set their API ID.
disableOverride
By default, the framework will try and automatically correct your server's IP, port, and outgoing IP address if it detects something different.
Set this to true to disable this functionality.



Learn how to create custom record and report types for your community!
Custom record and reports are limited based upon your subscription version. For more information, please view our pricing page.
Sonoran CAD allows your community to create custom records and incident reports for police, fire, and EMS services. This tutorial will cover the basics of creating a new custom report or record and general usage of the system.
View our on creating custom reports and records.
Navigate to Admin > Customization > Custom Records
From the "New Record Type" dropdown, select the desired record type. Records follow the standard record editing and lookup system, and require a civilian or vehicle field to be searched. Reports can be searched in the unit's report center via number or identifier.
Add your desired custom and premade sections, edit fields, and more!
If your section is a custom character or vehicle field, you can toggle on the search button. This allows the section to be filled via when creating a new one. .
The enable duplicate button allows users to click and create a new copy of the section while filing the record.
Be sure to set the record name, and press SAVE
In the police, dispatch, fire, or EMS page you can now or for the new record type.
In the police, dispatch, fire, or EMS page, select "REPORTS" in the top action menu bar From here, you can create a new report, search existing reports, and view reports requiring supervisor actions.
Select "New Report" and the desired custom report type from the dropdown button From there, you can fill out the fields and add the record.
The supervisor panel shows all reports that have a blank field that requires supervisor permissions. If you do not have the supervisor panel enabled, you will need to have the .
Many communities decide to enable a custom field for preview after many records of that type have already been created.
Ex: Adding a previewed field to show the license "Type"
Communities can process a manual updating of historical records in the custom records menu.
Sonoran CAD will search for all records of this type and attempt to automatically update any historical records with the latest preview field preferences.
Because Sonoran CAD records are entirely customizable, changing the field UID (unique ID) from one revision to the next will result in a failure to match and update the preview field.
Database sync records do not have the option to re-sync, as they will always be up-to-date.
A re-sync is only available once per 10 minutes.
Custom records allow the addition of a character and vehicle search button in sections. Clicking these allows the user to search and import a vehicle or character into the record section.
Character and vehicle searches will not fill out fields in your record if the record field UIDs are incorrect.
In order for these searches to properly place the vehicle and civilian record in your custom record fields, specific field uid values must match.
The default Civilian record has the following field UIDs:
first last mi dob age sex aka zip occupation height weight skin hair eyes
When creating your custom record section with civilian search imports, those field UIDs will also need to match. The image below shows a custom record with the civilian search section toggled with the matching field UIDs.
The default Vehicle Registration record has the following field UIDs
type plate make model color year
When creating your custom record section with vehicle search imports, those field UIDs will also need to match. The image below shows a custom record with the vehicle search section toggled with the matching field UIDs.
You may encounter this error whilst attempting to save a custom record template.
"Preview Fields" are what show up when you run a record lookup (first, last, age, plate, etc.). The image below shows an example of "preview fields" on a vehicle registration record.
We require at least one field to be enabled for preview, as running a lookup with no preview fields would return a blank list of records.
To designate a field as a "preview field", simple toggle the magnifying glass icon in the custom record editor, as shown below.
Our smart signs integration resource allows you to update roadway signs in-game directly from the CAD!
This resource utilizes API endpoints that require the Pro version of Sonoran CAD or higher. For more information, view our pricing page.
Looking for VPS, web, or dedicated hosting? Check out our official !
If you have the original London Studios Smart Signs resource please remove and/or disable it from running. Our resource completely replicates the functionality of the original resource and they will conflict if both are running at the same time.
from our store.
This resource is managed through Tebex and will require you to login with FiveM. Be sure to login using the account that has the keymaster license for your server.
Once "purchased" you can .
We suggest installing the smartsigns_sonoran and smartsigns_sononran_helper folders within the [sonorancad] folder your integration framework is installed in. The final result would look like the image below...
In your server.cfg add the following new line after/below your ensure sonorancad line:
Rename config_RENAMEME.lua to config.lua.
In the config.lua file, you can enable options depending on your framework you are using or permissions you would like to integrate with.
The smart signs resource also has support with ESX, VRP, Discord logging, ace permissions, and more. from London Studios for the most up to date information.
Rename sv_discordConfig_RENAMEME.lua to sv_discordConfig.lua .
In the sv_discordConfig.lua file, you can specify the discord webhook URL you would like log messages sent to from Smart Signs. Additional settings and to enable webhook logging is found in the config.lua file you renamed in the previous
In the Admin panel, navigate to Advanced > In-Game Integration > Push Events and Live Map
Ensure your game server's IP and game port are set. The CAD will use this to push sign updates to your server.
Error: Server ID: 123 has IP set to: 1.2.3.4 -> your IP: '2.3.4.5'
Some hosting providers may have your game server sending traffic out from a different IP address than is used to connect to your game server. If this is the case, toggle the Differing Outbound IP checkbox for this server and fill in the Outbound IP field.
This script works by approaching a sign. When a player approaches a sign and are in the range of the control panel, they are able to edit the text of the sign if they meet the required permission checks. The resource has been optimized so that the signs will load and unload for players based on how close they are to each sign which is perfect for larger servers as it means that server resources will not be used unnecessarily.
The street sign panel can be found on both the Dispatch and DMV pages. Users will need the Modify Street Signs permissions in order to update them.
Here, you can easily search to filter sign labels. Sign text can also be easily duplicated from one sign to another.
You can also modify smart signs right from the!
Users will need both the Modify Street Signs and the Self Dispatch permissions in order to view and edit signs from the live map.
Signs – This is the main element of the resource, allowing you to walk up to a sign and change the text from an in-game control panel at the bottom of the sign. This can be used to open a world of roleplay opportunities. Word Denylist – You are able to set the resource up so that users cannot use specific words on a sign. Discord Logs – You can choose to send logs to your Discord server via a webhook each time a player sets the text on a sign. Custom Model – This resource includes high-quality letters and a custom sign model created by Beaver Mods. This will ultimately enhance realism. Highly Configurable – This resource is highly configurable, allowing you to setup each sign separately. You can adjust the location of each sign, all messages and even add extra characters from other languages. Permission Checks – You can easily enable permission checks in the configuration file for ACE permissions, framework jobs/groups or SonoranCAD active unit checking.
We understand that it may be confusing to use for some of our users. If you need support please feel free to open a ticket in the official London Studios Discord.
You can easily open the config.lua and configure the script to your liking in either notepad, notepad ++ or using Visual Studio Code.
The config examples below are not the full configuration file and further explanation comments of what each setting does can be found in the config.lua file.
The first section is called main, allowing you to set the following:
To change the activation key (adjustButton), replace it with your desired key code from .
You can see from the above config just how configurable the resource is, allowing you to set many features such as the load in the distance and access points to edit the text of the signs, the different denied words and the animations played while the player is typing.
Secondly, the instructionalText section allows you to convert the access message to another language.
We’ve made it simpler than ever to integrate permissions into the resource. This can be Ace Permissions, VRP or even ESX Integration (built-in).
This means that you can restrict certain players, permissions or even jobs/groups from setting the message on a sign.
In the config.lua file, you can easily enable a permission check to allow "active units" in the CAD to change smartsigns in game.
Simply ensure that useUnitPermission is set to true to enable this check
In the config.lua file, you can easily enable ace permissions and set the required permission.
You could then add this to certain players in the server.cfg or even groups as part of a server framework.
For more help on that, see some .
In the config.lua file, you can easily enable vRP Integration including both vRP.hasPermission checks and vRP.hasGroup checks. This can allow you to restrict it to a police job for example, or highways maintenance job, if that exists on your server.
Simply changed enabled to true to enable vRP integration. This will then generate the necessary vRP Proxy on the server, enabling global vRP functions such as GetUserId.
In the checkGroup = {} section, you can set it up to check if the user has a required group. In the groups box, you can enter all the groups you would like to have permission, such as adding both police and administrators, as they may need to access them.
In the checkPermission = {} section, you can do the same as a group, but for a permission instead. As you use the vRP framework you should be familiar with permissions and how to issue them.
You should check your vRP groups.lua file to view your groups and the permissions for each group.
In the config.lua file, you can easily enable ESX Integration using a job check.
Simply change enabled to true to enable ESX integration. This will then generate the necessary ESX Shared Object on the server, enabling you to use ESX functions.
In the checkJob = {} section, you can set it up to check if the user has a required job. For example, by keeping it as “police”, it will only work if the user has the police job. Alternatively, you may choose to add more such as “admin”.
You should check your ESX jobs database table to be familiar with what jobs are configured on your server.
In the config.lua file, you can easily enable QB Core Integration using a job or permission check.
Simply change enabled to true to enable the QB Core integration.
In the checkJob = {} section, you can set it up to check if the user has a required job. For example, by keeping it as “police”, it will only work if the user has the police job. Alternatively, you may choose to add more such as “admin”.
In the checkPermission = {} section, you can do the same as a job, but for a permission instead.
Overall, we think we’ve made it easy for you to add permission checks into the resource. If you need additional help setting it up, our support team is here to help. You can .
All sign locations and texts are now visible in the locations.json file, a dynamic file that will update every time players are on your server.
This means that any text set by players on signs will also be saved each time your server is restarted.
To make it easier to set signs up we have added a /createsmartsign command which will only work while developerMode is set to true in config.lua. You can select left or right on the command depending on what side you want the sign to be.
This command will then spawn a sign prop that can be repositioned with the following controls:
R -- rotates the sign Right Mouse Button -- Exits Spooner Menu Left Mouse Button -- Allows you to move the sign as needed ENTER -- finish placement
Once you press ENTER the new sign location will automatically be added to the locations.json file. You will need to restart your server to see the sign after setting it up.
With the release of v.1.5.1 we have made the decision to not push an auto-update to users using v.1.4.1 or older. This is due to the change in configuration of sign locations and major refactoring of systems that would make automatically updating your config challenging. To update follow the steps below:
Move your old smartsigns_sonoran folder to a safe location to reference your old config for any settings you would like to migrate over.
Download the new version from your keymaster account, you should have "10870 - SmartSigns" (v1.4.1) and the new "339435 - Sonoran Store - Smart Signs (Sonoran CAD Edition)" asset in keymaster. Please download the newer one only as the old one will not receive updates going further.
Follow the steps to install the updated resource. When configuring your settings refer back to your previous config file you have moved out of your server resources folder.
[
{
"dbValue": "0",
"friendlyValue": "Brown"
},
{
"dbValue": "1",
"friendlyValue": "Green"
},
{
"dbValue": "2",
"friendlyValue": "Blue"
}
]The text area field allows you to create a large text area.
The checkboxes type allows you to create multiple checkboxes.
The random field allows you to randomly generate text. When a new record is created, this field will automatically generate the text based on the mask format. If the field is not disabled (readOnly) users can click the randomize button to continually generate new text.
The date field allows you to specify a date field. You can also specify the formatting in the mask column.
When readOnly is selected, this field will auto-fill the current date for new records.
The time field allows you to specify a time field.
The image field allows you to specify an image to be displayed.
The linked records field allows you to link and cross-reference other records and reports to this record.
Custom flag options can be added to every record template. When checked, these flags will show up as alerts on any lookup. Similar to a checkboxes section, you will need to expand the section and add options.
Labels can display static text, along with color attributes.
The address dropdown will auto-filter street address names that have been imported via CSV.
Unit Information
The UNIT_NUMBER, UNIT_NAME, UNIT_RANK, UNIT_AGENCY, UNIT_DEPARTMENT, UNIT_SUBDIVISION, UNIT_AGENCY_LOCATION, UNIT_AGENCY_ZIP, and UNIT_LOCATION field types will all automatically insert the unit's information when they create a new record.
This will disable the field for all non-supervisor unit identifiers. Your unit's supervisor status can be set in the unit identifier editor.
Required fields will require the unit to enter something into the field before the record can be submitted.
Unique fields enforce that no duplicate values for this field are stored in the database. These values are enforced for the specific record template only.
Unique fields can only be on non-DB Sync records and in custom sections.
Read Only
Read only fields prevent the user from entering new or modified text. This is used for auto-filled fields like unit information when a new record is created.
Note: The date and time fields will auto-fill with the current date/time if readOnly is toggled, based on the community's timezone.
X: Alphanumeric
Specifying ### allows the user to only enter 3 numbers in the field.
Specifying (###) ### - #### formats the user's input into a phone number.
Field Mapping ID from before. The box will light up green when a valid ID is entered.Checkbox or Select fields as the dependency parent will allow you to select what values will display this section or field.
Text fields as the dependency parent will allow you to enter what text values will display this section or field.
There are multiple options for dependency types.
Equal
Dependency will display if the entered content are an exact match to the specified value(s)
Not Equal
Dependency will display if the entered content is NOT equal to the specified value(s)
Contains
Dependency will display if the entered content contains any of the specified values(s)
emergencyContactemergencyRelationshipemergencyContactNumberresidence















Display your identifier information, attached call information, and more on your gaming stream!
ensure smartsigns_sonoran
# Permissions for Sonoran Smartsigns Auto-updater (REQUIRED)
add_ace resource.smartsigns_sonoran command allow
add_ace resource.smartsigns_sonoran_helper command allowconfig = {
configVersion = 1.5, -- Do not change, used to see if config file is requiring updates.
auto_update = true, -- Enable automatic updates from Sonoran Software for Smart Signs.
main = {
-- Here you are able to define how far the sign will load in from.
-- If the player has loaded in the sign and goes out of this range the sign will unload on their client.
loadInDistance = 300.0,
-- Here you are able to define how close the player must be to the signs keypad in order to edit the text.
-- 3.0 is the ideal value for "arms reach"
accessPointDistance = 3.0,
-- Here is the prop for the sign.
-- You can change this if you wish but we recommend leaving this unless you are highly experienced.
signModelName = {
left = `prop_led_trafficsign_left`,
right = `prop_led_trafficsign_right`,
},
-- This is the text that appears when you are changing the message. You could use this to translate to another language.
instructionalText = "Press [E] to adjust sign",
-- This will bring every sign back to default
resetSignCommand = "resetsmartsigns",
resetSignCommandEnabled = true,
resetSignSuggestion = "Reset all smart signs around the map!",
changeSignCommand = "editsmartsigns", -- To edit signs across the map
changeSignSuggestion = "Edit all smart signs around the map!",
changeSignCommandEnabled = true,
-- Here you can change which button must be pressed to change the text on the sign
-- A list of controls can be found on the official FiveM documentation @ https://docs.fivem.net/docs/game-references/controls/
adjustButton = {0, 103}, -- {control group, control}
-- This will change whether users can use /newsmartsign to automatically add signs into the locations.json file
-- This will also enable debug printing on both the client and the server. This should be set to false most of the time.
developerMode = false,
-- Blips for all signs are automatically enabled on developer mode. This allows you to keep blips while disabling developer mode
enableBlips = true,
shortRangeBlips = true,
-- Here you can define a list of words which cannot be placed on signs.
-- These are automatically removed and replaced with blank text
bannedWords = {
"fuck",
"shit",
},
-- This setting will toggle automatic centering of text
-- Please note that centering may not be perfect due to the even amount of characters accepted by the sign
centerText = false,
-- This setting will utilize Sonoran CAD's Integration in order to determine if users are an active unit
-- in the cad before allowing them to change smartsigns in game. Active units are any units with the CAD open
-- to police, ems, fire or dispatch panels.
useUnitPermission = false,
-- Enable this to use Ace Permissions.
-- This requires you to give groups or individual users the permission set below
-- If you want to add further Ace Permission integration, edit sv_smartsigns.lua
acePermissions = {
enabled = false,
permission = "update.sign"
},
-- We've added vRP integration. All you need to do is enable it below
-- Then, configure if you wish to check for groups or permissions, or even both
-- If you want to add further vRP integration, edit sv_smartsigns.lua
vRP = {
enabled = false,
checkGroup = {
enabled = true, -- Enable this to use vRP group check
groups = {"police", "emergency", "admin"}, -- A user can have any of the following groups, meaning you can add different jobs
},
checkPermission = {
enabled = false, -- Enable this to use vRP permission check
permissions = {"police.menu", "player.kick"} -- A user can have any of the following permissions, allowing you to add multiple
},
},
-- We've added ESX integration. All you need to do is enable it below
-- Then, configure which jobs you want to check for
-- If you want to add further ESX integration, edit sv_smartsigns.lua
ESX = {
enabled = false,
checkJob = {
enabled = true, -- Enable this to use ESX job check
jobs = {"police"} -- A user can have any of the following jobs, allowing you to add multiple
}
},
-- We've added QBCore integration. All you need to do is enable it below
QBCore = {
enabled = false,
checkJob = {
enabled = false, -- Enable this to use QBCore job check
jobs = {"police"}, -- A user can have any of the following jobs, meaning you can add different jobs
},
checkPermission = {
enabled = false, -- Enable this to use QBCore permission check
permissions = {"god"}, -- A user can have any of the following permissions, allowing you to add multiple
},
},
-- Here is the animations which are played when entering text for a sign.
-- It is unlikely that this will need to be changed but you can disable the animation if you wish to do so.
-- Find the animation list here: https://alexguirre.github.io/animations-list/
animation = {
enabled = true,
dict = "anim@heists@prison_heiststation@cop_reactions", -- This is the animation dictionary (these show in bold on the animation list)
name = "cop_b_idle", -- This is the animation name (these show below bold dictionaries on the animation list)
},
-- This allows you to enable Discord logging for the signs
-- You must add your webhook in sv_discordConfig.lua
logging = {
enabled = false,
displayName = "Smart Signs",
colour = 31487,
title = "**New Sign Log**",
icon = "https://i.imgur.com/o7oAPb8.png",
footerIcon = "https://i.imgur.com/n3n7JNW.png",
dateFormat = "%d-%m-%Y %H:%M:%S", -- Day-Month-Year Hour-Minute-Second
-- This section will work regardless of logging being enabled
-- Make sure to set this to false in order to disable all logging
bannedWordLogs = {
enabled = true,
colour = 16711680,
}
},
soundEffect = {
enabled = true,
name = "CONFIRM_BEEP",
dict = "HUD_MINI_GAME_SOUNDSET",
},
-- This allows you to move the position of every sign to a certain offSet, such as 1m down, if you feel they are all too high for example
signOffset = {0.0, 0.0, 0.0}, -- x, y, z
},useUnitPermission = true,acePermissions = {
enable = false,
permission = “update.sign”
},vRP = {
enabled = false,
checkGroup = {
enabled = true, — Enable this to use vRP group check
groups = {“police”, “emergency”, “admin”}, — A user can have any of the following groups, meaning you can add different jobs
},
checkPermission = {
enabled = false, — Enable this to use vRP permission check
permissions = {“police.menu”, “player.kick”} — A user can have any of the following permissions, allowing you to add multiple
},
}ESX = {
enabled = false,
checkJob = {
enabled = true, — Enable this to use ESX job check
jobs = {“police”} — A user can have any of the following jobs, allowing you to add multiple
}
},QBCore = {
enabled = false,
checkJob = {
enabled = false, -- Enable this to use QBCore job check
jobs = {"police"}, -- A user can have any of the following jobs, meaning you can add different jobs
},
checkPermission = {
enabled = false, -- Enable this to use QBCore permission check
permissions = {"god"}, -- A user can have any of the following permissions, allowing you to add multiple
},
},
The free version of the overlay does not include the customizable bodycam asset. However, you can still create custom overlay text with the free version!
Learn more about the full version of Sonoran CAD's stream overlay!
The bodycam creates local text files and hosts a local webserver. This requires the desktop application to run.
The stream overlay also includes a customizable version of the popular XION Chase Cam asset.
This allows you to customize a bodycam overlay on your stream, with your real-time unit and call information.
First, ensure you are using the desktop version of Sonoran CAD. The application has to generate physical files, and host a local webserver to work. This can not be done in a browser.
In the stream overlay, open the txt file directory viewer and select a folder for the text files and bodycam webpage to be generated:
In the livestream overlay config section, expand the Bodycam section.
Here, you can enable and customize the data placement and keys just as before with the customizable text files.
Expand the Unit Updates or Call Updates Section
Toggle ON the txt file
COPY the field key
PASTE the field key into the bodycam section
SAVE the configuration once complete
You can also optionally specify a different port for the bodycam webpage to run on (9990 is the default).
In OBS, add a new "Browser" source and paste the URL listed in the bodycam section.
By default, this will be http://localhost:9990
Paste the URL into the browser source and hit OK.
You can now customize the size and placement of this browser window in OBS as you normally would.
Due to the nature of most smart bulb manufacturers, our smart lighting integration is at the mercy of their API support. We can not guarantee that these manufacturers won't change or remove backdoor support to these bulbs in the future.
Sonoran CAD allows you to configure in-game events to smart lighting in your own home!
When you toggle your police lights in-game, your room can flash with custom lighting patterns to further immerse and simulate real world lighting.
The smart lighting integration is not included with the free version of the Stream Overlay. Learn more about the full version of Sonoran CAD's stream overlay. The smart lighting integration creates local text files and hosts a local webserver. This requires the desktop application to run.
At this time, Sonoran CAD currently supports the following smart bulb types:
Many of our development team members personally use and recommend these bulbs. Due to the design, these tend to provide the fastest response type with more complex lighting patterns. A 4 pack typically costs ~$40 ($10/bulb).
Philips Hue is significantly more expensive, but is typically the most widely known option. This option will also require the purchase of a Hue bridge/hub. Due to the design, these tend to have a ~10ms+ delay when setting the color of multiple bulbs at a time.
Therefore, we recommend keeping the delay between frames above 500ms when using Philips Hue bulbs.
Govee light bulbs are supported via Bluetooth and WiFi.
Bluetooth bulbs are supported, but can have additional time when starting the initial connection. Bluetooth connections can also experience intermittent connection problems. Govee's WiFi bulbs are currently ran through the official API, resulting in rate limitations of 60 calls per minute.
Therefore, we recommend keeping the delay between lighting frames above 1,000ms when using Govee wifi bulbs.
The smart lighting section has multiple Scenes
Restore: Set when you are no longer flashing emergency lights, turn signals, etc.
Emergency Lights: While you are in an emergency vehicle with the lights on
Panic: While your panic status is toggled
Available: When your unit status is set to available
Unavailable: When your unit status is set to unavailable
Busy: When your unit status is set to busy
Enroute: When your unit status is set to enroute
On Scene: When your unit status is set to on scene
Left Turn Signal: While your left hand turn signal is on
Right Turn Signal: While your right hand turn signal is on
Hazard Lights: While your hazard lights are on
Expand the Scene > Add Bulb > Search for Bulbs > Select Wyze or Philips Hue
Username: Email address used to login to your Wyze account
Password: Password used to login to your Wyze account
Key ID: The "Key ID" in the Wyze API key generator
API Key: The "API Key" in the
Your Philips Hue bridge should be automatically discovered by pressing the Scan button in Sonoran CAD.
If you are seeing the following error:
Error: Unable to find a Hue bridge on the local network.
You may need to manually enter the bridge's IP address. This is most easily found using the Philips Hue mobile app.
Select Settings
Network Settings
Toggle DHCP Off
Copy the IP address to Sonoran CAD
Toggle DHCP On
Scan for the bridge in Sonoran CAD
Govee WiFi bulbs are handled via Govee's official API. Note that this does include a rate limit of 60 calls/minute.
1. Request an API Key
Using the Govee mobile app navigate to Account > Settings > About Us > Apply for API Key
2. Retrieve your API Key and Search
Within a few minutes, Govee should email your account API credentials to use. Paste these into Sonoran CAD and search for your Govee WiFi lights.
Govee Bulb models only supporting bluetooth can be controlled by Sonoran CAD, as long as your PC supports bluetooth connections. Windows limits this to no more than 5 active bluetooth connections at one time.
1. Scan for Bluetooth devices
Sonoran CAD will scan for all locally active Bluetooth devices. Govee bulbs will typically be found with a name format: WORD_MODELNUMBER_XXXX.
If your bulb is not discoverable, turn the bulb's power off entirely for ~5 seconds then turn it back on. This should place your bulb into discovery mode.
2. Add the Bulb
Click on the Bluetooth bulb to add it to your scene, and continue on to building your lighting sequences.
Bluetooth bulbs will have their status listed on the left side. When you click the Test button, it may take up to 60 seconds for the connection to complete.
You can add the desired bulb to your Scene. Each scene is made up of multiple frames.
The example below shows a very simple sequence of two lights switching back and forth between red and blue, with a delay of 500ms between each frame. You can duplicate and create advanced chase sequences, flashes, etc. with several bulbs at a time.
We recommend keeping the delays no shorter than:
250ms for Wyze Color Bulbs
500ms for Philips Hue Bulbs
You can press the Test Scene button to test the scene with your smart bulbs. Press the Test Scene button in the Restore scene section to go back to your normal lighting.
For in-game use, your lights, turn signals, and hazards will automatically run as long as your community has the Sonoran CAD integration framework installed. This utilizes a local webserver running from your desktop app.
If you have modified your Bodycam port from the default 9990, you will need to update this port in-game as well. Use the /setlightport <some port here> command in-game to change your port from 9990 to something else.
Additionally, ensure you have set your file directory in the credentials section of the stream overlay.
Sonoran CAD's stream overlay also comes with a configurable Twitch bot. This bot will send out chat updates when unit or call data is updated.
The Twitch bot is not included with the free version of the Stream Overlay. Learn more about the full version of Sonoran CAD's stream overlay.
Create a new Twitch OAuth token by going to https://twitchapps.com/tmi/
Using the overlay in OBS, select the Twitch Bot button in the taskbar.
Paste in your Twitch channel name and OAuth key.
Once set, you can press Test to display a test message in your Twitch chat.
Every piece of unit and call data can be toggled on or off individually.
It is highly recommended to only toggle on data updates that will not be frequently spammed. Toggling too many data fields and updating data too quickly may result in Twitch rate limiting your bot.
Once you have configured your Twitch Bot's credentials and data fields, press Save.
Now, whenever one of those data fields is updated, your Twitch bot will send a chat message.
If you're having issues seeing the Twitch bot messages, view the Twitch Logs panel in the stream overlay.
This will contain valuable information on the twitch bot's connection, rate limiting, and other errors.
If you have too many data fields toggled, and are sending Twitch updates too quickly you may experience rate limiting.
The overlay is immensely customizable, allowing you to customize every piece of data displayed.
The overlay configuration modal can be opened by navigating to Start Menu > System > Stream Overlay. Or, by searching in the start menu.
While the Twitch bot can run in a browser instance of Sonoran CAD, the desktop application is required, to generate unit/call data txt files.
In the stream overlay, open the txt file directory viewer and select a folder for the text files to be generated:
The free version of the overlay is limited to three (3) data keys. Learn more about the full version of Sonoran CAD's stream overlay!
In the Configuration tab, toggle on the desired data fields for your unit and dispatch call information.
For every field toggled, a text file will be generated to be viewed in OBS. However, we recommend creating custom text files to combine multiple data fields in a single text file.
These can be easily copied from the UI, by pressing the Copy button next to the toggled field and pasting into the custom file's key textbox.
Key
Description
{unit_status}
Unit Status
{unit_location}
Unit Location
{unit_aop}
Unit AOP
{unit_number}
Unit Number
{unit_name}
Unit Name
Don't forget to save your configuration!
In OBS, add a new text source:
In the text source properties, select Read from File and select one of your generated data key files from the location specified earlier.
You can now place the text field anywhere in your OBS stream layout.
You can also customize the fonts, change the background and more!
The free version of the livestream overlay allows anyone to test out the basic functionality. The free version does not allow use of the Twitch bot, bodycam, or smart lighting integration and is locked to a maximum of three custom "data keys".
The full, individual license for Sonoran CAD's livestreaming tools is available for $7.99/mo.
Or, include the livestreaming tools for your entire community with Sonoran One.
Users can purchase a license to the full version in their billing center:

























{unit_agency}
Unit Agency
{unit_department}
Unit Department
{unit_subdivision}
Unit Subdivision
{unit_rank}
Unit Rank
{unit_group}
Unit Group
{unit_panic}
Unit Panic Status
{call_id}
Dispatch Call ID
{call_origin}
Dispatch Call Origin
{call_status}
Dispatch Call Status
{call_priority}
Dispatch Call Priority
{call_block}
Dispatch Call Block
{call_address}
Dispatch Call Address
{call_postal}
Dispatch Call Postal
{call_title}
Dispatch Call Title
{call_code}
Dispatch Call 10-Code
{call_description}
Dispatch Call Description





























































