Skip to content

Withdrawal Troubleshooting

About This Page

What: Common exceptions during withdrawal — organized by "what symptom the user/ops sees", with troubleshooting paths and resolution methods Audience: Operations staff handling withdrawal issues, product managers understanding exception flows Prerequisites: Withdrawal LifecycleReading time: 4 minutes Owner: Withdrawal Operations Lead

Key Takeaway: Withdrawal exceptions are quickly located by error codes — BST callback timeout, channel cannot be auto-selected (method=null), BST authorization exception, and balance freeze failure are the four most common problem categories.


Quick Lookup by Error Code/Status Code

Error Code/StatusMeaningJump To
Callback code -5CMB/CMBC BST timeoutScenario 2 § BST Callback
Callback code -6CMB/CMBC BST rejectionScenario 2 § BST Callback
Airstar PENDING timeoutAirstar polling timeoutScenario 2 § Airstar Polling
Airstar FAILEDAirstar instruction failedScenario 2 § Airstar Polling
Airstar REFUNDEDBST deposit refundScenario 8
method = nullSystem cannot auto-select channelScenario 1 § Confirm Stuck
Mandate ≠ OPENBST authorization exceptionScenario 7
140630xxxAirstar error codesWithdrawal Data Dictionary
Freeze type=2 (CASH_OUT)Withdrawal freezeScenario 6
Task status=5Withdrawal reversedScenario 5

Complete error codes → Unified Error Code Center


Quick Diagnosis: User Says "Money Hasn't Arrived"

When receiving user feedback "I submitted a withdrawal but money hasn't arrived in my bank card", troubleshoot in this order:

Most "money hasn't arrived" cases are due to the approval flow still being in progress — especially for non-BST channel withdrawals, which require ops to manually operate multiple steps.


Scenario One: Approval Stuck at a Step

Symptom: Withdrawal task status is "Processing" but has not advanced to the next step for a long time.

Stuck AtPossible CauseResolution
AuditHigh-risk review queuedCheck risk control flag reason, click NEXT after review passes
ConfirmOps has not processed in time / bank card info needs confirmationVerify bank card status, confirm channel then click NEXT
RemittanceAuto-withdrawal conditions not met / ops has not manually triggeredCheck 6 auto-withdrawal conditions, manually click to execute transfer

Most common reason Confirm is stuck: method = null (system cannot auto-select channel). Ops needs to manually select an appropriate withdrawal channel (online banking / FPS / manual, etc.) based on the user's bank card, then advance to Remittance.


Scenario Two: Bank Callback Failed

Symptom: Remittance has already executed startTransfer(), but the bank callback result is not success.

CMB / CMBC BST Callback Exception

Callback CodeMeaningSystem HandlingOps Action
-5TimeoutAutomatically switch to backup exit_server for retryUsually no intervention needed, wait for retry result
-6Bank rejectionMark as failedContact bank to confirm rejection reason, may need to switch channel for re-withdrawal

BST timeout (-5) is usually network jitter — the system will automatically try the backup server. If retry also fails, ops needs to manually confirm bank-side status: has the money already been sent out?

Airstar BST Polling Exception

Airstar does not use real-time callback but system polling for results, so the exception pattern differs:

ExceptionTrigger ConditionSystem HandlingOps Action
Polling timeoutStill PENDING after AsbBstTransfer 10 pollsEnters SyncAsbBstWithdraw 2-hour fallback syncWait, monitor alerts
Sync timeoutStill PENDING after 2-hour sync window endsMark abnormalManually query Airstar API to confirm bank-side status
Instruction failedAirstar returns FAILEDRelease frozen fundsCheck 140630xxx error code to identify cause

Key difference: CMB/CMBC "-5 timeout" typically recovers in seconds (switches to backup server); Airstar polling timeout may require up to 2 hours + manual intervention.

Airstar error codes → Withdrawal Data Dictionary § Airstar Error Codes

Online Banking / FPS Callback Exception

Online banking and FPS channel async callback cycles may be longer. If there's no callback for a long time:

  1. Check transaction status on bank side
  2. Confirm whether the withdrawal instruction was successfully sent
  3. Contact bank to verify if necessary

Scenario Three: Auto-Withdrawal Conditions Not Met

Symptom: BST channel withdrawal, Remittance step did not auto-execute, requires manual operation.

Any one of the 6 auto-withdrawal conditions not being met causes the system to degrade to manual mode. Common situations:

Unmet ConditionManifestationResolution
Amount exceeds limitLarge withdrawal did not auto-executeOps confirms amount is reasonable then manually triggers
Over 10 per daySame user multiple withdrawals on same dayConfirm not abnormal activity then manually trigger
Auto switch turned offAuto-withdrawal for a currency is closedCheck auto_settings table, confirm if it needs to be reopened
Insufficient balanceAvailable balance less than withdrawal amountNotify user of insufficient balance

This Is Not a Fault

Auto-withdrawal conditions not being met is a normal safety mechanism, not a system fault. Ops can manually execute after confirmation.


Scenario Four: Withdrawal Blocked by Risk Control

Symptom: User is rejected when initiating withdrawal in App, or withdrawal task entered the Audit step.

Blacklist Hit

hk-withdraw-blacklist-go checks whether the withdrawal target account is on the blacklist. Withdrawals hitting the blacklist are directly rejected and no withdrawal task is created.

Ops handling:

  1. Confirm blacklist hit reason
  2. If it's a false positive, contact risk control team to update blacklist
  3. User needs to re-initiate withdrawal

High-Risk Flag

When a user account is flagged as high-risk by risk control, withdrawal gets an extra Audit review step. This is not a rejection — after review passes, withdrawal proceeds normally.


Scenario Five: Post-Withdrawal Reversal

Symptom: Withdrawal already completed (status=Completed), but funds need to be recovered.

Reversal is a low-frequency but high-impact operation. Possible trigger reasons:

ReasonDescription
Bank returnBank returned the already remitted funds
Erroneous withdrawalOps discovered withdrawal info was wrong (e.g., wrong user)
Post-hoc risk control interceptRisk control discovered anomaly after withdrawal completed

Reversal flow:

  1. Ops initiates reversal in OA (action: REVERSE)
  2. System checks current status — only "Completed" tasks can be reversed
  3. Execute reversal: Update task status to "Reversed" (5)
  4. SBA executes reverse fund operation
  5. Notify user withdrawal has been reversed

After reversal, task status becomes 5 (REVERSE).


Scenario Six: User Cannot Initiate Withdrawal

Symptom: User gets an error or cannot submit when clicking withdrawal in App.

CauseUser SeesError CodeResolution
Account frozen"Account abnormal, cannot withdraw"Check freeze type (CASH_OUT=2), contact relevant team to unfreeze
Withdrawal restriction (risk control)"Your account is temporarily unable to withdraw"140670003Check if there's a withdrawal restriction flag
Blacklist"Account restricted from withdrawing funds"Confirm blacklist reason, contact risk control team
Invalid bank card"Bank card does not exist"140670002Guide user to re-bind bank card
Insufficient balance"Securities account balance insufficient"140670005Funds may be frozen (currency exchange, fund, etc.)
Negative equity"Account has outstanding debt"140670004User must clear debt before withdrawal
GDCA not completed"GDCA not completed"140670009Guide user to complete GDCA certification
NSS questionnaire not completed"NSS questionnaire not completed"140670008Guide user to complete NSS questionnaire
Dormant account"Dormant accounts do not support withdrawal"140670006User must reactivate account first
Online account opening deposit threshold not met"Card binding requires transfer >= HKD 10,000"140670011Guide user to deposit to meet threshold first
Bank account not authenticated"Bank account has not passed authentication"Guide user to complete bank authentication
Airstar BST not authorized"BST not authorized"Bank-initiated withdrawal scenario only, guide authorization
Mainland bank card"Withdrawal to mainland China bank accounts not supported"Guide user to use Hong Kong bank card
A-share Connect CNH restriction"CNH only supports withdrawal to Hong Kong banks"Select Hong Kong bank account for withdrawal
Margin withdrawable insufficient"Exceeds cash withdrawable amount"Confirm margin requirement
Payoneer restriction"Payoneer accounts do not support withdrawal"Select another bank card
Securities account does not exist"Securities account not opened/closed"140670007Guide user to open account

Freeze type quick reference → Withdrawal Rules Manual § Freeze Types Pre-check error codes → Withdrawal Data Dictionary § Pre-check Error Codes


Scenario Seven: BST Authorization Exception

Symptom: User cannot withdraw through BST channel, or withdrawal stuck at Confirm step with prompt "BST authorization status abnormal".

This type of exception mainly affects the Airstar BST channel (Mandate model); CMB/CMBC's traditional agreement model rarely has this issue.

ExceptionSymptomPossible CauseResolution
Authorization timeoutMandate stuck at PROCESSING for a long timeBank processing delay or communication disruptionWait for bank processing; query Airstar API manually after timeout
Authorization failedMandate becomes FAILUser info verification failed / bank risk controlCheck 140630xxx error code, guide user to re-authorize
Authorization cancelledMandate becomes CANCELUser cancelled on bank sideConfirm user intent, re-initiate authorization if needed
Partial market failureSome of 3 markets bound successfullyConfiguration issue for a specific market's BST setupCheck failed market configuration, manually supplement binding
Status out of syncBank already cancelled but moomoo still OPENSync callback lostManually query Airstar API to sync latest status

Authorization Exception vs Withdrawal Exception

Authorization exception blocks all subsequent deposits/withdrawals (because Mandate is not OPEN), while withdrawal exception only affects a single transaction. When authorization exception is discovered, prioritize resolving it to avoid affecting more transactions.

Mandate status codes → Withdrawal Data Dictionary § BST Authorization Status Codes


Scenario Eight: BST Deposit Refund (REFUNDED)

Symptom: BST deposit already showed successful arrival, but subsequently funds were returned by bank.

This is an exception status unique to Airstar BST — REFUNDED. CMB/CMBC BST deposits do not have a refund mechanism.

Trigger conditions:

  • Bank discovers transaction anomaly post-hoc (e.g., compliance issue) and initiates refund
  • Bank risk control system post-hoc intercept

System behavior:

  1. Receives REFUNDED status from Airstar API
  2. System triggers reversal: reverses funds already credited to securities account
  3. Updates deposit record status
  4. Triggers alert notification to ops

Ops action:

  1. Confirm refund reason (check error info returned by Airstar API)
  2. Verify user securities account balance has been correctly rolled back
  3. Notify user and explain the reason
  4. If re-deposit is needed, guide user to initiate a new deposit operation

REFUNDED ≠ Deposit Failed

Deposit failed (FAILED) means the bank rejected the deposit instruction and funds never arrived. REFUNDED means the deposit already succeeded then the bank returned the money — the system needs to perform a reversal operation, which is more complex than handling a normal failure.


Things You Must Never Do During Withdrawal Troubleshooting

  • Do not execute reversal on "Processing" status tasks — funds may be in transit on bank side, forcing reversal will cause fund status inconsistency
  • Do not re-trigger startTransfer() after BST's 15:55 daily cutoff — will cause duplicate withdrawal next day
  • Do not manually modify task status codes in the database to bypass approval steps — breaks audit trail, violates internal control requirements
  • Do not immediately reject a task when bank callback code is -5 (timeout) — system will auto-retry, most recover in seconds

Troubleshooting by Channel

Above is organized by "symptom"; this section supplements with common faults categorized by "withdrawal channel". For all 12 method codes and their corresponding channels see Bank Capability Matrix § Withdrawal Method Code Mapping.

BST Withdrawal (method=auto_bs) — Detailed Runbook

Runbook: BST Withdrawal Not Arrived

Trigger: Customer reports BST withdrawal shows "Completed" but funds have not arrived in bank account

Minute 1 — Confirm status:

  1. CRM withdrawal task → Check task status field and bank callback result
  2. CMB/CMBC: Callback code = -5 (timeout) → System auto-switches to backup server, wait for retry result
  3. CMB/CMBC: Callback code = -6 (rejection) → Bank explicitly rejected, check rejection reason
  4. Airstar: Status = PENDING → Polling in progress, wait for AsbBstTransfer to complete (max 10 times)

Minute 5 — Deep investigation: 5. Airstar polling exhausted 10 attempts still PENDING → Enters SyncAsbBstWithdraw 2-hour fallback window, do not manually intervene at this point 6. Airstar returns FAILED → Check 140630xxx error code → Release frozen funds → Notify user 7. CMB/CMBC retry also failed → Confirm whether funds have been sent out on bank side (critical!)

Minute 15 — Escalation: 8. Airstar 2-hour fallback window ended still no callback → Critical alert, manually query Airstar API to confirm actual bank-side status 9. CMB/CMBC confirmed funds sent but system not updated → Contact bank liaison + notify tech ops to manually sync status

BOC FTS Withdrawal (method=boc / boc_fps / tele_transfer)

ExceptionPossible CauseResolution
FTS file not deliveredSFTP connection error or S14 file generation failedCheck bochk_relay logs, confirm SFTP connectivity
Status no update for a long timeS16 receipt file not returnedManually log into BOC FTS system to query, confirm file status
Status F (failed)Payee info incorrect or account abnormalCheck error description, contact BOC to confirm then correct info and re-withdraw
Status R (returned)Bank returned already remitted fundsConfirm return reason, correct payee info if needed and re-initiate
Status C (cancelled)Withdrawal cancelledConfirm cancellation source (system/ops/bank), re-initiate if needed
FPS exclusion bank hitReceiving bank on FPS exclusion listSwitch to boc (same-bank) or tele_transfer (cross-border) channel

CGB FPS API (method=cgb_fps_api)

ExceptionPossible CauseResolution
Status code judgment error2063 and 2065 have reversed meanings for same status codeConfirm message type before judging → CGB Status Code Reversal
Batch degraded to single2064 batch send failedSystem auto-splits into 2063 single transactions, check degradation logs
SIGN_ERRORSignature or verification failedCheck signing key configuration, confirm if CGB side has changed keys
A012 duplicate reference numberRequest ID duplicatedConfirm if it's a duplicate send, cannot retry
A014 system busyBank side under high loadSystem auto-retries, wait for recovery if persistent failure
UNKNOWN statusBatch result cannot be confirmedRequires manual login to CGB system to query and confirm

Corporate Online Banking Withdrawal (method=hase / hsbc)

ExceptionPossible CauseResolution
Long time without operationOps has not logged into online banking to execute transfer in timeCheck ops schedule, confirm if Remittance step has been triggered
Online banking session timeoutBank online banking login expiredRe-login to online banking, continue operation
Transfer rejected by bankAmount exceeds limit or payee info incorrectVerify bank-side limits and payee info, correct and re-operate

Standard Chartered FPS (method=sc)

ExceptionPossible CauseResolution
Webhook not receivedSCB push delayed or endpoint unavailableProactively call Payment Status API to query actual status
FAILED statusFPS transfer failedCheck reason code, switch channel if necessary → SCB Status Codes
RETURNED statusBank returned transferConfirm return reason, correct payee info then re-withdraw
JWT authentication failedToken expired (only 30 seconds valid)Check server NTP clock sync

EWB Wire (method=ewb)

ExceptionPossible CauseResolution
Long arrival timeCross-border wire typically 1-3 business daysWait normally, contact EWB to confirm if exceeds 3 days
Transfer returnedPayee info incorrect (SWIFT code/account number etc.)Verify payee info then re-initiate

CHATS/RTGS (method=chats_rtgs)

ExceptionPossible CauseResolution
Clearing delayCHATS system has fixed daily clearing windowsWait within clearing time, defer to next business day for off-hours
Amount not fully arrivedClearing fee deductionNormal, inform user that bank clearing may incur fees

Manual Withdrawal (method=manual)

ExceptionPossible CauseResolution
Long time in processingOps has not manually operated ICBC online bankingCheck scheduling and task assignment, manually complete transfer
Transfer failedICBC account insufficient balance or payee info incorrectVerify then re-operate

Operations Tools Checklist

ToolPurposeRequired Permission
Withdrawal task listView/filter all withdrawal tasks
Audit reviewHigh-risk withdrawal reviewPERMISSION_CASH_TASKS_OUT_AUDIT
ConfirmConfirm bank card and channelPERMISSION_CASH_TASKS_OUT_CONFIRM
RemittanceExecute withdrawal transferPERMISSION_CASH_TASKS_OUT_REMIT
ReversalReverse completed withdrawal
Follow-upMark task as being followed up
TransferTransfer task to another ops staff
Mandate status queryQuery BST authorization status (Airstar)
BST polling statusView Airstar polling progress and results

Monitoring and Alerts

The system monitors withdrawal exceptions through the following mechanisms:

Monitoring ItemMethodAlert ConditionAlert Channel
Queue event backlogCron check every minutePending event count exceeds thresholdFeishu alert
BST polling timeoutAirstar SyncAsbBstWithdraw fallbackStill PENDING after 2-hour windowFeishu alert
Auto-withdrawal balance lowChecked during autoOut() deductionBalance < alarm_amountFeishu alert
Auto-withdrawal balance circuit breakChecked during autoOut() deductionBalance < stop_amountFeishu alert + auto-close that currency's auto-withdrawal
Airstar Mandate exceptionScheduled status syncMandate status not OPEN but has withdrawal tasksFeishu alert
CMB/CMBC callback exceptionCallback processingCallback code = -5 (timeout) or -6 (rejection)Feishu alert

Alert Handling Priority

When receiving alerts, handle in this priority order:

PriorityAlertImpactAction
P0Queue event backlogAll withdrawal tasks stuckCheck if queue consumer processes are running, restart service
P0Auto-withdrawal balance circuit breakAll BST withdrawals for that currency degrade to manual"Top up" auto_settings balance + reopen switch
P1BST polling timeoutSingle Airstar withdrawal status unknownManually query Airstar API to confirm bank-side status
P1CMB/CMBC callback -6Single withdrawal rejected by bankContact bank to confirm rejection reason, may need channel switch
P2Balance alarmBalance approaching circuit breaker lineMonitor subsequent withdrawal volume, top up proactively if needed
P2Mandate exceptionAffects all subsequent deposits/withdrawals for that userGuide user to re-authorize

Common Misconceptions

MisconceptionFact
"User says money hasn't arrived means system fault"Most cases are the approval flow still in progress — especially non-BST channels requiring ops to manually operate multiple steps. First follow the diagnosis flow chart to check task status
"BST callback timeout (-5) means withdrawal failed"It does not. System will auto-switch to backup exit_server for retry, typically recovering in seconds. Only if retry also fails is manual intervention needed
"Auto-withdrawal conditions not met is a system fault"It is a normal safety mechanism, not a fault. Ops can manually trigger execution after confirming amount and operation are reasonable
"After reversal, funds automatically return to user's bank card"They do not. Reversal only reverses the "Completed" withdrawal within the system (status changes to REVERSE), funds return to the securities account. Returning to bank card is a separate operation

I want to...Go to
Understand the complete withdrawal flow (to determine where it's stuck)Withdrawal Lifecycle
See detailed explanation of a specific ruleWithdrawal Rules Manual
See a specific channel's technical execution detailsChannel Execution Manual
Look up callback codes, status code numbersWithdrawal Data Dictionary
Deep dive into BST bank exception handlingBST Overview
Was this page helpful?

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