
Documentation
Integrate the script with your server and connect it to your existing systems using the available developer API and events.
string |
Player identifier ( |
| string | Entry title |
| string | Font Awesome class |
| string | Description shown under the title |
Example:
exports['qs-banking']:AddTransaction(identifier, 'Paycheck', 'fa-solid fa-piggy-bank', 'Weekly pay: 2500')Returns every branch, including creator-placed ones.
local banks = exports['qs-banking']:GetBanks()Returns every ATM placed from the creator.
local atms = exports['qs-banking']:GetAtms()Returns a player's loans and bank mortgages.
local credit = exports['qs-banking']:GetPlayerLoans(identifier)Returns
{ loans = { ... }, mortgages = { ... } }Returns the player's native qs-housing mortgages — the ones created by qs-housing itself, not by a branch.
local mortgages = exports['qs-banking']:GetHousingMortgages(identifier)These are a separate debt from bank mortgages. See the Usage guide for the difference.
Returns how much of a player's balance is currently frozen by screening.
local held = exports['qs-banking']:GetHeldAmount(identifier)Returns
numberSubtract this from the balance anywhere your resource checks whether a player can afford something — otherwise you will let them spend money the bank has frozen.
local balance = exports['qs-banking']:GetSocietyMoney(job)Also available as GetAccountBalance.
exports['qs-banking']:AddSocietyMoney(job, amount, reason)
exports['qs-banking']:RemoveSocietyMoney(job, amount, reason)Also available as AddMoney and RemoveMoney.
Parameters
Parameter | Type | Description |
|---|---|---|
| string | Job name |
| number | Amount to move |
| string | Written to the society log |
Always pass a reason. Every movement is logged with who, what and why, and an unexplained line is the one owners come asking about.
local account = exports['qs-banking']:GetSocietyAccount(name, kind)Parameters
Parameter | Type | Description |
|---|---|---|
| string | Job or gang name |
| string | Account type |
Gang accounts use their own set, available on QBCore:
exports['qs-banking']:GetGangAccount(gang)
exports['qs-banking']:AddGangMoney(gang, amount, reason)
exports['qs-banking']:RemoveGangMoney(gang, amount, reason)Returns whether the property integration is active — both enabled in the config and with qs-housing running.
local ready = exports['qs-banking']:IsRealEstateReady()Returns
booleanCheck this before showing any property feature in your own resource — it degrades silently on this side, and yours should too.
Returns the branches licensed to buy houses.
local buyers = exports['qs-banking']:GetHouseBuyers()Same as AddTransaction, for the calling player.
TriggerServerEvent('banking:server:addTransaction', 'Paycheck', 'fa-solid fa-piggy-bank', 'Weekly pay: 2500')Offers one of the player's houses to a licensed branch.
TriggerServerEvent('qs-banking:server:offerHouseToBank', house, bankId, price)Parameters
Parameter | Type | Description |
|---|---|---|
| string | House name |
| number | Target branch id |
| number | Asking price |
Broadcast whenever any branch or ATM changes.
RegisterNetEvent('banking:client:syncLocations', function(payload)
-- rebuild anything of yours tied to branch locations
end)Clients rebuild blips, peds, props, target zones and doors from this payload, which is why nothing needs a restart.
Framework support is a thin adapter. Duplicate client/custom/framework/ and server/custom/framework/, then implement the same globals:
Server: RegisterServerCallback · GetPlayerFromId · GetPlayerIdentifier · GetPlayerFromIdentifier · PlayerIsAdmin · GetAccount · GetMoney · AddMoney · RemoveMoney · AddItem · RegisterUsableItem · GetJobInfo · GetGangInfo
Adapters are loaded before every module, so once the globals exist, the rest of the resource works without knowing which framework is running.
Use server/custom/inventory/origen.lua as the reference. The contract is small — the adapter only needs to handle metadata item writes for cards.
Zone definitions live in client/custom/target/*.lua, one file per targeting resource. Copy the closest one and register the same zones: counter, tellers, laptop and ATMs.
server/custom/misc/transactions.lua runs on every movement, which makes it the right place for an external ledger, an anti-cheat feed, or your own audit system.