Ultimate Banking & Billing [ESX / QBCore / QBox / Standalone]

# synz_banking

A complete banking, billing and economy suite for FiveM — in one resource.

Personal banking, business & society finance, a server-side live stock market, in-world ATMs and POS terminals, safe-deposit vaults, a full credit system and an in-game admin panel — all driven by a single Nixtio-style NUI, in **19 languages**, on **ESX Legacy, QBCore, QBox and Standalone** with auto-detection.

Most banking scripts stop at deposit, withdraw and a basic loan. This is the resource that replaces the whole economy stack — and by default it runs as an **independent ledger**, so external scripts can’t desync your bank (with optional one-shot import or live mirror when you want it).

Showcase

:play_button: Full video:** https://youtu.be/5OiVz2wWF9o

What makes it different

- Server-side live market. A simulated stock market with server-driven price candles, real buy/sell, per-asset portfolios and unrealized P/L — inside the same NUI. Very few banking scripts ship this.

- Genuinely in-world. ATMs render on a real DUI screen on the machine; POS terminals are an inventory item — handheld and placeable — that charge any nearby player and print a keepable receipt item.

- Prepaid card system. Debit & corporate cards spend from a load/unload pool with per-card caps; credit cards run real revolving credit. Five styled Fleeca products (Debit → Black).

- **Real loan workflow.**Risk-scored applications, automatic approval below a threshold, an admin review queue and a counter-offer flow. Repayment pacing configurable down to real-time minutes for RP.

- Live admin panel. `/bankadmin` edits interest rates, loan terms, credit factors, card products, tax brackets, locations and integrations at runtime — most of `config.lua` becomes read-only after first boot.

Features

Accounts

- Checking, Savings, Business and Shared accounts, each with a unique IBAN

- Overdraft, savings interest, joint accounts with invite codes

- Transfers by IBAN or player, paginated/searchable history, e-statements

- Cash-flow view (income vs spending) and savings goals

Cards

- Prepaid debit & corporate cards (load/unload pool, per-card caps)

- Revolving credit cards (APR, grace period, minimum payment)

- 5 visual Fleeca products with their own fees, limits and perks

- Contactless limits, PIN handling, card blocking, theft system — every card is a real inventory item

Loans

- Risk engine + admin approval queue + counter-offers

- 6 configurable terms, score-adjusted rates, late penalties & defaults

- Real-time repayment pacing (minutes / hours / days)

**Investments & live market**

- Managed investment funds with NAV, volatility and capital-gains tax

- Server-side simulated live market: price candles, buy/sell, portfolio overview

Billing

- Player, business, system and government invoices

- Autopay, recurring invoices, partial payments, late fees, disputes

- Standing orders, split bills, player-to-player payment requests

Credit & taxes

- Transparent 300–850 credit score with visible factors and history

- Credit tiers gating products + cashback

- Progressive income tax brackets, VAT, capital gains, treasury account

In-world

- ATMs with an in-world DUI screen

- POS terminals (inventory item): handheld + placeable, charge any player

- Keepable POS receipts (real inventory item)

- Safe-deposit vaults: per-box PIN, sharing, physical synchronized access scenes

Business / societies

- Job-based and standalone societies with their own balances

- Role-based access (spend, invoice, issue cards, manage POS) + corporate cards

- Business billing module · `GetSocietyBalance(jobName)` export for integrations

Police / judicial

- Account freeze, asset seizure, financial investigation

- Automatic suspicious-transaction dispatch alerts

Admin & ops

- Live `/bankadmin` panel: rates, terms, credit factors, card products, taxes, funds, locations, integrations

- Audit log, player search, loan review queue

- Optional Discord webhooks (transactions, large-transfer alerts, admin audit, loans, investments)

Phone notifications

The phone receives push notifications for invoices, requests and due bills (not a separate phone app). Auto-detected: `17mov_Phone`, `qs-smartphone`, `lb-phone`, `yseries`, `gks-phone`, `npwd`, `roadphone`, `qb-phone`.

:electric_plug: Compatibility (auto-detected)

Frameworks: ESX Legacy · QBCore · QBox · Standalone |

Inventory: ox_inventory · qb-inventory · ps-inventory · qs-inventory · lj-inventory · codem-inventory · origen_inventory · tgiann-inventory · core_inventory · jaksam_inventory |

Target / TextUI: ox_target · qb-target · qtarget · bt-target · interact · ox_lib · esx_textui · okokTextUI · qs-textui · jg-textui · lation_ui · ss-textui · lvs_lib · cd_drawtextui · drawtext · native |

Notifications: ox_lib · okokNotify · mythic_notify · pNotify · framework native · in-app NUI |

Phone push: 17mov_Phone · qs-smartphone · lb-phone · yseries · gks-phone · npwd · roadphone · qb-phone |

Dispatch: ps-dispatch · cd_dispatch · qs-dispatch · rcore_dispatch · origen_police · sonoran_cad · emergency-dispatch |

Coexists / replaces: qb-banking · esx_banking · Renewed-Banking · okokBanking |

Database & performance

- 40 tables, created with `IF NOT EXISTS`, indexed for common queries, `ON DELETE CASCADE` foreign keys

- Schema self-heals on boot (migrations re-run from Lua), so MySQL 8 works as well as MariaDB

- **~0.00ms idle**, ~0.03–0.05ms active

- All cron jobs (interest, loans, market candles, standing orders, invoices) run server-side — zero client cost

- Player cache with configurable TTL · transaction pagination (20/page default)

:globe_showing_europe_africa: Localization

19 languages built in: en, es, de, fr, it, pt, pl, nl, sv, da, fi, no, cs, tr, ru, ar, zh, ja, ko. Set `Config.Locale` or change it live in the admin panel. Edit translations directly in `locales/locales.lua` — the whole UI re-reads the table, no rebuild required.

:unlocked: Escrow & open files

Escrow-protected release. Left **open and fully editable** so you can integrate and customize freely:

- `config.lua` — all gameplay configuration

- `locales/` — all 19 language tables

- `bridge/` — framework / inventory / target / notify adapters

- `items/` — inventory item definitions per inventory system

- `sql/` — database schema and reset scripts

:link: Links

- :shopping_cart: Buy: Store — FiveM Scripts for ESX, QBCore & QBox | Synz Labs

- :blue_book: **Documentation:** Premium FiveM Scripts for ESX, QBCore & QBox | Synz Labs

- :speech_balloon: Discord (support & updates): Synz Labs

Launch price: 34.99€20% off (first 48h).

Credits

In-world POS terminal prop by **bzzz**https://bzzz.tebex.io/. If you reuse or showcase the prop, please keep bzzz credited.

Code is accessible Partial
Subscription-based No
Lines (approximately) 55000
Requirements ESX / QB/ QBOX/ Standalone
Support Yes

Hey there,

Since you guys couldn’t reach the release coupon code when the script was published on discord, I’m putting it back for 24h in the forum. The post was approved on cfx yesterday :confused:

CODE: SYNZBANKING20 - 20% OFF

Enjoy!

Can this banking system directly replace qbx_management? I’ve bought several that claimed to be direct replacements, but in practice they didn’t. Only the fd_bank version I bought could be directly replaced without modification, but this seems to better suit my needs. Therefore, I’d like to confirm whether it can be directly replaced. Thank you in advance; I also really like your banking script.

Because I am currently using a server with the qbx_core system.

Hello!

Thanks for asking before buying. I’ll give you the straight answer rather than the “yes sure” you’ve been burned by.

It’s not a replacement for qbx_management, but you don’t want it to be. They do different jobs since this is a boss menu. Synz banking doesn’t do any of that BUT there is a simple way to reach that compatibility.

Config.Societies = {
    balanceSource = 'framework',      -- society money stays in your existing resource
    frameworkBackend = 'auto',        -- or force it, e.g. 'fd_banking'
}

By putting framework, the banking reads and writes the same pot your current setup uses, so qbx_management and the bank agrees and nothing breaks. If you want synz banking own the society money itself, lease is as balanceSource = 'script'.

One question so I can tell you the exact setting: fd_banking holds your societies and job money? With that I can give you the exact config line for your server.

By the way, Synz Labs has a 14 days refund policy. And thanks for your kind words about the script, much appreciated!

Changelog:

origen_inventory / tgiann-inventory: cards could not be issued — the bank reported “inventory full” no matter the item weight or the inventory limits. The bank was calling these inventories’ exports with dot syntax instead of colon syntax. CitizenFX wraps every export as function(self, ...), so the first argument (the player id) was consumed as self and every argument arrived shifted — the inventory ended up looking for a player named bank_card, replied that it couldn’t be carried, and the bank translated that into “inventory full”. All four operations were affected (carry check, add, remove and reading the inventory). Other inventories (ox_inventory, qs-inventory, codem-inventory) were never affected.

  • Freezing an account created duplicate accounts — the internal check only looked for accounts with active status, didn’t find the frozen one, and created a brand-new account every time the bank or an ATM was opened. Beyond showing duplicates, this defeated the freeze itself: the player simply got a fresh, spendable account. A frozen account is now recognised as existing, and no replacement is generated.

  • The freeze could be bypassed by opening another account — the per-player account limit only counted active accounts, so freezing someone actually freed up a slot. Frozen accounts now occupy their slot and, in addition, holding any frozen account blocks opening new accounts of any type (including business/society requests). Unfreezing restores account creation.

  • GetSocietyBalance always returned 0 — the internal check tested whether a function existed rather than whether it returned a value. On the default configuration (Config.Societies.balanceSource = 'script') that function returns nothing, so the export answered 0 without ever reading the real balance. This affected external integrations such as lb-phone.

Added

  • AddSocietyMoney(jobName, amount, reason?) and RemoveSocietyMoney(jobName, amount, reason?) (server-side). Previously only reading a society balance was possible. Both honour Config.Societies.balanceSource: in framework mode they delegate to the configured resource (Renewed-Banking, qb-banking, fd_banking…), and in script mode they operate on the resource’s own tables. The withdrawal is atomic — it won’t allow a negative balance and is safe against simultaneous withdrawals.

  • Startup version banner and the bankversion console command, both showing the exact resource version and the registered exports. Useful to confirm at a glance which build a server is actually running.

  • Bank startup diagnostic — if the server can’t resolve a player’s identifier, it now says so explicitly in the console instead of silently opening an empty bank.

Added

  • Server-side exports so shops and external scripts can check an account’s status before charging (equivalent to qb-bank’s GetBlockAccount). They accept a server id or a citizen id:
    • exports['synz_banking']:IsAccountFrozen(src, accountType?)true if the account has been frozen by an admin.
    • exports['synz_banking']:GetAccountStatus(src, accountType?)'active' | 'frozen' | nil.
    • exports['synz_banking']:HasBlockedCard(src)true if the player has any blocked card.
    • Note: ChargePlayer / RemoveBalance already reject frozen accounts (they return false), so these exports are for showing a specific message (“card blocked”) instead of a generic “insufficient funds”.

You can download the latest update in keymaster for the latest version