USQL: Ultra Simple Query Language
USQL is the search language used across FiniAC. It works in log search, event log search, and event drain filters.
Syntax
Free-Text
Type any word or phrase to search across all searchable fields. Multiple terms are combined with AND by default.
explosion
Disconnected timeout
"connection timed out"Negation
Prefix a term with ! or - to exclude results containing it:
!Disconnected
-kickedBoolean Operators
Combine terms with AND / && and OR / || (case-insensitive):
Rejected AND discord
Connected OR DisconnectedGrouping
Use parentheses to control evaluation order. Without them, AND binds tighter than OR.
(Connected OR Disconnected) AND ExampleUsernameQuoted Phrases
Use double quotes for values with spaces or special characters:
"No Discord account linked"
"connection timed out"Field Expressions
Target a specific field using field:value syntax. Available in event log search and event drain filters.
license:194c5ebc4d2a6bdc0e06524bc46bc31bf6450a0c
discord:19635812560016313
sender_name:ExamplePlayerComparison Operators
| Operator | Description | Example |
|---|---|---|
: | Field default (exact or contains) | event_type:player_damage |
= | Exact match | event_type=player_damage |
!= | Not equal | event_type!=player_heal |
~ | Contains (case-insensitive) | payload~PISTOL |
> | Greater than (numeric) | data.damage>50 |
< | Less than (numeric) | data.damage<100 |
>= / <= | Greater/less than or equal | data.damage>=50 |
Examples
Free-text (searches all fields including payload):
weaponSearch payload specifically:
payload:WEAPON_PISTOL
payload~ammo
!payload:debugCombine fields and free-text:
event_type:player_damage AND ExamplePlayer
(event_type:player_damage OR event_type:player_kill) AND payload~PISTOLEvent Drain Filters Enterprise
Event drains support USQL field expressions for filtering on structured event data. Events contain nested data structures flattened to dot-notation paths.
Available Fields
Event fields:
| Field | Description |
|---|---|
type | Event type name |
event_type | Alias for type |
event_time | Event timestamp |
player_name | Player name |
player_id | Player server ID |
Sender identifiers — access with sender. prefix:
| Field | Description |
|---|---|
sender.name | Sender player name |
sender.license | Rockstar license |
sender.license2 | Secondary license |
sender.discord | Discord ID |
sender.fivem | FiveM ID |
sender.xbl | Xbox Live ID |
sender.live | Microsoft Live ID |
sender.ip | IP address |
Target identifiers — access with target. prefix:
| Field | Description |
|---|---|
target.name | Target player name |
target.license | Rockstar license |
target.license2 | Secondary license |
target.discord | Discord ID |
target.fivem | FiveM ID |
target.xbl | Xbox Live ID |
target.live | Microsoft Live ID |
target.ip | IP address |
Position:
| Field | Description |
|---|---|
position.x | X coordinate |
position.y | Y coordinate |
position.z | Z coordinate |
pos_x | Alias for position.x |
pos_y | Alias for position.y |
pos_z | Alias for position.z |
Event data — access with data. or payload. prefix:
Both data.* and payload.* point to the same event data. The available sub-fields depend on the event type. Common examples:
| Field | Description |
|---|---|
data.weapon | Weapon hash or name |
data.damage | Damage amount |
data.distance | Distance value |
data.model | Entity model hash |
data.entityType | Entity type |
data.plate | Vehicle plate |
data.amount | Generic amount |
data.reason | Event reason |
TIP
Since event data varies by event type, any nested key from the event payload can be used as a filter field with dot notation: data.your.nested.field.
Examples
Match damage events from a specific player using a pistol:
type:player_damage && sender.discord:123456789 && data.weapon~PISTOLMatch high-damage events excluding heals:
data.damage>50 && !type:player_healFilter by position (e.g. events near a specific area):
position.x>100 && position.x<200 && position.y>300 && position.y<400Match entity creation events with a specific model:
type:entity_create && data.model:prop_weed_01