Withdrawal Methods Overview
About This Page
What: Build a mental model of the withdrawal system in 5 minutes — what channels exist, how they're selected, how many steps, what statuses Audience: Product managers new to the withdrawal system Prerequisites: Newcomer GuideReading time: 2 minutes Owner: Withdrawal Product Manager
Key Takeaway: The core of withdrawal is approval, not matching — 12 channels ranked by automation level, BST (Bank-Securities Transfer) is fastest (seconds), cross-border wire transfer is slowest (days). From the moment a user clicks submit to seeing success, the request passes through 3-5 system nodes.
Withdrawal vs Deposit: The One-Sentence Difference
- The core of deposit is "matching" — money has already arrived in the company account; the question is "whose money is this?"
- The core of withdrawal is "approval" — money needs to leave the company account; the question is "can this payment be released?"
12 Withdrawal Channels
Ranked by automation level and arrival speed:
| Channel Key | Name | Mode | Supported Banks | Arrival Time | Automation |
|---|---|---|---|---|---|
auto_bs | BST | BST | CMB, CMBC, Airstar | Seconds~minutes | Fully auto |
hsbc | HSBC Online Banking | Online Banking | HSBC | Minutes~hours | Semi-auto |
hase | Hang Seng Online Banking | Online Banking | Hang Seng | Minutes~hours | Semi-auto |
boc_fps | BOC FPS | FPS | BOC | Minutes | Semi-auto |
cgb_fps_api | CGB FPS | FPS | CGB | Minutes | Semi-auto |
sc | Standard Chartered | FPS | SCB | Minutes | Semi-auto |
boc | BOC Same-bank | Traditional | BOC | Hours | Manual |
manual | ICBC Manual | Traditional | ICBC Asia | Hours | Manual |
chats_rtgs | CHATS/RTGS | Traditional | HK banks | Hours | Manual |
tele_transfer | Cross-border Wire | Traditional | BOC (cross-border) | 1~3 days | Manual |
ewb | EWB Wire | Traditional | EWB | 1~3 days | Manual |
check | Cheque | Traditional | — | 2~5 days | Manual |
Withdrawal Volume Distribution (Product Priority Reference)
Key Conclusions:
- Same-bank transfer is the dominant channel (73%) — HSBC/Hang Seng online banking handles the highest withdrawal volume
- BST accounts for 9% but has the lowest operational cost (fully automated); expanding BST coverage directly reduces ops headcount
- FPS accounts for 17% and Futu bears a cost of 2.5 HKD per transaction — volume creates cost pressure
- Only BST uses API-based withdrawal; all others are file-based (ops staff operate bank online banking / export files)
Core differences between the four modes:
| Mode | Representative Channel | How System Communicates with Bank | What Ops Needs to Do |
|---|---|---|---|
| BST | auto_bs | Socket dedicated line / REST API | Nothing (fully automated) |
| Online Banking | hsbc, hase | Ops operates corporate online banking | Transfer via bank online banking + CRM confirmation |
| FPS | boc_fps, cgb_fps_api, sc | FPS real-time clearing interface | Trigger submission + CRM confirmation |
| Traditional | boc, manual, chats_rtgs, etc. | Manual online banking/file/cheque | Bank operation + CRM confirmation |
How Channels Are Selected
The system automatically determines which channel to use via calcMethod():
Core principle: BST > Online Banking/FPS > Manual. Higher automation means better experience and lower operational cost.
Two branch explanations:
- Bank-initiated withdrawal (user operates transfer-out in bank app) → goes directly through BST, not subject to CNH restriction
- CMB/CMBC + offshore RMB CNH → does not use BST, left for ops to manually select. Reason: CMB/CMBC BST interfaces do not cover CNH currency automatic transfers at the protocol level. Airstar BST interface supports CNH and is not subject to this restriction
Fall-through Logic When method = null
When the system cannot automatically determine a channel (method = null), ops manually selects based on the following priority:
FPS limit: HKD / CNH amounts >= 1 million do not use FPS, upgraded to CHATS/RTGS (i.e., exactly 1 million goes through CHATS/RTGS, not FPS).
Same-bank Transfer: Bank × Currency Support
| Receiving Bank | HKD | USD | CNH |
|---|---|---|---|
| ICBC Asia | ✅ | ❌ | ❌ |
| BOC Hong Kong | ✅ | ✅ | ✅ |
| Hang Seng Bank | ✅ | ✅ | ✅ |
| HSBC | ✅ | ✅ | ✅ |
Withdrawal Lifecycle
A withdrawal goes through 6 statuses:
| Status | Meaning |
|---|---|
| PENDING (0) | Task created, awaiting approval |
| PROCESSING (1) | Approval in progress (includes Audit / Confirm / Remittance steps) |
| DONE (2) | Withdrawal successful, funds remitted |
| REJECTED (3) | Approval not passed or risk control intercept |
| CANCEL (4) | User actively cancelled |
| REVERSE (5) | Remitted funds have been reversed |
"Processing" is the most complex status — it contains three approval steps and bank execution. See Withdrawal Lifecycle for details.
Common Misconceptions
| Misconception | Fact |
|---|---|
| "BST is the most commonly used withdrawal channel" | BST only accounts for 9% of withdrawal volume. Same-bank transfer (HSBC/Hang Seng online banking) accounts for 73% and is the dominant channel |
| "Withdrawal and deposit are symmetric processes" | They are not. The core of deposit is "matching" (money arrived, find whose it is), the core of withdrawal is "approval" (money needs to leave, can it be released). The processes, systems, and channels are completely different |
| "method = null is a system error" | It is not. This is the normal "system cannot auto-select channel" state; ops selects manually based on the user's bank card |
| "Only BST can do withdrawals" | BST is the only fully automated channel, but there are 11 other channels (online banking, FPS, traditional). The others just require ops to manually operate on the bank side |
| "Withdrawal always charges a fee" | Currently all withdrawals are fee-free. The code defines cross-border fee rates (HKD 105 / USD 15) but they are forced to 0 |
What to Read Next
| I want to... | Go to |
|---|---|
| Understand how bank cards and authorization affect withdrawal channels | Bank Cards and Withdrawal Authorization |
| See how a withdrawal flows end-to-end | Withdrawal Lifecycle |
| Understand what a specific rule means and whether it can be changed | Withdrawal Rules Manual |
| See technical execution details for a specific channel | Channel Execution Manual |
| Troubleshoot a withdrawal issue | Withdrawal Troubleshooting |
| Look up what a status code/field means | Withdrawal Data Dictionary |
| See detailed comparison of the three BST banks | BST Overview |