Configuration Reference

Every oxide-banking config file and setting — security, the banking schedule, cards, invoices, credit scores, transfers, tiers, savings, loans, investments, CDs, fees, and the tablet and phone apps.

Everything you can change lives in the config/ folder. This page explains each file and the most important settings. After changing a config file, restart the resource (ensure oxide-banking) for the change to take effect.

Settings marked Not currently used

A few settings in the shipped files are not read by the current version of the bank. They are marked Not currently used below, so you know that changing them has no effect.

Config File Map

FilePurpose
config/config.luaGeneral settings, interaction, security, time, cards, business and invoices, transfer delays, credit score, debug, tablet, and phone settings
config/accounts.luaTier definitions, the savings account rules, savings goal categories, and the starting tier
config/loans.luaLoan products, borrowing limit, approval rules, late fees, collections, and vehicle-loan display types
config/interest.luaInterest, investments, market simulation, and certificates of deposit
config/fees.luaTransfer, tier change and overdraft fees, integration fees, and fee waivers

General Settings

File: config/config.lua

SettingTypeDefaultDescription
Config.DebugbooleanfalsePrints extra information to the server console for troubleshooting
Config.UseTargetbooleantruetrue = players use the targeting eye on banks/ATMs; false = players walk up and press E
Config.ATMModelsstring[]4 modelsWhich ATM props around the map players can use
Config.BankLocationstable[]8 locationsWhere the bank branches are and what they are called. Each entry has coords, heading and label
Config.Blips.enabledbooleantrueShows bank icons on the map
Config.Blips.spritenumber108Map icon used for banks
Config.Blips.colornumber2Map icon colour
Config.Blips.scalenumber0.55Map icon size
Config.Blips.labelstring'Bank'Map name, used only for a bank location that has no label of its own

Security

File: config/config.lua

SettingDefaultDescription
Config.Security.Enable2FAtrueLets players turn on a 6-digit security PIN with backup codes in their bank settings. Players who turn it on are asked for the PIN (or a backup code) before large withdrawals and transfers. false turns the feature off for everyone
Config.Security.TwoFactorThreshold50000Withdrawals and transfers of this amount or more ask for the security PIN, for players who turned it on
Config.Security.MaxLoginAttempts3Wrong ATM PINs a player can enter before PIN entry is locked
Config.Security.LockoutDuration300How long, in seconds, PIN entry stays locked after too many wrong PINs
Config.Security.EnableFraudDetectiontrueChecks withdrawals, deposits and transfers to other players. A large amount, or 5 or more transactions within a minute, alerts every online admin and is written to the security log
Config.Security.SuspiciousTransactionAmount100000Transactions of this amount or more count as large for the fraud check
Config.Security.EnableTransactionAlertstrueSends players a notification when they deposit, withdraw, or send or receive an instant transfer to another player, at or above their alert amount
Config.Security.AlertThreshold10000The starting alert amount. Players can change their own amount in the bank settings

Scheduling And Time

File: config/config.lua

Banking runs on its own internal calendar. One "banking day" passes for every calendar day on your server's real clock. If the server was off at midnight, including during a nightly restart, the day is counted the next time it starts, so nothing is lost. Savings interest, recurring payments, and market updates are all measured in banking days.

Loan due dates, invoice due dates, and investment and CD maturity dates are real calendar dates.

SettingDefaultDescription
Config.TimeSettings.UseInGameTimetrueNot currently used — the banking schedule always runs on the server's real clock
Config.TimeSettings.InterestPayoutHour0Server-time hour daily tasks run from (0 = midnight). If the server is down at that hour, they run once it is back up
Config.TimeSettings.SavingsInterestInterval1Pay savings interest every N banking days
Config.TimeSettings.LoanPaymentInterval7Days between a loan's instalments. A 28-day loan at 7 is paid in 4 instalments
Config.TimeSettings.InvestmentUpdateInterval1Every N banking days: update investment values, mark matured investments and CDs, and pay dividends
Config.TimeSettings.RecurringPaymentCheck1Process recurring payments every N banking days
Config.TimeSettings.DaysPerYear28How many banking days count as one "year" when calculating interest

Cards, Logging, Business, And Transfers

File: config/config.lua

Cards

SettingDefaultDescription
Config.Cards.OrderCost50Price of a new debit card
Config.Cards.ReplacementCost100Price of a replacement card (charged instead of the order price)
Config.Cards.PinLength4How many digits a PIN has when a card is ordered. Changing a PIN later always needs exactly 4 digits, whatever this is set to
Config.Cards.MaxCardsPerAccountTypechecking 3, savings 2, shared 3, job 2, gang 2Most cards one account can have, per account type. On personal checking this counts the player's own cards
Config.Cards.MaxCardsPerAccount2Card limit for any account type missing from MaxCardsPerAccountType
Config.Cards.CardNumberMaskFormat'**** **** **** %s'How hidden card numbers are shown. %s is replaced with the last 4 digits
Config.Cards.SharedAccountMinPermission'user'Who can order a card for an account they do not own: 'user' lets anyone with access order one. 'owner' limits shared account cards to the owner, and then nobody can order a card for a job account
Config.Cards.ShowAccountBalanceInSelectorfalseShow each card's account balance in the ATM card picker
Config.Cards.AllowPINChangetrueNot currently used. PIN change is always available
Config.Cards.AllowFreezetrueNot currently used. Freezing is always available
Config.Cards.AllowCanceltrueNot currently used. Cancelling is always available
Config.Cards.AllowReplacementtrueNot currently used. Replacement is always available
Config.Cards.CancelledCardRetentionDays30Days a cancelled or revoked card stays in the database before the daily clean-up deletes it

Logging

These settings control what the bank sends to ox_lib's logger. That logger only sends anything if you have set up a logging service in ox_lib.

SettingDefaultDescription
Config.Logging.EnabledtrueEnables banking logging
Config.Logging.LogTransactionstrueTransaction and investment log toggle
Config.Logging.LogLoanstrueLoan log toggle
Config.Logging.LogAccountChangestrueAccount/admin change log toggle
Config.Logging.LogSecurityEventstrueSecurity log toggle

Business

Config.Business controls expense categories and invoice due dates, late fees, limits, and collection.

SettingDefaultDescription
InvoiceDueDays7Days until an invoice is due when no due date is given
InvoiceLateFeeEnabledtruefalse turns invoice late fees off
InvoiceLateFeePercent0.05The part of the late fee every overdue invoice carries
InvoiceLateFeeDailyPercent0.01Added for every day past the due date (set to 0 for a single flat fee)
InvoiceMaxLateFee10000Ceiling on the total late fee (0 for no ceiling)
InvoiceMaxAmount250000Largest invoice a player can write (0 for no limit)
MaxOutstandingInvoicesPerRecipient10Unpaid invoices one player can have open against another (0 for no limit)
InvoiceAutoDebitEnabledtrueCollect overdue invoices from the debtor's bank account automatically
InvoiceAutoDebitAfterDays3Days past the due date before an invoice is collected
InvoiceAutoDebitPerRun200Most invoices collected in one daily run
LargeExpenseThreshold10000Not currently used. There is no expense approval step
ReportCacheDuration3600Not currently used
MaxReportMonths12Not currently used

The invoice limits apply only to invoices players write from the banking screen. Invoices raised by other resources (fines, medical bills, vehicle finance) are not limited.

Late fees. An unpaid invoice is marked overdue the day after its due date. From then on the late fee is InvoiceLateFeePercent plus InvoiceLateFeeDailyPercent for every day past the due date, capped at InvoiceMaxLateFee. With the defaults, an invoice one day late carries a 6% fee, and one ten days late carries 15%. The screen shows the total a player owes, and that is what they are charged.

Collection. Once an invoice is InvoiceAutoDebitAfterDays days past its due date, the amount owed is taken from the debtor's bank account automatically. Only the full amount is ever taken — a debtor who cannot cover it is left alone and keeps accruing the fee. Whoever raised the invoice can still cancel it while it is overdue, so a mistake can be withdrawn before collection takes it. Set InvoiceAutoDebitEnabled = false to turn collection off and leave late fees and credit score damage as the only consequence.

Both run once per banking day. Admins can run them on demand with /forceinvoices, which only marks invoices and updates fees; /forceinvoices collect also collects, even when InvoiceAutoDebitEnabled = false. See Admin Commands.

Config.Business.ExpenseCategories ships with 7 default categories (supplies, utilities, vehicle, property, legal, marketing, other).

Credit Score

A player's score has two parts. Five weighted factors — payment history (35%), credit utilization (30%), length of history (15%), credit mix (10%) and new inquiries (10%) — produce a base score. Credit events such as an on-time payment or a loan going to collections add a bonus or penalty on top, which fades back toward zero over time. What the player sees is the two added together.

A player with no loans and no loan payments has nothing for the factors to measure, so their base score stays at defaultScore until they take out credit. Credit events, such as an overdue invoice, still move the score up or down from there.

SettingDefaultDescription
Config.CreditScore.defaultScore650Starting score, and the base score of a player with no credit history
Config.CreditScore.minScore300Lowest possible score
Config.CreditScore.maxScore850Highest possible score
Config.CreditScore.maxEventBonus150Largest total bonus or penalty credit events can add up to
Config.CreditScore.eventBonusDecayPercent0.10Share of the remaining bonus or penalty that fades each banking day
Config.CreditScore.eventBonusDecayMin1Minimum points faded per banking day, so a bonus always reaches zero
Config.CreditScore.thinFileUsesDefaulttrueKeep players with no credit history on defaultScore
Config.CreditScore.eventDeltastablePoints awarded per credit event

The bank records these eventDeltas events itself: loan_payment_ontime, loan_paid_off, loan_opened, loan_defaulted, investment_completed, cd_matured, invoice_paid_ontime, invoice_paid_late, and invoice_overdue. The other keys in the shipped table (collateral_seized, hard_inquiry, account_opened, account_age_increase, credit_utilization_low, credit_utilization_high) only count when another script records them through the RecordCreditEvent or AddHardInquiry exports.

Three penalties are not in eventDeltas. They read from the loan config instead, so each has a single home:

EventRead from
Late paymentConfig.LatePayment.creditScorePenalty
Missed paymentConfig.LatePayment.missedPaymentPenalty
CollectionsConfig.Loans.collections.creditScoreImpact

Transfer delays and transaction caps

Config.TransferDelays makes transfers to other players take time to arrive instead of being instant. The sender's money leaves straight away, and the recipient receives it at the first hourly check after the delay is over. Players can pay the expedited fee to skip the wait, and a pending transfer can be cancelled before it completes.

SettingDefaultDescription
Config.TransferDelays.enabledtruefalse makes every transfer instant
Config.TransferDelays.external6Real-time hours a transfer to another player takes
Config.TransferDelays.wire24Real-time hours for a 'wire' transfer created through the CreatePendingTransfer export. The banking screen does not use it
Config.TransferDelays.internal0Not currently used. Transfers between a player's own accounts are always instant

Config.Transactions caps single deposits (MaxDepositAmount), withdrawals (MaxWithdrawAmount), and transfers (MaxTransferAmount) at 10000000 ($10M) by default.

Amounts are whole dollars. Players cannot enter cents or anything under $1, and fees are charged in whole dollars too: a fee set with cents, such as expeditedTransfer.fee = 2.5, is rounded down.

Tablet

File: config/config.lua

SettingDefaultDescription
Config.Tablet.UseTablettrueAdds a Banking app to oxide-tablet when that resource is running. Bank locations always open the bank's own window either way
Config.Tablet.AllowCashActionsfalseDeposits and withdrawals move physical cash, so they are hidden in the tablet app, which works anywhere. Set true to allow them from the tablet too

Phone

File: config/config.lua

SettingDefaultDescription
Config.Phone.UsePhonetrueAdds a Banking app and a balance widget to oxide-phone when that resource is running: accounts, activity, payments, bills, insights, cards and loans. Deposits and withdrawals are never offered on the phone

Account Tiers And Account Types

File: config/accounts.lua

Tiers

Config.AccountTiers ships with three tiers:

  • basic
  • premium
  • business

Keep these three tier names. The bank treats them as the lowest, middle and highest tier. You can change everything inside them, including the label.

Config.DefaultTier (default 'basic') is the tier every new player starts on.

Each tier defines:

  • label and description
  • monthlyFee — charged from the player's bank when they log in, once 30 real days have passed since the last charge. A player who cannot pay is moved down to Basic
  • interestRate — yearly interest rate (see DaysPerYear)
  • maxSharedAccounts — shared accounts the player can own
  • dailyWithdrawLimit and dailyTransferLimit — how much the player can withdraw and send to other players per real day
  • features — savings (savings accounts and CDs), investments, and overdraft with overdraftLimit (how much more than the bank balance a cash withdrawal may be). An overdraft withdrawal empties the bank balance and the rest is owed to the bank, shown on the banking screen. The next money that reaches the player's bank pays it back automatically. The prioritySupport, invoicing and expenseTracking flags are not currently used, and noATMFees is only shown as a label in the bank settings
  • requirements — minBalance, creditScore, and jobBoss (must be the boss of their job) to upgrade to this tier

Account types

Config.AccountTypes includes:

  • checking — the player's main personal account
  • savings — earns extra interest, with a fee for withdrawing money deposited recently
  • shared — accounts a player can share with other players
  • job — business accounts tied to a job (police, mechanic, etc.)
  • gang — not supported. The bank does not create gang or organization accounts

Only the savings entry is read by the bank: maxAccounts (default 3, savings accounts per player) and the settings below. The other entries, and the label, icon, allowMultiple, interestEarning and bossOnly fields, are not currently used.

These work the same on every supported framework (QBCore, QBX, ESX).

Savings notice period

Money paid into a savings account has to sit there for a while before it can be taken out for free. Three settings in Config.AccountTypes.savings control this:

SettingDefaultMeaning
withdrawalNoticeDays7Days a deposit has to sit before it withdraws without a fee
earlyWithdrawalPenalty0.01Fee on the part of a withdrawal that has not waited that long
minimumBalance1000Smallest opening deposit, and the least an account can be left holding

A withdrawal takes the oldest money in the account first, so the fee only ever touches what is left over after the cleared money runs out. For example, an account holds $10,000 that has sat for weeks, and the player pays in $5,000 today. Withdrawing up to $10,000 costs nothing. Only the part taken from today's $5,000 is charged 1%. Interest the account earns is never charged.

The savings screen shows how much of each account is free to withdraw, and the withdrawal box shows the fee and the amount received before anything is confirmed.

Set withdrawalNoticeDays = 0 to charge nothing and let savings behave like a second checking account.

minimumBalance is enforced on the way out as well as on the way in: an account can be emptied completely, but cannot be left holding less than the minimum.

Savings goals

Config.SavingsGoals defines max goals per player (maxGoals, default 5) and the category list used by the UI.

Loans

File: config/loans.lua

Core loan settings

SettingDefaultDescription
Config.Loans.enabledtrueNot currently used. Loans cannot be switched off here
Config.Loans.maxActiveLoans3Loans and applications one player can have open at once (a loan in collections does not count)
Config.Loans.dailyLoanLimit2Loan applications per player per real day (0 = no limit)
Config.Loans.gracePeriod1Days past the due date before a loan late fee applies
Config.Loans.minimumInterestRate0.01Lowest yearly rate any loan can get, however good the credit score

A loan application that is waiting for approval or still processing takes up one of the maxActiveLoans slots, the same as a funded loan.

How repayment works

A loan is split into instalments Config.TimeSettings.LoanPaymentInterval days apart. On each due date the instalment is taken from the borrower's bank account automatically, whether they are online or not. If the money is not there, the payment is recorded as missed and the next due date is one interval later. After Config.LatePayment.collectionsThreshold missed payments the loan goes to collections. Once the term is over, the whole remaining balance falls due.

Players can also pay by hand at any time:

  • Only a payment that finishes an instalment, or clears the loan, counts toward the player's credit. Smaller payments still reduce the balance but do not build credit and do not move the due date.
  • Pay Off settles the loan early and gives back the interest for the instalments that never ran.
  • A loan in collections is no longer collected automatically, but it can still be paid from the bank screen. If wage garnishment is on, a share of each paycheck goes toward it until it is cleared.

If you change LoanPaymentInterval, or update from a version that collected loans differently, open loans are re-fitted to the new schedule the next time the server starts: the instalment is recalculated, and a loan that is being repaid has its term restarted from that day with its missed payments cleared, so nobody is charged late fees because the rules changed. Loans registered by another resource (vehicle finance) are never touched.

Total borrowing limit

Config.Loans.exposure caps how much debt one player can carry across all their loans, including vehicle loans registered by a dealership.

SettingDefaultDescription
Config.Loans.exposure.enabledtrueTurn the limit on or off
Config.Loans.exposure.maxOutstanding500000Most a player can owe in total (0 = no fixed cap)
Config.Loans.exposure.balanceMultiple0Also cap total debt at N times the player's bank balance (0 = off)
Config.Loans.exposure.minBalanceFloor0Skip the balance-multiple check below this bank balance

Built-in products

The shipped config includes three loan products:

  • personal
  • business
  • emergency

Each product defines:

  • amount range (minAmount, maxAmount)
  • base yearly interest rate (baseInterestRate)
  • term options in days (termOptions)
  • eligibility requirements: minCreditScore, minAccountAge (banking days the player's bank account has existed), minIncome (checked against the player's bank balance), and jobBoss
  • whether collateral is required (collateral)
  • optional instant approval (instantApproval)

Shipped defaults in config/loans.lua:

ProductLabelAmountBase rateTerms (days)minCreditScoreminAccountAgeOtherInstant approval
personalPersonal Loan$1,000 – $50,0008%7, 14, 285001minIncome = 0No
businessBusiness Loan$25,000 – $500,0007%28, 56, 846807jobBoss = trueNo
emergencyEmergency Loan$500 – $10,00015%3, 74001minIncome = 0Yes

None of the shipped products require collateral. A business loan of 100000 or more still waits for an admin because of Config.LoanApproval.manualApprovalThreshold (below).

External loan types

Config.Loans.externalTypes is used for externally managed loan records that still appear in the bank UI. The shipped config includes vehicle. See Vehicle Financing.

Approval, late fees, and collections

The file also defines:

  • Config.CreditScoreRateModifiers — how much a credit score raises or lowers a loan's rate
  • Config.LatePayment — the loan late fee (the higher of lateFee and lateFeePercent of the instalment, capped at maxLateFee), the credit penalties for late and missed payments, and collectionsThreshold
  • Config.Loans.collections — wageGarnishment and garnishmentPercent (the share of each paycheck taken while a loan is in collections), and creditScoreImpact
  • Config.LoanApproval — how applications are approved (below)

In Config.Loans.collections, the enabled, warningNotifications, assetSeizure and collateralHandlerResource settings are not currently used. Nothing in the current version seizes collateral.

Config.LoanApproval decides what happens to an application:

  1. An amount at or above manualApprovalThreshold (default 100000) waits for an admin to use /approveloan, even on an instant-approval product.
  2. A product with instantApproval = true, or an amount at or below autoApproveUnderAmount (default 100000), is funded straight away.
  3. Anything else waits processingTime real hours (default 2), then is funded. If processingTime is 0, it waits for an admin instead.

With the defaults, step 3 never happens. Lower autoApproveUnderAmount below manualApprovalThreshold to make the processing wait apply to the amounts in between.

Interest, Investments, And CDs

File: config/interest.lua

Interest

Config.Interest controls:

  • enabled — turns account interest on or off
  • calculationMethod — 'simple' or 'compound'
  • minimumBalance — accounts below this earn nothing
  • maxInterestPayout — cap on a single interest payment (for checking, per day since the last payment)
  • accountTypeRates — account-type rate multipliers
  • payoutFrequency — Not currently used

Where interest is paid:

  • Checking earns the tier's rate. It is paid when the player logs in, for the real days since their last interest payment.
  • Shared accounts the player owns are paid at the same moment, at the shared multiplier.
  • Savings accounts are paid by the daily schedule.
  • Job accounts do not earn interest, so the job and gang multipliers are not currently used.

Config.Interest.accountTypeRates multiplies the tier's base rate per account type. Savings defaults to 1.25, which keeps it below every certificate of deposit — savings can be withdrawn at any time, so it should pay less than money a player agrees to lock up. Raising it above the CD rates removes any reason to buy a certificate.

Investments

Built-in investment products:

ProductTermExpected returnRisk
savings_bond28 days9% guaranteednone
stock_index14 days12%medium
crypto_fund7 days15%high
real_estate56 days11% plus dividendslow, tierRequired = 'premium' (Premium or Business)

Every product also needs a tier with the investments feature, which on the shipped config means Premium or Business.

expectedReturn and volatility are both annual figures. Each banking day one return is drawn per product and every position in that product moves by the same percentage, so two players holding the same fund get the same result and splitting a stake across several positions changes nothing.

When a position reaches its maturity date it stops accruing and is held at its value until the player withdraws it. Withdrawing a matured position carries no penalty.

A position can be cashed out before it matures. earlyWithdrawalPenalty is charged on the earnings only and shrinks the closer the position is to its term, so an early exit never returns less than the amount invested. A position that is at a loss is never penalised. Set the value to 0 to let players leave a product freely.

ProductEarly withdrawal penalty
savings_bond50% of earnings
stock_index25% of earnings
crypto_fund20% of earnings
real_estate40% of earnings
SettingDefaultDescription
Config.Investments.enabledtruefalse stops new investments, market updates and dividends
Config.Investments.maxPositionsPerProduct3Open positions allowed in one product
Config.Investments.maxTotalPositions10Open positions allowed across all products

Dividends. A product with dividendRate (a yearly rate) pays that share of the position's value to the player's bank every dividendFrequency banking days. On the shipped config only real_estate pays one (3% a year, every 14 banking days). Config.Investments.dividendDefaults sets minHoldDays (real days a position must be held before its first dividend, default 7) and roundToNearest (dividends are rounded to this many dollars, default 1).

Market simulation. Config.Investments.marketUpdate controls the market. A trend's configured impact (crashImpact, boomImpact) is the total move it makes, spread across the days it lasts. A crash lasts one day, so it lands all at once. The trend shifts values in its own direction rather than scaling whatever they were already doing. The frequency setting is not currently used; the market moves on the InvestmentUpdateInterval schedule.

Booms, crashes and momentum move a fund around its expectedReturn; they do not add to it. Whatever odds and sizes you set here, the bank works out what they would pay on average and takes that off, so over a year a fund averages the return on its label. Change these settings to make the market calmer or wilder, and change expectedReturn to make a fund pay more or less.

Certificates of deposit

Rates are annual and prorated by term at purchase, so a 7-day CD at 4% pays 4% x 7/28.

Buying a CD needs a tier with the savings feature (Premium or Business on the shipped config).

ProductTermAnnual rateDeposit rangeEarly withdrawal penalty
cd_short7 days4%5,000 – 100,00050% of interest
cd_medium14 days6%10,000 – 250,00030% of interest
cd_long28 days8%25,000 – 500,00020% of interest

A matured certificate must be redeemed in full; it cannot be withdrawn early for a penalty.

An early withdrawal pays back the deposit plus the interest earned up to that point, less the penalty charged on that interest. The deposit itself is never touched, so an early withdrawal returns at least what was put in.

SettingDefaultDescription
Config.CertificatesOfDeposit.enabledtruefalse stops players buying new CDs
Config.CertificatesOfDeposit.maxPerProduct3Open certificates allowed in one product
Config.CertificatesOfDeposit.maxTotal10Open certificates allowed across all products

Fees

File: config/fees.lua

Fees that belong to one feature are set with that feature instead: card prices in Config.Cards, monthly account fees on each tier in Config.AccountTiers, loan late fees in Config.LatePayment, invoice late fees in Config.Business, and the savings withdrawal fee in Config.AccountTypes.savings.

SettingDefaultDescription
Config.Fees.enabledtruefalse waives the wire transfer fee and the integration fees. The expedited, tier change and overdraft fees are not affected
Config.Fees.transactions.wireTransfer.domestic15Fee for a domestic wire transfer
Config.Fees.transactions.wireTransfer.international50Fee for an international wire transfer
Config.Fees.transactions.expeditedTransfer.enabledtrueLet players pay to skip the transfer delay
Config.Fees.transactions.expeditedTransfer.fee25What skipping the delay costs
Config.Fees.services.accountUpgrade0One-off charge for moving to a higher tier
Config.Fees.services.accountDowngrade50One-off charge for moving to a lower tier (skipped if the player cannot afford it)
Config.Fees.overdraft.fee35Charged each time a withdrawal dips into the overdraft. It is added to the amount owed

Wire transfer fees. Wire transfers are only sent by other scripts, through the ProcessWireTransfer export. The banking screen has no wire transfer option, so these fees are never charged unless such a script uses them.

Integration fees. Config.Fees.transactions.atm (ownBank, otherBank, outOfNetwork) and Config.Fees.transactions.externalTransfer (flat, percent, minFee, maxFee) are never charged by the bank itself: its own ATMs are free, and a transfer to another player only pays the expedited fee if the player chooses it. They are the amounts the CalculateATMFee and CalculateTransactionFee exports return, for an ATM or payment resource that wants to charge them. See Exports & Integration.

externalTransfer.maxFee = 0 currently caps that fee at $0. Set maxFee above zero if you want the CalculateTransactionFee export to return a fee.

Config.FeeWaivers lists the fees each group does not pay: premium tier, business tier, and players whose bank balance is at or above highBalance.threshold. Each entry is a fee key, which is the path under transactions, for example wireTransfer.domestic or atm.otherBank.

Config.FeeDescriptions holds the labels shown on statements and fee previews for those keys.

Debug Settings

File: config/config.lua

SettingDefaultDescription
Config.DebugSettings.AllowInProductionfalseMust be true before /bankingdebug will work — debug output can include player details, so keep it off on a live server
Config.DebugSettings.AutoTimeoutMinutes30Turns debug mode back off automatically after this many minutes (0 = never)
Config.DebugSettings.RequireGodModefalseNot currently used