View our development team's upcoming roadmap and historical changelog.
Developer Documentation
Learn more about our developer endpoints, exports, and events!
Play Tone
The play_tone push event is sent to the game server when a dispatcher is sending a tone to one or more in-game speakers.
Play Tone
The play_tone push event is sent to the game server when a dispatcher is sending a tone to one or more in-game speakers.
These in-game speaker IDs are set from the set-server-speakers API endpoint.
{
"id": "", // Community ID
"key": "", // Community API Key (Use to authenticate)
"type": "play_tone",
"payload": {
// Tone audio file URLs in the order of "stack"
"src": [
"https://s3.sonoransoftware.com/radio/system/tones/signal_100.mp3",
],
"ids": [
"STATION_123",
"STATION_456"
]
}
}
Installing the In-Game Resource
Learn how to download and install the in-game resource.
A. One-Click Installation (RocketNode)
We've partnered with Rocket Node to bring you one-click Sonoran Radio installation for FiveM — making it easier than ever to host your community and connect with Sonoran Radio.
Download a pre-configured version of the in-game resource from the panel. This download will already have your community ID and API key in the config.lua file.
Navigate to Customization > FiveM Integration > Download Resource
2. Extract the ZIP File
Extract the .zip file into your resources directory. Place the sonoranradio and sonoranradio_updatehelper into a folder labeled [sonoranradio]
3. Update Your Server Config
In your server.cfg file, add the following:
Configuration Values
Configuration Options
Parameter
Default
Description
ACE Permissions (Command Restrictions)
ACE permissions allow communities to restrict access to actions like using the radio, adding and removing towers, repairing towers, and more.
Updates
The Sonoran Radio in-game resource will automatically update with the latest features, fixes, and changes upon server restart!
Next Steps
Learn how to customize and use the dispatch and in-game portals:
Transfer or Delete a Community
View more information on transferring or removing your Sonoran Radio community.
Transferring a Community
1. Select the New Owner
To transfer the community ownership to another user, navigate to the Administration > Transfer Community
In the popup, select the user you wish to transfer the community to and enter the community name in the confirmation box.
2. Email Confirmation
After selecting the new owner, a confirmation email will be sent. Check your inbox to complete the transfer.
Delete Community
To permanently delete a Sonoran Radio community, navigate to Administration > Delete Community
Note: Only the community owner can delete the community.
Radio Scanners
Discretely listen to your community's radio
Sonoran Radio - In-Game Scanner
Due to bandwidth usage, this feature is automatically enabled with the Pro version only!
Video Example
Using the Radio Scanner
Enabling the Scanner
Enable the config.chatter option in your .
Add the sonoranradio.scanner .
Opening in Standalone
You can use /radio scanner command to open a personal scanner. This requires the sonoranradio.scanner .
Opening in a Framework Server (QBCore, Qbox, etc.)
With the radio scanner item in their inventory, users can double click to open the .
Item Drop
If the scanner item is dropped on the floor, you can open its scanner menu by being near it and pressing E.
If the scanner is powered, transmissions will be heard by nearby users.
Radio Scanner Menu
Press the power button and the scanner will auto-connect to the default channel. Use the knob to scroll through all available channels.
By default, only public radio channels will be available. For , you can .
Permanent Scanners
Permanent Scanners are scanners that are available to everybody at configurable locations across the map. For example, you can add a scanner in the Sandy Shores Sheriff Station that will always listen the County Patrol Ops channel.
Configuring Permanent Scanners
You can use /radiomenu to easily add, move, or delete persistent scanners
When creating a scanner, you have the ability to choose between many different scanner-like models to best fit your needs
You can also modify the scanners.json JSON config file for more customization. By default, scanners connect to the default channel, but you can customize the channel ID it uses.
Example Scanner JSON
Finding Channel IDs
The channel IDs can be found in the or .
Developers
Ace Permissions
If you have enabled Config.acePermsForScanners, you must add permissions in your server.cfgfor the scanner to work.
The channel IDs can be found in the or .
Giving the Scanner Item (QBCore)
Sonoran Radio does not provide a way to get the scanner item independently. You can give the item with any method, but here's an example chat command:
Please note that if you changed Config.ScannerItem.name, it will not work with sonoran_radio_scanner
In-Game Repeaters
Configure and customize destructible radio towers in-game to impact radio performance.
Available Repeater Types
Server Rack
Server rack style repeaters are found by default inside of police stations and hospitals. These repeaters offer the most interactive destruction experience.
Press E on the door to open it.
Each server inside can be individually destroyed and will fall separately out of the rack. These can be configured with 1-5 servers in each. As more of these servers are destroyed, the repeater signal will diminish.
Radio Tower
Tower style repeaters are found by default on hills, mountains, and large rooftops.
Players can climb the ladder to reach the top.
There are four dishes inside that each account for 25% of the health. As more of these dishes are destroyed, the repeater signal will diminish.
Cellular Antenna
Cellular antenna style repeaters are found by default on the side of high-rises and other buildings.
Destroying this antenna will disable it's repeater range.
Custom Repeaters
Additional integrations like the , , and offer further customization.
Configuration
Tower Placement
Default Positions
Game Menu Configuration
To add, edit, or remove a repeater, open the configuration menu by typing /radioMenu
Access to this command requires the sonoranradio.towers .
Manual Configuration
Alternatively, you can edit the individual towers.json file in the sonoranradio resource.
towers.json
Using the In-Game Towers
Destroying a Tower
When tower destruction is enabled, users can use any form of weapon to damage the repeaters.
Once damaged and destroyed, the tower no longer provides radio coverage within that range.
Repairing a Tower
Individual Towers
Players can walk up to a destroyed repeater and press G to being the repair process.
The repair time can be configured in the config.lua's towerRepairTimer.
You can also restrict permissions to repairing a tower with by setting acePermsForTowerRepair to true in the config.lua.
All Towers
The configuration menu can be used to repair all repeaters on the map at once.
Viewing Tower Coverage
Via In-Game Map
EnablingConfig.debug in the config.lua file will display a radius around each tower, where the edge represents 50% radio quality.
Via Sonoran CAD Live Map
View Sonoran Radio repeater signal strength and health on the integrated CAD live map.
Or, view dispatch call information on the in-game radio!
Viewing Signal Strength
Coming Soon!
Degrade Signals in Tunnels
Sonoran Radio also allows you to configure tunnels and other areas where signal will be degraded!
Additional Integrations
Mobile Command Center Repeater
The also offers a built-in radio repeater to improve reception on a scene.
Raise the radio antenna by running the /mccradio command.
Hacking Repeaters - Power Grid Integration
Communities can add additional integration support, enabling users to hack a radio repeater's power source instead of destroying it.
Mobile (Vehicle) Repeaters
To extend coverage range, communities can also customize what vehicles contain a radio repeater.
In the config.lua, you can configure vehucle types and the range of a given vehicle's repeater.
Example Config Structure:
In-game, you can press G to toggle the mobile repeater on a configured vehicle.
If a vehicle is destroyed, it will no longer function as a radio repeater.
Background Audio Injection
Background audio injection blends in-game sounds—like sirens, helicopter rotors, boat engines, and gunshots—into your microphone output.
Background audio injection blends in-game sounds—like sirens, helicopter rotors, boat engines, and gunshots—into your microphone output.
If you're responding with sirens active, others on the radio will hear them in the background of your voice transmissions. The sound effect volume level is determined by the distance to the source.
Enabling Background Audio Injection
To enable this feature:
Ensure your community is on the Pro version of Sonoran Radio.
Set enableBackgroundAudio to true in your file.
Customizing Background Audio Sounds
Background audio sounds can be customized in the event of a specific siren type, gunshot sound, etc.
Communities can override the sound effects with custom files in the admin .
Troubleshooting
Can't Hear Sirens
If sirens are not playing in the background of your microphone (when next to a vehicle with one on), follow these troubleshooting steps.
LVC Users (Luxart Vehicle Control)
Sonoran Radio integrates with Luxart Vehicle Control to determine when sirens are activated.
Ensure you have configured the Config.luxartResourceName configuration option to match the resource name of your installed Luxart Vehicle Control resource.
Ensure you are on the latest version of Luxart Vehicle Control, as older versions do not contain the developer events needed.
LVC (v3.2.9-Rev2+):
Native Fallback
For communities not using LVC, the radio defaults to native siren detection. However, it cannot distinguish between just police lights and lights with sirens. As a result, background siren audio will play whenever police lights are active.
Error Codes
Learn more about specific in-game error codes.
ERR 101: Unable to get a valid pushUrl
Sonoran Radio uses your CFX Nucleus Proxy URL to send push events from the radio to your game server. For example, this allows playing a tone on the radio to an in-game speaker.
In the event that we cannot obtain/verify your CFX Proxy URL, we try to use your server's public IP address as a backup for push events. However, sometimes this also does not work either for certain hosts.
If you receive ERR 101, then both of these did not work. You can try setting the Config.overridePushUrl to http://ip:port/sonoranradio/events where ip:port is the IP and port of your FiveM server (default port is 30120).
If this still does not resolve your issue, please contact your host provider as they are most likely blocking traffic to your server.
ERR 102: No push event URL set
Sonoran Radio uses your CFX Nucleus Proxy URL to send push events from the radio to your game server.
Check your server console for ERR 101. ERR 101 states an issue with sending this URL to Sonoran Radio.
If using a non-FiveM server but still utilizing push events, ensure the pushUrl property is sent with a full HTTP(s) address with the .
ERR 104: No framework detected
The Sonoran Radio FiveM resource is configured to enforceRadioItem which requires a framework with an inventory system. Currently we support the following frameworks: QBCore and QBox and support qb-inventory and ox_inventory. If you are utilizing a different inventory or framework, feel free to . If you do not utilize a framework, simply set Config.enforceRadioItemto false.
Stream Deck Plugin
Sonoran Radio's official Stream Deck plugin gives you faster, customizable control over channels, volume, presets, and more.
Introduction
Sonoran Radio's MacOS and Windows desktop applications offer direct integration with Stream Deck hardware. By installing our official Stream Deck plugin, users can change channels, toggle preset channel groups, change channel and system volumes, and more - faster than ever before.
Each action can be configured to control the desktop app (default) or .
For clients using the in-game radio in FiveM, simply toggle each action from Desktop to FiveM.
Sonoran Radio then acts as a local bridge between the Stream Deck, the desktop app, and the FiveM radio. The desktop app must be running, but does not have to have any radio community open or selected.
Stream Deck sends the action to Sonoran Radio Desktop on localhost
Sonoran Radio Desktop forwards the command to a localhost WebSocket
your FiveM client script listens to that socket and forwards the event into the radio iframe/NUI
the iframe/NUI sends radio state snapshots back through your FiveM client script to Sonoran Radio Desktop
This means the normal setup for users is:
keep Sonoran Radio Desktop running
switch the Stream Deck action target to FiveM
run a FiveM client script that connects to the desktop socket and forwards the documented messages
4. FiveM Developer Setup
If you are implementing the FiveM side yourself, use the documented developer contract here:
Capabilities
Keys
Channel Category Buttons
Channel actions allow you to do somethin
Next Group
Previous Group
Toggle Category Buttons
Push to Talk
Toggle AI Mode
Audio Category Buttons
Volume Up
Volume Down
Desktop Category Buttons
Connected Users Overlay
Focus Radio Overlay
Dials
Stream Deck hardware with dials have the following supported actions:
Dial Options
Cycle Groups (Prev/Next)
Cycle Channels (Prev/Next)
Dispatch AI
Speak to our AI dispatcher over the radio to manage CAD status, dispatch calls, run record lookups, and more.
This feature is in a public BETA state.
Services may be intermittent and unreliable. Some features may experience issues.
Dispatch AI is not yet approved for full, production use. Utilize dispatch AI at your own risk.
This feature requires both Sonoran CAD Pro and Sonoran Radio Pro.
Setup Video
Setup Documentation
1. Copy Sonoran CAD API Information
Copy Sonoran CAD API Information
Dispatch AI requires a Sonoran CAD community ID, API key, and server ID.
The community ID and API key are located in the Admin panel > Advanced > In-Game Integration > Web API.
The server ID can be found in the Admin panel > Customization > Servers. The default server ID is 1.
2. Create an Open AI API Key (BYOK)
Open AI API Key
Currently, dispatch AI runs on a bring-your-own-key (BYOK) system for AI usage billing. This allows communities to maintain granular control of their AI expenses with OpenAI as a third-party. This system is subject to change in the future.
In the current beta, dispatch AI relies on the following models:
gpt-realtime-mini
3. Link CAD In Radio
Link CAD In Radio
In the radio Customization panel > Info > Select a server (or create one) and click on the Sonoran CAD icon. This will open a popup modal to enter in your CAD's community ID, API key, and server ID. Additionally, paste in your AI API key from the previous step.
4. Prompt Customization
AI Prompt Phrases
The AI has a set of tools it can use to take action in the CAD and on the radio—such as running lookups, creating calls, or updating statuses.
Radio traffic varies by community. One agency might say, “show me out on traffic with a blue sedan,” while another says, “create a traffic stop call with a blue sedan.”
Prompt phrase customization lets you train the AI to map your agency’s specific radio language to the correct system actions, so it responds appropriately to local lingo.
Keep your phrases short and direct. Adding too many phrases can eventually overload the AI's context window.
Invoke the AI
Via Wake Work
When pressing your push-to-talk key, a local AI listens to your microphone feed for the customizable wake word. By default, this is Dispatch.
Users can customize their wake word by pressing the microphone button and speaking their custom wake word.
Communities can also .
Via Hotkey (Web and Desktop)
Web and desktop users can also set a . Pressing this keybind will enable the AI (same as the wake word) for your transmission.
FiveM: Via Hotkey
FiveM users can also set a manual keybind in the settings. Pressing this keybind will enable the AI (same as the wake word) for your transmission.
Enable/Disable the AI
Manually
The AI can be manually toggled on or off via the CAD link page.
Auto Disable w/Human Dispatcher
The AI can be automatically disabled whenever an active dispatcher is in the CAD.
When this feature is enabled, the AI will check for a dispatcher once per minute.
AI Commands & Features
CAD Functionality
CAD Status
The AI can update the status of you and other units to the stated, customizable status code.
Dispatch, A-10, mark my status as available.
&#xNAN;Dispatch, A-10, set B-11 and I to 10-8.
CAD Lookup
The AI agent can perform a name or plate lookup, send the results to your CAD, and notify you of brief details.
Dispatch, A-10, run a lookup on the plate ABC123.
&#xNAN;Dispatch, A-10, do a record check on first name John last name Doe.
CAD Dispatch Calls
Create Call
The AI can create a call and assign your unit. If your unit has a location, it will be automatically applied to the call unless otherwise specified. If a license plate is provided, it will automatically run a plate lookup and send the results to your CAD.
Dispatch, A-10, show me out on traffic with a blue four-door sedan. License plate ABC123.
Attach to Call
The AI can attach you and other units to an existing call by mentioning the call ID, location, postal, title, etc.
CAD Unit Groups
Group Units
The AI can add your unit (and others) to a new or existing group.
Dispatch, A-10, add me to group 'Ladder 12'.
&#xNAN;Dispatch, A-10, add myself and B-11 to group 'Ladder 12'.
Clear Unit Group
The AI can remove your unit (and others) from a group.
CAD Panic
Dispatch, A-10, toggle my panic status.
The AI agent will enable or disable your panic status.
FIveM: Emergency Call Readout
In the Radio Zones menu, you can create custom zones and assign radio channels to each. When a 911 call is generated in CAD, the AI automatically creates a new dispatch call, reads the call over the channels configured for that zone, and removes the 911 call.
FiveM: GPS Route to Postal
The AI can draw an in-game GPS route to a postal code on the map.
Raw Postal:
Dispatch, A-10, route me to postal 123.
&#xNAN;Dispatch, A-10, directions to postal 123.
Postal on a Dispatch Call
The AI can find an active dispatch call based on the ID, location, title, etc.
&#xNAN;
FiveM: GPS Route to Unit
The AI will route you to the coordinates of another active unit by providing their unit name, number, etc.
Dispatch, A-10, route me unit B-11.
&#xNAN;Dispatch, A-10, directions to unit J. Doe.
FiveM: Auto-Status on GPS Route + Arrival
When the AI routes a user to a specific or it will automatically set your status as en-route. Upon arrival, the AI will automatically mark your status as on-scene.
The radio resource's contains Config.autoOnSceneStatus with options to tweak the settings.
Radio Functionality
Coming soon!
Settings
AI Volume
The AI's reply volume can be changed in the settings menu.
Hear AI Replies
By default, users hear AI replies directed to anyone in their primary or scanned channel. The radio setting allows you to switch from hearing AI replies for all users to hearing only replies addressed to you.
Get Connected Users
This endpoint gets all connected users for a specific Sonoran Radio server.
Get Connected Users
GET/v2/servers/:communityId/connected-users
Rate limit:6 requests per minute
Returns every currently connected radio participant for the selected server.
Headers
Name
Value
URL Parameters
Name
Type
Description
Examples
Response
Successful requests return application/json.
Play Tone
Play one or more tones for a specific Sonoran Radio server.
Play Tone
POST/v2/servers/:communityId/tones/play
Rate limit:12 requests per minute
This endpoint has a small internal gateway buffer, but the published public limit is 12 requests per minute.
Plays one or more saved tone IDs or custom tone payloads to channels, groups, or in-game speaker targets.
Headers
Name
Value
Examples
Response
Successful requests return application/json.
Set Server IP
Set or update a server room IP and push URL for a specific Sonoran Radio server.
Set Server IP
POST/v2/servers/:communityId/server-ip
Rate limit:2 requests per minute
Adds or updates a room origin and push URL for the selected server.
# Give the group access to /radio scanner
add_ace group.admin sonoranradio.scanner allow
# Only public (non-private) channels are accessible
# Grant access to a private channel with the ID of 123
add_ace group.admin sonoranradio.channel.123 allow
Display tower ranges on the map and other console prints.
This can be toggled live with the .
allowUpdateWithPlayers
true
Allow the auto-updater to run while players are still in the server.
enableCanary
false
Allow the auto-updater to pull development branches for early testing.
allowAutoUpdate
true
Allow the auto-updater to run.
chatter
true
Allow civilians to hear radio chatter when one is nearby
talkSync
true
Talk in-game whenever you talk on the radio
If using , you will also need to disable their TalkSync feature in the settings.ini file.
emergencyCallCommand
911
Command suffix to start or stop an emergency call (i.e. '911' == /radio 911)
luxartResourceName
lvc
Resource name for Luxart Vehicle Control, .
keybinds
Default radio keybinds (these can be changed in GTA settings).
Use the Input Parameter from the .
towerRepairTimer
20
Time (in seconds) that it takes a player to repair a destructed tower.
rackRepairTimer
15
Time (in seconds) that it takes a player to repair a destructed server rack.
antennaRepairTimer
15
Time (in seconds) that it takes a player to repair a destructed cellular antenna.
acePermSync
false
.
acePermsForRadioGuests
false
Restricts the to users with an ACE permission.
acePermsForServerRepair
false
Restrict the ability to repair damaged radio repeaters with ACE permissions.
ACE Command: sonoranradio.repair
acePermsForTowerRepair
false
Restrict the ability to repair damaged radio repeaters with ACE permissions.
ACE Command: sonoranradio.repair
acePermsForAntennaRepair
false
Restrict the ability to repair damaged radio repeaters with ACE permissions.
ACE Command: sonoranradio.repair
acePermsForRadio
false
Restrict the usage of the radio (/radio) with ACE permissions.
ACE Command: sonoranradio.use
enforceRadioItem
false
Require the user to have a item in their inventory to be able to use the radio or radio scanner.
acePermsForRadioUsers
false
Restrict the usage of the radio (/radiousers) with ACE permissions.
ACE Command: sonoranradio.radiousers
disableRadioOnDeath
true
Disables radio when dead.
restoreRadioStateWhenAlive
true
Restore the radio's power state (on/off) when you are revived or respawn.
deathDetectionMethod
auto
What method to use for death detection.
auto, manual, or qbcore
heavySignalDegradeInWater
Heavily degrade radio signal while the player is in water to mimic an IP67-rated handheld
disableAnimation
false
Disable the radio talking animation for custom animation scripts.
noPhysicalCellRepeaters
false
Hide the in-game cellular antenna repeaters
noPhysicalRacks
false
Hide the in-game server rack repeaters
noPhysicalTowers
false
Hide the in-game tower repeaters
defaultEscapeMode
keep
The default .
Options: keep, hide, transmit_only.
autoCallouts
When enabled, user radios will during a pursuit.
geoChannels
When enabled, configure specific channels to transmit and scan when inside a .
autoOnSceneStatus
When the , to en-route. Upon arrival, update their CAD status to on-scene.
radioJammers
Configuration for in-game signal jammers.
exec @sonoranradio/sonoranradio.cfg
comId
EMPTY
The Sonoran Radio Community ID
It is very important that the sonoranradio_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 [sonoranradio] folder as that will also start the sonoranradio_updatehelper which might cause crashing if started manually.
Example of what NOT to do: ensure [sonoranradio]
Start this resource AFTER your preferred framework and any additional framework core resources such as inventory resources
In order to reduce false triggers and conserve local resources, the AI will only listen to the first five seconds of your transmission. This amount can be modified in the Advanced tab of the Audio settings.
Upon detection of the wake word, an audible beep indicates that the AI has been activated. Users may begin speaking before the beep is heard, as long as the tone occurs at some point during the same transmission.
Example
If your wake word is Dispatch, then your transmissions to the AI would be as follows:
<wake word>, <optional: my unit number>, <action to do>
&#xNAN;Dispatch, A-10, mark me as available.
&#xNAN;Dispatch, A-10, run a lookup on the license plate ABC123
Dispatch, A-10, attach me to the robbery in progress call.
&#xNAN;Dispatch, A-10, attach B-11 to my call.
Call Notes
The AI can add a note to your active dispatch call for other units to see.
Dispatch, A-10, add a note on the call that I am arriving on-scene now, it's a white vehicle.
Detach from Call
The AI can lookup your current dispatch call and remove you from it.
Dispatch, A-10, clear my call.
Close Call
The AI can lookup and close your current dispatch call.
&#xNAN;Dispatch, A-10, close my call.
Dispatch, A-10, clear my unit group.
&#xNAN;Dispatch, A-10, remove B-11 and I's unit group.
Dispatch
, A-10, route me to call 123.
&#xNAN;
Dispatch
, A-10, route me to the traffic stop call.
Sonoran Software Systems is not responsible for any unexpected or excess charges incurred from OpenAI or other third-party AI service providers. Communities are strongly encouraged to set spending limits, enable billing alerts, and actively monitor AI usage to ensure costs remain within approved thresholds.
Because OpenAI and all other AI providers are a third-party, Sonoran Software Systems has no ability to offer refunds or reduced rates for AI costs.
When first connecting to the radio, if you are the only user in the room, the AI agent may take up to 30 seconds to join.
When the agent has joined, a brief "Dispatch Online" audio will play.
In order to route your GPS to a postal code, the Nearest Postal resource is required.
Or, another resource that can handle the command /postal <id>.
This feature requires the Nearest Postal resource version v1.5.4 or newer.
[
// Radio Tower
{
// Unique Identifier
"Id": "74d910e5-5705-4b58-baaf-88a8ca82734c",
// Type of repeater (tower)
"type": "radioTower",
// XYZ Coordinates
"PropPosition": {
"x": -577.4769287109375,
"y": -138.4747314453125,
"z": 51.9765625
},
// Signal range in units
"Range": 1500,
// Allow destruction
"Destruction": true
},
// Server Rack
{
// Unique Identifier
"Id": "50a9c40a-e5bb-46b2-9a83-c5164599c64c",
// Type of repeater (Server Rack)
"type": "serverRack",
// XYZ Coordinates
"PropPosition": {
"x": 443.3538513183594,
"y": -983.1824340820312,
"z": 30.6783447265625
},
// 360 degree compass heading for angles
"heading": 90,
// Signal range in units
"Range": 1500,
// Status of each server in rack: "alive" or "dead"
"serverStatus": [
"alive",
"alive",
"alive",
"alive",
"alive"
],
// Is the repeater on or not
"Powered": true,
// Make the repeater invisible by setting to true
"NotPhysical": false,
// Temporary repeater
"DontSaveMe": false,
// Allow destruction
"Destruction": true
},
// Cell Repeater
{
// Unique Identifier
"Id": "1f68f034-500b-4b29-9356-8c8bf63fda04",
// Type of repeater (cell repeater)
"type": "cellRepeater",
// XYZ Coordinates
"PropPosition": {
"x": 152.5,
"y": -775.9000244140625,
"z": 264.29998779296877
},
// 360 degree compass heading for angles
"heading": 340.0,
// Signal range in units
"Range": 1500.0,
// Is the repeater on or not
"Powered": true,
// Make the repeater invisible by setting to true
"NotPhysical": false,
// Temporary repeater
"DontSaveMe": false,
// Status of the antenna: "alive" or "dead"
"AntennaStatus": "alive",
// Allow destruction
"Destruction": true
}
]
-- Enable mobile repeaters
Config.enableVehicleRepeaters = true
-- Mobile repeater spawncodes
Config.repeaterVehicleSpawncodes = {
{model = "police", label = "Police Vehicle", range = 200},
{model = "police2", label = "Police Vehicle", range = 200},
}
Config.heavySignalDegradeInWater = { -- Heavily degrade radio signal while the player is in water to mimic an IP67-rated handheld
enabled = true, -- Set to true to enable heavy signal degrade in water
pedInWaterDegredation = 0.6, -- Signal strength multiplier when the player is simply in water (e.g. 0.6 would reduce signal strength to 60% of normal)
pedUnderWaterDegredation = 0.3 -- Signal strength multiplier when the player is underwater (e.g. 0.3 would reduce signal strength to 30% of normal)
}
{
enabled = true, -- Whether or not this feature is enabled
speedUnit = 'mph', -- mph | kmh | none -- The unit of speed provided with the callout
withPostals = false, -- Whether to include postals with the automatic callouts
postalResource = 'nearest-postal',
}
Config.geoChannels = {
enabled = true,
command = 'sonradgeoswitch', -- command to toggle geo-channel switching | e.g. /sonradgeoswitch
friendlyCommand = 'geoswitch', -- friendly subcommand of the /radio command to toggle geo-channel switching | e.g. / radio geoswitch
acePermission = '', -- ACE permission required to use disable geo-channel switching | Leave blank to allow all users
showNotifications = true -- Show notifications when geo-channel switching is enabled/disabled
}
Config.autoOnSceneStatus = {
enabled = true, -- Enable automatic ON_SCENE status when arriving at a waypoint created by SonoranRadio AI
distance = 30.0, -- Distance in meters from the waypoint to trigger ON_SCENE status
statusEnum = 4, -- Status enum for "ON_SCENE" -- See https://docs.sonoransoftware.com/cad/api-integration/api-endpoints/emergency/identifiers/unit-status for more information
timeout = 300000 -- Time in milliseconds to timeout the auto ON_SCENE status after arriving at the waypoint
}
Config.radioJammers = {
enabled = true, -- Enable or disable radio jammers
menuCommand = 'jammers', -- Subcommand to open the jammers menu | e.g. /sonoranradio jammers
toggleRange = 3.0, -- Distance in meters required to toggle a jammer on/off
permissionMode = 'none', -- ace, qbcore, esx or none
acePermission = 'sonoranradio.jammers', -- ACE permission required to use jammers
allowedJobs = { -- Jobs that can use jammers | Requires permission mode to be set to 'qbcore' or 'esx'
['hacker'] = {
grades = { -- Job grades that can use jammers
1,
2,
3
}
}
},
jammers = {
-- See file for full example
}
}
automatically transmit their heading, road, and speeds
Why Sonoran Radio?
Experience Sonoran Radio, the free, most popular radio transmission software for FiveM, ER:LC & gaming communities alike!
What is Sonoran Radio?
Sonoran Radio is the most advanced push-to-talk system for gaming communities.
With customizable voice effects, live emergency calls, and deep FiveM integrations like nearby radio audio, background noise injection, and destructible towers—Sonoran Radio keeps your team connected and in control.
Sonoran Radio offers a fully-featured free version accessible to anyone!
With instant setup, you can chat with community members in just minutes!
✨
Dispatch AI is our most powerful integration ever built. Talk to a live AI dispatcher over the radio to create calls, run license plate lookups, update your status, and so much more!
🎮
Sonoran Radio's desktop overlay works with any game, leaving you with full immersion!
⌨️
The Sonoran Radio Stream Deck plugin allows you to rotate channels, groups, create custom XMIT and SCAN profiles, adjust system, channel, SFX, and AI volume, toggle overlays, and more. Additional integration for the Stream Deck + with dials offers unique integration.
💣
The physical in-game towers are able to be destroyed by criminals, which will devastate quality of radios around it.
With three different in-game model types, Sonoran Radio takes immersion to the next level!
See our info!
💻
Our reflects your channel information, transmitting user, and panic status in real time bringing new levels of immersion!
📶
Configure signal loss in tunnels, underground locations, and more!
📶
Configure custom in-game items to jam nearby radio signals.
📢
Upload and customize dispatch tones for your community!
Sonoran Radio's dispatch UI allows you to specify specific channels and groups, repeat tones, and more! You can even !
🎙️
Customize digital and analog style voice effects for your community!
🔊
Easily customize mic clicks, talkover protection tones, and more!
🚨
Players in-game can call and speak directly with dispatchers for live emergencies!
☁️
Customizing your radio has never been easier, with live updates from our easy-to-use configuration panel.
🎧
Easily visualize, manage users, play tones, and more!
Sonoran Radio's dispatch UI is available everywhere on the and for Windows and OSX.
📡
Sonoran Radio offers multiple in-game user interfaces, allowing you to stay connected on-foot, in-vehicle, and more!
Choose from one of our radio style options, or even add your own!
🗣
Pulled over in a traffic stop? You'll hear the real radio chatter when an officer has an active radio nearby!
📻
In-game scanners allow you and others nearby to listen in on radio traffic!
🎤️
Responding to a call? Sonoran Radio injects real-time sirens, gunshots, and more directly into your microphone feed for the ultimate immersion.
📡
Transmit live AI updates of your location and speed for seamless pursuit coordination.
🌐
Maintain your exclusive community branding by configuring a custom domain and vanity url!
🏃
Get the most popular in-game radio animation script for !
🔌
Hack into the integrated power grid to disable Sonoran Radio towers in your area! !
🏆
Sonoran Radio provides an optional integration to SonoranCAD through the FiveM resource. Turning this on takes the system to a whole new level.
View dispatch call information on your in-game Sonoran Radio. CAD users can also see in-game towers, health, and signal range on the CAD live map!
📁
Sonoran CMS allows you to automatically manage your community's Sonoran Radio permissions based on their CMS ranks and Discord roles!
enables you to take command like never before. This one-of-a-kind utility vehicle brings endless possibilities!
Expand the pop-out sides for a walkable command center interior. Or, raise the radio antenna and scan the scene with 360 degree surveillance cameras!
Paired with a standalone script, the mobile command center offers an integrated Sonoran Radio repeater and Sonoran CAD ALPR functionality!
📋
Sonoran Radio is always providing updates to help improve the experience, customizability, and realism of the product. We're always looking for new ideas and suggestions!
Getting Started
Get started with Sonoran Radio standalone!
Getting started with Sonoran Radio is fast and free!
Sonoran Radio - Destructible Towers - Promotional Image
Sonoran Radio - Vehicle Display
Sonoran Radio - Tunnel Detection
Sonoran Radio - Tone Board
Sonoran Radio - In-Game Speakers
Sonoran Radio - Custom Voice Effects
Sonoran Radio: Custom Sound Effects
Sonoran Radio: In-Game Emergency Calls
Sonoran Radio - Customization Panel
Sonoran Radio - Dispatch Panel
Sonoran Radio - Multiple Overlays - Promotional Image
Sonoran Radio - Custom Frames
Sonoran Radio - Nearby Radio Chatter
Sonoran Radio - In-Game Scanner
Sonoran Radio - Background Noise Injection
Sonoran Radio - AI Pursuit Callouts
Sonoran Radio x Big Daddy Scripts
Sonoran Radio x Sonoran Power Grid - Promotional Image
Sonoran CAD x Sonoran Radio
Sonoran CMS x Sonoran Radio
Sonoran Radio x Sonoran MCC - Promotional Image
Sonoran Radio x Sonoran MCC - Integrated Repeater - Promotional Image
tower destruction and repairing
IP Whitelisting
My community wants to whitelist only the Sonoran RADIO IP address to send requests to my FiveM server. How can I do this?
You may whitelist the following IPs:
24.199.66.94
198.199.90.248
34.173.36.190
Last Updated : 8/26/2025
User Connected
The user_connected push event is sent to the game server when a user connects to the radio.
User Connected
The user_connected push event is sent to the game server when a user connects to the radio.
{
"id": "", // Community ID
"key": "", // Community API Key (Use to authenticate)
"type": "user_connected",
"payload": {
"identity": "000-000-000-000"
}
}
Download the App
Download the Sonoran Radio app for Windows, OSX, iOS, and Android!
In your Sonoran Radio Portal, click the green plus button
Click Begin Your Journey! to create a new community
Click Standalone (Alpha) mode at the top
Enter a good nickname, and click Register Server
Next Steps
Now it's time to invite your community members!
Logging
View audit logs from user actions in Sonoran Radio.
Community Logs
Community user logs can be found in the Administration tab. Logs can be filtered by type, date, and text content.
Tablet
View the dispatcher panel via in-game tablet!
Using the In-Game Tablet
The in-game tablet allows users to access the dispatch panel.
Via Command
Users in-game can use the /radio tablet to open the tablet. The tablet will display the dispatch panel, also available on the web and desktop applications.
Via Keybind
Users in-game can also specify a custom keybind to open and close the tablet.
Browser Microphone Permissions
Microphone permissions are required to use the radio.
Error Code
If you see the following error message displayed, the Sonoran Radio website has not gotten microphone access from your browser. This prevents you from connecting to the radio.
Granting Microphone Permissions
Via Quick Menu
Select the icon to the left of the URL bar and ensure Microphone access is enabled.
Via Chrome Settings
In Chrome, paste the following into the URL bar and hit enter: chrome://settings/content/microphone
Ensure that sites are allowed to ask for microphone access, and that sonoranradio.com is not blacklisted from microphone access.
In-Game Timeouts
Learn more about in-game client timeouts throwing error messages.
Some users may see SonoranRadio::ReceiveRadioStates listed multiple times after receiving a timeout.
When your client receives a timeout from the server for any reason, it will display a list of the most recent requests. Because Sonoran radio frequently sends client data requests, these will consequently be displayed.
This is not an issue with or related to Sonoran Radio. This is a general timeout between the client and server listing all recent calls as diagnostic information.
Sonoran Radio - Client Timeouts
Device In Use
Resolve the radio error when connecting "Device In Use".
Device In Use Error
Sonoran Radio: Device In Use
When connecting to the radio, your microphone may be locked in "exclusive mode" by another program.
1. Access the Sound Tab
Open the Control Panel and select Hardware and Sound
Select Manage Audio Devices
2. Disable Exclusive Mode
Select the microphone > Properties > Advanced > Disable (un-check) Allow applications to take exclusive control of this device.
Windows App Volume
When a default output device is selected Windows may automatically lower the volume of other desktop apps.
If Sonoran Radio lowers the volume of FiveM or other apps on Windows while connected, the most common fix is to change Sonoran Radio’s output from Default to your specific headset or speaker device. Windows can treat the default communications device differently and may duck other app audio while the radio is active, even if nobody is talking.
In the Settings panel, change your output device from Default to a specific input device.
Sonoran CMS
Automate Sonoran Radio permissions with Sonoran CMS!
Sonoran CMS x Sonoran Radio
Sonoran CMS makes managing your community's radio easy and automatic!
Sync radio permissions and channel access via CMS ranks and Discord Roles
Sync radio display names via CMS and Discord names
Just like with Sonoran CAD and CMS, the Sonoran Radio resource is open for public contributions. Pull requests with new functionality or bug fixes will be reviewed and merged when appropriate. When applicable, accepted pull requests may be eligible for Sonoran account credit. for more contact with developers.
Libraries
Install links for the official Sonoran SDK libraries used with the v2 API.
The official Sonoran SDK libraries provide package-managed access to Sonoran Radio integrations and v2 API helpers.
Learn how to invite and manage users in your Sonoran Radio community!
Automatic Join, Kick, Ban, and Permission Sync
Sonoran CMS allows you to automatically add and manage user permissions with user applications, sync them with Discord roles, and more!
If you are building your own integration, Sonoran Radio also exposes API endpoints to approve members, kick members, ban members, update member display names, and set member permissions.
Transmission Logs
Coming soon!
Accessing Transmission Logs
The transmission log viewer can be accessed on the dispatch panel by clicking the list icon. Users will be able to view all logs within the last 24 hours transmitted on .
Transmission logs have the following properties:
Default User Settings
Configure the default settings for your community. Users can personalize their own preferences, but these will serve as the starting defaults.
Default User Settings
The radio settings menu offers vast preference options for sound effects, text-to-speech, automatic gain control, and more. Some communities may wish to enable or disable specific settings for users by default.
Multi-Server
Using multiple identical servers for overflow? Multi-server lets each server run independently while sharing the same channel setup, keeping communications separate and organized.
Configuring Servers
Many communities run multiple game servers to handle user overflow. Sonoran Radio's multi-server support keeps players separated by server while sharing the same channel configurations and customizations across all servers.
Custom Domain / Vanity URL
Have Sonoran Radio on your own custom domain!
Vanity URLs
Each community gets their own free vanity URL, visible in the Custom Domain section of your community's customization tab
If your community is Plus or Pro, your vanity URL will match your community's custom ID
Connected Users List
View the in-game connected radio list to quickly identify what users are online.
Accessing the Connected Users List
In-game, users can utilize the /radiousers command or a (F11 by default) to open the connected users window.
This window displays all active users connected to the radio, and the channel they are in. When a user is transmitting, their name will turn green.
Client Debug Mode
Learn more about enabling the client-sided debug mode.
FiveM Client Debug logs
At times, our support team may request debug logs from your local radio. This contains important information from the radio webpage (running inside the in-game radio in an iframe).
In-Game Microphone Not Working
Fix a common issue causing the in-game microphone to not work.
In-Game Microphone Not Working
Due to an old version of Chromium (web browser) that FiveM utilizes, we are unable to change audio devices in-game. FiveM utilizes your "default" Windows microphone.
To resolve this issue, simply set your desired microphone "as default" in Windows.
Set Mic In-game for Radio
Configure and manage your in-game microphone settings for Sonoran Radio, including microphone selection, muting, and Automatic Gain Control configuration.
Set Your Microphone
Sonoran Radio allows you to select and configure your microphone directly in-game.
In-Game Volume Too Low
Having trouble hearing the radio in-game? You may need to increase the FiveM subprocess in your volume mixer.
FiveM Volume
Sonoran Radio runs in FiveM's Chromium browser in-game. While FiveM is running, ensure that you have the volume for this turned up:
Mac Keybinds
Resolve issues with desktop keybinds on Mac OSX.
Due to Apple's permission restrictions, and limited support on newer Apple Silicon processors - Sonoran Radio takes a couple of extra steps to setup global keybinds.
1. Modify File Permission
Sonoran Radio must adjust a file permission in order to listen to keybinds while the application is running. You will be prompted to enter your computer's password:
Sonoran CAD Integration
Integrate the Radio with your Sonoran CAD!
Sonoran Radio CAD Plugin
To enable integrations between Sonoran CAD and Radio, simply .
FiveM Phone Scripts
Sonoran Radio integrates with FiveM phone scripts to allow players to call Sonoran Radio emergency service dispatchers right from their phone
LB Phone
LB Phone support for Sonoran Radio is as easy as changing a configuration variable.
Get Connected User
This endpoint gets a connected user in a specific room for a specific Sonoran Radio server.
Remove members from a specific Sonoran Radio server.
Kick Members
POST/v2/servers/:communityId/members/kick
Rate limit:4 requests per minute
Ban Members
Ban members from a specific Sonoran Radio server.
Ban Members
POST/v2/servers/:communityId/members/ban
Rate limit:4 requests per minute
Get Community Channels
Get configured channel groups and channels for a specific Sonoran Radio server.
Get Community Channels
GET/v2/servers/:communityId/channels
Rate limit:6 requests per minute
Get Server Subscription from IP
Return the highest Sonoran Radio subscription level associated with the caller IP.
Get Server Subscription from IP
GET/v2/server-subscriptions/by-ip
Rate limit:2 requests per minute
Development Branch
Sonoran Radio provides a dedicated development API server and web version to work directly with our communities. Find out more information below!
Rate Limiting
Sonoran Radio's development branch maintains the same rate limiting as production. However, rate limits only result in a one minute block as opposed to an hour.
All API endpoints and requests should be made to the following address:
Development Radio
The latest Radio development version can be accessed at the following address:
Development Subscription - Free
When building or testing our API library, you can upgrade your development community to pro for free!
Create a new PRO subscription in the development billing portal.
At checkout enter 4242 4242 4242 4242 as the card number with any CVV and expiration date.
Apply the subscription to your development testing community.
Developer Discord
Join our Discord and access the #community-development channel. Here you can discuss API related issues, development, and more.
The development API and Radio branches are entirely separate from the current production version. For more information in working with our development team please contact us. or join our community Discord.
Data will be reset at random times and this environment is not suitable for production use. Use only for testing new features when requested by Sonoran Software Development and for developing API based resources.
https://staging-api.dev.sonoranradio.com
https://staging.dev.sonoranradio.com
FiveM Management
All user permission management, including inviting and approving members, can be automated with FiveM ACE permissions.
Manual User Management
Inviting Members
Users will need the Community ID located in the Administrator panel.
Communities can also customize this community ID.
Sonoran Radio: Community ID
When logged into Sonoran Radio, they can select the + button in the portal to paste in the Community ID.
Sonoran Radio: Join Community
Approving Members
When a member joins your community with an invite code, they will be pending until approved.
Users with the Approve Pending Members permission can approve in the Members tab
Sonoran Radio - Approve Members
Manage User Permissions
User permissions can be manually set by clicking the shield icon on a user in the Members tab
Audio transcripts can also be automatically generated for each transmission recording.
Communities can optionally enable the Transmission Log STT option in the AI configuration panel.
Disable User Transmission Recording
Some users may wish to manually opt-out of submitting their transmissions for recording. This can be toggled in the Settings menu under the Privacy tab.
Community transmission logs are only available on the pro version.
To customize your community ID, navigate to Customize > Info > Community ID.
Enter in a new, custom community ID.
Custom Domain
1. Enter your Custom Domain
Enter the domain you want Sonoran Radio on, this can be either a root domain (like sonoranroleplay.com) or a subdomain (like radio.sonoranroleplay.com)
2. Configure DNS Records for you Domain
Add the shown DNS records shown to you in your domain's administrative panel. If you are using Cloudflare, be sure to disable the proxy!
Having trouble? Contact your domain name provider.
3. Save the Custom Domain
Press Save Custom Domain in the panel to save your new custom domain. If successful, your new custom domain will be visible above your vanity URL
Custom Community IDs require a plus subscription or higher.
Custom Domain requires a pro subscription.
Resize and Reposition
Resize
To resize the connected users list, use the command /radiouserssize W H with W being the width in pixels (ex: 500) and H being the height (ex: 500).
Reposition
To move the connected users list on your screen, click and drag while the in-game radio is in focus.
ACE Permission Restrictions
Communities can restrict access to this command with ACE permissions:
Select the settings gear and click on the header of the settings panel seven times.
At the bottom, a red section labeled Debug Mode will appear, indicating that it has been correctly enabled.
Restart the radio (power on/off) to start capturing fresh logs. Once you have re-created the issue, continue on with sending the logs as described below.
Sonoran Radio: Debug Mode
Flagging Timestamps
In some cases, you may be asked to add a timestamp flag when an issue occurs. Once the particular issue occurs press the Flag Timestamp button in the debug menu, enter in a brief description, and press Ok.
This will manually add a debug log to help our developers narrow down the time window.
Flag Timestamp
Sending Client Debug logs
Open your in-game console by pressing F8
Select Open Log
Send the latest file located at C:\Users\USER\AppData\Local\FiveM\FiveM.app\logs
FiveM: Open Client Log
FiveM: Client Log
1. Control Panel Sound
Open the Control Panel and select Hardware and Sound
2. Manage Audio Devices
Select Manage Audio Devices
3. Set Microphone as Default
Select the Recording tab
Select your microphone
Select Set Default
Select Apply
4. Restart your Game
After setting your new default microphone restart your FiveM application.
Further Troubleshooting
If you have set your mic as the default device and you are still unable to hear it in game, try the following steps:
Ensure device is marked as "Default Communication Device" as well. If the "Set Default" button is greyed out, that means it is both the default device and the default communication device.
Reset your audio devices in Windows settings, as shown below.
Resetting Windows Audio Devices
Open Windows Settings, navigate to System > Sound
Under Advanced sound options, click App volume and device preferences
Scroll to the bottom and click Reset to reset to the Microsoft recommended defaults.
Restart FiveM to ensure it recognizes the changes.
Step 1: Open the Microphone Menu
In chat, run the following command:
This will open the microphone configuration menu.
Open microphone menu
Step 2: Select Your Microphone
Click the dropdown menu and choose the microphone you want to use.
Select microphone
Step 3: Configure Microphone Settings
Once selected, you can enable or disable your microphone and configure Automatic Gain Control.
Controls
Blue Microphone = Microphone Enabled
Red Microphone = Microphone Muted/Disabled
Green Slider = Automatic Gain Control (AGC)
Automatic Gain Control helps balance microphone volume automatically.
Microphone controls
Step 4: Return to the Game
Press ESC to close the menu and return to gameplay.
/radio 911 mic
1. Access the Volume Mixer
Open the Volume Mixer via Windows search or right-clicking the sound icon in your taskbar.
Windows Search: Volume Mixer
Taskbar: Volume Mixer
2. Adjust the FiveM Chromium Subprocess
In the Volume Mixer adjust the volume of the FiveM Chromium Subprocess.
FiveM Chromium Subprocess Volume
Manually Increase Radio Volume
If you're still having issues, you can manually enter a number higher than the 200% limit on the volume slider.
Click the Volume button to change the slider to a number input, and carefully enter a number value higher than 200.
Radio Volume: Manual Input
2. Grant Accessibility Access
When first setting a keybind, you will be prompted to add the Accessibility permission for keyboard and mouse input detection.
Click the Open System Preferences button, and toggle the permission on for Sonoran Radio.
If you do not see the Sonoran Radio application as an option, click the + button in the bottom right and select the program from your Applications folder.
After toggling access on, you will be prompted to restart the application.
You can also manually open this menu via System Settings > Privacy and Security > Accessibility
Integration Features
Panic Toggle
CAD Panic Toggle
Triggering your Sonoran Radio panic (by pressing the yellow button at the top of the radio) will also toggle your panic status in Sonoran CAD.
Dispatch Call Information
Dispatch Call Information
When attached to a Sonoran CAD dispatch call, the radio will display a red call info box and set the top status bar to red. Click the call title to expand and collapse the information.
Sonoran Radio x CAD Call Information
Call Information - Expanded
Live Map Blips
Live Map Radio Tower Information
Sonoran Radio towers will be displayed on the CAD live map.
Select one of the blips to view it's repeater type and health.
Display Name Sync
CAD To Radio Display Name
Automatically set your radio's display name based on your CAD unit information.
In the sonorad submodule's configuration file, set config.syncRadioName.enabled to true and customize the formatting in config.syncRadioName.nameFormat.
Community-wide sound effects can be customized in the Customize > SFX Customization menu.
Sonoran Radio: Community Sound Effect Customization
Community SFX customization requires the plus version or higher.
For more information, view our .
Key Up/Down
When a user presses or releases their push-to-talk key, the Key Up SFX and Key Down SFX audio will play.
Individual users can also customize in their settings menu whether or not to hear their own key up/down SFX and other user's key up/down SFX.
Users can also .
Talkover Error and Override
When a channel has and a user is already transmitting, a second user attempting to talk at the same time will hear the Talkover SFX audio.
If a user has talkover override permissions, double-pressing the push-to-talk key and holding will play the Talkover Override Success SFX once they are able to transmit.
Emergency Call
When a , dispatchers will hear the Emergency Call SFX audio to alert them of an incoming call.
Panic Button
When a , dispatchers will hear the Panic Button SFX audio.
Volume Up/Down (Hotkey) SFX
When a user changes their volume in the or via hotkey, they will hear the Volume Up/Down (Hotkey) SFX audio.
Background audio injection blends in-game sounds—like sirens, helicopter rotors, boat engines, and gunshots—into your microphone output.
If you're responding with sirens active, others on the radio will hear them in the background of your voice transmissions.
In-Game Siren
When the user is inside of or near a vehicle with a siren activated, this sound effect will be played in the background of their transmissions.
In-Game Boat Engine
When the user is inside of a boat, this engine and water noise sound effect will be played in the background of their transmissions.
In-Game Pistol & Rifle (Silenced)
When the user shooting or near someone shooting, this sound effect will be played in the background of their transmissions.
Per-User SFX
Key Up/Down
Individual users can customize their key-up and key-down SFX in their user settings dialog in their radio or dispatch portal.
Once configured, the user will override any default or community-wide SFX.
Note: SFX uploads are only available on the web, desktop, or mobile apps and can not be done from in-game.
Emergency Calls
In-game players can call 911 and talk to you through Sonoran Radio!
Sonoran Radio - Emergency Calls
Emergency Calling In-Game
Players are able to make an emergency call in FiveM with /radio 911. This will place them in a call on the Dispatch Panel waiting for a dispatcher.
Sonoran Radio FiveM - Emergency Call
Sonoran Radio - Dispatch Panel
Caller Microphone
The emergency call will use the caller's default microphone. If the caller can not be heard, they may need to with /radio 911 mic.
Answering the Emergency Call
You can join and listen to an emergency call using the microphone and headphone buttons, just like any other channel in Sonoran Radio. The buttons will highlight green and red respectively when enabled
Ending the Emergency Call
Dispatchers can end an emergency call with the red "End Call" button, and in-game players can end it by using /radio 911 again.
Redial the Caller
In some cases, the caller may hang up or dispatch needs to call them back for more information.
Once the call has ended, a Re-dial {user} option will appear. Click the green call button to re-dial.
Customize The Emergency Number & Banner
By you can customize the following options:
Customize 911 to any other number or word by editing the emergencyCommand property.
Hide the user's emergency call banner by setting showEmergencyCallHelp to false.
Integrated Phone Scripts
Sonoran Radio also integrates with popular FiveM phone scripts like LB Phone!
Developer Documentation
Third-party scripts, such as a phone system, can also programmatically start and end emergency calls.
Tunnels and Degrade Zones
Configure tunnels, underpasses, and other areas where radio signal will be degraded!
Sonoran Radio - Tunnel Detection System
What are Degrade Zones?
Degradation zones are areas like tunnels, underground areas, or mountain valleys that would experience signal loss in a realistic scenario. Custom voice effects will distort the audio more as signal loss increases.
Creating and Modifying Zones
Via Radio Panel
Degrade Zones via Panel
Use the polygon, square, or circle tool to create a new zone. Select the zone to customize the name, Z coordinates (floor and ceiling height), and the degrade strength.
Via In-Game Menu
1. Accessing the Menu
Open the menu with the in-game /radiomenu command and select Degradation Zones
2. Zone Configuration Options
In the Degradation Zones menu, you can specify the strength and add points to create a 3D zone.
When creating a zone you can visualize via the drawn polygon and manipulate and move your last placed point using the on-screen controls
Strength
- The percent the signal strength will be cut by when inside the zone (0-1).
- Example: 0.5 = 50% degradation
3. View and Remove Configured Zones
Select Edit Degradation Zone in the menu and toggle on Show Zones. All configured zones on the map will be displayed in green. If the config.lua's debug mode is set to true, all zones will also be made visible.
Use the Select Zone menu option to swap back and forth between zones. Your selected zone will be displayed in red.
In-Game Speakers
Configure in-game speakers that dispatchers can send tones to!
Configuring In-Game Speakers
1. Access the Menu
Open the menu with the in-game /radiomenu command and select Toneboard Speaker Menu > Spawn/Move/Delete Speaker
2. Configure the Speaker
Menu Options
The spawn (create) and edit menu will allow you to set the speaker type, name, range, and position.
Speaker Types
When spawning a new speaker please select the type you would like to use. See types below:
Speaker Position
Use the controls displayed on screen to rotate and move the speaker to the desired location.
3. Speaker Grouping
Speakers can be grouped by a customizable name when placed. Grouped speakers show up as a single option on the tone board.
If you would like to group already placed speakers you can do so by navigating to the speakers.json file and adding a group property. (If the value of the group property is empty, speakers will not group together). See below for more:
Ungrouped Speaker(s)
Grouped Speaker(s)
Playing Tones to In-Game Speakers
Dispatchers can now and select one of the in-game speaker options to broadcast tones, microphone recordings, or AI powered text-to-speech to.
Big Daddy Radio Animations
Sonoran Radio is partnered with Big Daddy Scripts to offer a FREE copy of their radio animations script!
Sonoran Radio x Big Daddy Scripts
What is this offer?
This script requires the pro version of Sonoran Radio standalone.
Big Daddy's radio animation script enhances your Sonoran Radio experience by adding new in-game animations. As one of the most popular scripts of its kind, it offers versatile options based on where your radio is positioned—whether on your chest, shoulders, or handheld. This provides a more immersive and personalized interaction.
Download and Installation
1. Download the Script and Product Key
Create an account and from Big Daddy Scripts.
In the account portal, select your recent order and copy the product key.
2. Install The Script
A. Extract
Extract the script to your server's resources folder.
B. License Key
In the settings.ini file, paste your license key.
C. Ensure the Resource
In your server.cfg file, add the following line after your Sonoran Radio resource lines:
Sonoran Radio will automatically detect the script named BigDaddy-RadioAnimation, and disable the default Sonoran Radio animation (disableAnimation from the config.lua)
3. Enjoy!
Once in-game, you can use the /radioanim command to open up the customization menu.
This script will automatically detect when you are talking on your Sonoran Radio.
Approve Members
Approve existing pending members for a specific Sonoran Radio server.
Approve Members
POST/v2/servers/:communityId/members/approve
Rate limit:12 requests per minute
This endpoint has a small internal gateway buffer, but the published public limit is 12 requests per minute.
Approves pending community members already attached to the selected server.
Headers
Name
Value
Examples
Response
Successful requests return application/json.
Set Member Permissions
Update member permissions for a specific Sonoran Radio server.
Set Member Permissions
PATCH/v2/servers/:communityId/members/permissions
Rate limit:4 requests per minute
Updates permission bitmasks and optional profile permissions for one or more server members.
Headers
Name
Value
Examples
Response
Successful requests return application/json.
Set Member Display Names
Update stored member display names for a specific Sonoran Radio server.
Updates the connected participant's current transmit and scan channel state.
Headers
Name
Value
Examples
Response
Successful requests return application/json.
Set User Display Name
Update a stored user display name for a specific Sonoran Radio server.
Set User Display Name
PATCH/v2/servers/:communityId/users/display-name
Rate limit:12 requests per minute
This endpoint has a small internal gateway buffer, but the published public limit is 12 requests per minute.
Updates a single member display name and propagates that update to connected sessions.
Headers
Name
Value
Examples
Response
Successful requests return application/json.
Set In-Game Speaker Locations
Set in-game speaker locations for tone playback on a specific Sonoran Radio server.
Set In-Game Speaker Locations
PUT/v2/servers/:communityId/speakers
Rate limit:2 requests per minute
Stores the in-game speaker list used by tone playback targets.
Headers
Name
Value
Examples
Response
Successful requests return application/json.
Desktop Overlay
The Sonoran Radio desktop overlay lets you see and control your radio in any game! Perfect for Roblox, ARMA 3, and more!
Radio Overlay
Accessing the Radio Overlay
FiveM Inventories
Sonoran Radio integrates with FiveM inventory systems for physical radio and scanner items.
QBCore
QBCore inventory support for the radio and items is automatically detected.
Configuration
AI Keys
Integrate Sonoran Radio with OpenAI.
Sonoran Radio AI
Sonoran Radio integrates with OpenAI to add additional features and functionality. Each feature can be easily enabled or disabled and have separate AI keys for optimal billing transparency.
This script also makes users talk on their in-game microphone when they talk on the radio.
To disable this, ensure the Config.talkSync is disabled in the Sonoran Radio config.lua and the TalkSync is set to false in Big Daddy's Animation settings.ini file.
With the desktop application opened, select the Open Overlay button on the dispatch or mobile panel. This will close the main dispatch panel and will open up the radio overlay.
The overlay will be displayed on top of any window it's placed on. Pressing the power button Off or selecting Return to Portal will close the overlay and re-open the dispatch panel.
Using the Radio Overlay
Hotkeys
Hotkeys
By selecting the Settings button on the overlay, users can configure a hotkey to hide/show the overlay. Additionally, a hotkey to focus the radio can be used for games with fullscreen mode.
Changing Frames
Changing Frames
Communities can configure custom radio frames to be made available to their users.
Users can change their selected frame in the settings window.
Moving Resizing the Overlay
Click and drag on the radio to move it around the screen. Hold CTRL while clicking and dragging up or down on the overlay to increase or decrease the size.
Customizing Radio Frames
Configuring Custom Overlay Frames
In the admin's Customization > Desktop Frames menu, new frame images can be uploaded. Once uploaded, drag-and-drop the buttons onto the frame and position the screen size.
Connected Users Overlay
The user list overlay allows you to quickly view what users are online, what channels they're in, and who is currently transmitting.
Accessing the User List Overlay
Accessing the Connected Users Overlay
To open the connected users overlay, select the Open User List button on the dispatch or mobile panel. Or, create a new hotkey in the Settings panel to Open the Connected Users.
Uploading custom radio frames requires the Pro subscription.
For more information, .
Inventory Restriction
To restrict radio and scanner access to users with the radio item in their inventory, set config.enforceRadioItem to true.
Inventory Item
Customize your radio and scanner items in your config.lua's Config.RadioItem and Config.ScannerItem objects.
Config.Lua Properties
-- Located in the Radio's config.luaConfig.RadioItem= { -- Note: Changes to this item will require a server restart to take effect
Supported Inventories (QBCore)
Currently, the following QBCore inventories are supported:
QBCore Inventory
OX Inventory
QS Inventory
Core Inventory
Qbox
Configuration
Inventory Restriction
To restrict radio and scanner access to users with the radio item in their inventory, set config.enforceRadioItem to true.
Inventory Item
Qbox requires you to manually add the following to your /ox_inventory/data/items.lua file. The config.lua's Config.RadioItem and Config.ScannerItem can not be used with Qbox.
Ox Inventory Items File
['sonoran_radio_scanner'] = {
label = 'Sonoran Radio Scanner',
description = 'Listen to radio chatter with the Sonoran Radio Scanner',
weight = 1,
client = {
image = 'radio.png',
remove = function(total)
if total < 1 then
TriggerServerEvent('SonoranRadio::DropItem::Scanner')
end
end
}
},
['sonoran_radio'] = {
label = 'Sonoran Radio',
description = 'Communicate with others through the Sonoran Radio',
weight = 1,
client = {
image = 'radio.png'
}
},
Supported Inventories (Qbox)
Currently, the following Qbox inventories are supported:
While QS inventory has not been officially tested with Sonoran Radio, customers have reported it working with full functionality. Report any issues on our support website.
At the top left, select Create Project for a new category of Sonoran Radio API keys.
OpenAI: Create Project
OpenAI: Name Project
2. Add Billing Information
OpenAI charges based on usage for each model. You will need to add payment information for AI usage.
Navigate to Settings > Billing > Add payment details to add a credit or debit card on file. Once added, you can manually add credits and set billing limits.
OpenAI: Payment Details
OpenAI: Payment Limits
3. Generate an API Key
With the new project selected, navigate to API Keys > Create new secret key
Give the new API key a name (we recommend a separate key for each AI feature for optimal billing transparency) and select your Sonoran Radio project.
Transmission logs enable dispatchers to review and replay previous transmissions. With AI integration, these logs are enhanced with text transcripts, making it easier to search, reference, and analyze past communications efficiently.
Customize dispatch tones to broadcast to your units!
Sonoran Radio: Tone Board
Configuring the Tone Board
Under the Customization tab, select Tone Board.
Here, you can customize the name, icon, and color of existing tones or use the trash icon to remove a tone. Tones are sorted alphabetically.
Or, use the bottom section to upload and configure a new tone.
Uploading a Tone File
Select the upload icon to attach an audio file.
AI Text-To-Speech
The tone board also allows you to customize AI generated text-to-speech tones.
Additionally, you can .
1. Toggle AI Tone Mode
On the right of the new tone configurator, select the AI Mode button to change from file uploads to AI text-to-speech.
2. Customize And Generate via AI
Add the tone label, specify the text for the voice, and .
Visual Customization
Select the music icon on the left to customize the icon, background color, and text color.
Using the Tone Board
Tone Board Hotkey
To quickly toggle the tone board, you may configure a custom hotkey in the settings menu.
Playing a Tone
After opening the tone board via hotkey or the music note icon, you will see the following UI.
Search: Type-to-filter for available tone names
Saved Stacks: Saved, pre-created tone stacks
: Type-to-filter and multi-select the desired channels or channel groups
Tone Broadcast To Options
Tones can be played to a channel, channel group, or an .
Repeating Tones
For repeated tones, you can hover over the active tone (or tone stack) to see what channels and groups it's playing to.
Additionally, the UI will reflect the remaining play count and show a progress bar for the delay until the next play.
Stacked Tones
Stacked tones allow you to align multiple tones together and play them in order.
Toggle on the Stack icon and click on tones in order. You can also drag-and-drop the stack at the bottom left to reorder tones prior to pressing Play.
Saved Stacks
Tone stacks can be saved for faster re-use.
After creating a stack press the Save icon. This will prompt you to enter in a stack name. Saved stacks will display on the Saved Stacks tab. Saved stacks can be "loaded" into the editor, played directly to your current Broadcast To channels, or deleted.
Shortcuts:
Clicking a saved tone stack once will load the stack.
Double-clicking a saved tone stack will play it.
Recording Tones
The microphone icon allows you to record local microphone audio to be played as a tone to radios or .
Click the Audio Recording to start and stop recording. After the recording is completed, a small recording tone button will appear next to it. Click to add it to a stack or play as a single tone.
AI TTS
Similar to , the AI wand icon allows you to enter in and generate a temporary text-to-speech AI tone to be played as a tone to radios or .
Enter text into the AI Text-To-Speech input or use the Microphone icon to enter text via voice recording. Press Enter to generate and send the text-to-speech tone to the broadcast or tone stack.
FiveM Keybinds & Commands
Learn more about customizing your in-game FiveM keybinds.
FiveM Keybinds
Sonoran Radio allows you to customize keybinds for in-game actions on the radio.
To customize these, navigate to your GTA Settings -> Key Bindings -> FiveM -> (sonoranradio)
Communities can also customize the default keybinds for new users in the keybind property with the .
Radio Power
This keybind will turn your radio on/off.
Prev/Next Channel (In Group)
These keybinds will move you to the previous or next channel within the current channel group.
Prev/Next Group
These keybinds will move you to the previous or next channel group.
Radio PTT
This keybind will transmit your voice on the radio while being held down.
Panic
This keybind will toggle your panic status in the radio, and in .
Auto PTT on Panic
Sonoran Radio has a to automatically press a users PTT button for a configurable amount of time when the user :
Volume Up/Down
This keybind will quickly adjust your volume up/down, .
Toggle Radio Repeater
This keybind will toggle your .
Toggle Radio Users
This keybind will display the .
Toggle Radio Talk Animation
This keybind will toggle on/off the talking animation.
Stream Deck Integration
Stream Deck plugins like can be used to trigger any of the below.
FiveM Client Commands
Copying Channel and Scan List IDs
FiveM commands require channel and scan list IDs. These IDs can be made visible by toggling the # icon in the channel or scan list menus.
Toggle Channel Transmit
To toggle use the command
/radio channel ID
Toggle Scan List
To toggle on/off a specific use the command
/radio scanlist ID
Toggle Channel Scan
To toggle on/off use the command
/radio scan ID
FiveM Server Commands
Commands for the server console.
Debug Mode Toggle
Toggle the with the command
sonoranradio debugmode
Note: This mode does not persist through server restarts.
Update Resource Command
Run the automatic update with the command
sonoranradio update
Hear Nearby Radio Chatter
Pulled over in a traffic stop? You'll hear the real radio chatter when an officer has an active radio nearby!
Sonoran Radio - Hear Nearby Chatter
Pulled over in a traffic stop? You'll hear the real radio chatter when an officer has an active radio nearby!
Due to bandwidth usage, this feature is automatically enabled with the Pro version only!
Video Example
Audio Examples
Nearby Radio
If someone nearby has a radio, you'll hear the radio traffic they’re listening to coming from their device. The closer they are the louder the radio traffic will be. However, if they're , the audio won’t be audible to others.
Radio in Vehicle
When someone with a enters a vehicle, the radio audio will become muffled. However, if a door is open, or a window is down or broken, the audio will become clearer and louder again.
Nearby Emergency Phone Call
When someone is , nearby users will faintly hear the dispatcher's voice coming from the caller's phone.
Nearby Radio Scanner
When someone is carrying (or has placed down) , nearby users will hear the channel that the scanner is set to.
Usage
Default Chatter Volume
The volume of nearby radio chatter matches the volume setting of the emitting radio. Users with an active radio can .
Adjust Volume
Players can adjust the nearby radio volume in-game using the /radiovolume command.
Ex: /radiovolume 75 sets the nearby radio to 75% volume.
Technical Information
When a player is within 15 game units of an active radio, they will hear the live chatter from the nearest radio. If multiple radios within range are tuned to different channels, the player will hear all those channels blended, but the sound will primarily emit from the closest radio source.
This feature is experimental and subject to both change and improvements.
In-Game Earpiece
Some communities may offer custom EUP (clothing and accessories) that players can use to personalize their characters. For radio users, an option to wear an earpiece (headphones) could be useful, allowing them to listen to radio chatter privately without others nearby overhearing.
Whenever a user inserts or removes a configured in-game earpiece, a notification will be displayed confirming that others around you can or can not hear your radio.
Communities can easily select which clothing items will be treated as a radio earpiece.
1. Open the Earpiece Menu
Open the earpiece configuration menu via /radiomenu > Configure Earpiece Chatter
2. Toggle Earpiece Items
To add a chatter exclusion click "Add Earpiece Item" and select the component you'd like to add. Additionally, select any specific textures that will be considered an earpiece.
Once selected, anyone wearing this earpiece will not emit radio chatter to nearby users.
3. Removing Earpieces
To remove an earpiece option, navigate to the Remove Earpiece Item Menu option > Select the specific earpiece item > and Confirm Removal
Manual Earpiece IDs (Advanced)
Manually Configure Earpiece IDs
The earpieces.json file defines earpiece items (custom EUP prop IDs) that block radio chatter from being heard nearby.
Component IDs
Look for the component IDs for props (hats, glasses, earpieces, etc.). To find component IDs for drawables (shirts, pants, backpacks, etc.), look and add 14 to the number.
For example, to exclude a clothing item under ACCESSORIES, it might look like this:
Radio Scanners
Learn more about in-game radio scanners:
Radio Jammers
Deploy a signal jammer to disrupt nearby emergency radios for the ultimate heist!
Video Example
Coming soon!
Using the Radio Jammer
Enabling the Jammer
Enable the Config.radioJammers.enabled option in your .
Add the sonoranradio.jammers .
Opening in Standalone
You can use /radio jammer command to open a personal scanner. This requires the sonoranradio.jammers .
Opening in a Framework Server (QBCore, Qbox, etc.)
With the radio jammer item in their inventory, users can double click to open the .
Item Drop
If the jammer item is dropped on the floor, you can interact by being near it and pressing E.
If the jammer is powered on, it will impact radios in the configured radius.
Permanent Jammers
Permanent Jammers are available to everybody at configurable locations across the map.
Configuring Permanent Jammers
You can use /radio jammers to easily add, move, or delete persistent jammers
When creating a jammer, you have the ability to choose between many different jammer-like models to best fit your needs.
You can also modify the jammers.json config file for more customization. By default, there are no jammers spawned.
Jamming Radio Effect
In-game radio screens will reflect a jamming effect, with the intensity based on the jammer strength.
Developers
Ace Permissions
If you have enabled Config.radioJammers.permissionMode, you must add permissions in your server.cfgfor the scanner to work.
The ACE permission for /radio scanner is sonoranradio.jammers.
The ACE permissions for specific jammer types are sonoranradio.jammer_handheld.
jammer_handheld and other options are from the names in your .
Learn more about .
Giving the Scanner Item (QBCore)
Sonoran Radio does not provide a way to get the scanner item independently. You can give the item with any method, but here's an example chat command:
Geo Channels
Automatically change your transmit and scan channels based on in-game location.
Geo channels let you define in-game zones that automatically switch your transmitting and scanned channels based on your location.
For example, entering a downtown area can automatically switch your radio to the City channel, while driving on the highway can switch it to the Highway channel.
Creating Geo Zones
Via Radio Panel
Geo Zones via Radio Panel
In the Geo Zone tab, use the polygon, rectangle, or circle tool to create a custom zone on the map. Select the zone to customize the name, z coordinates (floor and ceiling height), and the channels to automatically transmit and scan when entered.
Additionally, you can enter comma separated ACE permissions for the zone. When configured, the zone will only apply to users with those ACE permissions.
Via In-Game Menu
Accessing the Menu
Open the menu with the in-game /radiomenu command and select Geo Channels
Zone Configuration Options
In the Geo Channels menu, you can specify which channels you want to transmit and scan upon entering, ace perms required to auto switch, add points to create a 3D zone and toggle auto switching on and off.
Add Point to Zone
View and Remove Configured Geo Zones
Select Edit Geo Zones in the menu and toggle on Show Zones. All configured zones on the map will be displayed in green. If the config.lua's debug mode is set to true, all zones will also be made visible.
Use the Select Zone menu option to swap back and forth between zones. Your selected zone will be displayed in red.
Use the Delete Zone
Commands and ACE Permissions
FiveM Geo Channel Config + ACE Permissions
In the 's Config.geoChannels property allows for additional customization.
User Toggle
Users can use /radio geoswitch to toggle the auto-switcher on/off for themselves.
An optional acePermission can be added to restrict this command to specific users.
Read and Write Permissions
How to fix SonoranRadio issues caused by read-only file permissions on Windows and Linux servers.
SonoranRadio – Fix “Config File Is Read-Only” Error
Step 1: Open Your Game Panel
Log into the game panel where your FiveM server is hosted
(e.g. ZAP-Hosting, txAdmin, Pterodactyl, Gamepanel, VPS).
Step 2: Locate the Config File
Navigate to:
🪟 WINDOWS HOSTS
Step 1: Locate the file
Step 2: Open file properties
Right-click config.lua
Click Properties
Step 3: Allow Read & Write access
Under the General tab:
❌ Uncheck Read-only
Click Apply
This allows the file to be both read and written by the server.
If it keeps reverting to Read-Only
Apply the change to the entire folder:
Right-click the sonoranradio folder
Click Properties
Uncheck Read-only
🐧 LINUX HOSTS
(ZAP-Hosting, Gamepanel, Pterodactyl, VPS)
Step 1: Open your game panel or file manager
Log into the panel where your FiveM server is hosted.
Step 2: Locate the config file
Step 3: Fix file permissions
Set the file permissions so the server can write to it:
Recommended:766
If that fails:666
If your panel supports it:
Right-click config.lua
Select Permissions
Apply the change
⚠️ If your panel does not allow permission changes, contact your hosting provider and ask them to make the file writable.
Linux File Permissions – Quick Reference
Each permission digit is the sum of:
4 = Read (r)
2 = Write (w)
1 = Execute (x)
Common Permission Values
0 = --- (No access)
4 = r-- (Read only)
6 = rw- (Read + Write)
Permission Structure
Example:
766 → Owner has full access, group/others can read & write
666 → Read & write for everyone (no execute)
Final Step: Restart SonoranRadio
After making changes, restart the resource or server:
Configure Channels
Learn more about creating and managing radio channels!
Creating Channel Groups
Channel groups allow communities to organize channels in separated categories.
Channel groups are configured in the Customization > Channels & Groups tab.
Authentication
Learn how to authenticate requests against the Sonoran Radio v2 API.
All current v2 API endpoints require bearer authentication.
Base URL
Required Headers
102
,
103
]},
{
101
,
102
,
103
}
}
name='sonoran_radio', -- Item name in your inventory | STRING
label='Sonoran Radio', -- Label for the item in your inventory | STRING
weight=1, -- Weight of the item in your inventory | INT
description='Communicate with others through the Sonoran Radio', -- Description of the item in your inventory | STRING
}
Config.ScannerItem= {
name='sonoran_radio_scanner', -- Item ID
label='Sonoran Radio Scanner', -- Label for the item in your inventory
weight=1, -- Weight of the item in your inventory
description='Listen to radio chatter with the Sonoran Radio Scanner', -- Description of the item in your inventory
Select Apply changes to this folder, subfolders, and files
Click OK
7 = rwx (Read + Write + Execute)
Config.autoPttOnPanic = {
enabled = true, -- Enable automatic PTT when panic button is pressed
duration = 15 -- Duration in seconds to hold PTT when panic button is pressed
}
resources/sonoranradio/config.lua
resources\sonoranradio\config.lua
resources/sonoranradio/config.lua
OWNER | GROUP | OTHERS
X | Y | Z
restart sonoranradio
Adds another point to the 3D zone
Undo Last Point
Removes the last placed point from the 3D zone
Min Z
The minimum Z value (floor height) of the 3D zone
Max Z
The maximum Z value (ceiling height) of the 3D zone
Finish Zone Creation
Finishes the 3D zone creation and saves to the geochannels.json file
Cancel Zone Creation
Cancels the 3D zone editor and closes the menu
Edit Geo Zones
Opens the Geo Zone editor menu
Select Zone
Select the zone you would like to edit
Transmit Channels
The channels you will automatically join and transmit in upon entering the zone, and leave upon exiting the zone
Scan Channels
The channels you will automatically join and scan in upon entering the zone, and leave upon exiting the zone
ACE Permissions
The ACE permission required for the auto switch to happen upon entering/ exiting the zone. If left blank ALL radio users will join and exit the channel upon entering that zone
To add a new channel group, select the green + icon to the right of the group bar.
Enter in a new group name, and select Ok.
Sonoran Radio - Add Channel Group
Edit or Delete a Group
Select the gear icon on the group to rename it.
Select the trash icon on the group to remove it.
Re-order the channel groups via drag-and-drop.
Shared Channels
Shared channels let you create a single channel that exists across multiple groups.
Setup
In this example, there are three radio groups — City, Highway, and County. Each group has its own Interops channel, but these channels are linked together so that any transmission on one Interops channel is heard across all three groups.
This setup allows seamless communication between departments while maintaining their individual group structures.
Determine the "Primary" Channel
One channel must be chosen as the "Primary" channel that the other channels link to. In this example, we will select the City group's Interops.
Link the First Channel to Primary
In the Highway group, edit the Highway Interops channel. Toggle the channel mode to Shared and select the City Interops channel (our "primary" channel).
Link the Second Channel to Primary
In the County group, edit the County Interops channel. Toggle the channel mode to Shared and select the City Interops channel (our "primary" channel).
Now, any user in the City, Highway, or County Interops channel will appear in all three and any transmissions in one will be heard in all three.
Channels
Channels are inside of groups and are what users connect to in order to communicate.
You can create a channel in the Customization > Channels & Groups tab, or right inside of the Dispatch panel.
Select the gear icon on the channel to rename it.
Select the plus icon in the server settings or dispatch panel to add a new channel.
Select the gear icon > trash icon to delete the channel.
Sonoran Radio - Dispatch Panel Configure Channels
When creating a channel, you only need to provide a name.
Channel Options
Preview the AI Text-To-Speech
In the admin Customize tab, hovering over green the channel audio icon will play the text-to-speech audio stating the channel name.
A red icon indicates that the AI text-to-speech failed to generate. Simply re-save the channel to regenerate the audio file.
Users can enable or disable the channel text-to-speech playing when switching channels in their settings menu.
Customize the AI Pronunciation
By toggling on the Advanced mode, you can manually adjust how the AI pronounces the channel name, which can be helpful for abbreviations and other non-common words.'
Authorization header is not using the Bearer scheme
401
API key is invalid
404
Rate Limits
All v2 endpoints are rate limited per API key, not per caller IP. Limits vary by endpoint, so check the individual endpoint page for the current enforced limit.
When a request is rate limited, the API returns 429 Too Many Requests.
These retries are intentionally limited. High-frequency integrations should still avoid bursty request patterns and should respect the published per-endpoint limits.
{
componentId = 22, -- accessories (8) + offset (14) is 22
drawableId = 78, -- Number in vMenu
texture = 0, -- Number in vMenu (or 0 for all textures)
}
Restrict user access to community approval, permissions, commands and features in-game with ACE permissions.
Command ACE Permissions
ACE permissions allow you to restrict what users have access to certain commands.
ACE permissions are configured in your server.cfg file.
To keep them organized, you can also place them in a separate file (e.g., permissions.cfg in the same directory) and then exec permissionss.cfg from within your server.cfg.
1. Create a Permission Group
Here, we'll create an admin ACE group that has access to all of the sonoranradio.example categorized permissions.
2. Assign Permissions to the Group
This adds all of the Sonoran Radio permissions (configuring repeaters, using the radio, and repairing repeaters) to the sonoranradio.example category that the admin ACE group has access to.
Group Permission Example
3. Add Users to the ACE Group
This grants a user the admin ACE permission group, specific to their in-game license ID.
ACE Permission Sync
ACE permission sync allows you to automatically approve users in the radio community, grant access to private channels, and give user permissions like name changes, kick, etc.
This sync is ran whenever you turn the radio on and connect.
Enable ACE Permission Sync
To enable this feature, set your to true.
Guest Login
ACE permission sync also allows new users to bypass the Sonoran account login and .
Restrict Guest Logins
The is false by default.
When false: All users can see and use the Login as Guest button.
When true: Users must have the sonoranradio.use ACE permission to see the Login as Guest button.
Once logged in as a guest, radio permissions will be granted based on the.
Permission Sync Options
Community Approval
Community members must be approved when first joining the radio. The approval behavior is dependent upon your .
If acePermsForRadio is true users will need the sonoranradio.autoapprove permission to be automatically approved in the community.
If acePermsForRadio is false
Private Channels
Access to private channels can be granted via ACE permissions.
You will need the channel ID ( or ) for each channel ACE permission.
sonoranradio.channel.123
General Permissions
General radio community permissions can also be granted via ACE permissions.
Admin: sonoranradio.admin
Approve Members: sonoranradio.communityapprove
Change Display Name: sonoranradio.setmynickname
Permission Sync Example
Permission Sync Configuration Example
ACE Permission Tools
You can also use external services like to easily manage ACE permissions via ranks and Discord roles.
Custom Voice Effects
Customize transmission voice effects for your community, or local user!
Available Voice Effects
Sonoran Radio lets you create custom voice effect profiles for transmissions. These effects can be independently assigned to specific radio channels and emergency calls. Or, users can also customize their own voice effect preferences!
By clicking the headphone icon and using the signal strength sliders, you can hear how the effect will sound when users are talking.
View and Compare Plans
Learn more about pricing on Sonoran Radio standalone!
Subscription Options
All payment options are monthly or quarterly (3 month) subscriptions.
Quarterly subscriptions offer a 25% discount.
Subscription
Monthly
Quarterly
Get Members
This endpoint gets paginated community members for a specific Sonoran Radio community.
# Grant the ADMIN radio permission to everyone in the admin group
add_ace group.admin sonoranradio.admin allow
# Grant the talkover-override permission to everyone in the admin group
add_ace group.admin sonoranradio.radiotalkover
# Auto-approve everyone in the leo group
add_ace group.leo sonoranradio.autoapprove allow
# Add permissions to the ace category "sonoranradio.example"
# Tower Configuration Menu
add_ace sonoranradio.example command.radiomenu allow
# Radio Access (Optional: If `acePermsForRadio` is `true` in config.lua)
# If using `acePermSync` in config.lua, this will also auto-approve the user in the community
add_ace sonoranradio.example sonoranradio.use allow
# Radio Display Name Command Access
add_ace sonoranradio.example sonoranradio.displayname allow
# ACE Permission Sync (Optional: If `acePermSync` is `true` in config.lua)
# See the "ACE Permission Sync" section below this documentation section for more info
# This example auto-approves the user in the radio community
add_ace sonoranradio.example sonoranradio.autoapprove allow
# Tower Repair (Optional: If `acePermsForTowerRepair` is `true` in config.lua)
add_ace sonoranradio.example sonoranradio.repair allow
# Connected Users List (Optional: If `acePermsForRadioUsers` is `true` in config.lua)
add_ace sonoranradio.example sonoranradio.radiousers allow
# Radio Scanner Menu (Optional: If `chatter` is `true` in config.lua)
add_ace sonoranradio.example sonoranradio.scanner allow
# Radio Scanner Channel Access (Optional: If `chatter` is `true` in config.lua)
# Number is based off of the channel ID
add_ace sonoranradio.example sonoranradio.channel.123
# Give the group access to /radio scanner
add_ace group.admin sonoranradio.jammers allow
# You can restrict specifc jammer types to specific ace groups
add_ace group.admin sonoranradio.jammer_handheld allow
ACE permission sync will override all existing user permissions.
Any manually granted permissions will be removed, ensuring the user has only the permissions configured through ACE.
The Vocoder voice effect simulates a modern P25-style radio compression using an AMBE-like encoding approach, commonly heard in proprietary digital radio systems. It’s ideal for communities seeking realistic conditions and authentic downsides.
When enabled, audio is routed through a vocoder for encoding and decoding before broadcast, causing a slight transmission delay.
The vocoder has optional bitrates of 3200, 2400, 1600, 1400, 1300, 1200, 700 and 450 bit/s. While the suggested bitrate is 2400, the bitrate can be increased for "less effect" or increased for "more effect".
It is recommended to use thein addition to the vocoder to have in-game signal strength impact the transmission quality.
Clipping
Clipping
The clipping voice effect mutes or "clips" audio intermittently based on in-game signal strength. As the signal weakens, more audio is cut, making transmissions increasingly difficult to understand.
Digital
Digital
The digital voice effect applies bitrate compression to the audio, causing it to sound increasingly robotic and harder to understand as signal quality decreases.
Analog
Analog
The analog voice effect adds static and scratchiness to the audio, making it sound progressively fuzzier and less clear as signal quality deteriorates.
Equalizer (Pre & Post-Effects)
Equalizer
The equalizer effect allows you to boost or reduce frequencies throughout the audio range.
&#xNAN;Tip: For a "tin can" effect, increase the mid frequencies while reducing the low and high ranges.
Pre-Effect EQ
The pre-effect EQ is a profile applied directly to the mic input before any effects (vocoder, digital, analogue, etc.) are applied. This can help improve clarity with the vocoder, grant a tin-can style effect, and more.
Post-Effect EQ
The post-effect EQ is a profile applied to the audio after all effects have been processed. This can help improve clarity and improve the finalized effects.
Applying the Voice Effect
On the User-Side
Voice effects can be customized by the individual listener, based on their preferences. Users can open their Settings menu and select the Voice FX tab to customize.
{"id":11,"label":"Vocoder Example #1","vocoder":{"mode":"3200","enabled":true},"equalizer":[{"q":1,"freq":31,"gain":-20,"type":"lowshelf","freqlabel":"<31","bandwidthLabel":"2.5"},{"q":1,"freq":62,"gain":-20,"type":"peaking","freqlabel":"63","bandwidthLabel":"1.8"},{"q":1,"freq":125,"gain":-4,"type":"peaking","freqlabel":"125","bandwidthLabel":"1.2"},{"q":1,"freq":250,"gain":0,"type":"peaking","freqlabel":"250","bandwidthLabel":"0.6"},{"q":1,"freq":500,"gain":0,"type":"peaking","freqlabel":"500","bandwidthLabel":"0.0"},{"q":1,"freq":1000,"gain":-3.5,"type":"peaking","freqlabel":"1k","bandwidthLabel":"0.0"},{"q":1,"freq":2000,"gain":0.5,"type":"peaking","freqlabel":"2k","bandwidthLabel":"1.2"},{"q":1,"freq":4000,"gain":1.5,"type":"peaking","freqlabel":"4k","bandwidthLabel":"1.8"},{"q":1,"freq":8000,"gain":4.5,"type":"peaking","freqlabel":"8k","bandwidthLabel":"2.5"},{"q":1,"freq":16000,"gain":13.5,"type":"highshelf","freqlabel":">16k","bandwidthLabel":"2.5"}],"equalizerGain":{"low":0,"mid":0,"high":0},"postEqualizer":[{"q":1,"freq":31,"gain":-20,"type":"lowshelf","freqlabel":"<31","bandwidthLabel":"2.5"},{"q":1,"freq":62,"gain":-16.5,"type":"peaking","freqlabel":"63","bandwidthLabel":"1.8"},{"q":1,"freq":125,"gain":-12.5,"type":"peaking","freqlabel":"125","bandwidthLabel":"1.2"},{"q":1,"freq":250,"gain":-2,"type":"peaking","freqlabel":"250","bandwidthLabel":"0.6"},{"q":1,"freq":500,"gain":2.5,"type":"peaking","freqlabel":"500","bandwidthLabel":"0.0"},{"q":1,"freq":1000,"gain":3,"type":"peaking","freqlabel":"1k","bandwidthLabel":"0.0"},{"q":1,"freq":2000,"gain":5.5,"type":"peaking","freqlabel":"2k","bandwidthLabel":"1.2"},{"q":1,"freq":4000,"gain":1.5,"type":"peaking","freqlabel":"4k","bandwidthLabel":"1.8"},{"q":1,"freq":8000,"gain":-4,"type":"peaking","freqlabel":"8k","bandwidthLabel":"2.5"},{"q":1,"freq":16000,"gain":-1,"type":"highshelf","freqlabel":">16k","bandwidthLabel":"2.5"}],"clipDistortion":{"max":0.09,"min":0,"enabled":true,"aggressiveness":0.05},"analogDistortion":{"max":2,"min":0,"enabled":false,"aggressiveness":0.05,"constantStatic":0},"digitalDistortion":{"max":0,"min":0,"enabled":false,"aggressiveness":0,"constantStatic":0}}
{"id":9,"label":"Vocoder Example #2 (More Bass)","vocoder":{"mode":"3200","enabled":true},"equalizer":[{"q":1,"freq":31,"gain":-20,"type":"lowshelf","freqlabel":"<31","bandwidthLabel":"2.5"},{"q":1,"freq":62,"gain":-11.5,"type":"peaking","freqlabel":"63","bandwidthLabel":"1.8"},{"q":1,"freq":125,"gain":-4,"type":"peaking","freqlabel":"125","bandwidthLabel":"1.2"},{"q":1,"freq":250,"gain":-10,"type":"peaking","freqlabel":"250","bandwidthLabel":"0.6"},{"q":1,"freq":500,"gain":-3,"type":"peaking","freqlabel":"500","bandwidthLabel":"0.0"},{"q":1,"freq":1000,"gain":4.5,"type":"peaking","freqlabel":"1k","bandwidthLabel":"0.0"},{"q":1,"freq":2000,"gain":-3.5,"type":"peaking","freqlabel":"2k","bandwidthLabel":"1.2"},{"q":1,"freq":4000,"gain":-4.5,"type":"peaking","freqlabel":"4k","bandwidthLabel":"1.8"},{"q":1,"freq":8000,"gain":-14,"type":"peaking","freqlabel":"8k","bandwidthLabel":"2.5"},{"q":1,"freq":16000,"gain":-18,"type":"highshelf","freqlabel":">16k","bandwidthLabel":"2.5"}],"equalizerGain":{"low":0,"mid":0,"high":0},"postEqualizer":[{"q":1,"freq":31,"gain":3,"type":"lowshelf","freqlabel":"<31","bandwidthLabel":"2.5"},{"q":1,"freq":62,"gain":3,"type":"peaking","freqlabel":"63","bandwidthLabel":"1.8"},{"q":1,"freq":125,"gain":3,"type":"peaking","freqlabel":"125","bandwidthLabel":"1.2"},{"q":1,"freq":250,"gain":3,"type":"peaking","freqlabel":"250","bandwidthLabel":"0.6"},{"q":1,"freq":500,"gain":3,"type":"peaking","freqlabel":"500","bandwidthLabel":"0.0"},{"q":1,"freq":1000,"gain":3,"type":"peaking","freqlabel":"1k","bandwidthLabel":"0.0"},{"q":1,"freq":2000,"gain":3,"type":"peaking","freqlabel":"2k","bandwidthLabel":"1.2"},{"q":1,"freq":4000,"gain":3,"type":"peaking","freqlabel":"4k","bandwidthLabel":"1.8"},{"q":1,"freq":8000,"gain":3,"type":"peaking","freqlabel":"8k","bandwidthLabel":"2.5"},{"q":1,"freq":16000,"gain":3,"type":"highshelf","freqlabel":">16k","bandwidthLabel":"2.5"}],"clipDistortion":{"max":0,"min":0,"enabled":false,"aggressiveness":0},"analogDistortion":{"max":0,"min":0,"enabled":false,"aggressiveness":0,"constantStatic":0},"digitalDistortion":{"max":0,"min":0,"enabled":false,"aggressiveness":0,"constantStatic":0}}
Using multiple identical servers for overflow?
Multi-server lets each server run independently while sharing the same channel setup, keeping communications separate and organized.
To temporarily transmit in a single channel, and move back to your original channel afterwards, select the keyboard icon to set a per-channel XMIT hotkey.
Dispatch: Per-Channel XMIT Hotkey
Switching Transmit and Scanned Channels
Switching Transmit and Scanned Channels
To switch to another channel, click the microphone button on the channel card.
CTRL + Click on the microphone option to transmit on multiple channels at once.
To change your display name, users will need the Change Display Name permission. To manage others, users will need the Manage Display Names permission.
Via Radio Interface
Right click a user in the radio interface and select Display Name
Via Members Tab
Via Members Tab
In the admin panel's Members tab, select the drop-down and Set Display Name button to edit a user's display name.
Right-click on a user to individually increase or decrease their transmission volume.
Per-Channel Volume
Right-click on a channel to individually increase or decrease transmission volume.
Viewing Channel IDs
Channel IDs
Some integrations like ACE perm sync or scanner permissions may require you to enter the internal ID number of a specific channel.
Select the # symbol on the last channel in the dispatch panel to toggle ID visibility.
Sonoran Radio - Connect to Radio
Sonoran Radio - Radio Hub
Push-to-talk key binds are only global in the .
On web, the browser window must be in focus.
Customizing Radio Frames
Customize your community's radio frames!
Video Tutorial:
Sonoran Radio: Customize Frames
Selecting Custom Frames
Custom radio frames can be selected in the radio settings menu. Custom frames allow your community to create more UI options for each department!
The drop-down menu will appear in your settings menu if you have one or more options available to you.
Restricting Custom Frames
Restrict radio frames by department, job, or job grade, and set admin command permissions. Compatible with ESX, QBCore, or as a standalone.
You can use , and even sync them with Discord roles!
Example: SAHP department members with police job grades 1-3 can use frames:
default
signalpro
voxguard
Config.frames
Customizing Radio Frames
Navigate to the sonoranradio\skins directory.
Locate a skin folder, which will contain 2-4 images and a skin.json file, displaying different frames.
Observe the images, which include handheld, mobile, aircraft, and possibly HUD radio types.
Frame Types
The following are valid as values for type:
portable - Used for handheld radios
vehicle - Used for mobile radios installed in a vehicle
hud - Top-down view of a portable radio
With vehicle type frames, you can additionally customize the vehicleClasses property to whitelist the frame to specific vehicle types.
For example, our default skin whitelists one frame to aircraft only: "vehicleClasses": [15, 16]. See available vehicle classes .
Body Settings
In body, specify the image filename for each radio type.
For instance, use radio-portable.png for a portable radio.
Additionally, set the width value to define the image's display width in-game.
Controls
Assign actions to buttons at specific positions on the radio image.
Example: Align a panic button hitbox with the panic button on the image, so clicking it in-game triggers a panic action.
Available action types: power, next_preset, prev_preset
Screen and Mini-Screen
Specify the position and width of the radio frame screen in Sonoran Radio to display information. Modify values under screen or miniScreen for HUD-type frames.
For HUD-type frames, controls can be left blank.
Screen Styles
If you would like to use a text-style display instead of the normal radio screen, you can set the style to text. For example:
Example File
Below is an example of a skin.json file:
skin.json
Frame Placement Menu
The frame placement menu offers rapid configuration of the screen size, location, and button placements.
With debug mode enabled, open the menu by clicking on the icon in the top right of your screen.
Select the skin ID and frame that you wish to edit. Then, select each property and utilize the arrow keys to adjust the configuration.
Once complete, save your changes using the Save skin.json button.
Programmatically Changing Frames
To get all available frames, utilize the following server-side export:
To set a users frame, utilize the client-side event:
Vehicle Radio Display
View Sonoran Radio on a working, in-vehicle 3D display!
Vehicle Radio Display (Video Tutorial)
The vehicle radio display is a free Tebex script fully compatible with the free version of Sonoran Radio.
Sonoran Radio - Vehicle Display
Installation (Written)
1. Download the Script
"Purchase" the free .
Once purchased, see:
2. Install the script
A. Extract Folders
Extract the script's two folders (sonoran-radiodisplay and sonoran-radiodisplay_helper) to a folder in your server's resources folder called [sonoranradio].
B. Rename Config Files
Inside of the sonoran-radiodisplay folder:
Rename config.changeme.lua to config.lua
See more about the here.
Rename radios.changeme.json
C. Start the Resource
To start the display resource and give the auto-updater permissions to run, paste the following into your server.cfg
Configuration
The config.lua file allows you to customize the labels, ACE permissions, and more!
Default config.lua
Spawning the Radio Display
Use the /radiodisplay command while in a vehicle to spawn a new display.
Use the keys displayed at the bottom of your screen to move and rotate the display into position.
Select Attach to attach the display to your vehicle.
See the Config.acePerms.aceObjectUseMenu for permission restrictions.
radios.json Property Explanation
Property Name
Example
Notes
Commands
Command Name
Command Description
Required Permissions
Default Vehicles
Vehicle Spawncode
Adds Radio by Default
Additional Display Resources
Loving the radio display? Check out our and displays!
Changelog
v1.0.1
fix: Duplicate radio items when a passenger is in the vehicle
Config.frames = {
permissionMode = 'ace', -- ace, qbcore, esx or none
adminPermission = 'sonoranradio.admin', -- ACE permission required to use admin commands
departments = {
['sahp'] = {
label = 'San Andreas Highway Patrol',
permissions = {
jobs = { -- Jobs that can use this department
['police'] = {
grades = { -- Job grades that can use this department
1,
2,
3
}
}
},
ace = { -- ACE Permissions that can use this department | ONLY EFFECTIVE IN ACE PERMISSION MODE
'sonoranradio.sahp'
}
},
-- Radio frames that can be used by this department
allowedFrames = {
'default',
'signalpro',
'voxguard',
'hi-vis'
}
}
}
}
local frames = exports.sonoranradio:GetAvailableFrames(GetResourcePath('sonoranradio').. '/skins')
print(json.encode(frames))
-- Returns:
-- ["default","hi-vis","signalpro","voxguard"]
-- Array of frame names
local frameName = "hi-vis" -- Frame/skin name | i.e. hi-vis, default, voxguard
local source = 1 -- User's server ID
TriggerClientEvent('SonoranRadio::AdminSkinChange', source, frameName)
Sonoran Radio - Vehicle Radio - Debug Mode Enabled
Sonoran Radio Screen - Default
Sonoran Radio Screen - Text
to
radios.json
Select Apply to all of this vehicle model to have the radio display automatically added whenever the vehicle type is spawned.
See the config.luaConfig.acePerms.aceObjectAdminUseMenu for permission restrictions.
This is a table that contains the x, y, and z rotation of the radar
Vehicle
POLICE
This is the vehicles spawn code
Bone
-1
This is the index of the bone you would like to attach the radar to
yes
POLICE3
yes
POLICE4
yes
POLICEOLD1
no
POLICEOLD2
no
SHERIFF
yes
SHERIFF2
yes
# Start the Radio Display Resource
ensure sonoran-radiodisplay
# Grant permissions to the auto-updater
add_ace resource.sonoran-radiodisplay command allow
add_ace resource.sonoran-radiodisplay_helper command allow
Config = {}
Config.debug_mode = false -- Enable debug mode
Config.configuration_version = 1.0
Config.auto_update = true -- Enable auto updates
Config.lang = {
addNewRadioHelp = 'Open the menu to begin spawning a new in-car model model',
vehNotCompatible = 'This vehicle is not compatible with the in-car model placement system!',
vehAlrRadio = 'This vehicle already has a valid in-car radio!',
radioMenuHeader = 'Sonoran In-Car Radio',
creditsPanel = 'Made by',
spawningSubMenu = 'In-Car Radio Spawning',
attachingSubMenu = 'Attaching',
deletionSubMenu = 'Are you sure?',
radioAttachMenuButton = 'Attach In-Car Radio',
deleteMenuButton = 'Delete Current In-Car Radio',
spawnMenuButton = 'Spawn In-Car Radio',
deletionConfirmationButton = 'Yes, remove from all of these vehicles',
deletionCancelButton = 'Cancel',
deletionCancelled = 'In-Car Radio deletion cancelled',
noRadioFound = 'No In-Car Radio is in this vehicle!',
modelComboBox = 'Model:',
vehAlrRadioNoti = '~r~This vehicle already has an In-Car Radio of this type',
notInVeh = '~r~You must be in a vehicle!',
vehicleBone = 'Radio - Vehicle Bone',
object = "Object:",
vehicleBoneComboBox = 'Vehicle Bone',
objectName = 'Sonoran In-Car Radio',
attachButton = 'Attach',
detachButton = 'Detach',
confirmPlacementButton = 'Apply to all of this vehicle model',
cannotGoFaster = '~r~You cannot go any faster!',
cannotGoSlower = '~r~You cannot go any slower!',
}
Config.commands = {
carRadioMenu = 'radiodisplay',
restricted = false -- should the radio display menu be restricted?
}
Config.permissionMode = "ace" -- Available Options: ace, framework, custom
-- Ace Permissions Section --
Config.acePerms = {
aceObjectUseMenu = "sonoran.incarradio", -- Select the ace for placing new In-Car radios
aceObjectAdminUseMenu = "sonoran.incarradio.admin", -- Select the ace for placing new In-Car radios into all vehicles of the same model
}
-- Framework Related Settings --
Config.framework = {
frameworkType = "qb-core", -- This setting controls which framework is in use options are esx or qb-core
civilianJobNames = {"unemployed"}, -- An array of job names that should be allowed to use the radio menu
adminJobNames = {"admin"}, -- An array of job names that should be allowed to use the radio menu as an admin
useCivilianJobListAsBlacklist = false, -- This will treat the civilian job list as a blacklist rather than a whitelist
}
-- Configuration For Custom Permissions Handling --
Config.custom = {
checkPermsServerSide = true, -- If true the permission event will be sent out to the server side resource, this is recommended
permissionCheck = function(_, type) -- This function will always be called server side.
if type == 0 then -- Check permission to use the menu
return true or false -- Return true if they have admin, return false if they don't
end
end
}
Config.general = {
notificationType = "native", -- Available options: native, pNotify, okokNotify
useAllowlistAsBlacklist = false, -- If true, the Config.allowlistedCars will be treated as an blacklist
}
Config.allowlistedCars = {
"POLICE",
"POLICE2",
"POLICE3",
"POLICE4",
"FBI",
"FBI2",
"SHERIFF",
"SHERIFF2",
}
ID
2
ID must be unique. No other radar can share this ID
Position
This is a table that contains the x, y, and z coords of the radar
/radiodisplay
This command will initiate the radar spawning and attaching process
Learn more about custom integrations with the in-game resource!
Push-to-talk
When a user presses or releases their PTT key, the following event can be used:
-- Event sent from Sonoran Radio
TriggerEvent('SonoranRadio::API:ToggleTalking', toggle, inVeh)
-- Event listener in a custom script
AddEventHandler('SonoranRadio::API:ToggleTalking', function(toggle, inVeh)
print(toggle) -- Boolean (Are the talking?)
print(inVeh) -- Boolean (Are they in a vehicle)
end)
Radio Enabled
You can check if the radio is active (turned on) like so:
Emergency (911) Calls
You can start, end, and toggle an emergency call with a client resource export:
The following client events reflect the emergency call status:
Signal Quality
You can read the player's signal quality and apply extra degradation from another client resource.
Forcing Extra Degradation
Use keyed modifiers so multiple resources can affect signal quality without overwriting each other.
The amount passed to setExtraSignalDegradation(key, amount) is clamped between -1.0 and 1.0.
Positive values add more degradation.
Negative values reduce degradation.
Passing 0 or nil removes that key's modifier.
Getting Signal Details
If you need the full breakdown of what the player is experiencing, use:
Panic Button
You can listen to or active the panic button with an API event
Set Display Name
Programmatically update a user's radio display name (Client Side)
Guest Display Names
To customize guest display names without giving permission to change their own name, you can update the Config.getGuestDisplayName
Tower Destruction
Get notified when a radio tower is destroyed or repaired
Developer Events
This document lists the server-side events emitted for developer integrations. Payload sketches use Lua table syntax. Unless noted, timestamps are Unix seconds from os.time(). All payloads are sanitized to contain only primitive values and shallow tables.
Common Payload Shapes
Player Payload
Returned by DeveloperEvents.playerContext. position/heading are included when the underlying call requested coordinates.
Dispatcher Payload
Specialised player payload that also embeds the dispatcher’s lb-phone number when available.
{
id = string?,
name = string?,
note = string?,
type = 'static' | 'handheld' | string,
range = number?,
strength = number?,
active = boolean,
temporary = boolean?,
owner = number?,
position = { x = number?, y = number?, z = number?, heading = number?, exact = boolean? }?
}
{
id = string?,
owner = number?,
name = string?,
range = number?,
strength = number?,
active = boolean
}
-- In your custom script
-- true = active
-- false = inactive
local isActive = exports['sonoranradio']:isRadioActive()
-- In your custom script
-- true = Start
-- false = End
-- 'toggle' = Toggle
exports['sonoranradio']:setEmergencyCall('toggle')
exports['sonoranradio']:setEmergencyCall('toggle', 'My Custom Name')
-- Event sent from Sonoran Radio
TriggerEvent('SonoranRadio::API:EmergencyCall', enabled)
-- Event listener in a custom script
AddEventHandler('SonoranRadio::API:EmergencyCall', function(enabled)
print(enabled) -- Boolean (is the call starting (true) or ending (false))
end)
-- Event sent from Sonoran Radio
TriggerEvent('SonoranRadio::API:EmergencyCallDispatcher', dispatcherNames)
-- Event listener in a custom script
AddEventHandler('SonoranRadio::API:EmergencyCallDispatcher', function(dispatcherNames)
print(dispatcherNames) -- Table with strings for the dispatcher's names
-- NOTE: does not receive `{}` if emergency call is ended
-- (above event will receive that)
end)
-- In your custom script
exports['sonoranradio']:getSignalQuality() -- raw infrastructure quality from 0.0 to 1.0
exports['sonoranradio']:getEffectiveSignalQuality() -- final quality after zones + extra degradation
exports['sonoranradio']:getExtraSignalDegradation() -- total extra degradation from third-party modifiers
-- Add 25% extra degradation from your resource
exports['sonoranradio']:setExtraSignalDegradation('my-resource', 0.25)
-- Reduce degradation by 10% for a temporary buff or item
exports['sonoranradio']:setExtraSignalDegradation('signal-booster', -0.10)
-- Clear your modifier when it is no longer needed
exports['sonoranradio']:clearExtraSignalDegradation('my-resource')
exports['sonoranradio']:clearExtraSignalDegradation('signal-booster')
local signal = exports['sonoranradio']:getSignalQualityDetails()
print(signal.baseQuality) -- tower/rack/repeater quality before degradation
print(signal.zoneDegradation) -- active tunnel/polyzone degradation
print(signal.extraDegradation) -- third-party modifier total
print(signal.totalDegradation) -- final degradation after combining both
print(signal.effectiveQuality) -- final signal quality sent to the radio UI
print(signal.zoneName) -- current degradation zone name, or nil
-- Activate the panic button
TriggerEvent('SonoranRadio::API:PanicButton')
-- Listen to the panic button
AddEventHandler('SonoranRadio::API:PanicButton', function(status)
print(status) -- Boolean (whether the panic button is active or not)
-- your code here
end)
-- Set your current display name in the radio
exports['sonoranradio']:handleNameChange('my new name')
-- My Custom Guest Display Name Generator
-- Param `source`: The server id of the user logging in as guest
-- Returns string or nil (to use default)
Config.getGuestDisplayName = function(source)
return ('I am logging in as a guest %s %s'):format(GetDisplayName(source), makeid())
end
-- Event sent from Sonoran Radio (server-side)
TriggerEvent('SonoranRadio::API:TowerDishDestroyed', towerId, tower.DishStatus)
-- Event listener in a custom script
AddEventHandler('SonoranRadio::API:TowerDishDestroyed', function(playerSource, towerId, dishStatus)
print(playerSource) -- The player ID that destroyed the dish
print(towerId) -- Numerical ID of the tower
print(dishStatus) -- Array of statuses {'alive', 'alive', 'dead', 'alive'}
end)
-- Event sent from Sonoran Radio (server-side)
TriggerEvent('SonoranRadio::API:TowerRepaired', towerId, tower.DishStatus)
-- Event listener in a custom script
AddEventHandler('SonoranRadio::API:TowerRepaired', function(playerSource, towerId, dishStatus)
print(playerSource) -- The player ID that repaired the tower
print(towerId) -- Numerical ID of the tower
print(dishStatus) -- Array of statuses {'alive', 'alive', 'alive', 'alive'}
-- (NOTE: will always contain all 'alive')
end)
{
serverId = number,
name = string?,
identifiers = { string, ... }?,
position = { x = number, y = number, z = number }?,
heading = number?
}
By default, the radio display remains visible on-screen at all times. Users can toggle focus on the radio, enabling interaction when needed and un-focusing when done.
Use the (Default is ~ right above tab)
Use the /radio command
Access to the radio can be restricted with .
Hiding the In-Game Radio
A. Via Button
Use the purple button or icon on the radio frames:
B. Via Command
Use the /radio hide command in-game to hide the radio.
C. ESC Options
You can also .
Logging In
Login with Account
When you first use the in-game resource, you'll need to log in.
A 4-digit code will appear for you to sign in from your browser.
Open in a web browser, log in if needed, enter your code, and click "Activate" to log in to the game.
Login as Guest
When you first use the in-game resource, you'll need to log in.
If your community has ACE permissions configured, no account creation or link is necessary.
Select Login as guest to bypass the account link and start using your radio. This guest option will only display if acePermsForGuests is set to true.
Logging Out
You can logout/un-link your in-game radio via the settings menu (gear icon).
Using the In-Game Radio
Setting your Push-To-Talk (PTT) Keybind
Connecting and Switching Channels
Channel Selection via Knob
The radio will connect when you turn it on with the power button ().
Previous/Next Channel (In Group)
Left click the top knob to rotate to the next channel inside the channel group.
Previous/Next Group
Channel Selection via Menu
Select the channel menu icon to open the channel selection options. Click on the channel you wish to transmit on.
CTRL + Click allows you to select multiple channels to transmit on at once.
Channel Selection via Hotkeys, Commands, and Stream Deck
Channels can also be changed via:
Channel Scanning/Listening
Scanning Radio Channels
Scanning a radio channel allows users to hear all transmissions, even if they are not actively transmitting on that channel. However, transmissions on the primary channel (the one you are actively talking on) will take priority, muting transmissions from scanned channels whenever someone speaks on the primary channel.
Selecting Scanned Channels ()
Select the Channel Scan Icon
Custom Scan Lists
Scan Lists
Users can scan one or more channels to listen without transmitting. For monitoring multiple channels, "Scan Lists" let users group channels and easily switch between them.
Creating a Scan List ()
Toggle scanning on one or more channels.
Adjust Volume
Radio Volume
System-Wide Volume
In the settings menu (gear icon) you can adjust the radio's total volume output.
Per-User Volume
You can also right-click on any user to adjust their volume specifically.
Adjust Volume With Sirens
Automatic Volume Increase w/Sirens
When in-game, turning on your sirens will increase your overall radio volume by the configured amount. Turning your sirens back off will lower the volume back down.
This feature is automatically integrated with .
If the resource is not named LVC, the .
For communities not using LVC, the functionality will fall back to a FiveM native that will trigger the functionality if either lights or sirens are activated.
Move and Resize the Radio
Radio Move and Resize
On the radio screen, open the Settings modal by pressing the gear icon.
Select Move/Resize
Click and drag the radio to change it's position on your screen.
Escape Mode
ESC Radio Display Behavior
The Escape Mode selector changes the in-game radio display behavior after pressing ESC.
The server default for this setting can be configured in the .
Keep Radio Visible
The radio stays visible on ESC
Panic
In-Game Panic
Pressing the orange panic button on the in-game radio toggles your panic status.
This can also toggle your panic status in .
Sonoran Radio has a to automatically press a users PTT button for a configurable amount of time when the user presses their radio panic button:
Display Names
Update User Display Name
Radio Types
Sonoran Radio offers three radio platforms: handheld, top-down HUD, and vehicle.
All three radio platforms can have .
When opening the radio via /radio the handheld radio will display on-screen.
The vehicle UI will display when opening the radio inside of a vehicle.
The top-down HUD style can be viewed with the /radiohud command.
Change Radio Frames
The settings menu also allows you to customize your radio frame:
Learn more about customizable radio frames:
Civilian Usage
Placing an Emergency (911) Call
Civilians can place an emergency call to speak directly with dispatchers:
Custom Animations
Unlock multiple more custom radio animations, FREE with Sonoran Radio pro!
The adjustment amount is customizable in the settings menu.
Hold ctrl and drag to resize the radio.
Press esc to save the new size and position.
In-Game Radio - Settings
In-Game Radio - Move/Resize
Hide Radio
The radio closes on ESC
XMITT (PTT)
The radio closes on ESC, but is visible while transmitting
Config.autoPttOnPanic = {
enabled = true, -- Enable automatic PTT when panic button is pressed
duration = 15 -- Duration in seconds to hold PTT when panic button is pressed
}
In some cases, the auto-updater requires manual steps from one version to the next.
2.25.6 (Water Degredation)
Version 2.25.6 adds a new configuration option to degrade signal strength when the user is underwater.
Open your existing config.lua
Add the new properties to the configuration file
2.24.0 (Geo Channels, Auto Notifications, Display Name Function, Auto On-Scene Status AI)
Version 2.24.0 adds a new configuration options to:
Create Geo-based channel switching
Use new notification frameworks
2.22.0 (Login as Guest)
Version 2.22.0 adds a new configuration option to use in-game ACE permissions for a guest login, removing the need for a user account.
Open your existing config.lua
Add the new property to the configuration file
2.21.0 (AI Postal Callouts + Signal Jammers)
Version 2.21.0 adds a new configuration option for AI Pursuit Postal Callouts.
Open your existing config.lua
2.20.0 (Default ESC Behavior)
Version 2.20.0 adds a new feature to configure your community's default .
Open your existing config.lua
Add the new
2.19.0 (PTT on Panic & AI Callouts)
Version 2.19.0 adds a new feature to automatically press a user's push-to-talk button on panic.
Open your existing config.lua
Add the three new config options:
2.18.0 (LB Phone, Background Noise)
Version 2.18.0 adds a new integration for LB phone and feature to inject background noise into your transmissions.
Open your existing config.lua
2.15.0 (ACE Perm Sync)
Version 2.15.0 adds a new feature to manage radio community approval and permissions via ACE perms.
Open your existing config.lua
Add the new Config.acePermSync = false
2.14.0 Release (LVC Resource Name)
Version 2.14.0 adds a new feature to increase radio volume when in-game sirens are on.
Open your existing config.lua
Add the new
2.11.0 Release (Earpieces JSON)
Version 2.11.0 Migrates the earpiece configuration from the config.luato earpieces.json. Therefore, this property is no longer needed in your config.lua file.
Open the new earpieces.json
2.10.0 Release (Config Values)
Version 2.10.0 introduces new configuration values to customize the default user keybinds and the emergency call prefix.
Note: This new default key mapping will only apply to new users who have not joined the server and had their keybind set yet.
Open your existing config.lua
2.8.1 Release (Mobile Repeater Default Key)
Version 2.8.1 introduces a new configuration value to customize the default user keybind to toggle mobile repeaters.
Note: This new default key mapping will only apply to new users who have not joined the server and had their keybind set yet.
Open your existing config.lua
2.7.0 (Speakers, Tunnels, Voice Effects, and Earpiece EUP)
Version 2.7.0 introduces a new configuration value for EUP earpiece detection (to prevent people from hearing nearby chatter).
Config.heavySignalDegradeInWater= { -- Heavily degrade radio signal while the player is in water to mimic an IP67-rated handheldenabled=true, -- Set to true to enable heavy signal degrade in waterpedInWaterDegredation=0.6, -- Signal strength multiplier when the player is simply in water (e.g. 0.6 would reduce signal strength to 60% of normal)pedUnderWaterDegredation=0.3-- Signal strength multiplier when the player is underwater (e.g. 0.3 would reduce signal strength to 30% of normal)}
Config.emergencyCallCommand = '999' -- Command suffix to start or stop an emergency call (i.e. '911' == /radio 911)
-- Default radio keybinds (these can be changed in GTA settings) --
Config.keybinds = {
['toggle'] = '',
['ptt'] = '\\',
['power'] = '',
['panic'] = '',
['nextChannel'] = '',
['prevChannel'] = '',
['talkAnim'] = ''
}
-- Radio Chatter Exclusion Settings --
Config.chatterExclusions = {
{
componentId = 2, -- Ears
drawableId = 1, -- Number in vMenu MP Ped Component list
texture = 0 -- Texture ID in vMenu MP Ped Component list
},
{
componentId = 2, -- Ears
drawableId = 2, -- Number in vMenu MP Ped Component list
texture = 0 -- Texture ID in vMenu MP Ped Component list
},
{
componentId = 2, -- Ears
drawableId = 2, -- Number in vMenu MP Ped Component list
texture = 0 -- Texture ID in vMenu MP Ped Component list
},
{
componentId = 2, -- Ears
drawableId = 42, -- Number in vMenu MP Ped Component list
texture = 0 -- Texture ID in vMenu MP Ped Component list
},
}
-- Have the radio automatically callout pursuit locations (when toggled with the keybind)
Config.autoCallouts = {
enabled = true, -- Whether or not this feature is enabled
speedUnit = 'mph', -- mph | kmh | none -- The unit of speed provided with the callout
}
-- Change the type from 'native' to the new 'auto' option-- OLD:Config.notifications
-- Customize Radio Guest Display NamesConfig.getGuestDisplayName=function(source
Config.autoOnSceneStatus= {enabled=true
Config.acePermsForRadioGuests=false-- Restrict users joining the radio as a guest to an ace permission
Config.autoCallouts= {enabled=true
Config.radioJammers= {enabled=true
Config.autoPttOnPanic= {enabled=true
AI Pursuit Auto-Callouts
Let Sonoran Radio handle your pursuit location and direction callouts automatically!
Video Example
Enabling Auto-Callouts
Auto-callouts can be enabled using the in-game keybind (configurable in the config.lua) or by using the /sonradtogglecallouts command in-game
When your radio is powered, auto-callouts are enabled, and you're in a vehicle - Sonoran Radio will automatically callout street and direction changes over the radio. If configured, it will also callout average your speeds
Example: "Westbound, East Joshua Road, Speeds 85"
Configuration
You can .
Keybinds
You can . By default, it is unset.
Speeds
You can . By default, it is in miles per hour, but can be changed to kilometers per hours (kmh), or speed callouts can be disabled by setting it to none.
Postal Codes
You can . Additionally, you will need to specify the name of your postal code resource in the .
Languages
Below is a complete list of all languages and words. If a street name or language needed is not listed below, to have them added.
English
Audio Playback
By default, users can hear the AI transmissions locally when their radio is playing them. This can be disabled in the FiveM tab of the radio settings.
API Endpoints v2
Sonoran Radio v2 API endpoints with bearer auth, community-scoped URLs, and documented per-endpoint rate limits.
Sonoran Radio v2 moves authentication to the Authorization header and scopes community-specific requests with communityId in the URL for /v2/servers/{communityId}/... routes.
Available v2 Docs
Libraries
Use the official Sonoran SDK libraries if you want package-managed helpers for the v2 API.
Authentication
Start here for bearer authentication, required headers, server-scoped routing, and common error formats.
Users
User endpoints cover connected users, member approval, moderation, permissions, and channel assignment.
Channels
Channel endpoints cover channel discovery and tone playback operations.
Community Server
Community server endpoints cover server IP registration, subscription lookup, and in-game speaker location updates.
All authenticated v2 endpoints are rate limited per API key, not per caller IP. Limits vary by endpoint, so each endpoint page includes the published limit for that route.
When a request is rate limited, the gateway returns 429 Too Many Requests.
High-frequency integrations should respect the published per-endpoint limits even if a small internal buffer exists.
Full OpenAPI Collection
OpenAPI v2 Collection (Postman Import)
=
true
,
command='sonradgeoswitch', -- command to toggle geo-channel switching | e.g. /sonradgeoswitch
friendlyCommand='geoswitch', -- friendly subcommand of the /radio command to toggle geo-channel switching | e.g. / radio geoswitch
acePermission='', -- ACE permission required to use disable geo-channel switching | Leave blank to allow all users
showNotifications=true-- Show notifications when geo-channel switching is enabled/disabled
}
=
{
type='native', -- Available options: native, pNotify, okokNotify, ox_lib, chat, or custom
notificationTitle='SonoranRadio', -- Notification Title for methods that support it
-- NEW:
Config.notifications= {
type='auto', -- Available options: auto, native, pNotify, ox_lib, okokNotify, chat, or custom
notificationTitle='SonoranRadio', -- Notification Title for methods that support it
)
-- return ('Guest %s'):format(source)
returnnil
end
,
--
Enable automatic ON_SCENE status when arriving at a waypoint created by SonoranRadio AI
distance=30.0, -- Distance in meters from the waypoint to trigger ON_SCENE status
statusEnum=4, -- Status enum for "ON_SCENE" -- See https://docs.sonoransoftware.com/cad/api-integration/api-endpoints/emergency/identifiers/unit-status for more information
timeout=300000-- Time in milliseconds to timeout the auto ON_SCENE status after arriving at the waypoint
}
,
--
Whether or not this feature is enabled
speedUnit='mph', -- mph | kmh | none -- The unit of speed provided with the callout
withPostals=false, -- Whether to include postals with the automatic callouts
postalResource='nearest-postal',
}
,
--
Enable or disable radio jammers
menuCommand='jammers', -- Subcommand to open the jammers menu | e.g. /sonoranradio jammers
toggleRange=3.0, -- Distance in meters required to toggle a jammer on/off
permissionMode='none', -- ace, qbcore, esx or none
acePermission='sonoranradio.jammers', -- ACE permission required to use jammers
allowedJobs= { -- Jobs that can use jammers | Requires permission mode to be set to 'qbcore' or 'esx'
['hacker'] = {
grades= { -- Job grades that can use jammers
1,
2,
3
}
}
},
jammers= {
-- Define jammers here
-- Example:
{
name='Hand Held Jammer', -- Name of the jammer
model='m23_2_prop_m32_hackdevice_01a', -- Model name for the jammer
offModel='m23_2_prop_m32_hackdevice_01a', -- Model name for the jammer when off | Optional
range=25, -- Range of the jammer in meters
strength=0.5, -- Strength of the jammer (0.0 to 1.0)
permission='sonoranradio.jammer_handheld', -- ACE permission required to use this jammer | Optional
-- If permission is not set, the jammer will be available to all players that can access the jammers menu
type='handheld', -- Type of jammer (handheld or static)
itemName='sonoran_radio_jammer_handheld', -- Item name for the jammer (if Config.enforceRadioItem is true)
poweredItemName='sonoran_radio_jammer_handheld_on' -- Optional item that replaces the base item while the jammer is powered on
},
{
name='Suitcase Jammer', -- Name of the jammer
model='ch_prop_ch_mobile_jammer_01x', -- Model name for the jammer
offModel='ch_prop_ch_mobile_jammer_01x', -- Model name for the jammer when off | Optional
range=100, -- Range of the jammer in meters
strength=0.8, -- Strength of the jammer (0.0 to 1.0)
permission='', -- ACE permission required to use this jammer | Optional
-- If permission is not set, the jammer will be available to all players that can access the jammers menu
type='static', -- Type of jammer (handheld or static)
itemName='sonoran_radio_jammer_suitcase' -- Item name for the jammer (if Config.enforceRadioItem is true)
},
{
name='Case Jammer', -- Name of the jammer
model='h4_prop_h4_jammer_01a', -- Model name for the jammer
offModel='h4_prop_h4_jammer_01a', -- Model name for the jammer when off | Optional
range=200, -- Range of the jammer in meters
strength=1.0, -- Strength of the jammer (0.0 to 1.0)
permission='', -- ACE permission required to use this jammer | Optional
-- If permission is not set, the jammer will be available to all players that can
type='static', -- Type of jammer (handheld or static)
itemName='sonoran_radio_jammer_case' -- Item name for the jammer (if Config.enforceRadioItem is true)
},
{
name='Satelite Jammer', -- Name of the jammer
model='m23_2_prop_m32_jammer_01a', -- Model name for the jammer
offModel='m23_2_prop_m32_jammer_01a', -- Model name for the jammer when off | Optional
range=300, -- Range of the jammer in meters
strength=1.0, -- Strength of the jammer (0.0 to 1.0)
permission='', -- ACE permission required to use this jammer | Optional
-- If permission is not set, the jammer will be available to all players that can
type='static', -- Type of jammer (handheld or static)
itemName='sonoran_radio_jammer_satelite' -- Item name for the jammer (if Config.enforceRadioItem is true)
}
}
}
,
--
Enable automatic PTT when panic button is pressed
duration=15-- Duration in seconds to hold PTT when panic button is pressed
}
429
Rate limit exceeded for the endpoint
400
Validation failed for one or more request values
401
Missing or invalid bearer token
404
communityId is not available to the authenticated API key
// Directions
Northbound
Eastbound
Southbound
Westbound
// GTAV Roads
Runway1
Plaice Pl
Voodoo Place
Buccaneer Way
Cavalry Blvd
El Burro Blvd
New Empire Way
Signal St
Abattoir Ave
Elysian Fields Fwy
Exceptionalists Way
Chupacabra St
Miriam Turner Overpass
Chum St
Hanger Way
South Shambles St
Orchardville Ave
Popular St
Greenwich Pkwy
Sustancia Rd
La Puerta Fwy
Dry Dock St
Autopia Pkwy
Dutch London St
Great Ocean Hwy
Davis Ave
El Rancho Blvd
Jamestown St
Carson Ave
Del Perro Fwy
Roy Lowenstein Blvd
Little Bighorn Ave
Grove St
Labor Pl
Covenant Ave
Red Desert Ave
Brouge Ave
Macdonald St
Bay City Ave
Tower Way
Mutiny Rd
Palomino Ave
Alta St
Innocence Blvd
Amarillo Way
South Arsenal St
Strawberry Ave
Amarillo Vista
Forum Dr
Goma St
Fudge Ln
Magellan Ave
Melanoma St
Rub St
Capital Blvd
Aguja St
Shank St
Vitus St
Tug St
Olympic Fwy
Crusade Rd
Tackle St
Olympic Fwy
Power St
Elgin Ave
South Rockford Dr
Cortes St
Calais Ave
Palomino Fwy
Invention Ct
Prosperity St
Adam's Apple Blvd
Conquistador St
Vespucci Blvd
Sinner St
Fantastic Pl
Imagination Ct
Del Perro Fwy
Supply St
Ginger St
Sandcastle Way
Lindsay Circus
Atlee St
San Andreas Ave
Decker St
Low Power St
Equality Way
Utopia Gardens
Peaceful St
Mirror Park Blvd
East Mirror Dr
Sinners Passage
West Mirror Drive
North Rockford Dr
Los Santos Freeway
Integrity Way
Mirror Pl
Marathon Ave
Nikola Pl
Las Lagunas Blvd
Swiss St
Movie Star Way
Nikola Ave
Boulevard Del Perro
Bay City Incline
Ineseno Road
Cougar Ave
Bridge St
Liberty St
Heritage Way
Playa Vista
Abe Milton Pkwy
Morningwood Blvd
Dorset Dr
San Vitus Blvd
Glory Way
Occupation Ave
West Eclipse Blvd
Dorset Pl
Meteor St
Rockford Dr
Hawick Ave
Boulevard Del Perro
Carcer Way
Portola Dr
South Boulevard Del Perro
Perth St
Mad Wayne Thunder Dr
Eastbourne Way
Tangerine St
York St
Spanish Ave
Alta Pl
Laguna Pl
Mad Wayne Thunder Dr
Vinewood Park Dr
Milton Rd
Sam Austin Dr
Vinewood Blvd
Kortz Dr
Caesars Place
Strangeways Dr
Americano Way
Picture Perfect Drive
South Mo Milton Dr
North Archer Ave
Edwood Way
Steele Way
Richman St
Clinton Ave
Hardy Way
Eclipse Blvd
Fenwell Pl
Dunstable Dr
Gentry Lane
Greenwich Pl
Dunstable Ln
North Conker Ave
Greenwich Way
Didion Dr
Ace Jones Dr
Cox Way
Cockingend Dr
Wild Oats Dr
Baytree Canyon Rd
Barbareno Rd
Hillcrest Ridge Access Rd
Senora Rd
Whispymound Dr
Marlowe Dr
North Sheldon Ave
Hangman Ave
Hillcrest Ave
Kimble Hill Dr
Lake Vinewood Dr
Normandy Dr
Banham Canyon Dr
Mt Haan Rd
Lake Vinewood Est
Mt Haan Dr
Mt Vinewood Dr
Tongva Dr
Galileo Park
East Galileo Ave
Senora Way
West Galileo Ave
Senora Fwy
Buen Vino Rd
Galileo Rd
Zancudo Grande Valley
Zancudo Barranca
Zancudo Rd
Route 68
Fort Zancudo Approach Rd
Joshua Rd
Chianski Passage
Route 68 Approach
Panorama Dr
Cat-Claw Ave
Smoke Tree Rd
Calafia Rd
Cholla Rd
Nowhere Rd
Marina Dr
East Joshua Road
Algonquin Blvd
Alhambra Dr
Cassidy Trail
Meringue Ln
Zancudo Ave
Lesbos Ln
Mountain View Dr
Lolita Ave
Cholla Springs Ave
Niland Ave
Armadillo Ave
North Calafia Way
Seaview Rd
Union Rd
Grapeseed Main St
Grapeseed Ave
Catfish View
Joad Ln
O'Neil Way
Procopio Promenade
Paleto Blvd
Duluoz Ave
Procopio Dr
Pyrite Ave
Cascabel Ave
// Florida Roads
Stockyard Rd
Sawgrass Expressway
Davie Blvd
Flagler St
Flamingo Rd
Broward Blvd
Las Olas Blvd
Brickell Pl
Brickell Ave
Weston Vista Dr
Weston Rd
Seminole Way
Everglades Blvd
Plantation Rd
Sawgrass Expy
Fishing Dock Rd
A1A Scenic Highway
Griffin Rd
Biscayne Blvd
Biscayne Ramp
Coconut Palm Dr
Collins Ave
Seven Mile Bridge Rd
Sunrise Blvd
Buccaneer Blvd
Ocean Club Dr
Alligator Alley
Davie Rd
Broward County Pkwy
Justice Blvd
Commercial Blvd
Coconut Creek Pkwy
Everglades Trail
Panther Pkwy
Gulf View Rd
Sheriff Dr
Marsh Passage
US-27 Access Rd
Cypress Preserve Blvd
Marina Rd
Gator Rd
Washington Ave
Spanish River Rd
SW 8th St
Panther Run
Weston Blvd
Sawgrass Way
Volunteer Rd
NW 27th Ave
Port Blvd
Interstate 4
Brickell Bay Dr
Drydock Ave
Cypress Creek Rd
Weston Hills Dr
Weston Hills Ln
PortMiami Tunnel Rd
Everglades Observatory Rd
US-98 Alternate
Lakeview Dr
Weston Way
Coral Way
Pine Island Rd
NW 79th St
Big Cypress Rd
Okeechobee Rd
Miami Ave
Dolphin Expressway (SR 836)
Freedom Blvd
Le Jeune Rd
Paradise Blvd
Plantation Preserve Dr
Airbase Access Rd
Convention Center Dr
Sugar Cane Rd
Markham Park
Markham Park Rd
Plantation Ln
Little Havana Ave
Freedom Tower Blvd
Wynwood Ave
Belle Glade Rd
Belle Glade Main St
Interstate 75
Biscayne Pkwy
Biscayne Pl
Biscayne Way
Coconut Grove Dr
Hangar Way
Outpost Rd
Coral Gables Blvd
Hillcrest Dr
Hillcrest Access Rd
Paradise Ct
Everglades Rd
Brickell Key Dr
Innovation Court
Innovation Ct
NW 36th St
Farm Rd
US-98
Rickenbacker Cswy
Interstate 95
Industrial Pl
Cypress Pl
Lake Okeechobee Dr
Lake Estates Dr
Alton Rd
Marsh Ln
Liberty City Blvd
Palm Circle
NW 62nd St
Florida Turnpike
Utility Rd
NW 20th St
Thunder Rd
Ocean Dr
Marathon Key Blvd
Overseas Hwy Frontage Rd
Coral Gables Dr
Medical Pkwy
Orange Grove Ln
NE 2nd Ave
Biscayne Overpass
Biscayne Park Blvd
Reflection Pl
Miracle Mile
Sawgrass Ridge Dr
Star Island Dr
Cypress Hill Dr
Cypress Hill Rd
Royal Palm Dr
Pirate Cove Rd
MacArthur Cswy
Edison Ave
Edison Pl
Normandy Isle Dr
N Miami Ave
Key Largo Dr
Old Cutler Rd
Coral Gables Ave
North Bay Ave
NW 87th Ave
I-395
Orange Grove Rd
Overseas Hwy
Key Colony Blvd
University Dr
Sunset Key Rd
Gulfstream Dr
Scenic Overseas Dr
Tarpon Basin Ct
Playa Vista
SE 1st Ave
Harbor Dr
FPL Service Rd
Islamorada Dr
Key Largo Promenade
Brickell Heights Blvd
Prosperity Walk
Islamorada Ave
Cypress Pass
Redland Rd
US-27
US-27 Business
US-27 Connector
MLK Blvd
River Rd
Runway 1
Florida Ave
Beachfront Rd
Ocean Reef Dr
Tamiami Trail East
Everglades Way
Marina Service Rd
Overseas Causeway
Harbor St
Harbor Passage
South Port Blvd
South Beach Blvd
South Bayshore Dr
South Harbor Industrial Rd
Española Way
Weston Industrial Blvd
Liberty City Ave
Doral Industrial Blvd
Quarry Rd
Palm Ave
Charter Boat Row
Little River Rd
Cypress Preserve Rd
Freedom Tower Dr
Harbor Key Rd
Keys County Rd
Flamingo Gardens
Bayfront Park Dr
Saint Vitus St
Bayou Place
West Lake Dr
Weston Ridge Dr
Ranch Rd
SE 2nd St
Everglades Canal Rd
Big Cypress Basin
Tamiami Trail
// Speeds (MPH/KMH - Every 5)
Zero
Five
Ten
Fifteen
Twenty
Twenty-five
Thirty
Thirty-five
Forty
Forty-five
Fifty
Fifty-five
Sixty
Sixty-five
Seventy
Seventy-five
Eighty
Eighty-five
Ninety
Ninety-five
One hundred
One hundred five
One hundred ten
One hundred fifteen
One hundred twenty
One hundred twenty-five
One hundred thirty
One hundred thirty-five
One hundred forty
One hundred forty-five
One hundred fifty
One hundred fifty-five
One hundred sixty
One hundred sixty-five
One hundred seventy
One hundred seventy-five
One hundred eighty
One hundred eighty-five
One hundred ninety
One hundred ninety-five
Two hundred
Two hundred five
Two hundred ten
Two hundred fifteen
Two hundred twenty
Two hundred twenty-five
Two hundred thirty
Two hundred thirty-five
Two hundred forty
Two hundred forty-five
Two hundred fifty
Two hundred fifty-five
Two hundred sixty
Two hundred sixty-five
Two hundred seventy
Two hundred seventy-five
Two hundred eighty
Two hundred eighty-five
Two hundred ninety
Two hundred ninety-five
Three hundred
Integrate the Sonoran Radio Stream Deck plugin with desktop or FiveM.
Sonoran Radio includes a Stream Deck plugin that can control the desktop application directly or control the FiveM radio through the desktop app.
This document covers the public integration contract for:
the built-in desktop bridge exposed by the Electron app
the built-in FiveM bridge exposed by the Electron app when Stream Deck actions are set to FiveM
Overview
Each Stream Deck action is configured with a target:
Desktop sends commands directly to Sonoran Radio Desktop
FiveM sends commands to Sonoran Radio Desktop, which forwards them to a FiveM client over localhost
The plugin uses the same command and snapshot schema for both targets. The difference is transport:
Desktop uses local HTTP requests to Sonoran Radio Desktop
FiveM uses local HTTP requests to Sonoran Radio Desktop, and Sonoran Radio Desktop forwards commands and receives snapshots over a local WebSocket connected by your FiveM client script
Recommended FiveM Architecture
When the Stream Deck action target is set to FiveM, the recommended flow is:
This means the Stream Deck plugin does not need to talk to the FiveM NUI directly anymore. As long as:
Sonoran Radio Desktop is running
the Stream Deck action is set to FiveM
your FiveM client script is connected to the desktop WebSocket
the plugin will behave the same as normal.
Desktop Bridge
When Sonoran Radio Desktop is running, it starts a local HTTP bridge on:
Health Check
GET /streamdeck/health
Response:
Get Current Snapshot
GET /streamdeck/labels
Response:
Send a Command
POST /streamdeck/command
Headers:
Example request:
Example response:
If the command is invalid, the radio is not ready, or the payload is malformed, the bridge returns a non-200 response.
FiveM Desktop Bridge
When the Stream Deck action target is set to FiveM, the plugin first talks to the desktop app at:
The desktop app then talks to your FiveM client over:
Health Check
GET /streamdeck/fivem/health
Response:
Get Current FiveM Snapshot
GET /streamdeck/fivem/labels
Response:
Forward a Command to FiveM
POST /streamdeck/fivem/command
Headers:
Request:
Response:
If no FiveM socket clients are connected, the desktop app returns a non-200 response.
WebSocket Message Contract
Your FiveM client should connect to:
Messages Sent From Desktop to FiveM
hello
Sent immediately after the socket connects.
streamdeck_command
Sent when a Stream Deck action is pressed/rotated while targeting FiveM.
streamdeck_snapshot
Sent when the FiveM client explicitly requests the latest cached snapshot.
Messages Sent From FiveM to Desktop
streamdeck_snapshot
Send this whenever the iframe publishes a new radio snapshot.
streamdeck_snapshot_request
Optional. Ask the desktop app to send back its current cached snapshot.
Optional Acknowledgements
The desktop app may reply with:
streamdeck_snapshot_ack
streamdeck_command_ack
These are informational and do not need special handling.
Command Payload
All commands use the same JSON shape:
Fields:
Field
Type
Required
Notes
Phase Rules
Most commands execute on phase: "down".
The following hold-style commands use both phases:
transmit.ptt
transmit.tempChannel
For those commands:
send phase: "down" when the button is pressed
send phase: "up" when the button is released
Supported Commands
Command
Extra Fields
Description
Snapshot Schema
The plugin reads a snapshot to populate action configuration, channel selectors, and active button state.
Channels
Field
Type
Description
State
Field
Type
Description
FiveM Iframe Message Contract
Inside the FiveM web view, Sonoran Radio uses iframe messages for Stream Deck integration.
Messages Sent To Sonoran Radio
streamdeck_command
Send a standard command payload:
streamdeck_snapshot_request
Request that the iframe publish its latest state:
Messages Sent From Sonoran Radio
streamdeck_snapshot
The iframe emits this message whenever radio/channel state changes and also in response to streamdeck_snapshot_request.
FiveM JavaScript Example
The following browser-side example shows the minimum bridge needed in FiveM to make Stream Deck FiveM mode work through Sonoran Radio Desktop.
This example assumes:
your FiveM client script can open a browser WebSocket to ws://127.0.0.1:39112/streamdeck/fivem/socket
your client script can forward messages to the Sonoran Radio iframe/NUI
your iframe/NUI can send streamdeck_snapshot messages back to this script
Notes
Use channel IDs exactly as returned by the snapshot.
transmit.tempChannel and transmit.ptt should send both press and release phases.
Multi-channel commands should send channelIds as an array of numbers.
your FiveM client script forwards commands to the iframe and forwards snapshots back to desktop
Defaults to "down" if omitted
channelId
number
Conditional
Used by single-channel commands
channelIds
number[]
Conditional
Used by multi-channel commands
None
Move to the next channel within the current group
channel.previous
None
Move to the previous channel within the current group
transmit.toggleChannels
channelIds
Toggle one or more transmit channels
transmit.tempChannel
channelId, phase
Temporarily transmit on a single channel while held
scan.toggleChannels
channelIds
Toggle one or more scan channels
toggle.ai
None
Toggle AI on or off
transmit.ptt
phase
Push-to-talk
toggle.toneBoard
None
Open or close the tone board
audio.volumeUp
None
Increase master volume
audio.volumeDown
None
Decrease master volume
audio.volumeMute
None
Toggle master mute
audio.sfxUp
None
Increase SFX volume
audio.sfxDown
None
Decrease SFX volume
audio.sfxMute
None
Toggle SFX mute
audio.aiUp
None
Increase AI volume
audio.aiDown
None
Decrease AI volume
audio.aiMute
None
Toggle AI mute
audio.currentChannelsUp
None
Increase current primary channel volume
audio.currentChannelsDown
None
Decrease current primary channel volume
audio.currentChannelsMute
None
Toggle mute for current primary channels
desktop.connectedUsers
None
Open the connected users window
desktop.focusRadio
None
Focus the Sonoran Radio desktop window
desktop.toggleRadio
None
Show or hide the Sonoran Radio desktop window
number
Parent group ID
groupName
string
Parent group display name
boolean
Whether the microphone/PTT is currently active
primaryChIds
number[]
Current transmit channels
scannedChIds
number[]
Current scan channels
sfxVolume
number
Current SFX volume
agentGain
number
Current AI volume
Your FiveM client does not need to translate command names or payload fields. Forward them exactly as documented.
The desktop app caches the most recent FiveM snapshot, so send streamdeck_snapshot whenever radio state changes inside the iframe.
command
string
Yes
One of the supported command IDs listed below
phase
"down" or "up"
group.next
None
Move to the next channel group
group.previous
None
Move to the previous channel group
id
number
Channel/profile ID
label
string
Display name shown in the plugin
connected
boolean
Whether the radio is currently connected
aiEnabled
boolean
Whether AI is enabled
No
channel.next
groupId
micOpen
Stream Deck Plugin
-> Sonoran Radio Desktop HTTP bridge
-> local FiveM WebSocket client
-> FiveM client script
-> Sonoran Radio iframe/NUI
Sonoran Radio iframe/NUI
-> FiveM client script
-> local FiveM WebSocket client
-> Sonoran Radio Desktop snapshot cache
-> Stream Deck Plugin label/status polling
View the changelog for the Sonoran Radio application and in-game resource.
2.26.4 04/21/2026
Translations
Added translation support
Log Search
Added the ability to view and search logs from user actions.
FiveM Guest Login
Added a login method based on in-game ACE permissions, allowing users to login as guest and not require an account.
Ban User
Added the ability to ban a user, preventing them from re-joining as a pending user.
Tone Board Improvements
Added the ability to save tone stacks and the board now auto-selects your currently transmitting channels.
Desktop Overlay
Added customizable desktop overlays to see your radio in-game on any application.
Community Image Customization
Communities can now set a custom logo for their radio community
Connected Users Popout
Added a new overlay window with a hotkey to show connected users
Privacy Tab - Recordings
Added a tab to toggle on/off the ability to send local transmission recordings
free limits
todo
Stun
todo
TTS Tone
TODO
TTS Tone
Tone Board Updates
Channel Volume
Per-channel volume
Client FX
TODO
Emergency Call Disconnect
Fixed an issue where creating an emergency call would cause other users to listen in.
URL Migration
Updated internal S3 storage URLs for newer infrastructure paths.
gkhjk
2.26.3 - 04/07/2026
Client Side Voice FX
Individual users can now customize voice effects on their own, bypassing community channel-level FX.
Vocoder Preview
Added audio preview support to the vocoder in the voice effect editor.
Voice Effects: Unlimited
2.26.0 - 04/03/2026
Stream Deck Plugin
Added an official Stream Deck plugin for advanced control and integration
Text-to-Speech Tones
Added free, localized text-to-speech tones in the tone board editor (permanent) and in the tone board (temporary)
2.25.0 - 03/30/2026
Radio Channels: Unlimited for Free
Free communities can now configure unlimited channels without limits
Tone Board: Unlimited for Free
Free communities can now configure unlimited tones without limits
Stun User
2.24.5 - 02/18/2026
Desktop Overlay Promo
Added a check to ensure the community is on Pro before uploading a custom frame.
Added a popup promotional to encourage upgrading when uploading a custom frame.
Desktop Overlay Overflow
2.24.4 - 02/17/2026
Desktop Overlay
Added a desktop overlay with customizable frames to display your radio on top of any game window.
2.24.0 - 01/29/2026
Geo Channels
Communities can now specify custom coordinate zones with specific radio channels to transmit and scan. When a player enters the zones, their radio channels will be automatically updated.
Degrade/Tunnel Zones - Panel UI
Degredation zones can now be viewed and configured via the zones panel in Sonoran Radio.
AI Emergency Zones
2.23.2 - 01/07/2026
Recording Filtering
Added the ability to filter transmission recordings by user and channel.
User Ban
Added the ability to ban a user account from the members tab, preventing them from re-joining as a pending user.
Mobile Server Selection
2.22.2 - 01/02/2026
Dispatch UI Revamp
Initial UI revamps for the dispatch panel
Audio Synchronization
Fixed an issue where users could sometimes hear transmissions they were not scanning
2.22.1 - 12/30/2025
Audio Leak Degradation
Fixed an issue where scanning and listening to 50-100 users at once would slowly create a node leak, resulting in laggy or stuttering audio until after a refresh.
Push-To-Talk Hotmic
Fixed an issue where quickly pressing push-to-talk could result in a stuck "hot mic" on.
2.22.0 - 12/29/2025
FiveM Login as Guest
Added a new option for FiveM communities. Allowing users to bypass the need for a linked Sonoran account to login and utilizing ACE permissions for all radio access.
Audio Node Disposal
Improved audio node disposal for temporarily muted users and channels in attempt to resolve an issue with distortion over time.
2.21.7 - 12/22/2025
AI Pursuit Callout Hear
Added a settings option to toggle on the ability to hear your AI pursuit callouts when enabled.
Community Log Search
Added a panel to view user logs for configuration edits and more.
Translations
2.21.3 - 10/28/2025
Resource Exports
Added and documented several new developer exports in the FiveM resource.
Shared Channel UI
Fixed an issue with shared channels causing the in-game/mini UI to show the user in the main shared channel instead of the per-group subchannel.
UI Positions
2.21.2 - 10/21/2025
Custom Domains Cloudflare for SaaS
Updated the custom domain setup to use the newer "Cloudflare for SaaS" method, with legacy being depreciated in the near future.
Reconnection Handling
Fixed an issue primarily in-game, where users would be unable to hear other transmissions after a network reconnection.
2.21.0 - 10/17/2025
Shared Radio Channels
Communities can now link multiple radio channels together from separate groups. Useful for shared "Interops" or other communication channels between departments.
Signal Jammers
Added in-game signal jammer items, configurable with QB Core and ESX to block radio signals within a specified radius.
Emergency Call Redial
2.20.0 - 07/21/2025
Voice EQ: V2
Added a new pre and post-effect advanced EQ in the voice effect settings.
Persistent Scanners: Model Options
Added new model options for in-game persistent scanners.
Persistent Scanners: Move
2.19.0 - 07/10/2025
Custom Domain
Added the ability to utilize a custom domain, logging users directly into your radio community.
Vanity URLs
Communities now have a free vanity URL located at COMMUNITYID.sonoranradio.com.
Custom Community ID
2.18.0 - 05/08/2025
Simulated Background
Added new functionality to add in simulated background noise for in-game sirens, boat engines, helicopter rotors, and gunshots.
Multi-Server
Added support for multiple radio servers under one community.
LB Phone Integration
2.17.2 - 04/07/2025
Audio Duplication and Static
Fixed an issue causing some users to transmit doubled audio (echoing) and/or constant static when not using the vocoder.
#28123 - Local SFX
Fixed an issue causing local custom mic click SFX to not work.
RocketNode Promotional Images
2.17.0 - 04/03/2025
Multi-Channel Transmit
CTRL + Click on a channel to transmit on multiple at once.
Chatter: Volume Level from Source Player
In-game chatter volume is based on the person's actual radio volume. Turning down your radio on a traffic stop will make it quieter for people around you.
2.16.0 - 03/10/2025
Qbox & OX Inventory Support
Added support for OX inventory in both QBCore and QBox
Display Name: CAD Sync
Added a new CAD integration feature to automatically update your radio display name based on unit information
Display Name: Command
2.15.0 - 02/12/2025
ACE Permission Sync (Auto-Approve + Community Perms)
Added an ACE permission sync option to automatically approve users and grant community permissions based on in-game ACE permissions.
In-Game Channel Changer - Group Handling
Added a right-click option on the top channel change knob in-game to toggle between changing channels and channel groups.
Tone Board: Live TTS AI
2.14.0 - 01/30/2025
Panic: Radio & Dispatch Display
Expanded radio panic functionality to reflect in the in-game and dispatch UI with a customizable sound.
Volume Hotkeys
Added in-game and in-app hotkeys to quickly adjust the radio volume by a configurable amount.
Channel Hotkeys
2.13.2 - 01/22/2025
AI Tone TTS: Removed Character Limit
Removed the 50 character limit for community integrated AI text-to-speech tones.
Transmission Logs: Vocoder Cutoff
Fixed an issue causing transmission logs to be cutoff when using the vocoder effect due to other optimizations.
Transmission Logs: Download
2.13.0 - 01/21/2025
In-Game Physical Scanners
Added in-game physical scanner items for civilians to hear radio transmissions
Transmission Logs
Added transmission logs in the dispatch panel with optional AI transcriptions
#26361 Transmit to In-Game Speakers
2.12.0 (Full Release) - 12/31/2024
Radio Chatter: Vehicle Detection
Added vehicle detection to lower and muffle nearby radio chatter if the user enters a vehicle. Chatter volume resumes if the window is down/broken or the door opens.
Emergency Call: Nearby Chatter
When a user is making an emergency call on the phone, nearby users can now faintly hear the dispatcher talking on the other side of the phone.
Voice Effect: Clipping
2.11.0 (Beta) - 12/19/2024
Text Style Display
Added a new screen display style with a "text-based" UI for older radio styles
Settings UI: Tabs
Overhauled the settings modal with tabs for each section
Hide Radio ESC User Config
2.10.0 (Beta) - 12/03/2024
#25437 Radio In-Game Display
The in-game radio will now persist on the user's screen, until they use /radio hide. Per-user customization will be released in a coming update.
#25917 - EUP Chatter
Added support for drawable items (in addition to the existing prop support) for EUP chatter exclusion.
2.9.0 (Beta) - 11/07/2024
In-Game Emergency Calls
Added a way for players in-game to place an emergency (911) call to dispatchers
Developer Export - Radio Signal
Added an export to get a user's radio signal quality
Developer Export - Panic
2.8.0 (Beta) - 10/10/2024
CAD Integration
Added sonrad integration to display Sonoran CAD call information on the in-game radio, along with panic functionality
Top-Down HUD Improvements
Improved the top-down radio HUD to display the channel name, frequencies, and color changes when a user is transmitting
2.7.2 (Beta) - 09/27/2024
Voice Degradation
Fixed an issue causing some users to experience gradual voice degradation that was only fixed after refreshing/power toggling the radio
Digital Voice Effect
Smoothed and reduced the initial digital voice filter effect
2.7.0 (Beta) - 09/25/2024
Voice Effect Customization
Added the ability to create multiple custom voice effect filters and apply them per-channel.
Tone Board - Play to In-Game Speakers
Added the ability configure in-game speakers and play radio tones to them.
Tunnel Signal Degrade
2.6.2 (Beta) - 09/13/2024 (In-Game Only)
In-Game Connected Users
Fixed an issue with the connected users list causing some names to not change to green while the user was talking
2.6.1 (Beta) - 09/11/2024 (In-Game Only)
In-Game Connected Users
When talking, user names will display as green
Added proper CSS ellipsis to display names
Added tooltip to user display names
2.6.0 (Beta) - 09/11/2024
Hear Chatter In-Game
Civilians can now hear live radio chatter when there is a nearby radio. This requires the pro version.
Top-Down HUD
Added the top-down radio HUD UI in-game
Multi-Frame
2.5.0 (Beta) - 08/16/2024
Sonoran CMS Integration
Added the ability to manage your radio user's joining, permissions, and kicking via Sonoran CMS ranks and Discord roles.
Input/Output Device Selection
Added the ability to customize and test the input and output sources via the settings menu.
Tone Board
2.4.0 (Alpha) - 08/05/2024
Channel Groups & Organization
Added the ability to create channel groups and easily organize via drag-and-drop
Custom Talkover Tone
Added the ability to customize a community-wide talkover error SFX
Signal Bars
2.3.0 (Alpha) - 7/11/2024
Repeaters - UI Menu
Added an in-game repeater menu to add, edit, and remove repeaters.
In-Game Volume
Added the ability to adjust the system-wide volume in-game via the settings menu.
In-Game Per-User Volume
2.2.1 (Alpha) - 07/03/2024 (In-Game Only)
Tower Distance
Fixed an issue causing tower distortion levels to "freeze" in certain cases.
2.2.0 (Alpha) - 07/02/2024
In-Game Tower Signal
Added variable audio distortion based on how close a user in-game is to a radio repeater model.
User Display Names
Added the ability to customize user display names and two new permissions to set who can change their, and others', display name.
Link UI Refresh
2.1.1 (Alpha) - 06/21/2024
Desktop Application - Hotkey Setting
Improved handling for detecting a wider array of hotkeys in the desktop application, including standard mouse buttons.
2.1.0 (Alpha) - 06/18/2024
Login Link
New login for in-game resource/mobile
Community ID
Use community IDs in URL instead of numeric IDs
Volume Control
2.0.1 (Alpha) - 06/18/2024
Community ID
Accept community ID in place of standalone ID
#22925 - ESC Error
Fixed ESC with the radio open causing an error, preventing you from leaving the radio
2.0.0 (Alpha) - 06/06/2024
Initial Release
ghjk
Temporary Transmit Channel Change
Fixed an issue where using a hotkey to temporarily transmit in another channel resulted in the first channel still hearing you for a few seconds
Removed paid restrictions, allowing the free tier to create unlimited custom voice effect profiles.
EQ V1 Depreciation
Removed the old, depreciated V1 EQ option from the voice FX customization.
Tone board users can use speech-to-text to quickly enter text into the text-to-speech input
Per-Channel Volume
Right-click or select the volume icon on a channel to adjust the per-channer volume
Added a new right-click menu option and permission to stun a user from talking temporarily.
Ping User
Added a new right-click menu option to ping a user
User List Overlay
Added a new desktop overlay option with a hotkey to display the current list of users and channels
Community Image
Added the ability to customize your radio community's logo
Hotkey Recording
Added support for multi-combination hotkeys
Hotkeys now auto-save after releasing the combination Open Overlay Mobile Button
Open Overlay Mobile Button
Added a button on the "mobile" (non-dispatch) UI panel for desktop users with smaller windows
Overlay Back Button
Tweaked the close button on the desktop overlay to swap back to the main radio screen instead of the community menu
Settings Privacy Tab
Users can now individually opt-out of having their radio transmissions recorded
Temporary Transmit
Fixed an issue where using a hotkey to temporarily transmit in a specific channel resulted in your current channel still hearing your transmission briefly
Fixed an issue where users in channel would overflow the screen in the desktop overlay.
Free Community Upload Overlay Frame
Fixed an issue with an undefined error message when a community on the free version would attempt to upload a custom radio frame.
Communities can now create emergency zones for dispatch AI to read out CAD emergency calls to specific channels based on location.
AI Auto-Status Routing
When the AI GPS routes a user to a specific postal or coordinate locations, the AI will automatically mark the unit as en-route and on-scene.
FiveM Guest Login - Framework
Integrated the guest login with QB-Core, QBox, and ESX to use the player's character name by default.
FiveM Guest Display Name Function
Communities can now use a custom function to set user's guest display names for their framework.
FiveM Tablet
Added an in-game tablet to view the dispatch panel.
Tone Board Improvements
Tone board now auto-selects your currently transmitting channels.
Tone stacks can now be saved for faster, repeated use.
Notifications
In-game notifications now support an "auto" mode, automatically detecting any of the new notification options: native, pNotify, ox_lib, okokNotify, chat, lation_ui or custom.
FiveM Resource Restart Auto-Connect
When the FiveM resource is restarted, all users will now automatically re-connect to their radio.
Disabled the automatic connect on mobile if the community has multiple servers configured. Allowing the user to select the server prior to connecting.
Members Panel Pagination
Added pagination to the members table, resolving a timeout issue for communities with several thousand users.
Added translation support along with several new language examples.
Custom Domain Removal
Added handling on community downgrade to remove the custom domain from Cloudflare.
Bandwidth
Tweaked connection subscription events in an effort to minimize bandwidth usage.
API Channel
Fixed an issue where changing the radio channel via API would result in client side errors.
Trialing Status
Fixed an issue where trial subscription days would still place the user on the free version.
Fixed an issue with saving radio UI positions in-game.
CF Custom Domains
Fixed an issue with newly created custom domains on Cloudflare.
Desktop Split Error
Fixed an error that would popup on the desktop version.
Added the ability to re-dial an emergency caller after the call has been ended.
AI Callouts: Postal Code
Added postal code text-to-speech in the AI pursuit callouts.
Earpiece Notifications
Added an in-game notification whenever a configured earpiece is inserted or removed, confirming if other players nearby can hear your radio or not.
Added the ability to move an existing in-game persistent scanner instead of needing to delete and re-add it.
Radio Frame & User List Size Safety
Added checks to prevent users from resizing the radio or connected users list to be off of their screen, reducing the need for the /radio reset command.
Default Settings: ESC Behavior
Added the ability to set the in-game FiveM ESC default behavior.
VFX Customization: XMIT vs RECV Signal Strength
Added two sliders in the voice customization testing menu to better reflect in-game usage for both transmitter and receiver signal strength.
Desktop Channel Hotkey
Fixed an issue with desktop per-channel hotkeys not being able to be re-registered with a new key.
#29952 - Persist Frame
Fixed an issue where frame selection would not persist when in QB item mode.
Communities can now customize their community ID for easier user joining and vanity URL customization.
Scanner UI Menu
Added a graphical UI to interact with in-game scanners.
Frame Customization: In-Game Placement Menu
Added an in-game menu to easily customize new frames and live adjust the positioning, sizing, etc.
Aircraft Frame Support
Added support to specify custom radio frames for aircraft use.
Proxy URL - IP Backup
In the event that the CFX proxy fails for push events, servers will automatically fall back to a direct IP and port.
AI Pursuit Callouts
Added AI powered pursuit callouts, toggleable with a hotkey. When enabled, your radio will automatically transmit your heading, street, and speed.
Speaker Grouping
Added the ability to group multiple in-game speakers to a single location, cleaning up the dispatch tone board.
#28477 Panic Open Mic
Added the option to automatically leave the user's microphone on for a configurable amount of time after pressing the panic button.
Desktop: Side Mouse Button Support
Overhauled and wrote a custom keybind handler, allowing for better keybind support with side mouse buttons and more.
QBox Death Support
Added death detection support for QBox, allowing the radio to shut off when dead.
#29110 - CAD Call Info Close
Fixed an issue causing radio call information screens to not clear when a CAD call is closed or your unit is unassigned.
ACE Perm Sync - Don't Require Auto-Approve
Fixed an issue causing ACE permission sync to require the auto-approve permission before granting any other permissions.
User List Improvements
Fixed an issue with the in-game online users list not allowing for complete scrolling with large player counts.
#29490 - Talking while Dead
Fixed an issue allowing some users to talk on the radio when the prevent transmission while dead feature was enabled.
#29213 - Server Rack Positioning
Fixed an issue causing server rack repeaters to spawn and save slightly off of their proper position.
In-Game Chatter - Custom Community PTT SFX
Fixed an issue causing in-game chatter to use the default mic clicks instead of the custom community-wide microphone clicks.
Text UI Condense Improvements
Fixed an issue causing the transmitting username on the text based UI to show twice, taking up space and shifting the UI into two parts.
Multiple Servers - Same IP
Fixed an issue where running multiple servers on the same IP (but different ports) and on the same radio community would cause one to override the push url for the other.
Servers - Admin Delete
Fixed an issue where users with the admin permission could not delete servers.
Added integration with LB phone to call emergency services and hide the emergency call banner from the user's screen.
Thank you to IC-Technologies for providing much of the LB Phone integration code!
Default Community Settings
Added a new customization option for default user settings when joining a community.
Auto-Gain Control
Set automatic microphone gain to be enabled by default.
Menu: Repair all Repeaters
Added a new menu option to repair all radio towers and repeaters at once.
#28108 - Extended Frequency Options
Removed frequency restrictions from radio channels in advanced mode.
Management Panel Lookups
Added new internal tools for faster customer support.
#28202 Connected Users List
Fixed an issue with users transmitting on multiple channels not showing properly on the in-game user list.
#28418 - Enforce Radio Item
Fixed an issue causing the enforce radio inventory item function to not work.
HF: Chatter Exclusions
Fixed an issue with non-props not working properly as earpieces when configured.
Siren Volume Increase Pop
Removed the volume increase/decrease sound effect when toggled via the in-game siren toggle.
#28572 - Desktop Copy
Fixed a permission issue preventing the community ID/key copy function from working on desktop.
Fixed an issue causing RocketNode promotional images to not load in the app versions of Sonoran Radio.
Hotkeys: Per-Channel PTT
Added customizable per-channel PTT buttons in the dispatcher panel, allowing users to quickly switch and talk in a specific channel with one key.
Hotkeys: Clear/Un-Set
Right-click on a hotkey to clear it.
Radio Event: 911 Call Answered - Dispatcher Name
Added the ability to see the 911 call's dispatcher name both in-game and programmatically with the resource API.
Tower Destruction Events
Added in-game events on tower destruction to help log who damaged the repeaters.
#27676: Mic Perm Reset
If a user clicks deny on the in-game F8 mic permissions, it will reprompt them every time they try and use the radio.
Modern UI - Remove Scrollbar
Hid the vertical scrollbar on the modern UI when in-game.
Channel TTS Cache Busting
Fixed an issue causing the channel AI TTS audio to not clear cache when updated directly from the dispatch panel.
Added an in-game command to set your radio display name
Display Name: Export
Added a developer export to set your radio display name
Voice Effects: Import/Export
Added a modal to import and export radio voice effect profiles
Radio Active Export
Added a developer export to check if the radio is active (turned on)
Config.lua Malformat - Throw Clear Error
In the event of a malformed config.lua, the resource will throw a clear error message
Neaby Chatter: Buzz
Fixed an issue causing a loud but short "buzz" sound when passing a nearby radio (chatter) at rapid speeds
HF: #27364 Panic Keybind
Fixed an issue throwing an error when pressing the in-game panic keybind
Scan List Restore Post-Transmit
Fixed an issue causing the scan list to not properly restore after a super short transmit (by yourself or others) in your primary channel
Added the ability to generate temporary AI powered text-to-speech tones directly from the tone board.
Scanned Channel Audio Indicator
Added new UI elements on the in-game radio to indicate a transmission from a scanned channel, along with the user's name and channel.
#27054 Mute Scanned on Primary Transmission
Added the setting option (enabled by default) to mute scanned channels when another user is talking on your primary channel.
#27143 Group Change Channel Persistence
Using hotkeys to change your group from one to another now saves and restores your last used channel when going back to a previous group.
Volume Hotkey SFX
Added customizable hotkey sound effects for the volume hotkeys.
Tunnels: Menu Expansion
Added a toggle visibility button in the tunnel editor menu.
Added the ability to select and remove a configured tunnel via menu.
Dispatch UI: Show Channel IDs
Dispatch UI now has a toggle button to view channel IDs for in-game permissions.
Channel & Group Hotkey: In-Game Notify on No Options
Added small in-game notices on channel and group change hotkeys if there is no other group or channel to page to, in order to reduce confusion.
#27173 Hotkey Resize
Fixed an issue causing desktop hotkeys to stop working if the screen was resized down to mobile UI mode and back.
Added in-game and in-app hotkeys to quickly page through channels in your group.
Group Hotkeys
Added in-game and in-app hotkeys to quickly page through channel groups.
Sirens On Volume Increase
Added automatic, configurable volume adjustment when sirens are toggled on in-game.
In-Game Channel Transmit Command
Added a new in-game command to toggle transmitting on a specific channel.
In-Game Scan List Command
Added a new in-game command to toggle a scan list.
In-Game Scan Channel Command
Added a new in-game command to toggle a channel scan.
In-Game Stream Deck Integration
Documented Stream Deck integration with the new FiveM commands.
Frame Selection Persist
In-game frame selection now persists/saves for the next time you join.
Emergency Call Export: Answered + Ended
Added additional integration values for in-game emergency calls to determine when the call is answered by a dispatcher or ended by a dispatcher.
Emergency Call Resource Export: Name Parameter
Added an additional parameter to customize the caller's name for in-game emergency calls.
Scan List: Drag-and-Drop Reorder
Scan lists can now be reordered via drag-and-drop
Modern UI: Group Name Display
The modern in-game radio style display now also lists the channel group.
Speaker Menu: Live Updates + JSON Corrupted
Fixed issues causing the in-game speaker location menu to not live update in the dispatch tone board and cause the JSON config to become malformed.
Fixed an issue causing downloaded transmission logs to be corrupt and not playable.
Added the ability to locally record microphone audio to play over the tone board to radios and in-game speakers
AI: Tone Text to Speech
Added the ability to generate AI text to speech tones
#26385 Stacked Tones
Added the ability to "stack" and play multiple tones in a row
#26534 In-Game/Mobile Radio Scan Lists
Added configurable scan lists to quickly swap between multiple scanned channel groups
#26414 Persist scanned channels
Scanned channels now save locally to be restored when turning the radio back on
Vocoder Bitrates
Added adjustable bitrates to the vocoder voice effect
Free Vocoder
Made the new vocoder available to the free version of Sonoran Radio
In-Game Text Radio SONORAN Branding
Added small branding to the text based display in-game when large enough (vehicle display)
Vocoder PTT Timing
Overhauled and improved vocoder PTT handling to ensure local UIs update much faster without a long delay before and after the transmissions
#26458 Connect: Permission Denied Mic General Error
Added improved notice and handling in the browser version if microphone permissions are not granted
Hotkey: Prevent Left Mouse
Blacklisted the left mouse button from being used as a hotkey
Added a new "clipping" voice effect to cut audio in and out when the radio signal is poor. This effect is designed to pair particularly well with the vocoder.
Transfer Community
Added an option in the administration panel to transfer community ownership to another user.
Emergency Call: SFX
Added a community customizable incoming emergency call sound effect for dispatchers.
Backend Error API Clearnup
Cleaned up general backend errors from the API
In-Game Debug
Removed leftover in-game debug prints
Added three radio display options for ESC behavior (stay on screen, hide, show only while transmitting)
Expired Community Removal
Added automatic community deletion, if on the free version, after 30 days with a 21 day notice
Emergency Call: Fix Hear Radio Chatter Nearby
Fixed an issue where users could not hear nearby radio chatter while on a 911 call
Hide/Close Radio when QB Item Gone
Fixed an issue where removing the QB/ESX radio item would not turn off and remove the radio from the user's screen
Permission Reactivity
When connected to the radio, user permissions will now update in real time.
Customize 911 Command
Added a new config emergencyCallCommand property to customize the /radio 911 to other numbers or words based on locality.
Configure Default Keybinds
Added new configuration values to customize the default radio keybinds for new in-game users.
In-Game Unlink via Pending Screen
Added an account un-link for the in-game pending community approval screen.
Community Cards - Leave Community
Added a leave community button in the portal.
In-Game Audio Subprocess Info
Added a short URL guide in the in-game volume slider to help users who may be having a hard time hearing people.
Homepage - Emergency Call Promo
Added a promotional tab on the front page for the in-game emergency call feature.
#25858 Radio Frames
Fixed an issue causing some communities to have no frame options available in settings based on their config values.
HUD Disconnect
Fixed an issue causing the HUD view to show as disconnected.
#25846 - Connected Users API
Fixed an API 500 error when requesting the active users, but none are connected.
#25741 - Radio Inventory
Fixed an issue where using enforceRadioItem would throw an error that the radio item is not in your inventory.
Added an export to listen for a radio panic press
#24896 Radio Item - Customize ID and Name
Added customization options for the in-game radio item's ID and name
Auto-Join User on URL Load
Users automatically join the community if they load a community's specific URL
Disable PTT SFX For Myself and/or Others
Added a settings option to disable hearing mic-clicks for yourself and/or other users
Mute Scanned When Transmitting
Added a settings option to mute scanned channels while transmitting
Debug Mode Toggle Command
Added a toggle command for debug mode
Sonoran Account Avatar
Added the user's Sonoran account avatar in the panel
Core Security Update
Improved credential storage security
Browser Hotkey Notice - Not Global
Added a notice in the settings page, if using the web version, that hotkeys are not "global" and the page must be in focus
Apple Silicon Hotkey Fix
Fixed an issue causing global desktop hotkeys to be unavailable on Apple silicon based computers
In-Game Channel Selector - Private Channels
Fixed an issue allowing users without permissions to access a private channel if they used the channel selector in-game
Toggle repeater mapping spamming chat
Removed debug logs on repeater toggle
#24958 QB Item Check Function
Updated a depreciated QB item check method
HF: #25273 - PTT/Audio Flicker
Fixed an issue causing vMenu Proxychat and Mumble Chat to flicker and stick with TalkSync enabled
HF: QB Metadata Tower Break
Fixed an issue in QB Core mode causing tower signals to always be perfiect if the player had no metadata property.
HF: Member Tab
Fixed an issue causing the members tab to not display if the user had a permission to kick, rename, or approve members but not the admin permission.
HF: Channel Permissions Owner Bypass
Fixed an issue causing private channels to be hidden for the server owner.
HF: Move User 500
Fixed an issue where moving your channel via context menu would throw a 500 error.
HF: Channel Add in Group via Dispatch
Fixed an issue where adding a new channel via dispatch panel would put it in the first channel group, not the group that it was added from.
HF: TTS Replay On Reconnect
Fixed an issue where connecting to a non-default channel, disconnecting by switching radio panel tabs, and re-connecting would start playing the TTS of the old channel name before correcting.
HF: AI TTS Generation on Create Channel
Fixed an issue causing AI TTS generation to fail when creating a new channel.
Talkover Override
Added a new permission granting users the ability to double-press their PTT button to override the talkover protection and silence the other transmitter
CMS Sync - Talkover Override Permission
Added the ability to manage talkover override permission via Sonoran CMS
Talkover Override Success Tone
Added a new, community-customizable talkover override success sound effect
Homepage Revamp
Completely revamped the homepage for feature highlights
UI Cleanup/Component Optimization
General internal cleanup and optimizations, making way for new future UI possibilities
Community Kick - Disconnect from Radio
When a player is kicked from the community (via Radio members tab or CMS) they will now be automatically disconnected from the radio, preventing them from transmitting any further
Home Button - Auto-Reconnect
Pressing the home button on the in-game radio (to hard refresh) will now automatically re-connect the user
Optimized Signal Quality Reports
Optimized in-game tower signal reporting to spam fewer updates across the websockets, only reporting when there is a significant enough change
Permission Checks
Fixed multiple backend permission checks preventing users without the Admin permission from accessing functionality
Key Input on Power Toggle
Fixed an issue causing the in-game "press any key" popup to display every time you turned off/on the radio, instead of just once at the initial game join
#25095 - TTS Fast
AI channel name TTS will now stop playing if you quickly switch to another channel before the audio has finished
Radio Frame - Persist Selection
Fixed an issue where selecting a different radio frame in the settings would not save/persist after closing the radio
Mobile repeaters won't toggle on
Fixed an issue causing the G button in vehicles configured to act as a mobile repeater to not work
Admin Panels - No Perm Redirect
Added local permission checks to prevent users from loading UI panels by changing the browser URL, even though the backend properly prevented data manipulation
Unable to Leave Pending Community
Fixed an unauthorized error from happening when trying to leave a community you were pending in.
New User - Unknown Display Name
Fixed an issue where a user newly joining the community and connecting to the radio would display as "Unknown User" to people already connected
QB Reference Error
Fixed an error causing the in-game resource to fail under certain QB Core modes
Added the ability to configure in-game tunnels and other 3D areas that reduce radio signal quality.
AI Channel Text-To-Speech
Added automatic AI generated channel name TTS that will play when connecting and switching channels.
Context Menu Name Change
Added the ability to right-click on a connected user to quickly modify their display name.
Private Channel Permissions
Added the ability to toggle channel visibility to private, requiring a user permission to connect.
CMS x Radio - Private Channel Permissions
Added the ability to automatically manage private radio channel permissions via Sonoran CMS.
CMS x Radio - Name Sync
Added the ability to automatically manage radio display names via Sonoran CMS.
Nearby Radio Chatter - Earpiece
Added the ability to configure in-game earpiece EUP that will prevent people nearby from hearing your radio.
Game Resource Optimization
Added multiple new in-game optimizations to improve resource performance.
Connected Users List - Save Position
Added size and position persistence to the in-game connected users list.
Proxy URL - Retry
Added retry logic and UI errors in the event that the in-game resource can not get the proxy URL.
#24819 - Talkover on Scan
Fixed an issue causing talkover protection to prevent someone listening to a channel with someone transmitting from transmitting in their own, clear channel.
Tone Configuration Fixes
Fixed multiple issues with tone files and tone cosmetic customizations not being persisted or removed.
CAD Livemap Repeater Types
Fixed an issue causing only the radio tower type repeaters to show on the CAD livemap.
Alphabetically sorted display names
Radio and Connected User Hide
Fixed an issue causing the radio and connected user menu to not hide when pressing ESC if no hotkey was set
Added four radio frame options in-game to choose from, customizable by the community
In-Game Connected List
Added an in-game connected users list
Cache Busting
Added improved cache busting to ensure in-game radio updates are recieved faster by users
Mic Clicks - For Local Only
Per-user custom mic clicks are now only heard by that user, instead of everyone on the radio
In-Game Talk Sync
Talk in-game at the same time you talk in the radio
Vehicle Radio Blue Screen
Fixed an issue causing switching from the handheld to vehicle radio causing a blue radio screen for some users until turned off and back on
In-Game Talkover
Fixed an issue allowing some users to talkover others while talkover protection was enabled
Added a customizable toneboard allowing dispatchers to play or repeat tones on specific channels and groups.
Server Customization UI
Consolidated the server customization menu into organized tabs and improved the in-game install with a step-by-step tutorial.
Animation Download
Added a tutorial step in the server customization menu to install the custom radio animations.
New Join 403
Hotfix: Fixed an issue causing newly joined members to get an error on the web and desktop versions.
Added visual signal bars in-game to view your tower connectivity
SFX Volume
Added the ability to customize the sound effect volume in the settings menu
Auto-Join on Link
Users now automatically join the Sonoran Radio community after linking in-game
In-Game Enhanced Error Handling
Improved errors and ensured the resource fails to start without a proper community ID and API key
Mobile UI improvements
Added multiple improvements for mobile users, including a dedicated UI for the radio panel
Mobile PTT Button
Added a push to talk button to the mobile version (web, apps coming soon) to utilize the rado on mobile devices
Fix: Desktop Updater
Fixed an issue causing the desktop application auto-updater from working
PTT In-Game & Radio
Fixed an issue preventing scripts from making the player talk in-game at the same time as they're talking on the radio
#23608 - Server Members
Fixed an issue limiting the number of users visible in the server members tab
#23542 - Tower Components
Fixed an issue causing pieces of a radio tower to be left after removal
#23758 Discord and Apple Login Window
Fixed an issue on the desktop app opening the radio in a second window after login via Discord or Apple
Added the ability to right click on a user in-game to adjust their volume.
Panel - Customized Download
Added a new download link in the radio panel that includes a pre-configured community ID and API key.
In-game Radio - Logout
Added an option to logout and unlink your radio in-game via the settings menu.
Startup - Link IP
Added an automatic API call to link your server's IP address to your community ID. This will be used for an upcoming integration.
API Key - Rotate
Added the ability to rotate and refresh your API key if leaked.
Menu CMS Discovery
Added the CMS community discovery spotlight to the portal's community selection menu.
Talkover Protection In-Game
Fixed an issue causing talkover protection in-game to fail.
Distortion Inconsistencies
Fixed an issue causing in-game distortion due to tower signal to not work consistently.
In-Game Permission Re-Request
Fixed an issue causing the user to be asked for microphone permissions on every join.
Improved the /link portal UI with automatic focusing, forward/back navigation, and submission.
In-Game Towers
Added three radio repeater models for in-game signal strength.
In-Game Resize and Move
Added the ability to resize and move the radio UI.
Custom Animation Support
Added the ability to disable in-game animations while talking, for custom animation scripts.
Developer Exports - PTT
Added developer exports when a user activates and deactivates their PTT hotkey.
#23262 - Desktop Hotkey
Fixed an issue with updating your keybind not setting until an application restart
Added per-user volume controls
Talkover Protection
Added toggleable talkover protection
Channel Change: Drag-and-drop
Move users by dragging and dropping
Fixed connecting on another window redirecting to home (which would break the in-game resource)