Skip to content

Frequently Asked Questions

Page Info

What: High-frequency general questions about the deposit and withdrawal system — mechanism-level questions not limited to any specific bank Audience: All readers — quickly understand "why the system is designed this way" Prerequisites: Onboarding GuideReading time: 3 minutes Owner: Deposit & Withdrawal Product Team

Key takeaway: Auto-deposit requires all 5 preconditions to be met simultaneously (amount, currency, time window, bank card, match quality). If any one is not met, it downgrades to manual review — this is a safety valve, not a block.


General Questions

Why did money arrive but not auto-deposit?

Auto-deposit requires all 5 preconditions to be met simultaneously. If any one is not met, it downgrades to manual review (safety valve, not a block):

#ConditionCommon Failure Reasons
1Amount within auto-deposit limitHKD > 2M / USD > 300K
2Statement not manually marked as rejectedOperations has flagged this statement
3Within auto-processing time windowOutside business hours, 2412 reconciliation pause window (08:55-09:00, 16:05-16:10)
4One statement maps to only one userAmount/name matches multiple users
5User's daily auto-deposits do not exceed 10Already 10 auto-deposits on the same day

Additionally, the matching engine itself requires all five dimensions — amount + currency + name + date + card number — to match.

→ See Matching & Auto-deposit for details

Why does the matching engine run every 3 minutes instead of real-time?

The matching engine uses a database polling model — each run performs a full table scan of all pending records, comparing each one across five dimensions. 3 minutes is the experience-based balance between "user perception" and "database load". Cron configuration:

*/3 * * * * match:boc        # BOCHK
*/3 * * * * match:hangseng   # Hang Seng
*/3 * * * * match:hsbc       # HSBC
*/3 * * * * match:main icbc-new  # ICBC
*/3 * * * * match:ccbasia    # CCB
*/3 * * * * match:ewb        # EWB

Why do amount tolerances differ across banks?

BankAuto-deposit ToleranceAssisted Match ToleranceReason
General StandardHKD -20 / USD -3SameLocal same-bank fee ceiling
HSBCHKD -65 / USD -14HKD -420 / USD -60Fees deducted directly from received amount
DBSHKD -350 / USD -50SameSub-account transfer intermediary fees
EWB Sub-accountHKD -40HKD -100Cross-border sub-account fees
Cross-border (BOCO)HKD -300 / USD -45SameUncontrollable correspondent bank deductions
ICBC REMITUSD -55Wire transfer intermediary fees

Why is auto-deposit tolerance stricter than assisted matching? To prevent incorrect crediting when amount differences are large — it's better to have operations confirm (Stripe uses a similar strategy).

Why does withdrawal need multi-layer approval but deposit doesn't?

DepositWithdrawal
Fund DirectionMoney flows into company accountMoney flows out of company account
Core MechanismMatching ("whose money is this")Approval ("can this money be released")
Error ConsequencesReversal can recover funds (money is in our hands)Once remitted, very hard to recover
Safety MechanismsFive-dimensional matching + 5 auto-conditionsThree-step approval + 6 auto-conditions + three-tier limits

If the 6 auto-withdrawal conditions are not met, does that mean withdrawal fails?

No. Failing the conditions only downgrades from "auto-withdrawal" to "manual approval" — operations can still execute after confirmation. The 6 conditions are a safety valve, not a blocker.


Looking for a Specific Bank's Questions?

Specific rules for each bank's deposit/withdrawal/matching/exceptions/limits/timeliness are in the corresponding bank pages:

BankPageKey Features
BOCHKBOCHKB2E statement collection, FPS matching, cross-border tolerance
HSBCHSBCMT910 real-time statements, eDDA/eDDI direct debit, token bucket rate limiting
Hang SengHang SengeDDA/eDDI direct debit, SM2 signatures, pessimistic lock serialization
CMBCMBBST bank-securities, SM2 Socket, CNH restrictions
MSMSBST bank-securities, CNH not supported
AirstarAirstarREST API BST, REFUNDED mechanism, three-tier limits
SCBSCBFPS collection, Webhook withdrawal
CGBCGBFPS collection, API batch withdrawal
ICBCICBCB2E direct connect, no unique transaction ID, T-1 late statements
DBSDBSSub-account matching, high tolerance
EWBEWBCSV/BAI2 files, dual-engine matching
CCBCCBBOCO standard matching
Bank of CommunicationsBANKCOMMSub-account + BOCO matching

Cross-bank comparison → Bank Capability Matrix


Troubleshooting FAQ

Deposit

Q: User says FPS deposit has been waiting a long time without crediting. How to troubleshoot?

A: FPS deposit involves three channels (BOCHK/SCB/CGB). Troubleshooting steps:

  1. Confirm which bank the user transferred to (BOCHK FPS / SCB FPS / CGB FPS)
  2. Check if bank statement has been collected into the system
  3. If statement collected but not matched — check if the particulars field can identify the deposit method (most common with BOCHK)
  4. If statement not collected — check the status of the corresponding bank's collection service
  5. Detailed troubleshooting → Deposit Troubleshooting / Symptom Quick Reference

Q: eDDA debit suddenly failed, it was working fine before?

A: Most common cause is insufficient balance leading to bank auto-cancelling authorization (Hang Seng specific):

  • After Hang Seng returns BRC_8I1 (insufficient balance) multiple consecutive times, it may automatically cancel eDDA authorization
  • When user tops up and tries again, they receive FP2414 (authorization not found)
  • Solution: Guide user to re-sign eDDA authorization
  • HSBC does not auto-cancel, but may enter "dormant" state (MPP02038)

Q: BST deposit succeeded but funds were returned?

A: This is the REFUNDED mechanism unique to Airstar BST. It does not occur with CMB/MS:

  • Bank discovers an anomaly after the fact (compliance/risk control) and proactively refunds
  • System automatically triggers a reversal operation
  • See Withdrawal Troubleshooting § REFUNDED for details

Withdrawal

Q: Withdrawal has been "processing" for a long time. What's happening?

A: Withdrawals go through Audit → Confirm → Remittance three-step approval. Common reasons for being stuck:

  • Stuck at Audit: High-risk review queued, awaiting risk control team review
  • Stuck at Confirm: method=null — system cannot auto-select channel, operations needs to manually choose
  • Stuck at Remittance: Auto-withdrawal conditions not met (amount over limit / over 10 per day, etc.), requires operations to manually trigger
  • Non-BST channels (internet banking/FPS) inherently require operations to manually execute multiple steps

Q: Why is Airstar withdrawal slower than CMB/MS?

A: Different mechanisms:

  • CMB/MS: Real-time callback, typically completes in seconds. Timeout (-5) auto-switches to backup server
  • Airstar: Polling mode — system initiates then polls 10 times for result, with a 2-hour fallback sync after timeout
  • Worst case: Airstar withdrawal may take 2+ hours to confirm final status

Q: User's withdrawal was rejected. How to handle?

A: Check the rejection source:

  • Audit rejection: High-risk transaction flagged by risk control, contact risk control team to confirm reason
  • Bank rejection: Look up the bank's error code → Unified Error Code Center
  • Blacklist hit: Withdrawal target account is on blacklist, contact risk control team to confirm if false positive

After Reading

I want to...Go to
Understand matching engine detailed logicMatching & Auto-deposit
Look up tolerances, timeouts, status codesDeposit Rules Reference
Look up withdrawal approval and limit rulesWithdrawal Rules Manual
Check processing time windows and maintenance windowsDeposit Rules Reference § Auto-processing Time Windows
Compare bank capabilitiesBank Capability Matrix
Was this page helpful?

内部业务文档 · 仅限 moomoo 团队使用