Skip to content

Deposit Methods Overview

About This Page

What: Classification, experience differences, and selection recommendations for 10 deposit methods, plus the complete lifecycle of a deposit from application to crediting Audience: Product managers who need to understand the full landscape of deposit channels and help users choose the optimal method Prerequisites: Getting Started GuideReading time: 7 minutes Owner: Deposit Product Manager

Key Takeaways: There are 10 deposit methods, classified by automation level into three categories: Push (user-initiated transfer, most common), Pull (eDDA direct debit), and BST (Bank-Securities Transfer). A deposit goes through five steps from application to crediting: "Application -> Statement Collection -> Matching -> Crediting -> Reconciliation."


Deposit System Architecture

The diagram below shows the complete topology of the deposit system — from user action to fund crediting, with each node annotated with the corresponding documentation page. New PMs should spend 2 minutes understanding this diagram before diving into individual pages.

Documentation for each node in the diagram:

NodePageKey Content
Apply FormDeposit Quick ReferenceApplication status codes, sharding strategy, core fields
Statement Collection ServiceBank Statement CollectionCollection methods, protocols, and latency for 12 banks
Matching EngineMatching & Auto-creditingFive-dimension matching, bank-specific rules, tolerance design
Auto-credit DecisionMatching & Auto-creditingLimits, 2412 rule, risk control checks
Operations OA ReviewManual Matching GuideOperations workflow, approval permissions
eDDI DebiteDDA Direct Debit DepositAuthorization lifecycle, debit chain, error codes
BST InstructionBST Bank-Securities TransferCMB/MSB/Airstar BST protocols
SBA CreditingSBA Fund OrchestrationProcedure execution model
Exception HandlingDeposit Troubleshooting9 scenarios + Runbooks
Change GuideDeposit Change GuideOperational guides for 10 change scenarios
Reversal/RefundRefund & ReversalThree refund mechanisms, decision tree, failure recovery

Three Deposit Modes

There are three fundamentally different "initiators" for transferring money from a bank to a securities account:

Push (User-initiated): The user operates the transfer in their banking app. After the money reaches the company account, the system needs the Matching Engine to identify "whose money is this." The advantage is no pre-authorization required and works with any bank; the cost is the need for matching and non-instant crediting.

Pull (System-initiated): The user operates with one click in the moomoo App, and the system directly debits from the user's bank account. Since the system initiates the debit itself, it inherently knows the fund ownership and completely skips the matching engine. Best experience, but requires the user to complete bank authorization (eDDA) in advance, and only HSBC and Hang Seng are supported.

Direct (Bank-Securities Link): A dedicated channel between the bank and securities company. The system initiates the debit through the BST protocol. Similar to Pull in that it doesn't need the matching engine, but uses a different technical protocol (SM2-encrypted dedicated line). Only CMB, MSB, and Airstar are supported.


10 Deposit Methods at a Glance

CodeMethodModeSupported BanksUser ActionCrediting Time
3FPSPushSCB, CGB, BOCHK, Hang Seng, ICBCTransfer via banking app3~5 minutes
9eDDA HSBCPullHSBCOne-click in appMinutes
8eDDA Hang SengPullHang SengOne-click in appMinutes
1BSTDirectCMB, MSBOne-click in app~10 minutes
10Airstar BSTDirectAirstarOne-click in app~10 minutes
5Online BankingPushAlmost all banksOnline banking transfer2 hours~3 days
2ATM/CounterPushMost banksVisit ATM/counter2 hours~next day
4Bill PaymentPushBanks supporting BPBank bill pay feature2 hours~next day
6ChequePushBanks that issue chequesWrite a cheque2~3 days
7Overseas RemittancePushEWB, ZA, Singapore ICBC sub-accountCross-border remittance3~5 days

The table is sorted by user experience — methods higher up offer better experience and faster crediting. All methods support HKD and USD; FPS, online banking, ATM, and other Push methods additionally support CNH.

Deposit Volume Distribution (Product Priority Reference)

The pie chart below shows the deposit volume share by channel, helping determine priorities:

Key Conclusions:

  • HSBC eDDA is the dominant channel (72%) — any change affecting eDDA should be prioritized, and regression testing must cover the HSBC channel
  • Pull mode (eDDA) accounts for nearly 80% — validating the product judgment that "users prefer one-click deposits"
  • ICBC is the second largest source (12.3%), but has the most system limitations — changes involving ICBC require extra caution
  • BST (CMB + MSB + Airstar) accounts for about 4% combined, but is the only option for specific user groups
Data Notes

Deposit volume shares are based on recent business statistics and may fluctuate across different time periods. For product priority reference only; does not represent precise real-time data.


Processing Pipeline for Each Method

The three deposit modes follow completely different processing chains within the system. Details below.

Push Pipeline (FPS / Online Banking / ATM / BP / Cheque / Overseas Remittance)

Key Systems:

  • Statement storage: flows_{trans_type}_{month} sharded tables, partitioned by bank and month
  • Matching scheduler: match:{bank} cron job, every 3 minutes per round
  • Matching result constants defined in MatchResult.php, flow disposition results defined in BankFlow.php

See Bank Statement Collection and Matching & Auto-crediting for details.

Pull Pipeline (eDDA HSBC / Hang Seng)

Characteristics: The system initiates the debit itself, inherently knowing fund ownership, skipping the matching engine.

Key Data Tables:

  • Deposit applications: applys_{shard} (sharded by user ID)
  • HSBC eDDI: hsbc_eddis; Hang Seng eDDI: hs_eddis
  • Authorization management: setup_eddis

See eDDA Direct Debit Deposit for details.

Direct Pipeline (BST CMB / MSB / Airstar)

Characteristics: Uses the BST dedicated line protocol (SM2 encryption), also skipping the matching engine. CMB/MSB use Socket long connections; Airstar uses REST API.

See BST Bank-Securities Transfer for details.


Pull Mode: eDDA Deposit

eDDA (Electronic Direct Debit Authorization) offers the best deposit experience — users fill in the amount and confirm within the moomoo App, without switching to a banking app. For users who have linked HSBC or Hang Seng accounts, eDDA has the highest conversion rate among deposit methods.

Prerequisite: One-time authorization. Before first use, the user must complete eDDA authorization, allowing the system to debit from their bank account. Once authorized, it remains valid long-term and subsequent deposits don't require re-authorization.

Why does eDDA skip the matching engine? Because the debit is initiated by the system itself — when the system sends the debit request, it already knows which user and which application the money belongs to. There's no question of "whose money is this."

HSBC and Hang Seng eDDA differ significantly in protocol and authorization rules. See eDDA Direct Debit Deposit for details.

Why is eDDA only available for HSBC and Hang Seng?

eDDA is part of the HKMA (Hong Kong Monetary Authority) FPS system, with unified technical standards, but each bank's API implementation, review process, and commercial terms differ. Currently only HSBC and Hang Seng have completed full integration (commercial agreement + technical integration + production verification). Whether other banks support eDDA and when they can be onboarded depends on the bank's technical readiness and commercial willingness to cooperate. To evaluate the feasibility of adding new eDDA banks -> Deposit Change Guide - Adding eDDA Bank


Push Mode: FPS, Online Banking, and Others

Push mode's common characteristic: the user initiates a transfer on the bank side -> funds arrive at the company's bank account -> the system identifies ownership through the Matching Engine -> crediting.

FPS (Faster Payment System)

FPS offers the best experience among Push modes — transfers settle instantly, statements are pushed to the system in real-time, the matching engine runs every 3 minutes, and typically completes fully automatically in 3~5 minutes.

Why is FPS so fast? Two reasons: first, the FPS network itself settles instantly (unlike interbank transfers that require T+1 clearing); second, SCB and CGB push FPS statements in real-time via API, without waiting for batch files.

Online Banking Transfer

The most widely supported deposit method — almost all banks support it. However, crediting time varies significantly:

  • Intra-bank transfer (sending bank = receiving bank): ~2 hours
  • Interbank transfer (HKD): 2~3 business days
  • Interbank transfer (foreign currency): 3~4 business days

Why the huge difference between intra-bank and interbank? Intra-bank transfers settle internally within the bank on the same day. Interbank transfers go through the interbank clearing system (CHATS), following batch clearing cycles.

Other Push Methods

MethodSuitable ForSpecial Notes
ATM/CounterUsers preferring offline operationsRequires uploading transfer receipt; unclear receipts require resubmission
Bill Payment (BP)Users familiar with bank bill payMatching additionally verifies BP number for higher precision
ChequeUsers preferring traditional methodsClearing cycle 2~3 days
Overseas RemittanceUsers with overseas bank accountsMatched via sub-account number (not bank card number), wider tolerance due to uncontrollable intermediary bank fees

Direct Mode: BST Bank-Securities Transfer

BST (Bank-Securities Transfer) is a dedicated channel between banks and securities companies. Like eDDA, the system initiates the debit, but BST uses the BST dedicated line protocol with national encryption algorithm communication.

BankDeposit Method KeyFeatures
CMBbstBidirectional BST link, event-driven
MSBbstSame as CMB
AirstarbstAsbVirtual bank, API integration

Prerequisite: The user must complete BST account binding. Once bound, they can deposit with one click in the moomoo App.

Processing Hours: Monday 08:00 ~ Friday 16:00. Deposits outside business hours are queued for automatic processing on the next trading day.

Why is BST limited to CMB, MSB, and Airstar?

BST (Bank-Securities Transfer) is a China-specific bank-securities direct connection protocol, communicating via SM2 national encryption dedicated lines. Only mainland Chinese banks with branches in Hong Kong have BST capability. CMB and MSB were the first two banks to offer BST in Hong Kong, and Airstar Bank (virtual bank) adapted a similar protocol via API. Other foreign banks (HSBC, Hang Seng, SCB, etc.) do not use the BST protocol and use their own deposit channels.


From Application to Crediting: Complete Lifecycle

Regardless of the deposit method, every deposit goes through the following lifecycle:

StatusMeaningTypical Trigger
Pending (0)User submitted, awaiting fund confirmationUser submits deposit application in App
Processing (1)Funds confirmed, crediting in progressPush: match success; Pull/Direct: bank debit callback success
Completed (2)Deposit successful, funds creditedSBA Procedure execution complete
Rejected (3)Application rejectedAuto-rejected after timeout / Operations manually rejected
Withdrawn (4)User cancelledUser actively cancelled in App
Reversed (5)Credited funds withdrawnBank refund, incorrect crediting correction

The key difference between the three modes is in the "Pending -> Processing" step:

  • Push: Must wait for bank statement to arrive + matching engine to match successfully, could take minutes to days
  • Pull (eDDA): System initiates debit -> bank callback success, typically minutes
  • Direct (BST): System initiates debit -> bank callback success, typically minutes

Detailed status codes and enum values -> Deposit Quick Reference


Deposit Types and Flow Templates

Each deposit is assigned a DepositType at creation, determining which flow template (i.e., which approval steps are required) it follows.

CodeTypeTrigger ScenarioManual RequiredFlow Template
1NORMALStatement matched + auto-creditNoFLOW_NO_CONFIRM
2PRE_APPROVALOnline account opening first depositDependsFLOW_PRE_CONFIRM
3ABNORMALOperations manually createdYesFLOW_PRE_CONFIRM_ABNORMAL
4TRANS_AUTOFrontend exact matchNoFLOW_NO_CONFIRM
5HIGH_RISKRisk control triggered (blacklist/high-risk country)YesFLOW_CONFIRM
11NORMAL_HOLDeDDI + fund DCA freezeNoFLOW_NO_CONFIRM
21STOCK_HOLDeDDI + stock DCA freezeNoFLOW_NO_CONFIRM
31FUND_PURCHASE_HOLDeDDI + fund purchase freezeNoFLOW_NO_CONFIRM
5 Flow Templates Explained

Each flow template defines the steps a deposit must go through from "Pending" to "Completed":

TemplateStepsScenario
FLOW_CONFIRM[SBAConfirm]Requires operations confirmation before SBA crediting, for high-risk deposits
FLOW_NO_CONFIRM[BankPending]Fully automatic, just wait for SBA to complete, most common template
FLOW_PRE_CONFIRM[Confirm, AccountPending]Online account opening users, requires operations confirmation + wait for account readiness
FLOW_PRE_NO_CONFIRM[AccountPending]Online account opening users, auto-credit + wait for account readiness
FLOW_PRE_CONFIRM_ABNORMAL[Confirm, AccountPending, SBAConfirm]Full process for abnormal scenarios, three checkpoints
  • Confirm: Operations confirm deposit compliance in the backend
  • AccountPending: Wait for user's securities account to be fully opened (online account opening scenario)
  • SBAConfirm: Call SBA Procedure to complete fund crediting
  • BankPending: Wait for bank-side processing to complete, no manual intervention needed

Code Source: deposit/src/app/Business/Deposit.php:55-230, deposit/src/app/Business/Tasks/Deposit.php:68-80


How to Choose a Deposit Method

As a product manager, the priority for recommending deposit methods:

Core Principle: Pull/Direct > Push. Methods that avoid the matching engine provide better experience and certainty.

ScenarioRecommended MethodReason
New user first depositFPS (if supported) or Online BankingNo pre-authorization needed, lowest barrier
High-frequency depositoreDDA or BSTOne-click experience, no repeated operations
Large deposit (exceeds auto limit)Any methodManual confirmation required above limit regardless of method
Overseas userOverseas RemittanceOnly option, matched via sub-account

Deposit Method Availability Logic

The system determines which deposit methods a user can see based on the following factors:

FactorImpactConfiguration Source
Linked bank cardsDetermines available bank channelsbankcard_service database, written during card binding
eDDA authorization statuseDDA not shown if unauthorizedsetup_eddis table, written after successful authorization
BST binding statusBST not shown if unboundbst_bindcards table, written after BST sign-up
User locationDifferent methods shown for HK/Mainland/OverseasUser registration info + region rules in deposit config files
Selected currencyJPY, SGD only supported by some methodsdeposit/config/trans_type.php currency-method mapping
Account opening methodOnline/offline opening has different available methodsUser account table account_type field

Processing Hours and Suspension Windows

Not all deposit methods operate 24/7. Here are the precise processing hours for each method:

MethodProcessing HoursSuspension WindowBehavior Outside Hours
eDDA HSBC/Hang SengMon 07:00 ~ Sat 10:0008:55~09:00, 16:05~16:10Queued for next trading day
BST CMB/MSBTrading days 07:00 ~ next day 04:0008:55~09:00, 16:05~16:10Queued for next trading day
BST AirstarTrading days 08:00 ~ 22:00Queued for next trading day
FPSSimilar to BST08:55~09:00, 16:05~16:10Auto-credit suspended, assisted matching continues
Matching Engine24/7 (every 3 min)08:55~09:00, 16:05~16:10Matching continues, but auto-credit subject to time restrictions
Online Banking/ATM/ChequeWaits for matching after statement enters system, no time restrictions

16:00~16:10 suspension reason: After market close, the system reconciles securities account balances (2412 rule). During this window, all automatic deposits are paused to prevent fund movements from interfering with reconciliation.


If Requirements Change: Adding a New Deposit Method

Code Locations:

  • Deposit method definition: deposit/proto/server/cash_deposit.proto — add new deposit method enum value
  • Method configuration: deposit/src/app/Common/DepositMethodConfig.php (if exists) or deposit/config/ directory
  • Frontend display: App-side deposit method list needs to be updated simultaneously

Steps:

  1. Define the new method's Key and code number (ensure no conflict with existing 1~10)
  2. Determine mode: Push/Pull/Direct — determines whether the matching engine is needed
  3. If Push mode -> need to add a new Match class (refer to BocMatch.php)
  4. If Pull/Direct -> need to add a new SBA orchestration service (refer to sba_hase_eddi)
  5. Configure processing hours, tolerance rules, timeout rejection days
  6. Add display conditions for the new method in the availability logic
If Requirements Change: Modifying Deposit Method Availability Rules

Code Location: deposit/src/app/Business/ directory, availability logic

Common Change Scenarios:

  • A bank newly supports FPS -> Add that bank's TransType to the FPS available banks list
  • Discontinue a deposit method -> Set the method's condition to false in the availability logic
  • Modify online account opening restrictions -> Adjust account_type related logic branches
  • Modify region restrictions -> Adjust area related logic branches
If Requirements Change: Adjusting Deposit Processing Hours

Code Location: deposit/src/app/Business/DepositConfigNew.php

Key Configuration Items:

  • Business hours start/end: approximately lines 34-50, defining Mon~Fri processing window
  • Saturday special handling: closes at 09:55 (approximately line 498)
  • Suspension window (2412 rule): 16:05~16:10 (approximately lines 603-641)
  • USD special start time: 09:01 (approximately line 440)

Note: Modifying processing hours affects all deposit methods that depend on these hours (eDDA, BST, matching engine auto-credit decisions). Comprehensive impact assessment is required.

Role-Based Reading Paths

Different roles focus on different aspects. Recommended reading paths:

New PM (First Week)

OrderPageGoalEst. Time
1This page (Deposit Methods Overview)Understand 3 modes + 10 methods7 min
2Getting Started GuideWalk through 3 scenario tours15 min
3Matching & Auto-creditingUnderstand matching engine core logic7 min
4Deposit Troubleshooting - Scenarios 1 & 2Master 70% of daily issues5 min
5Deposit Quick ReferenceKnow where to look up numbersBrowse 2 min

PM Driving Changes

OrderPageGoal
1Deposit Change GuideFind the matching scenario, review impact chain and approval requirements
2Deposit Quick ReferenceConfirm current parameter values
3Corresponding topic pageUnderstand the specific module involved in the change

Operations Staff

OrderPageGoal
1Deposit TroubleshootingMaster troubleshooting paths for 9 scenarios
2Manual Matching GuideMaster daily matching operations
3This page - Deposit Methods at a GlanceUnderstand crediting times for each method
4Bank Statement CollectionUnderstand statement arrival mechanisms

Common Misconceptions

MisconceptionFact
"There's only one deposit method"There are 10, split into Push/Pull/Direct modes with vastly different experiences and timeframes
"eDDA is related to withdrawals"eDDA/eDDI is only used for deposit direct debit. Withdrawals go through corporate online banking transfers
"All deposits require the matching engine"Only Push mode requires it. Pull (eDDA) and Direct (BST) skip the matching engine
"Deposit crediting time depends on our system"Most waiting time is bank statement arrival delay, not our system processing speed
"BST and eDDA use the same technology"Completely different. BST uses a dedicated BST line (SM2-encrypted Socket), eDDA uses the FPS system (HTTPS/SM2 HTTP)
"Auto-credit = instant"Auto-credit still needs to wait for the matching engine's 3-minute cycle + SBA crediting time. Minimum 3~5 minutes

After Reading

I want to...Go to
Understand how card binding and authorization enable deposit channelsCard Binding & Deposit Authorization
Understand how the matching engine worksMatching & Auto-crediting
Understand the complete eDDA direct debit floweDDA Direct Debit Deposit
See how bank statements enter the systemBank Statement Collection
What to do when a deposit has problemsDeposit Troubleshooting
Look up limits, tolerances, timeout numbersDeposit Quick Reference
Drive deposit change requirementsDeposit Change Guide
Understand refund and reversal mechanismsRefund & Reversal
Was this page helpful?

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