Card Binding & Deposit Authorization
About This Page
What: Bank card binding rules, how account_type determines available deposit channels, how BST/eDDA authorization enables corresponding deposit methods, Airstar online account opening three-in-one flow, and deposit-related bank card exception troubleshooting Audience: Product managers and operations staff who need to understand "why a user can't see a certain deposit option" Prerequisites: Deposit Methods OverviewReading time: 6 minutes Owner: Deposit Product Manager
Key Takeaways: Which deposit method a user can use depends on the bank card's account_type bitmap — after binding, only online banking deposit is available by default. Completing BST sign-up adds BST deposit, and completing eDDA authorization adds direct debit deposit. Understanding this chain is key to troubleshooting "user can't see a deposit option."
Quick Navigation — What you might want to do:
- User can't see BST/eDDA deposit option? -> Deposit Channel and Card Type Relationship
- How does BST sign-up enable deposits? -> BST Authorization & Deposit
- How does eDDA authorization enable deposits? -> eDDA Authorization & Deposit
- What is Airstar online account opening three-in-one? -> Airstar Online Account Opening Three-in-One
- Bank card issues after binding affecting deposits? -> Deposit-Related Bank Card Exceptions
Card Binding is a Prerequisite for Deposits
Users must bind a bank card before initiating any deposit operation. When binding, the system creates a bank_card record with default account_type = 1 (Regular), which only allows online banking deposits.
To enable more deposit channels, the corresponding authorization must be completed:
account_type is a bitmap with independent bits that stack. A single card can have multiple capabilities — for example, account_type = 7 (Regular + BST + eDDA) means all three deposit methods are available.
Deposit Channel and Card Type Relationship
The bank card's account_type directly determines which deposit options are displayed in the App:
| account_type | Meaning | Available Deposit Methods | App Display |
|---|---|---|---|
| 1 | Regular (basic only) | Online banking deposit | Shows only "Online Banking Deposit" |
| 3 | Regular + BST | Online banking, BST deposit | Shows "Online Banking" + "BST Deposit" |
| 5 | Regular + eDDA | Online banking, eDDA direct debit | Shows "Online Banking" + "eDDA Deposit" |
| 7 | Full capabilities | Online banking, BST, eDDA direct debit | Shows all three |
Each card also carries a methods list, indicating the specific available deposit channels:
| method Value | Type | Meaning | Corresponding Bank |
|---|---|---|---|
normal | Regular | Online banking/FPS/ATM manual transfer | All banks |
bst_cmbhk | BST | CMB BST | CMB (Hong Kong) |
bst_cmbchk | BST | MSB BST | MSB |
bst_asb | BST | Airstar BST | Airstar Bank |
edda_hase | eDDA | Hang Seng direct debit | Hang Seng Bank |
edda_hsbc | eDDA | HSBC direct debit | HSBC |
Operations Troubleshooting Key Points
When a user reports "can't see BST/eDDA deposit option," troubleshooting path:
- Check
bank_card.account_type— values containing BST bit: 2, 3, 6, 7; values containing eDDA bit: 4, 5, 6, 7 - Check if
methodslist contains the corresponding method value - If
account_typeis missing the corresponding bit -> authorization flow not completed, refer to the relevant section below
BST Authorization & Deposit
After successful BST (Bank-Securities Transfer) authorization, the card's account_type automatically gains the BST bit (|= 2), enabling the BST deposit channel. The three BST banks have different authorization methods:
| Dimension | CMB / MSB | Airstar |
|---|---|---|
| Sign-up Initiator | Bank-initiated (user operates in banking app) | moomoo-initiated (user operates in moomoo) |
| Authorization Completion Time | Instant (SM2 Socket real-time push) | Seconds~minutes (REST API polling) |
| Multi-market | Separate sign-up per market (HK/US/HKCC) | One authorization auto-maps to 3 markets |
| Post-authorization Change | `account_type | = 2, verify = 2` |
Authorization Status Impact on Deposits
BST authorization must be in active status to use BST deposits:
| Mandate Status | Meaning | Can Use BST Deposit | Operations Focus |
|---|---|---|---|
| 0 CLOSE | Not authorized | No | User needs to initiate authorization |
| 1 PROCESSING | Authorizing | No | Waiting for bank confirmation, typically seconds~minutes |
| 2 OPEN | Authorized | Yes | Normal state |
| 3 WAITING | Waiting for first deposit | No | Online account opening exclusive, needs to complete first deposit -> auto-transitions to OPEN |
| 4 FAIL | Authorization failed | No | Check reject_code |
| 5 CANCEL | Cancelled | No | User can re-initiate authorization |
Only OPEN(2) enables BST deposit — this is the first step in troubleshooting "BST deposit unavailable."
CMB/MSB Sign-up Flow (Bank-initiated)
Airstar Authorization Flow (moomoo-initiated)
Full BST authorization technical details -> Bank Card & Authorization - BST Authorization BST implementation by bank -> BST Overview
eDDA Authorization & Deposit
After successful eDDA authorization, the card's account_type automatically gains the eDDA bit (|= 4), enabling the direct debit deposit channel. Currently supports Hang Seng and HSBC:
| Dimension | Hang Seng | HSBC |
|---|---|---|
| Authorization Confirmation | Synchronous response (instant) | Asynchronous SFTP report (T+0~T+1) |
| Post-authorization Change | `account_type | = 4, verify = 2, adds edda_hase` |
| Status Values | 0=Inactive / 2=Active | 0=Inactive / 1=Authorizing / 2=Active |
eDDA Card Extension Fields
eDDA authorization information is bound to the bank card. The system checks these fields during deposit:
| Field | Meaning | Deposit Impact |
|---|---|---|
limit_amount | Single/period limit cap | Debit fails when exceeded |
limit_periodicity | Limit period (Y/H/Q/M/P) | Determines limit reset time |
expiry_date | Authorization validity period | Debit fails after expiry (9999999=permanent) |
status | Active status | status=2 is required for debit — first step in deposit troubleshooting |
eDDA is for Deposits Only
eDDA/eDDI is a direct debit channel, only usable for deposits (debiting from user's bank account to securities account). Hang Seng/HSBC withdrawals go through corporate online banking channels, unrelated to eDDA.
eDDA authorization flow and debit execution details -> eDDA Direct Debit Deposit eDDA authorization complete technical details -> Bank Card & Authorization - eDDA Authorization
Airstar Online Account Opening Three-in-One
Airstar Bank supports online account opening — new customers can complete the entire zero-to-tradeable flow within the moomoo App:
| Step | Action | Description | Data Change |
|---|---|---|---|
| 1 | Open securities account | Complete KYC identity verification | — |
| 2 | Mandate authorization | Authorize Airstar for BST | BankCardAsbBst.status = 3 (WAITING), bank_card.status = 0 (Pending review) |
| 3 | First deposit | Complete first deposit to securities account | bank_card.status 0->1 (Active), BankCardAsbBst.status 3->2 (OPEN) |
Value: The traditional flow requires users to switch between multiple systems (moomoo account opening -> bank branch or online banking for sign-up -> back to moomoo for deposit). The three-in-one flow compresses these three steps into one continuous in-App flow, significantly reducing new customer drop-off.
Online Account Opening vs Standard Activation
| Dimension | Online Account Opening (New User) | Standard Activation (Existing Airstar Account) |
|---|---|---|
| Prerequisites | No Airstar bank account needed | Must already have Airstar bank account |
| Operation Location | Entirely within moomoo App | Initiated in moomoo App, may require bank-side confirmation |
| Flow | Account opening -> Sign-up -> First deposit, three-in-one | Sign-up -> Deposit, two steps |
| Card Initial Status | status = 0 (Pending review) | status = 1 (Active) |
| Mandate Initial Status | status = 3 (WAITING) | status = 2 (OPEN) |
| Minimum Deposit | Required (see table below) | No minimum |
| Acquisition Value | High — lowers new customer entry barrier | Medium — only for existing Airstar customers |
First Deposit Requirements
The first deposit for online account opening has minimum amount requirements, higher than regular deposits:
| Currency | Online Opening Minimum | Regular Minimum | Behavior When Not Met |
|---|---|---|---|
| HKD | 10,000 | No limit | App shows "First deposit requires >= 10,000 HKD" |
| USD | 1,500 | No limit | App shows "First deposit requires >= 1,500 USD" |
| CNH | 10,000 | No limit | App shows "First deposit requires >= 10,000 CNH" |
The purpose is to ensure new customers have sufficient funds for trading, avoiding "open account but never trade" ineffective conversions.
Online Account Opening User Journey
Online Account Opening Exception Handling
| # | Exception Scenario | Stuck At | Data State | Operations Handling |
|---|---|---|---|---|
| 1 | Account opened but authorization failed | Mandate authorization | bank_card.status=0, BankCardAsbBst.status=4(FAIL) | Guide user to re-initiate authorization (no need to re-open account) |
| 2 | Authorization succeeded but deposit failed | First deposit | bank_card.status=0, BankCardAsbBst.status=3(WAITING) | Guide user to re-initiate deposit (meet minimum amount) |
| 3 | Deposit succeeded but card not activated | TakeEffect | bank_card.status=0 (should be 1) | Manual BatchTakeEffect or check TakeEffect interface |
| 4 | Stuck in pending review for long time | User didn't complete deposit | bank_card.status=0, BankCardAsbBst.status=3 | Contact user to remind them to complete first deposit |
Airstar Only
CMB and MSB do not support the online account opening three-in-one flow — BST sign-up requires users to complete it on the bank side. Online account opening is an Airstar BST exclusive acquisition feature, particularly suitable for promotional campaigns (e.g., "deposit to get commission-free trading").
Deposit-Related Bank Card Exceptions
The following are bank card exception scenarios directly related to deposits — for withdrawal-related exceptions, see Bank Card & Authorization - Exception Scenarios.
| # | Scenario | Symptom | Troubleshooting Steps | Operations Handling |
|---|---|---|---|---|
| 1 | eDDA debit failed | Debit failure prompt during deposit | 1. Check eDDA status is 2 2. Check limit_amount not exceeded 3. Check expiry_date not expired | Not active -> guide re-authorization; Exceeded -> wait for limit reset or increase limit |
| 2 | Deposit channel not appearing after binding | App doesn't show BST/eDDA option after binding | 1. Check account_type value (BST needs 2/3/6/7, eDDA needs 4/5/6/7) 2. Check methods list | account_type missing -> authorization flow not completed, guide user to complete authorization |
| 3 | Online opening card cannot deposit | Pending review card not usable for deposit | 1. Check status is 0 2. Check if first deposit succeeded 3. Check if TakeEffect executed | Deposit succeeded but card not activated -> manual BatchTakeEffect |
| 4 | Currency not supported | User's selected currency cannot deposit | Check currency_type bitmap (HKD=1, USD=2, CNH=4) | Guide user to bind a card supporting that currency |
| 5 | BST deposit unavailable | User reports BST deposit unavailable | 1. Check Mandate status is OPEN(2) 2. Check account_type contains BST bit | Not OPEN -> guide re-authorization |
After Reading
| I want to... | Go to |
|---|---|
| Understand 10 deposit methods and complete lifecycle | Deposit Methods Overview |
| Dive deeper into eDDA debit execution flow | eDDA Direct Debit Deposit |
| See the complete bank card data model and all fields | Bank Card & Authorization |
| Understand BST implementation details by bank | BST Overview |
| What to do when deposits have problems | Deposit Troubleshooting |
| Look up deposit status codes and limit rules | Deposit Quick Reference |