Configuration
Every entry in shared/config.lua. Defaults, types, and purpose.
All settings live in shared/config.lua. The file is in escrow_ignore
so it remains editable after install. Locale strings live in two places,
both editable: shared/locales/<lang>.lua covers notifications and
target labels, nui/js/locales/<lang>.js covers the ATM screen and the
bank app. Webhook URLs and the PIN secret live in server-config.lua,
which is never sent to players; its logging settings are documented at
the end of this page.
Internal calibration (the 3D ATM panels and their IK geometry, animation dictionaries, camera offsets, cache TTLs, sound effect mapping) is set inside the encrypted resource and is not part of this file.
General
Config.Localestringdefault: 'en'Active locale, applied to both the ATM and the bank app. Shipped values: 'en', 'fi', 'de', 'fr', 'pt-br', 'es', 'tr', 'nl', 'it', 'pl'.
Config.UseTargetbooleandefault: trueUse a targeting system (ox_target / qb-target) for ATM and bank-ped interactions. If false, falls back to proximity prompts.
Config.TargetSystemstringdefault: 'ox_target'Target resource name. One of 'ox_target', 'qb-target', 'qtarget'.
Session
Config.Session.timeoutSecondsnumberdefault: 120Inactivity timeout before the ATM session is killed.
Config.Session.pinAttemptsnumberdefault: 3Allowed wrong-PIN attempts before lockout.
Config.Session.lockoutDurationnumberdefault: 300Lockout duration in seconds after exceeding pinAttempts.
3D ATM panels
Accounts
Config.Accounts.autoCreateDefaultbooleandefault: trueWhen a player without a default account uses an ATM, create one automatically.
Config.Accounts.autoCreateAccountTypestringdefault: 'personal'Type assigned to the auto-created default account.
Config.Accounts.autoCreateAccountNamestringdefault: 'Personal Account'Display name assigned to the auto-created default account.
Config.Accounts.autoCreateLinkBankBalancebooleandefault: trueIf true, mirror the framework's bank balance onto the linked personal account on login.
Config.Accounts.nameMinLengthnumberdefault: 3Minimum allowed length for an account name.
Config.Accounts.nameMaxLengthnumberdefault: 32Maximum allowed length for an account name.
Config.Accounts.allowOwnerClosebooleandefault: trueOwners can close their own accounts.
Config.Accounts.allowOwnerFreezebooleandefault: falseOwners can freeze their own accounts.
Config.Accounts.adminGroupsstring[]default: { 'admin', 'superadmin', 'mod' }Framework group names treated as bank admins.
Config.Accounts.adminPermissionsstring[]default: { 'admin', 'god' }Additional QBCore permissions recognized as bank admins.
Config.Accounts.adminAcePermissionstringdefault: 'command.nx_realbanking_admin'ACE permission checked for admin actions.
Shared accounts
Config.Accounts.Shared.enabledbooleandefault: trueMaster toggle for multi-owner (shared) accounts.
Config.Accounts.Shared.allowPersonalbooleandefault: falseAllow personal accounts to be shared with other players.
Config.Accounts.Shared.allowBusinessbooleandefault: trueAllow business accounts to be shared.
Config.Accounts.Shared.allowSavingsbooleandefault: trueAllow savings accounts to be shared.
Config.Accounts.Shared.allowLinkedPersonalbooleandefault: falseAllow the framework-linked personal account to be shared.
Config.Accounts.Shared.cacheSecondsnumberdefault: 120Cache TTL for shared account membership lookups.
Config.Accounts.Shared.adminBypassbooleandefault: trueAdmins bypass shared-account role checks.
Config.Accounts.Shared.defaultRolestringdefault: 'viewer'Role assigned when inviting a new member without an explicit role.
Config.Accounts.Shared.rolestableRole to permission map. Shipped with owner, manager, teller, viewer. Each role sets boolean flags: view, withdraw, deposit, transfer, manage_members, edit_limits, freeze, close.
Inventory / cash item
Config.Inventory.useOxInventoryForCashbooleandefault: falseWhen true, deposit and withdraw flows write the cash item directly through ox_inventory instead of calling the framework's AddMoney / RemoveMoney. Use this if your server renamed the cash item and the framework's auto-sync no longer fires.
Config.Inventory.moneyItemstringdefault: 'money'ox_inventory item name that represents cash. Common values: 'money', 'cash'. Only used when useOxInventoryForCash is true.
PIN code
Config.Pincode.changeCostnumberdefault: 100Fee charged when the user changes their PIN. First creation is free.
Config.Pincode.resetCostnumberdefault: 200Fee charged for a PIN reset (no old PIN required).
Config.Pincode.allowSequentialbooleandefault: falseWhether players may set a run of consecutive digits such as 1234 or 4321. Off means those PINs are refused.
Config.Pincode.allowRepeatedbooleandefault: falseWhether players may set the same digit four times, such as 1111. Off means those PINs are refused. PINs are always 4 digits; attempts and lockout are set under Config.Session.
Fees
Each fee block shares a shape: { enabled, type = 'percentage' | 'flat', value, minFee?, maxFee? }.
Config.Fees.withdrawaltabledefault: { enabled=false, type='percentage', value=1.5, minFee=1.00, maxFee=50.00 }Charged on ATM withdrawals, on top of the amount requested: the player receives what they asked for and the account loses amount + fee. Ships disabled so updating does not change your economy.
Config.Fees.transfertabledefault: { enabled=true, type='flat', value=2.50, sameBankFree=true }Charged on transfers. sameBankFree waives the fee for transfers between accounts of the same player.
Config.Fees.deposittabledefault: { enabled=false, type='flat', value=0 }Taken out of the deposit: the player hands over the amount and the account is credited amount - fee. Ships disabled.
Transaction limits
Config.LimitstablePer-account-tier limits: default, premium, business, savings. Each entry: { dailyWithdrawal, dailyDeposit, dailyTransfer, transactionMax, transactionMin }. Shipped defaults use a deliberately permissive ceiling. Tighten these for your economy.
Sounds
Config.Sounds.volumenumberdefault: 0.5Scales the whole ATM sound mix (0.0 to 1.0). 0.5 is the shipped level, 0.0 mutes the ATM.
Security
Config.Security.logLevelstringdefault: 'basic'One of 'none', 'basic', 'verbose', 'paranoid'. Controls how much detail is written to the security audit log. The bank app's Security Center reads from these logs, so 'basic' is the minimum if you want session and PIN events to appear there. Set to 'none' to silence all security logs.
Config.Security.anticheattabledefault: { distanceChecks=true, teleportDetection=false, speedHackDetection=false, injectionDetection=false }Anti-exploit toggles. Distance checks are cheap and recommended. The movement checks are heuristics and ship off, because an admin teleport menu or a vehicle launcher will trip them. injectionDetection refuses malformed payloads from a client.
Config.Security.thresholdstabledefault: { rapidTransactions=10, largeTransfer=50000, dailyLimitPercent=90 }Heuristic thresholds for flagging suspicious activity. These flag, they do not hard-block.
ATMs
Config.ATMPropstableArray of ATM prop definitions. Each entry: { model = `hash`, type = 'standalone' | 'wall' | 'maze_bank' }. Shipped models: prop_atm_01, prop_atm_02, prop_fleeca_atm, v_5_b_atm1, v_5_b_atm2.
Blips
Config.Blipstabledefault: { enabled=false, sprite=207, color=2, scale=0.8, label='ATM', shortRange=true }Global toggle for ATM blips. Per-location visibility is still controlled by Config.ATMLocations[i].blip.
Config.ATMLocationstableATM marker / blip definitions at fixed coordinates. Each entry: { coords = vector3, name = string, blip = boolean }.
Bank locations
Config.BankLocationstableArray of in-world bank-access points. Each entry: { coords = vector3, heading, type = 'fleeca' | 'pacific' | 'blaine' | 'maze', label, blip, ped }. Peds spawn with the given model and scenario. Targeting a banker triggers nx_realbanking:server:openBank.
Bank interactions
Config.BankInteractions.targetOptionstabledefault: { label='Access Bank', icon='fa-solid fa-building-columns', distance=2.5 }Options surfaced when a player targets a bank ped or counter.
Config.BankInteractions.markertableMarker placed at bank locations. Fields: enabled, type, color {r,g,b,a}, size, bobUpAndDown, faceCamera, rotate. Disabled by default in favor of target-based interaction.
Config.BankInteractions.drawDistancenumberdefault: 15.0Maximum distance at which markers and 3D text are drawn.
Config.BankInteractions.text3dtabledefault: { enabled=false, scale=0.35, color={r=255,g=255,b=255,a=255} }Optional 3D text prompt above bank peds.
Config.BankInteractions.keybindtabledefault: { enabled=true, key=38, label='E' }Proximity keypress, used only when Config.UseTarget is false. If you turn targeting off, leave this on or players cannot reach the bank peds.
Societies (job invoicing)
Config.SocietiestableMap of job name to { label, account, canBill, canInspect, finePresets, requireReason }. Shipped jobs: police, sheriff, ambulance, mechanic, taxi, realestate, cardealer. Each finePresets is an array of { label, amount } quick-fill options surfaced in the invoice UI.
Freelance billing
Config.FreelanceBilling.enabledbooleandefault: trueMaster toggle for freelance (player-to-player) invoicing.
Config.FreelanceBilling.maxAmountnumberdefault: 10000Maximum amount for a single freelance invoice.
Config.FreelanceBilling.minAmountnumberdefault: 10Minimum amount for a single freelance invoice.
Config.FreelanceBilling.requireDescriptionbooleandefault: trueReject freelance invoices without a description.
Config.FreelanceBilling.cooldownSecondsnumberdefault: 60Anti-spam cooldown between invoices issued by the same player.
Config.FreelanceBilling.allowOfflinePlayersbooleandefault: falseWhether freelance invoices can be addressed to offline players.
Invoices
Config.Invoices.enablePersonalbooleandefault: trueEnable player-to-player personal invoices.
Config.Invoices.enableSocietybooleandefault: trueEnable job-issued society invoices.
Config.Invoices.allowSelfInvoicebooleandefault: trueAllow a player to send an invoice to themselves.
Config.Invoices.personalRequireAcceptancebooleandefault: truePersonal invoices require the receiver to accept before they can be paid.
Config.Invoices.acceptanceTimeoutCheckIntervalnumberdefault: 5Minutes between sweeps that expire un-accepted personal invoices.
Config.Invoices.onlyOnlineTargetsbooleandefault: trueRestrict invoice creation to currently online recipients.
Config.Invoices.targetMenuEnabledbooleandefault: falseAdds a billing option to the target menu for every player in the world. Off by default. The bank app's Send Invoice tab works either way.
Invoice limits
Config.InvoiceLimits.maxPendingtabledefault: { received=20, sent=10 }Hard cap on simultaneously pending invoices per player, split by direction.
Config.InvoiceLimits.maxAmountnumberdefault: 100000Maximum amount a single invoice may carry.
Config.InvoiceLimits.minAmountnumberdefault: 1Minimum amount a single invoice may carry.
Config.InvoiceLimits.dailyLimittabledefault: { enabled=true, maxCreated=50, maxAmount=500000 }Per-player daily cap on invoice count and total amount issued.
Config.InvoiceLimits.expirationtabledefault: { enabled=true, days=30 }When enabled, invoices become overdue after `days`.
VAT
Config.VAT.enabledbooleandefault: falseApply VAT on top of invoice amounts.
Config.VAT.ratenumberdefault: 10.0VAT percentage.
Config.VAT.govAccountstringdefault: 'society_government'Society account that receives collected VAT.
Config.VAT.applyToSocietybooleandefault: trueApply VAT to society-issued invoices.
Config.VAT.applyToFreelancebooleandefault: trueApply VAT to freelance-issued invoices.
Config.VAT.showBreakdownbooleandefault: trueDisplay VAT as a separate line in the invoice UI.
Commission
Config.Commission.societyInvoicestabledefault: { enabled=true, percent=5.0, minAmount=10, maxAmount=500 }Commission on society invoices, clamped between minAmount and maxAmount.
Config.Commission.freelanceInvoicestabledefault: { enabled=false, percent=0.0, minAmount=0, maxAmount=0 }Commission on freelance invoices. Disabled by default.
Autopay
Config.Autopay.enabledbooleandefault: falseAuto-debit invoices that pass their due date.
Config.Autopay.daysnumberdefault: 7Days after the due date at which autopay attempts settlement.
Config.Autopay.checkIntervalnumberdefault: 60Minutes between autopay sweeps.
Config.Autopay.notifyBeforetabledefault: { enabled=true, daysBefore=1 }Notify the player before autopay runs against them.
Config.Autopay.onFailuretabledefault: { applyInterest=true, interestRate=5.0, sendToDebtCollection=false, notifyPlayer=true }Behavior when autopay cannot collect funds.
Credit cards
Config.Credit.enabledbooleandefault: trueMaster toggle. If false, all credit-card exports return CREDIT_DISABLED.
Config.Credit.itemstabledefault: { givePhysicalCard=true, creditCardItem='credit_card' }ox_inventory item name that represents a credit card, and whether to give the physical item on approval.
Config.Credit.billingtableBilling cycle knobs: inGameDayMinutes, cycleDays, dueDays, checkIntervalSeconds, interestIntervalDays, minimumPaymentPercent, minimumPaymentFlat. In-game days compress real-world billing windows into a gameplay-friendly pace.
Config.Credit.scoretableCredit score model: min/max bounds, base score, stable-job bonus, bank-balance thresholds, account-age bonus, payment bonuses and penalties, usage bonus, and a usage-bonus cap (cardUsageBonusCap). These numbers drive tier eligibility.
Config.Credit.penaltiestabledefault: { lateFeeFlat=250, lateFeePercent=2.5, collectionsThreshold=50000, autoSeizeEnabled=true }Late fees and collections behavior. autoSeizeEnabled will seize funds from linked accounts when debt exceeds collectionsThreshold.
Config.Credit.limitstabledefault: { maxActiveCards=2, maxSingleCharge=25000 }Hard limits on cards per player and the maximum value of a single charge.
Config.Credit.atmCashAdvancetableATM cash-advance flow: enabled, autoFallbackOnInsufficient, requirePhysicalCard, merchant label, transactionType identifier.
Config.Credit.tierstableTier definitions keyed by tier id. Shipped: standard, gold, black. Each: label, creditLimit, interestRate, graceInterestRate, graceDays, minimumScore, requiresStableJob, whitelistedJobs. The black tier whitelists specific jobs.
Config.Credit.tierPrioritystring[]default: { 'black', 'gold', 'standard' }Order used when auto-assigning a tier from score. Highest eligible tier wins.
Discord logging
These live in server-config.lua, not shared/config.lua. A webhook URL
lets anyone holding it post as your server, so keep it in that file and
regenerate it in Discord if it ever leaks.
Config.Logging.enabledbooleandefault: trueMaster switch for all Discord logging.
Config.Logging.defaultWebhookstringdefault: ''Used by any enabled category that has no webhook of its own. Leave this and every category webhook empty and nothing is sent.
Config.Logging.botNamestringdefault: 'NX Banking'Name shown on the messages. The category is appended, so a security message posts as 'NX Banking - Security'.
Config.Logging.botAvatarstringdefault: ''Optional avatar image URL for the messages.
Config.Logging.mentionRoleIdstringdefault: ''Role id pinged on critical events only. Empty means never ping. Everything else posts with notifications suppressed so a busy channel does not spam your staff.
Config.Logging.flushSecondsnumberdefault: 3How long an event may wait to be grouped with others. Lower feels more live, higher is quieter. Critical events ignore this and send immediately.
Config.Logging.maxQueuedEventsnumberdefault: 500Backlog limit per channel. If Discord cannot keep up, the oldest events are dropped and the next message reports how many were lost.
Config.Logging.categoriestableOne entry per category: transactions, security, invoices, credit, accounts, admin. Each takes enabled, webhook, label, mode and minSeverity. transactions also takes minAmount to ignore small movements.
Config.Logging.privacytabledefault: { includeIp=false, includeIdentifiers=false }Citizen ids are always shortened in the message. These two opt in to also recording the player's IP address and full identifier list. An IP counts as personal data in most jurisdictions.
Categories
Each category can point at its own channel. An empty webhook falls back
to defaultWebhook.
| Category | Covers | Volume | Default |
|---|---|---|---|
security | Exploit attempts, PIN lockouts, permission violations, money that failed to reconcile | Low | On |
accounts | Accounts created, closed, frozen, renamed, handed over, plus shared account membership | Low | On |
admin | Invoice deletions, player financial inspections, export-driven actions | Low | On |
invoices | Created, paid, cancelled, auto-paid, expired | Medium | Off |
credit | Applications, charges, statements, late fees, collections | Medium to high | Off |
transactions | Deposits, withdrawals, transfers | High | Off |
transactions and credit ship off because they are busy enough to
deserve a channel of their own. Turn them on once you have somewhere to
put them.
Modes
mode controls how much room each event gets.
| Mode | Behaviour |
|---|---|
embed | One message block per event. Readable, best for low volume. |
digest | Many events collapsed into a single table. Best for transactions. |
off | Category disabled. |
Severity
minSeverity drops anything below the level you set: info, warning
or critical. Auto-payments, credit interest and member removals are
warnings. Exploit attempts and debt seizures are critical.