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
| File | Purpose |
|---|---|
config/config.lua | General settings, interaction, security, time, cards, business and invoices, transfer delays, credit score, debug, tablet, and phone settings |
config/accounts.lua | Tier definitions, the savings account rules, savings goal categories, and the starting tier |
config/loans.lua | Loan products, borrowing limit, approval rules, late fees, collections, and vehicle-loan display types |
config/interest.lua | Interest, investments, market simulation, and certificates of deposit |
config/fees.lua | Transfer, tier change and overdraft fees, integration fees, and fee waivers |
General Settings
File: config/config.lua
| Setting | Type | Default | Description |
|---|---|---|---|
Config.Debug | boolean | false | Prints extra information to the server console for troubleshooting |
Config.UseTarget | boolean | true | true = players use the targeting eye on banks/ATMs; false = players walk up and press E |
Config.ATMModels | string[] | 4 models | Which ATM props around the map players can use |
Config.BankLocations | table[] | 8 locations | Where the bank branches are and what they are called. Each entry has coords, heading and label |
Config.Blips.enabled | boolean | true | Shows bank icons on the map |
Config.Blips.sprite | number | 108 | Map icon used for banks |
Config.Blips.color | number | 2 | Map icon colour |
Config.Blips.scale | number | 0.55 | Map icon size |
Config.Blips.label | string | 'Bank' | Map name, used only for a bank location that has no label of its own |
Security
File: config/config.lua
| Setting | Default | Description |
|---|---|---|
Config.Security.Enable2FA | true | Lets 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.TwoFactorThreshold | 50000 | Withdrawals and transfers of this amount or more ask for the security PIN, for players who turned it on |
Config.Security.MaxLoginAttempts | 3 | Wrong ATM PINs a player can enter before PIN entry is locked |
Config.Security.LockoutDuration | 300 | How long, in seconds, PIN entry stays locked after too many wrong PINs |
Config.Security.EnableFraudDetection | true | Checks 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.SuspiciousTransactionAmount | 100000 | Transactions of this amount or more count as large for the fraud check |
Config.Security.EnableTransactionAlerts | true | Sends 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.AlertThreshold | 10000 | The 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.
| Setting | Default | Description |
|---|---|---|
Config.TimeSettings.UseInGameTime | true | Not currently used — the banking schedule always runs on the server's real clock |
Config.TimeSettings.InterestPayoutHour | 0 | Server-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.SavingsInterestInterval | 1 | Pay savings interest every N banking days |
Config.TimeSettings.LoanPaymentInterval | 7 | Days between a loan's instalments. A 28-day loan at 7 is paid in 4 instalments |
Config.TimeSettings.InvestmentUpdateInterval | 1 | Every N banking days: update investment values, mark matured investments and CDs, and pay dividends |
Config.TimeSettings.RecurringPaymentCheck | 1 | Process recurring payments every N banking days |
Config.TimeSettings.DaysPerYear | 28 | How many banking days count as one "year" when calculating interest |
Cards, Logging, Business, And Transfers
File: config/config.lua
Cards
| Setting | Default | Description |
|---|---|---|
Config.Cards.OrderCost | 50 | Price of a new debit card |
Config.Cards.ReplacementCost | 100 | Price of a replacement card (charged instead of the order price) |
Config.Cards.PinLength | 4 | How 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.MaxCardsPerAccountType | checking 3, savings 2, shared 3, job 2, gang 2 | Most cards one account can have, per account type. On personal checking this counts the player's own cards |
Config.Cards.MaxCardsPerAccount | 2 | Card 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.ShowAccountBalanceInSelector | false | Show each card's account balance in the ATM card picker |
Config.Cards.AllowPINChange | true | Not currently used. PIN change is always available |
Config.Cards.AllowFreeze | true | Not currently used. Freezing is always available |
Config.Cards.AllowCancel | true | Not currently used. Cancelling is always available |
Config.Cards.AllowReplacement | true | Not currently used. Replacement is always available |
Config.Cards.CancelledCardRetentionDays | 30 | Days 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.
| Setting | Default | Description |
|---|---|---|
Config.Logging.Enabled | true | Enables banking logging |
Config.Logging.LogTransactions | true | Transaction and investment log toggle |
Config.Logging.LogLoans | true | Loan log toggle |
Config.Logging.LogAccountChanges | true | Account/admin change log toggle |
Config.Logging.LogSecurityEvents | true | Security log toggle |
Business
Config.Business controls expense categories and invoice due dates, late fees, limits, and collection.
| Setting | Default | Description |
|---|---|---|
InvoiceDueDays | 7 | Days until an invoice is due when no due date is given |
InvoiceLateFeeEnabled | true | false turns invoice late fees off |
InvoiceLateFeePercent | 0.05 | The part of the late fee every overdue invoice carries |
InvoiceLateFeeDailyPercent | 0.01 | Added for every day past the due date (set to 0 for a single flat fee) |
InvoiceMaxLateFee | 10000 | Ceiling on the total late fee (0 for no ceiling) |
InvoiceMaxAmount | 250000 | Largest invoice a player can write (0 for no limit) |
MaxOutstandingInvoicesPerRecipient | 10 | Unpaid invoices one player can have open against another (0 for no limit) |
InvoiceAutoDebitEnabled | true | Collect overdue invoices from the debtor's bank account automatically |
InvoiceAutoDebitAfterDays | 3 | Days past the due date before an invoice is collected |
InvoiceAutoDebitPerRun | 200 | Most invoices collected in one daily run |
LargeExpenseThreshold | 10000 | Not currently used. There is no expense approval step |
ReportCacheDuration | 3600 | Not currently used |
MaxReportMonths | 12 | Not 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.
| Setting | Default | Description |
|---|---|---|
Config.CreditScore.defaultScore | 650 | Starting score, and the base score of a player with no credit history |
Config.CreditScore.minScore | 300 | Lowest possible score |
Config.CreditScore.maxScore | 850 | Highest possible score |
Config.CreditScore.maxEventBonus | 150 | Largest total bonus or penalty credit events can add up to |
Config.CreditScore.eventBonusDecayPercent | 0.10 | Share of the remaining bonus or penalty that fades each banking day |
Config.CreditScore.eventBonusDecayMin | 1 | Minimum points faded per banking day, so a bonus always reaches zero |
Config.CreditScore.thinFileUsesDefault | true | Keep players with no credit history on defaultScore |
Config.CreditScore.eventDeltas | table | Points 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:
| Event | Read from |
|---|---|
| Late payment | Config.LatePayment.creditScorePenalty |
| Missed payment | Config.LatePayment.missedPaymentPenalty |
| Collections | Config.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.
| Setting | Default | Description |
|---|---|---|
Config.TransferDelays.enabled | true | false makes every transfer instant |
Config.TransferDelays.external | 6 | Real-time hours a transfer to another player takes |
Config.TransferDelays.wire | 24 | Real-time hours for a 'wire' transfer created through the CreatePendingTransfer export. The banking screen does not use it |
Config.TransferDelays.internal | 0 | Not 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
| Setting | Default | Description |
|---|---|---|
Config.Tablet.UseTablet | true | Adds a Banking app to oxide-tablet when that resource is running. Bank locations always open the bank's own window either way |
Config.Tablet.AllowCashActions | false | Deposits 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
| Setting | Default | Description |
|---|---|---|
Config.Phone.UsePhone | true | Adds 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:
basicpremiumbusiness
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 BasicinterestRate— yearly interest rate (seeDaysPerYear)maxSharedAccounts— shared accounts the player can owndailyWithdrawLimitanddailyTransferLimit— how much the player can withdraw and send to other players per real dayfeatures—savings(savings accounts and CDs),investments, andoverdraftwithoverdraftLimit(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. TheprioritySupport,invoicingandexpenseTrackingflags are not currently used, andnoATMFeesis only shown as a label in the bank settingsrequirements—minBalance,creditScore, andjobBoss(must be the boss of their job) to upgrade to this tier
Account types
Config.AccountTypes includes:
checking— the player's main personal accountsavings— earns extra interest, with a fee for withdrawing money deposited recentlyshared— accounts a player can share with other playersjob— 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:
| Setting | Default | Meaning |
|---|---|---|
withdrawalNoticeDays | 7 | Days a deposit has to sit before it withdraws without a fee |
earlyWithdrawalPenalty | 0.01 | Fee on the part of a withdrawal that has not waited that long |
minimumBalance | 1000 | Smallest 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
| Setting | Default | Description |
|---|---|---|
Config.Loans.enabled | true | Not currently used. Loans cannot be switched off here |
Config.Loans.maxActiveLoans | 3 | Loans and applications one player can have open at once (a loan in collections does not count) |
Config.Loans.dailyLoanLimit | 2 | Loan applications per player per real day (0 = no limit) |
Config.Loans.gracePeriod | 1 | Days past the due date before a loan late fee applies |
Config.Loans.minimumInterestRate | 0.01 | Lowest 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.
| Setting | Default | Description |
|---|---|---|
Config.Loans.exposure.enabled | true | Turn the limit on or off |
Config.Loans.exposure.maxOutstanding | 500000 | Most a player can owe in total (0 = no fixed cap) |
Config.Loans.exposure.balanceMultiple | 0 | Also cap total debt at N times the player's bank balance (0 = off) |
Config.Loans.exposure.minBalanceFloor | 0 | Skip the balance-multiple check below this bank balance |
Built-in products
The shipped config includes three loan products:
personalbusinessemergency
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), andjobBoss - whether collateral is required (
collateral) - optional instant approval (
instantApproval)
Shipped defaults in config/loans.lua:
| Product | Label | Amount | Base rate | Terms (days) | minCreditScore | minAccountAge | Other | Instant approval |
|---|---|---|---|---|---|---|---|---|
personal | Personal Loan | $1,000 – $50,000 | 8% | 7, 14, 28 | 500 | 1 | minIncome = 0 | No |
business | Business Loan | $25,000 – $500,000 | 7% | 28, 56, 84 | 680 | 7 | jobBoss = true | No |
emergency | Emergency Loan | $500 – $10,000 | 15% | 3, 7 | 400 | 1 | minIncome = 0 | Yes |
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 rateConfig.LatePayment— the loan late fee (the higher oflateFeeandlateFeePercentof the instalment, capped atmaxLateFee), the credit penalties for late and missed payments, andcollectionsThresholdConfig.Loans.collections—wageGarnishmentandgarnishmentPercent(the share of each paycheck taken while a loan is in collections), andcreditScoreImpactConfig.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:
- An amount at or above
manualApprovalThreshold(default100000) waits for an admin to use/approveloan, even on an instant-approval product. - A product with
instantApproval = true, or an amount at or belowautoApproveUnderAmount(default100000), is funded straight away. - Anything else waits
processingTimereal hours (default2), then is funded. IfprocessingTimeis0, 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 offcalculationMethod—'simple'or'compound'minimumBalance— accounts below this earn nothingmaxInterestPayout— cap on a single interest payment (for checking, per day since the last payment)accountTypeRates— account-type rate multiplierspayoutFrequency— 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
sharedmultiplier. - Savings accounts are paid by the daily schedule.
- Job accounts do not earn interest, so the
jobandgangmultipliers 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:
| Product | Term | Expected return | Risk |
|---|---|---|---|
savings_bond | 28 days | 9% guaranteed | none |
stock_index | 14 days | 12% | medium |
crypto_fund | 7 days | 15% | high |
real_estate | 56 days | 11% plus dividends | low, 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.
| Product | Early withdrawal penalty |
|---|---|
savings_bond | 50% of earnings |
stock_index | 25% of earnings |
crypto_fund | 20% of earnings |
real_estate | 40% of earnings |
| Setting | Default | Description |
|---|---|---|
Config.Investments.enabled | true | false stops new investments, market updates and dividends |
Config.Investments.maxPositionsPerProduct | 3 | Open positions allowed in one product |
Config.Investments.maxTotalPositions | 10 | Open 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).
| Product | Term | Annual rate | Deposit range | Early withdrawal penalty |
|---|---|---|---|---|
cd_short | 7 days | 4% | 5,000 – 100,000 | 50% of interest |
cd_medium | 14 days | 6% | 10,000 – 250,000 | 30% of interest |
cd_long | 28 days | 8% | 25,000 – 500,000 | 20% 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.
| Setting | Default | Description |
|---|---|---|
Config.CertificatesOfDeposit.enabled | true | false stops players buying new CDs |
Config.CertificatesOfDeposit.maxPerProduct | 3 | Open certificates allowed in one product |
Config.CertificatesOfDeposit.maxTotal | 10 | Open 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.
| Setting | Default | Description |
|---|---|---|
Config.Fees.enabled | true | false waives the wire transfer fee and the integration fees. The expedited, tier change and overdraft fees are not affected |
Config.Fees.transactions.wireTransfer.domestic | 15 | Fee for a domestic wire transfer |
Config.Fees.transactions.wireTransfer.international | 50 | Fee for an international wire transfer |
Config.Fees.transactions.expeditedTransfer.enabled | true | Let players pay to skip the transfer delay |
Config.Fees.transactions.expeditedTransfer.fee | 25 | What skipping the delay costs |
Config.Fees.services.accountUpgrade | 0 | One-off charge for moving to a higher tier |
Config.Fees.services.accountDowngrade | 50 | One-off charge for moving to a lower tier (skipped if the player cannot afford it) |
Config.Fees.overdraft.fee | 35 | Charged 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
| Setting | Default | Description |
|---|---|---|
Config.DebugSettings.AllowInProduction | false | Must be true before /bankingdebug will work — debug output can include player details, so keep it off on a live server |
Config.DebugSettings.AutoTimeoutMinutes | 30 | Turns debug mode back off automatically after this many minutes (0 = never) |
Config.DebugSettings.RequireGodMode | false | Not currently used |
Installation Guide
Step-by-step setup for oxide-banking — prerequisites, load order, database, the bank card item, updating from an older version, and first checks in game.
Features Overview
Everything oxide-banking adds to your server — accounts, banks and ATMs, debit cards, transfers, tiers, savings, loans, credit, investments, the Services screen, the tablet and phone apps, security, and business tools.