How should a bank app show account and card fees before a customer is charged?
A fee that lives in a tariff table and posts from a legacy core reaches the customer as a code on the transaction list. This guide shows what the app should say before, at and after the charge, from UAE and UK disclosure duties.
Illustrative situation: a customer in Sharjah opens her bank app on the 3rd and finds a debit of AED 30 labeled “SVC CHG 04.” Her balance never looked low, but on the 19th of last month a rent payment took her under the account’s minimum for one afternoon. The minimum sat in a PDF she accepted at account opening, and the app never mentioned it. The scene is invented. Each gap has an ordinary cause: the fee rule lives in a tariff table, the core posts the charge in a batch, and the list prints the core’s narrative string.
Humbleteam, a digital product design agency, publishes this guide. It covers how a retail bank app should show account and card fees when the fee logic sits in a legacy core and product tariffs. Transfer fees and exchange rates are in our transfer fee guide. Rules and public pages are described as of November 5, 2026 and can change. This is general information, not legal advice. Your compliance team decides what applies and approves the wording.
What do the rules say about showing fees?
In the UAE, the Central Bank’s Consumer Protection Standards (listed as in force, N 1158/2021) sit under the Consumer Protection Regulation (C 8/2020). Clause 2.1.1.1 applies the disclosure rules to every channel, mobile applications included. Clause 2.1.1.2 requires disclosure information in Arabic and English. The Key Facts Statement comes before the product and states fees and the notice period for changes (2.1.1.19 to 2.1.1.22). Warnings go in a highlight box in bold type (2.1.1.15).
| Clause | What it says | App surface |
|---|---|---|
| 2.1.1.37, 2.1.1.38 | Disclose all applicable fees with amount and calculation method, and whether each is one-time or recurring | Product page, onboarding |
| 2.1.2.3 | State any minimum balance and warn of the consequence, including a fee | Onboarding, account screen |
| 2.1.1.17 | Annual auto-renewal needs written notice at least 30 calendar days ahead, with how to cancel | Card renewal notice |
| 2.1.3.18, 2.1.3.24 | Warn that exceeding a credit limit may incur fees; disclose late fee amount and dates incurred | Card screen, fee line |
| 2.1.2.9(h), 2.1.3.19(i) | Statements break down fees by amount and type; card statements show fees separately | List, statement |
| 2.1.1.44 | Tell the customer of every transaction as it occurs by free SMS; details visible in the app | Fee debit alert |
| 2.1.1.47, 2.1.1.48 | 60 calendar days’ notice before terms change, fees included, with a plain-language summary | Change notice |
| 5.1.1.38 | Where the bank’s error cost the customer money, refund immediately | Fee dispute path |
The annex also caps some fees: AED 230 for a credit card late fee, AED 2 for another bank’s ATM and zero for the bank’s own. The clause on fee schedules names branches and websites (2.1.1.18), not the app, but 2.1.1.1 puts the app in scope, so we treat the app as covered.
In the UK, the Payment Accounts Regulations 2015 cover current accounts. A fee information document must reach the customer in good time before the contract (regulation 8). It is short and stand-alone, uses the FCA’s standard service terms and quotes the fee for each listed service (Schedule 1). It stays online for anyone, customer or not (regulation 9). Customers also get a free annual statement of fees with each service’s unit fee, uses and total (regulation 10, Schedule 2). Proposed changes to account terms need two months’ notice under regulation 50 of the Payment Services Regulations 2017. If the contract lets the bank change terms unless the customer objects, the notice must say so and give the right to leave without charge.
The FCA’s Consumer Duty adds a test. In the July 2022 policy statement, PRIN 2A.5.3R asks that communications equip decisions that are “effective, timely and properly informed,” PRIN 2A.5.5R includes suitable points through the product’s life, and PRIN 2A.5.10R requires testing where appropriate. The finalised guidance says a price and value review must count contingent charges such as late fees.
What do real bank fee pages do?
Each of these is one bank’s practice, not a market standard. Mashreq’s fall-below fee FAQ (version September 2026) states the rule as a test. A fee of AED 26.25 including VAT applies if the combined balance across all of a customer’s accounts falls below AED 3,000 on any day of a calendar month. A salary of AED 5,000 or more, a loan or an overdraft waives it, and a salary counts only if a UAE employer pays it through an approved channel. The fee is debited the following month, and the PDF carries an Arabic copy.
Emirates NBD’s credit card Key Facts Statement lists a late fee of AED 241.50 per month if the minimum payment is not received by the due date, an over-limit fee of AED 292.95 charged once per billing cycle, and a cash advance fee of 3.15% or AED 103.95, whichever is higher, with interest from the day of the advance. By our arithmetic the late fee equals the annex cap of 230 plus 5%. The document does not say how VAT relates to the cap.
Santander UK’s Edge account page states a £3 monthly fee and lists pay-in and Direct Debit requirements beside it.
We found no public bank page showing a live progress-to-waiver tracker. The patterns below are our suggestions.
Where should fees appear, and what should a waiver show?
Place fees at four moments. On the product page, list every fee in Key Facts Statement order so two accounts compare. At onboarding, put the fee list and the minimum balance consequence in a bordered warning block before acceptance, not behind a PDF link. On the account and card screens, add a fees section with each rule’s current status. On any action that triggers a fee, show the fee.
Show a waiver as a test with a measure, a deadline and a current value. Mashreq’s FAQ already has the parts: threshold, measure, period, escape routes and day of debit. A status card built from it could read (our wording): “No fee so far this month. Lowest combined balance: AED 3,420 on Nov 2. Test ends Nov 30.” NN/g’s first heuristic asks the design to keep users informed about what is going on. When the test is “any day,” show the lowest point so far, not today’s balance, because a customer who topped up yesterday still owes the fee for last Tuesday. Keep waiver fine print one tap away, since a salary sent through the wrong channel does not count.
Ask the core owner which balance feeds each test. An end-of-day ledger test ignores an afternoon dip that a real-time test would catch, and the warning and status card must use the measure the charge uses.
When should the app warn before a fee triggers?
Warn while the customer can still change the outcome. Three triggers cover most account and card fees: balance, date and action.
Balance. When scheduled payments will take the balance under a minimum, warn a day ahead. Name the payment, the date, the fee and the amount that avoids it. That needs scheduled items from the core or the payment engine.
Date. Remind the customer before a card payment is due, with the fee amount. Emirates NBD ties the late fee to the minimum being “received” by the due date. A payment made late on the due day may post the next business day, so ask the core owner what “received” means and say it on the screen. Our guide to pending items and cut-off times covers those clocks.
Action. Show a cash advance fee before the customer confirms, as an amount. On AED 1,000, 3.15% is AED 31.50, so the AED 103.95 floor applies, and by our arithmetic it holds until the advance passes AED 3,300. The screen should say AED 103.95, not “3.15%,” and add that interest runs from the day of the advance.
How should a fee read on the transaction list, in two languages?
The core hands the app a fee code and a narrative string. The Standards ask for fees by amount and type (2.1.2.9) and the UK expects standard service names. So the line needs a plain name, the amount with VAT stated, the trigger date and posting date, and a way to open the rule. Example wording (ours): “Minimum balance fee, October. AED 30.00 including VAT. Charged Nov 3 for Oct 19: balance under AED 4,000.” Mashreq debits its fee the month after, so the two dates differ by design.
Store the Arabic and English names against the fee code in the tariff, not in app code, and have compliance approve both as one record. Check amounts and currency codes in right-to-left layout, since mixed strings can reorder.
How should fee changes, refunds and disputes work?
A fee change is a notice with a clock: 60 calendar days in the UAE, two months in the UK. Build it as one object: old fee, new fee, effective date, accounts or cards affected, what the customer can do and a link to the revised tariff. Keep it on the fee screen until the effective date, then switch the line on that date, not before.
Put “Ask about this fee” on every fee line. It opens a short form prefilled with fee code, date, amount and rule version, and sorts the request: “I think this is an error,” “I meet the waiver condition,” or “I want to complain.” For a disputed card payment rather than a fee, see our guide to card transaction disputes.
What does a legacy core change?
Fee logic sits in three places that drift apart: the core holds fee codes and posts charges, often in batch; a tariff table per product holds amounts, thresholds and dates; and copy lives in PDFs, the website and the app. When they drift, a customer can find two amounts or two tests for the same fee.
The fix is one fee catalog with a record per fee: code, plain names in both languages, trigger test and balance measure, amount, VAT treatment, cap, effective date, waiver rules, notice date and approved copy version. The app reads it. A rules engine that evaluates the test can show progress, while hardcoded copy can only quote the document. If the core is the only evaluator, the app can show posted fees but not progress, and the spec should say so.
| Fee | Trigger and balance measure | Warn before | List label | Waiver shown as |
|---|---|---|---|---|
| Monthly maintenance | Fixed amount on a set date | Product page, onboarding, reminder before first charge | “Monthly account fee” | Condition and this month’s value |
| Minimum balance | Daily or average; ledger or available. Confirm which | Push when a scheduled payment takes balance under the minimum | “Minimum balance fee, October” | Lowest point so far; salary or product route |
| Card annual fee | Card issue or renewal date | Notice at least 30 days before renewal | “Card annual fee” | Spend or relationship condition, if offered |
| Late payment | Minimum not received by due date | Reminder before due date, with amount | “Late payment fee” | Waiver request, if policy allows |
| Cash advance | Per transaction; percentage with a floor | Before confirm, as an amount | “Cash advance fee” | None |
| ATM, other bank or abroad | Per withdrawal or after an allowance | Allowance left, before the withdrawal | “ATM fee, other bank” | Allowance used in the window |
| Over limit | Once per billing cycle when balance exceeds the limit | Alert as balance nears the limit | “Over-limit fee” | None |
Illustrative worked example: Harborline Bank
Everything here is invented. Harborline Bank is a fictional bank whose core tests fees on the end-of-day ledger balance and posts them on the 3rd of the next month. Mira Ostrand is its digital product lead and Anselm Rudd leads core operations.
Harborline’s Everyday account charges AED 30 including VAT if the combined balance is under AED 4,000 at the end of any day in a month. A salary of AED 8,000 or more waives it. Ostrand and Rudd decide four things. One catalog record holds the test (“end of day, ledger balance”), the amount, the waiver and both language names, and the app, website and PDF read from it. The account screen shows a status card: “No fee so far this month. Lowest end-of-day balance: AED 4,150. Test ends Oct 31.” The app warns before a scheduled payment pulls the end-of-day balance under the minimum. The fee line links to the rule and offers “Ask about this fee.”
On Oct 18 a customer has AED 4,150 and an AED 2,000 rent payment due Oct 19. The app sends: “Your Oct 19 rent payment will take your end-of-day balance to AED 2,150, under AED 4,000. A fee of AED 30 applies. Add at least AED 1,850 before the end of Oct 19 to avoid it.” She moves AED 2,000 from savings, and no fee posts on Nov 3. A second customer in the same position does nothing. On Nov 3 her list shows the fee line with “Lowest end-of-day balance: AED 2,150 on Oct 19.” She taps “Ask about this fee,” chooses “I think this is an error,” and the case arrives with the fee code, date and rule version attached.
Where do these defaults stop working?
The sources are regulator texts and public bank pages. None measures whether a status card or an early warning reduces fee complaints. We did not check Central Bank fee directions outside the Standards, later amendments to the FCA rules or the FCA’s linked services list. Business accounts, overdrafts, Islamic late-payment wording (2.1.3.12), EU rules and other Gulf regulators are outside this guide. Bank figures are as read on the pages cited and can change, and we do not know whether VAT sits inside a cap.
What can you produce now?
Five things before design starts: a fee catalog with one record per fee, a decision for each fee on which balance or date feeds its test, a status card and warning spec for conditional fees, a bilingual list-label table approved by compliance, and a change-notice template with the “Ask about this fee” routes. If you are choosing a design team, our comparison of design agencies used to bank compliance and legacy systems is a starting point.
